Date: Thursday, March 14, 2019 @ 12:22:11 Author: heftig Revision: 347943
0.6.0-2 Added: dleyna-renderer/trunk/gupnp-1.2.diff Modified: dleyna-renderer/trunk/PKGBUILD ----------------+ PKGBUILD | 13 +++-- gupnp-1.2.diff | 134 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 143 insertions(+), 4 deletions(-) Modified: PKGBUILD =================================================================== --- PKGBUILD 2019-03-14 12:22:09 UTC (rev 347942) +++ PKGBUILD 2019-03-14 12:22:11 UTC (rev 347943) @@ -2,7 +2,7 @@ pkgname=dleyna-renderer pkgver=0.6.0 -pkgrel=1 +pkgrel=2 pkgdesc="Library to discover and manipulate Digital Media Renderers" arch=(x86_64) url="http://01.org/dleyna" @@ -10,8 +10,10 @@ depends=(dleyna-connector-dbus gupnp-av gupnp-dlna libsoup) makedepends=(git) _commit=334baba53e253957637b86764347dcc27cf091ab # tags/0.6.0 -source=("git+https://github.com/01org/dleyna-renderer#commit=$_commit") -sha256sums=('SKIP') +source=("git+https://github.com/01org/dleyna-renderer#commit=$_commit" + gupnp-1.2.diff) +sha256sums=('SKIP' + '91ee8a1bf00d94865f2caef3b16da2c74c42ff37e6620718592304617d27b4f1') pkgver() { cd $pkgname @@ -20,13 +22,16 @@ prepare() { cd $pkgname + patch -Np1 -i ../gupnp-1.2.diff NOCONFIGURE=1 ./autogen.sh } build() { cd $pkgname + CFLAGS+=" -Wno-deprecated-declarations" ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --disable-static --libexecdir=/usr/lib/$pkgname + --disable-static --libexecdir=/usr/lib + sed -i -e 's/ -shared / -Wl,-O1,--as-needed\0/g' libtool make } Added: gupnp-1.2.diff =================================================================== --- gupnp-1.2.diff (rev 0) +++ gupnp-1.2.diff 2019-03-14 12:22:11 UTC (rev 347943) @@ -0,0 +1,134 @@ + configure.ac | 4 ++-- + libdleyna/renderer/device.c | 55 +++++++++++++++++++++++++++++++++++++++++++-- + libdleyna/renderer/upnp.c | 4 ++-- + 3 files changed, 57 insertions(+), 6 deletions(-) + +diff --git c/configure.ac i/configure.ac +index 271ee92..364659d 100644 +--- c/configure.ac ++++ i/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 c/libdleyna/renderer/device.c i/libdleyna/renderer/device.c +index 7acef89..881f4ac 100644 +--- c/libdleyna/renderer/device.c ++++ i/libdleyna/renderer/device.c +@@ -2121,33 +2121,84 @@ 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) ++{ ++ GUPnPServiceIntrospection *introspection; ++ GetIntrospectionAsyncData *data; ++ GMainContext *context; ++ ++ context = g_main_context_new (); ++ data = g_new0 (GetIntrospectionAsyncData, 1); ++ data->loop = g_main_loop_new (context, FALSE); ++ data->introspection = &introspection; ++ 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_free (data); ++ g_main_context_unref (context); ++ ++ return introspection; ++} ++ + static gboolean prv_get_av_service_states_values(GUPnPServiceProxy *av_proxy, + GVariant **mpris_tp_speeds, + GPtrArray **upnp_tp_speeds, + double *min_rate, + double *max_rate, + gboolean *can_get_byte_pos) + { + const GUPnPServiceStateVariableInfo *svi; + const GUPnPServiceActionInfo *sai; + GUPnPServiceIntrospection *introspection; + GError *error = NULL; + GVariant *speeds = NULL; + GList *allowed_values; + gpointer weak_ref = NULL; + gboolean device_alive = TRUE; + + /* TODO: this weak_ref hack is needed as + gupnp_service_info_get_introspection iterates the main loop. + This can result in our device getting deleted before this + function returns. Ultimately, this code needs to be re-written + to use gupnp_service_info_get_introspection_async but this cannot + really be done until GUPnP provides a way to cancel this function. */ + + 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 +2266,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 c/libdleyna/renderer/upnp.c i/libdleyna/renderer/upnp.c +index 17cbda7..068912b 100644 +--- c/libdleyna/renderer/upnp.c ++++ i/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;
