From 7c945e7960cf7dffd9dd0bb5f7ec6bee4dc0bca3 Mon Sep 17 00:00:00 2001
From: Khem Raj <raj.khem@gmail.com>
Date: Tue, 18 Feb 2020 14:17:55 -0800
Subject: [PATCH] add gupnp 1.2 API support

Takes from https://git.archlinux.org/svntogit/packages.git/tree/trunk/gupnp-1.2.diff?h=packages/dleyna-renderer
Upstream-Status: Pending
Signed-off-by: Khem Raj <raj.khem@gmail.com>
---
 configure.ac                |  4 +--
 libdleyna/renderer/device.c | 51 +++++++++++++++++++++++++++++++++++--
 libdleyna/renderer/upnp.c   |  4 +--
 3 files changed, 53 insertions(+), 6 deletions(-)

diff --git a/configure.ac b/configure.ac
index 271ee92..364659d 100644
--- a/configure.ac
+++ b/configure.ac
@@ -38,8 +38,8 @@ LT_LANG([C])
 PKG_PROG_PKG_CONFIG(0.16)
 PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.28])
 PKG_CHECK_MODULES([GIO], [gio-2.0 >= 2.28])
-PKG_CHECK_MODULES([GSSDP], [gssdp-1.0 >= 0.13.2])
-PKG_CHECK_MODULES([GUPNP], [gupnp-1.0 >= 0.20.5])
+PKG_CHECK_MODULES([GSSDP], [gssdp-1.2 >= 1.2.0])
+PKG_CHECK_MODULES([GUPNP], [gupnp-1.2 >= 1.2.0])
 PKG_CHECK_MODULES([GUPNPAV], [gupnp-av-1.0 >= 0.11.5])
 PKG_CHECK_MODULES([GUPNPDLNA], [gupnp-dlna-2.0 >= 0.9.4])
 PKG_CHECK_MODULES([SOUP], [libsoup-2.4 >= 2.28.2])
diff --git a/libdleyna/renderer/device.c b/libdleyna/renderer/device.c
index 783fb52..c7b9fc3 100644
--- a/libdleyna/renderer/device.c
+++ b/libdleyna/renderer/device.c
@@ -2121,6 +2121,53 @@ exit:
 	return;
 }
 
+typedef struct
+{
+  GMainLoop *loop;
+  GUPnPServiceIntrospection *introspection;
+  GError **error;
+} GetIntrospectionAsyncData;
+
+static void
+get_introspection_async_cb (GUPnPServiceInfo           *info,
+                            GUPnPServiceIntrospection  *introspection,
+                            const GError               *error,
+                            gpointer                    user_data)
+{
+  GetIntrospectionAsyncData *data = user_data;
+  data->introspection = introspection;
+  if (data->error)
+    *data->error = g_error_copy (error);
+  g_main_loop_quit (data->loop);
+}
+
+static GUPnPServiceIntrospection *
+_gupnp_service_info_get_introspection (GUPnPServiceInfo *info,
+                                       GError          **error)
+{
+  GetIntrospectionAsyncData data;
+  GMainContext *context;
+
+  context = g_main_context_new ();
+  data.loop = g_main_loop_new (context, FALSE);
+  data.error = error;
+
+  g_main_context_push_thread_default (context);
+
+  gupnp_service_info_get_introspection_async (info,
+                                              get_introspection_async_cb,
+                                              &data);
+
+  g_main_loop_run (data.loop);
+
+  g_main_context_pop_thread_default (context);
+
+  g_main_loop_unref (data.loop);
+  g_main_context_unref (context);
+
+  return data.introspection;
+}
+
 static gboolean prv_get_av_service_states_values(GUPnPServiceProxy *av_proxy,
 						 GVariant **mpris_tp_speeds,
 						 GPtrArray **upnp_tp_speeds,
@@ -2147,7 +2194,7 @@ static gboolean prv_get_av_service_states_values(GUPnPServiceProxy *av_proxy,
 	weak_ref = av_proxy;
 	g_object_add_weak_pointer(G_OBJECT(av_proxy), &weak_ref);
 
-	introspection = gupnp_service_info_get_introspection(
+	introspection = _gupnp_service_info_get_introspection(
 		GUPNP_SERVICE_INFO(av_proxy),
 		&error);
 
@@ -2215,7 +2262,7 @@ static gboolean prv_get_rc_service_states_values(GUPnPServiceProxy *rc_proxy,
 	weak_ref = rc_proxy;
 	g_object_add_weak_pointer(G_OBJECT(rc_proxy), &weak_ref);
 
-	introspection = gupnp_service_info_get_introspection(
+	introspection = _gupnp_service_info_get_introspection(
 		GUPNP_SERVICE_INFO(rc_proxy),
 		&error);
 
diff --git a/libdleyna/renderer/upnp.c b/libdleyna/renderer/upnp.c
index ac1b08a..b762226 100644
--- a/libdleyna/renderer/upnp.c
+++ b/libdleyna/renderer/upnp.c
@@ -243,8 +243,8 @@ static void prv_server_unavailable_cb(GUPnPControlPoint *cp,
 
 	udn = gupnp_device_info_get_udn((GUPnPDeviceInfo *)proxy);
 
-	ip_address = gupnp_context_get_host_ip(
-		gupnp_control_point_get_context(cp));
+	ip_address = gssdp_client_get_host_ip(
+		GSSDP_CLIENT(gupnp_control_point_get_context(cp)));
 
 	if (!udn || !ip_address)
 		goto on_error;
-- 
2.25.1

