Hello community,

here is the log from the commit of package gupnp for openSUSE:Factory checked 
in at 2020-01-08 19:32:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gupnp (Old)
 and      /work/SRC/openSUSE:Factory/.gupnp.new.6675 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gupnp"

Wed Jan  8 19:32:10 2020 rev:61 rq:761006 version:1.2.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/gupnp/gupnp.changes      2019-06-24 
21:47:54.451852352 +0200
+++ /work/SRC/openSUSE:Factory/.gupnp.new.6675/gupnp.changes    2020-01-08 
19:32:14.792594678 +0100
@@ -1,0 +2,17 @@
+Thu Jan  2 13:05:39 UTC 2020 - Bjørn Lie <[email protected]>
+
+- Update to version 1.2.2:
+  + Fix macOS dylib versioning.
+  + Fix endless loop on early notify.
+  + Several documentation fixes.
+  + Implement version-independent type registration in
+    ResourceFactory.
+  + Fix an issue with implementation of the depracted functions.
+  + Fix an issue with including net/if.h and linux/if.h.
+  + Add async introspection functions matching the usual GIO
+    function pattern.
+  + Go through main loop if introspection fails before the actual
+    network request.
+  + Bump required GLib version to 2.58.
+
+-------------------------------------------------------------------

Old:
----
  gupnp-1.2.1.tar.xz

New:
----
  gupnp-1.2.2.tar.xz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ gupnp.spec ++++++
--- /var/tmp/diff_new_pack.9Tt9hX/_old  2020-01-08 19:32:15.240594532 +0100
+++ /var/tmp/diff_new_pack.9Tt9hX/_new  2020-01-08 19:32:15.244594531 +0100
@@ -1,7 +1,7 @@
 #
 # spec file for package gupnp
 #
-# Copyright (c) 2019 SUSE LINUX GmbH, Nuernberg, Germany.
+# Copyright (c) 2020 SUSE LLC
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -21,7 +21,7 @@
 %define sover 1.2
 
 Name:           gupnp
-Version:        1.2.1
+Version:        1.2.2
 Release:        0
 Summary:        Implementation of the UPnP specification
 License:        LGPL-2.0-or-later
@@ -33,10 +33,10 @@
 BuildRequires:  gtk-doc
 BuildRequires:  meson
 BuildRequires:  pkgconfig
-BuildRequires:  pkgconfig(gio-2.0) >= 2.44
-BuildRequires:  pkgconfig(glib-2.0) >= 2.44
-BuildRequires:  pkgconfig(gmodule-2.0) >= 2.44
-BuildRequires:  pkgconfig(gobject-2.0) >= 2.44
+BuildRequires:  pkgconfig(gio-2.0) >= 2.58
+BuildRequires:  pkgconfig(glib-2.0) >= 2.58
+BuildRequires:  pkgconfig(gmodule-2.0) >= 2.58
+BuildRequires:  pkgconfig(gobject-2.0) >= 2.58
 BuildRequires:  pkgconfig(gobject-introspection-1.0) >= 0.6.4
 BuildRequires:  pkgconfig(gssdp-1.2) >= 1.1.3
 BuildRequires:  pkgconfig(libsoup-2.4) >= 2.48.0
@@ -120,6 +120,7 @@
 %{_libdir}/girepository-1.0/GUPnP-%{sover}.typelib
 
 %files -n libgupnp-devel
+%{_mandir}/man1/gupnp-binding-tool-1.2.1%{?ext_man}
 %{_bindir}/gupnp-binding-tool-%{sover}
 %{_includedir}/%{name}-%{sover}
 %{_libdir}/*.so

++++++ gupnp-1.2.1.tar.xz -> gupnp-1.2.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/NEWS new/gupnp-1.2.2/NEWS
--- old/gupnp-1.2.1/NEWS        2019-05-01 23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/NEWS        2020-01-02 13:07:01.000000000 +0100
@@ -1,3 +1,26 @@
+1.2.2
+=====
+- Fix macOS dylib versioning
+- Fix endless loop on early notify
+- Several documentation fixes
+- Implement version-independent type registration in ResourceFactory
+- Fix an issue with implementation of the depracted functions
+- Fix an issue with including net/if.h and linux/if.h
+- Add async introspection functions matching the usual GIO function pattern
+- Go through main loop if introspection fails before the actual network request
+- Bump required GLib version to 2.58
+
+Bugs fixed in this release:
+ - https://bugzilla.gnome.org/show_bug.cgi?id=764498
+ - https://gitlab.gnome.org/GNOME/gupnp/issues/5
+ - https://gitlab.gnome.org/GNOME/gupnp/issues/6
+ - https://gitlab.gnome.org/GNOME/gupnp/issues/8
+
+All contributors to this release:
+ - Jens Georg <[email protected]>
+ - Fabrice Fontaine <[email protected]>
+ - Tom Schoonjans <[email protected]>
+
 1.2.1
 =====
 - Fix a deadlock when cancelling an action
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/doc/gupnp-binding-tool.xml 
new/gupnp-1.2.2/doc/gupnp-binding-tool.xml
--- old/gupnp-1.2.1/doc/gupnp-binding-tool.xml  2019-05-01 23:02:02.000000000 
+0200
+++ new/gupnp-1.2.2/doc/gupnp-binding-tool.xml  2020-01-02 13:07:01.000000000 
+0100
@@ -3,20 +3,20 @@
 
 <refentry id="gupnp-binding-tool" xmlns:xi="http://www.w3.org/2003/XInclude";>
   <refmeta>
-    <refentrytitle>gupnp-binding-tool</refentrytitle>
+    <refentrytitle>gupnp-binding-tool-1.2</refentrytitle>
     <manvolnum>1</manvolnum>
     <refmiscinfo class="source">GUPnP</refmiscinfo>
-    <refmiscinfo class="version"><xi:include href="version.xml" 
parse="text"/></refmiscinfo>
+    <refmiscinfo class="version"><xi:include href="version.xml" 
parse="text"><xi:fallback /></xi:include></refmiscinfo>
   </refmeta>
   
   <refnamediv>
-    <refname>gupnp-binding-tool</refname>
+    <refname>gupnp-binding-tool-1.2</refname>
     <refpurpose>creates C convenience wrappers for UPnP services</refpurpose>
   </refnamediv>
 
   <refsynopsisdiv>
     <cmdsynopsis>
-      <command>gupnp-binding-tool</command>
+      <command>gupnp-binding-tool-1.2</command>
       <arg choice="opt">--prefix <arg choice="req">PREFIX</arg></arg>
       <arg choice="opt">--mode <arg choice="req">client|server</arg></arg>
       <arg choice="req">SCPD file</arg>
@@ -26,7 +26,7 @@
   <refsect1>
     <title>Description</title>
     <para>
-      <command>gupnp-binding-tool</command> takes a <glossterm
+      <command>gupnp-binding-tool-1.2</command> takes a <glossterm
       linkend="scpd">SCPD file</glossterm> and generates convenience C 
functions
       which call the actual GUPnP functions. The client-side bindings can be 
seen
       as a service-specific version of the GUPnPServiceProxy API and the 
@@ -81,7 +81,7 @@
       the argument direction. 
     </para>
     <para>
-      <command>gupnp-binding-tool</command> generates both synchronous and
+      <command>gupnp-binding-tool-1.2</command> generates both synchronous and
       asynchronous wrappers.  The <function>igd_delete_port_mapping</function> 
example
       above is the synchronous form, the asynchronous form is as follows:
     </para>
@@ -126,7 +126,7 @@
                                     gpointer userdata);</programlisting>
     
     <para>
-      All of the examples were produced with <filename>gupnp-binding-tool 
+      All of the examples were produced with <filename>gupnp-binding-tool-1.2
       --prefix igd --mode client WANIPConnection.xml</filename>.
     </para>
   </refsect1>
@@ -169,7 +169,7 @@
       variable value.
     </para>
     <para>
-      All of the examples were produced with <filename>gupnp-binding-tool 
+      All of the examples were produced with <filename>gupnp-binding-tool-1.2
       --prefix igd --mode server WANIPConnection.xml</filename>.
     </para>
   </refsect1>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/doc/meson.build 
new/gupnp-1.2.2/doc/meson.build
--- old/gupnp-1.2.1/doc/meson.build     2019-05-01 23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/doc/meson.build     2020-01-02 13:07:01.000000000 +0100
@@ -1,6 +1,6 @@
 entities = configuration_data()
 entities.set('VERSION', meson.project_version())
-configure_file(input: 'version.xml.in',
+version_xml = configure_file(input: 'version.xml.in',
                output: 'version.xml', configuration:
                entities)
 
@@ -26,3 +26,35 @@
                  'gupnp-types-private.h'
              ],
              install : true)
+
+xsltproc = find_program('xsltproc', required: false)
+if xsltproc.found()
+    xlstproc_flags = [
+        '--nonet',
+        '--xinclude',
+        '--path', '@0@:@1@'.format(meson.current_source_dir(), 
meson.current_build_dir()),
+        '--stringparam', 'man.output.quietly', '1',
+        '--stringparam', 'funcsynopsis.style', 'ansi',
+        '--stringparam', 'man.th.extra1.suppress', '1',
+        '--stringparam', 'man.authors.section.enabled', '1',
+        '--stringparam', 'man.copyright.section.enabled', '1',
+    ]
+
+    xsltproc_args = [
+        xsltproc,
+        xlstproc_flags,
+        '-o', '@OUTPUT@',
+        
'http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl',
+        '@INPUT@'
+    ]
+
+    custom_target(
+        'man 1 pages',
+        input: 'gupnp-binding-tool.xml',
+        output: 'gupnp-binding-tool-1.2.1',
+        command: xsltproc_args,
+        depend_files : version_xml,
+        install: true,
+        install_dir: join_paths(get_option('mandir'), 'man1')
+    )
+endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-linux-context-manager.c 
new/gupnp-1.2.2/libgupnp/gupnp-linux-context-manager.c
--- old/gupnp-1.2.1/libgupnp/gupnp-linux-context-manager.c      2019-05-01 
23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-linux-context-manager.c      2020-01-02 
13:07:01.000000000 +0100
@@ -47,9 +47,10 @@
 #include <sys/socket.h>
 #include <linux/netlink.h>
 #include <linux/rtnetlink.h>
-#include <net/if.h>
 #ifdef HAVE_LINUX_WIRELESS_H
 #include <linux/wireless.h>
+#else
+#include <net/if.h>
 #endif
 #include <sys/ioctl.h>
 #include <errno.h>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-resource-factory.c 
new/gupnp-1.2.2/libgupnp/gupnp-resource-factory.c
--- old/gupnp-1.2.1/libgupnp/gupnp-resource-factory.c   2019-05-01 
23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-resource-factory.c   2020-01-02 
13:07:01.000000000 +0100
@@ -133,6 +133,59 @@
         return default_factory;
 }
 
+static GType
+lookup_type_with_fallback (GHashTable *resource_types,
+                           const char *requested_type,
+                           const char *child_node,
+                           xmlNode    *element,
+                           GType       fallback)
+{
+        GType type = fallback;
+        char *upnp_type = NULL;
+
+        if (requested_type == NULL) {
+                g_debug ("Looking up type from XML");
+                upnp_type = xml_util_get_child_element_content_glib (element,
+                                                                     
child_node);
+        } else {
+                g_debug ("Using passed type %s", requested_type);
+                upnp_type = g_strdup (requested_type);
+        }
+
+
+        if (upnp_type != NULL) {
+                g_debug ("Found type from XML: %s", upnp_type);
+                gpointer value;
+                char *needle = NULL;
+
+                value = g_hash_table_lookup (resource_types, upnp_type);
+
+                if (value == NULL) {
+                        g_debug ("Trying to use version-less type...");
+                        needle = g_strrstr (upnp_type, ":");
+                        if (needle != NULL) {
+                                *needle = '\0';
+                                g_debug ("Version-less type is %s", upnp_type);
+
+                                value = g_hash_table_lookup (resource_types, 
upnp_type);
+                        }
+                }
+
+                if (value != NULL) {
+                        type = GPOINTER_TO_SIZE (value);
+                }
+
+                g_debug ("Will return type %s for UPnP type %s", g_type_name 
(type), upnp_type);
+                g_free (upnp_type);
+        } else {
+                g_debug ("Will return fall-back type %s", upnp_type);
+        }
+
+
+        return type;
+}
+
+
 /**
  * gupnp_resource_factory_create_device_proxy:
  * @factory: A #GUPnPResourceFactory
@@ -160,7 +213,6 @@
                                  const SoupURI        *url_base)
 {
         GUPnPDeviceProxy *proxy;
-        char             *upnp_type;
         GType             proxy_type = GUPNP_TYPE_DEVICE_PROXY;
         GUPnPResourceFactoryPrivate *priv;
 
@@ -173,18 +225,11 @@
 
         priv = gupnp_resource_factory_get_instance_private (factory);
 
-        upnp_type = xml_util_get_child_element_content_glib (element,
-                                                             "deviceType");
-        if (upnp_type) {
-                gpointer value;
-
-                value = g_hash_table_lookup (priv->proxy_type_hash,
-                                             upnp_type);
-                if (value)
-                        proxy_type = GPOINTER_TO_SIZE (value);
-
-                g_free (upnp_type);
-        }
+        proxy_type = lookup_type_with_fallback (priv->proxy_type_hash,
+                                                NULL,
+                                                "deviceType",
+                                                element,
+                                                GUPNP_TYPE_DEVICE_PROXY);
 
         proxy = g_object_new (proxy_type,
                               "resource-factory", factory,
@@ -204,7 +249,7 @@
  * @factory: A #GUPnPResourceFactory
  * @context: A #GUPnPContext
  * @doc: A #GUPnPXMLDoc
- * @element: The #xmlNode ponting to the right service element
+ * @element: The #xmlNode pointing to the right service element
  * @location: The location of the service description file
  * @udn: The UDN of the device the service is contained in
  * @service_type: (allow-none): The service type, or %NULL to use service
@@ -227,7 +272,6 @@
                                  const char           *location,
                                  const SoupURI        *url_base)
 {
-        char              *type_from_xml = NULL;
         GUPnPServiceProxy *proxy;
         GType              proxy_type = GUPNP_TYPE_SERVICE_PROXY;
         GUPnPResourceFactoryPrivate *priv;
@@ -241,21 +285,11 @@
 
         priv = gupnp_resource_factory_get_instance_private (factory);
 
-        if (!service_type) {
-                type_from_xml =
-                    xml_util_get_child_element_content_glib (element,
-                                                             "serviceType");
-                service_type = type_from_xml;
-        }
-
-        if (service_type) {
-                gpointer value;
-
-                value = g_hash_table_lookup (priv->proxy_type_hash,
-                                             service_type);
-                if (value)
-                        proxy_type = GPOINTER_TO_SIZE (value);
-        }
+        proxy_type = lookup_type_with_fallback (priv->proxy_type_hash,
+                                                service_type,
+                                                "serviceType",
+                                                element,
+                                                GUPNP_TYPE_SERVICE_PROXY);
 
         proxy = g_object_new (proxy_type,
                               "context", context,
@@ -267,8 +301,6 @@
                               "element", element,
                               NULL);
 
-        g_free (type_from_xml);
-
         return proxy;
 }
 
@@ -298,7 +330,6 @@
                                  const SoupURI        *url_base)
 {
         GUPnPDevice *device;
-        char        *upnp_type;
         GType        device_type = GUPNP_TYPE_DEVICE;
         GUPnPResourceFactoryPrivate *priv;
 
@@ -310,18 +341,11 @@
 
         priv = gupnp_resource_factory_get_instance_private (factory);
 
-        upnp_type = xml_util_get_child_element_content_glib (element,
-                                                             "deviceType");
-        if (upnp_type) {
-                gpointer value;
-
-                value = g_hash_table_lookup (priv->resource_type_hash,
-                                             upnp_type);
-                if (value)
-                        device_type = GPOINTER_TO_SIZE (value);
-
-                g_free (upnp_type);
-        }
+        device_type = lookup_type_with_fallback (priv->resource_type_hash,
+                                                 NULL,
+                                                 "deviceType",
+                                                 element,
+                                                 GUPNP_TYPE_DEVICE);
 
         device = g_object_new (device_type,
                                "resource-factory", factory,
@@ -362,7 +386,6 @@
                                  const SoupURI        *url_base)
 {
         GUPnPService *service;
-        char         *upnp_type;
         GType         service_type = GUPNP_TYPE_SERVICE;
         GUPnPResourceFactoryPrivate *priv;
 
@@ -375,18 +398,11 @@
 
         priv = gupnp_resource_factory_get_instance_private (factory);
 
-        upnp_type = xml_util_get_child_element_content_glib (element,
-                                                             "serviceType");
-        if (upnp_type) {
-                gpointer value;
-
-                value = g_hash_table_lookup (priv->resource_type_hash,
-                                             upnp_type);
-                if (value)
-                        service_type = GPOINTER_TO_SIZE (value);
-
-                g_free (upnp_type);
-        }
+        service_type = lookup_type_with_fallback (priv->resource_type_hash,
+                                                  NULL,
+                                                  "serviceType",
+                                                  element,
+                                                  GUPNP_TYPE_SERVICE);
 
         service = g_object_new (service_type,
                                 "context", context,
@@ -410,6 +426,11 @@
  * this call, the factory @factory will create object of GType @type each time
  * it is asked to create a resource object for UPnP type @upnp_type.
  *
+ * You can either register a type for a concrete version of a device or service
+ * such as urn:schemas-upnp-org:service:AVTransport:2 or version-independently,
+ * urn:schemas-upnp-org:service:AVTransport. If you register for an explicit
+ * version of a service, it will be an exact match.
+ *
  * Note: GType @type must be a derived type of #GUPNP_TYPE_DEVICE if resource 
is
  * a device or #GUPNP_TYPE_SERVICE if its a service.
  **/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-service-info.c 
new/gupnp-1.2.2/libgupnp/gupnp-service-info.c
--- old/gupnp-1.2.1/libgupnp/gupnp-service-info.c       2019-05-01 
23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-service-info.c       2020-01-02 
13:07:01.000000000 +0100
@@ -85,6 +85,7 @@
         gulong                            cancelled_id;
 
         SoupMessage                      *message;
+        GError                           *error;
 } GetSCPDURLData;
 
 static void
@@ -672,6 +673,18 @@
         get_scpd_url_data_free (data);
 }
 
+static gboolean
+introspection_error_cb (gpointer user_data)
+{
+        GetSCPDURLData *data = (GetSCPDURLData *)user_data;
+
+        data->callback (data->info, NULL, data->error, data->user_data);
+        g_error_free (data->error);
+        g_slice_free (GetSCPDURLData, data);
+
+        return FALSE;
+}
+
 /**
  * gupnp_service_info_get_introspection_async:
  * @info: A #GUPnPServiceInfo
@@ -744,26 +757,32 @@
                 g_free (local_scpd_url);
         }
 
+        data->info      = info;
+        data->callback  = callback;
+        data->user_data = user_data;
+
         if (data->message == NULL) {
                 GError *error;
+                GSource *idle_source;
 
                 error = g_error_new
                                 (GUPNP_SERVER_ERROR,
                                  GUPNP_SERVER_ERROR_INVALID_URL,
                                  "No valid SCPD URL defined");
+                data->error = error;
 
-                callback (info, NULL, error, user_data);
-
-                g_error_free (error);
+                idle_source = g_idle_source_new ();
+                g_source_set_callback (idle_source,
+                                       introspection_error_cb,
+                                       data, NULL);
+                g_source_attach (idle_source,
+                                 g_main_context_get_thread_default ());
 
-                g_slice_free (GetSCPDURLData, data);
+                return;
 
                 return;
         }
 
-        data->info      = info;
-        data->callback  = callback;
-        data->user_data = user_data;
 
         /* Send off the message */
         priv = gupnp_service_info_get_instance_private (info);
@@ -786,3 +805,75 @@
                                  NULL);
         }
 }
+
+static void
+prv_introspection_cb (GUPnPServiceInfo *info,
+                      GUPnPServiceIntrospection *introspection,
+                      const GError *error,
+                      gpointer user_data)
+{
+        if (error != NULL) {
+                g_task_return_error (G_TASK (user_data),
+                                     g_error_copy (error));
+        } else {
+                g_task_return_pointer (G_TASK (user_data),
+                                       introspection,
+                                       g_object_unref);
+        }
+
+        g_object_unref (G_OBJECT (user_data));
+}
+
+/**
+ * gupnp_service_info_introspect_async:
+ * @info: A #GUPnPServiceInfo
+ * @cancellable: (allow-none) : #GCancellable that can be used to cancel the 
call, or %NULL.
+ * @callback: (scope async) : callback to be called when introspeciton object 
is ready.
+ * @user_data: user_data to be passed to the callback.
+ *
+ * Note that introspection object is created from the information in service
+ * description document (SCPD) provided by the service so it can not be created
+ * if the service does not provide an SCPD.
+ *
+ * If @cancellable is used to cancel the call, @callback will be called with
+ * error code %G_IO_ERROR_CANCELLED.
+ *
+ * Since: 1.2.2
+ **/
+void
+gupnp_service_info_introspect_async           (GUPnPServiceInfo    *info,
+                                               GCancellable        
*cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data)
+{
+        GTask *task = g_task_new (info, cancellable, callback, user_data);
+
+        gupnp_service_info_get_introspection_async_full (info,
+                                                         prv_introspection_cb,
+                                                         cancellable,
+                                                         task);
+}
+
+/**
+ * gupnp_service_info_introspect_finish:
+ * @info: A GUPnPServiceInfo
+ * @res: A #GAsyncResult
+ * @error: (allow-none): Return location for a #GError, or %NULL
+ *
+ * Finish an asynchronous call initiated with
+ * gupnp_service_info_introspect_async().
+ *
+ * Returns: (transfer full): %NULL, if the call had an error, a
+ * #GUPnPServiceIntrospection object otherwise.
+ *
+ * Since: 1.2.2
+ */
+GUPnPServiceIntrospection *
+gupnp_service_info_introspect_finish          (GUPnPServiceInfo   *info,
+                                               GAsyncResult       *res,
+                                               GError            **error)
+{
+        g_return_val_if_fail (g_task_is_valid (res, info), NULL);
+
+        return g_task_propagate_pointer (G_TASK (res), error);
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-service-info.h 
new/gupnp-1.2.2/libgupnp/gupnp-service-info.h
--- old/gupnp-1.2.1/libgupnp/gupnp-service-info.h       2019-05-01 
23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-service-info.h       2020-01-02 
13:07:01.000000000 +0100
@@ -104,6 +104,17 @@
                                GCancellable                     *cancellable,
                                gpointer                          user_data);
 
+void
+gupnp_service_info_introspect_async           (GUPnPServiceInfo    *info,
+                                               GCancellable        
*cancellable,
+                                               GAsyncReadyCallback  callback,
+                                               gpointer             user_data);
+
+GUPnPServiceIntrospection *
+gupnp_service_info_introspect_finish          (GUPnPServiceInfo   *info,
+                                               GAsyncResult       *res,
+                                               GError            **error);
+
 G_END_DECLS
 
 #endif /* GUPNP_SERVICE_INFO_H */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-service-private.h 
new/gupnp-1.2.2/libgupnp/gupnp-service-private.h
--- old/gupnp-1.2.1/libgupnp/gupnp-service-private.h    1970-01-01 
01:00:00.000000000 +0100
+++ new/gupnp-1.2.2/libgupnp/gupnp-service-private.h    2020-01-02 
13:07:01.000000000 +0100
@@ -0,0 +1,41 @@
+/*
+ * Copyright (C) 2019 Jens Georg.
+ *
+ * Author: Jens Georg <[email protected]>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library; if not, write to the
+ * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef GUPNP_SERVICE_PRIVATE_H
+#define GUPNP_SERVICE_PRIVATE_H
+
+struct _GUPnPServiceAction {
+        GUPnPContext *context;
+
+        char         *name;
+
+        SoupMessage  *msg;
+        gboolean      accept_gzip;
+
+        GUPnPXMLDoc  *doc;
+        xmlNode      *node;
+
+        GString      *response_str;
+
+        guint         argument_count;
+};
+
+#endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-service-proxy.c 
new/gupnp-1.2.2/libgupnp/gupnp-service-proxy.c
--- old/gupnp-1.2.1/libgupnp/gupnp-service-proxy.c      2019-05-01 
23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-service-proxy.c      2020-01-02 
13:07:01.000000000 +0100
@@ -456,7 +456,7 @@
 
         handle = gupnp_service_proxy_action_new_from_list (action_name, 
in_names, in_values);
 
-        if (gupnp_service_proxy_call_action (proxy, handle, NULL,  error) != 
NULL) {
+        if (gupnp_service_proxy_call_action (proxy, handle, NULL,  error) == 
NULL) {
                 result = FALSE;
                 goto out;
         }
@@ -522,7 +522,7 @@
 
         handle = gupnp_service_proxy_action_new_from_list (action, in_names, 
in_values);
 
-        if (gupnp_service_proxy_call_action (proxy, handle, NULL, error) != 
NULL) {
+        if (gupnp_service_proxy_call_action (proxy, handle, NULL, error) == 
NULL) {
                 result = FALSE;
 
                 goto out;
@@ -1606,9 +1606,10 @@
                 return;
         }
 
+        priv = gupnp_service_proxy_get_instance_private (proxy);
         /* Get root propertyset element */
         node = xmlDocGetRootElement (doc);
-        if (node == NULL || strcmp ((char *) node->name, "propertyset")) {
+        if (node == NULL || strcmp ((char *) node->name, "propertyset") || 
priv->sid == NULL) {
                 /* Empty or unsupported */
                 xmlFreeDoc (doc);
 
@@ -1624,7 +1625,6 @@
          */
         emit_notify_data = emit_notify_data_new (hdr, seq, doc);
 
-        priv = gupnp_service_proxy_get_instance_private (proxy);
         priv->pending_notifies =
                 g_list_append (priv->pending_notifies, emit_notify_data);
         if (!priv->notify_idle_src) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/gupnp-service.c 
new/gupnp-1.2.2/libgupnp/gupnp-service.c
--- old/gupnp-1.2.1/libgupnp/gupnp-service.c    2019-05-01 23:02:02.000000000 
+0200
+++ new/gupnp-1.2.2/libgupnp/gupnp-service.c    2020-01-02 13:07:01.000000000 
+0100
@@ -38,6 +38,7 @@
 #include "gupnp-error.h"
 #include "gupnp-acl.h"
 #include "gupnp-uuid.h"
+#include "gupnp-service-private.h"
 #include "http-headers.h"
 #include "gena-protocol.h"
 #include "xml-util.h"
@@ -96,6 +97,9 @@
                      gpointer user_data);
 
 GUPnPServiceAction *
+gupnp_service_action_new ();
+
+GUPnPServiceAction *
 gupnp_service_action_ref (GUPnPServiceAction *action);
 
 void
@@ -210,49 +214,35 @@
         g_slice_free (NotifyData, data);
 }
 
-struct _GUPnPServiceAction {
-        volatile gint ref_count;
-
-        GUPnPContext *context;
-
-        char         *name;
-
-        SoupMessage  *msg;
-        gboolean      accept_gzip;
-
-        GUPnPXMLDoc  *doc;
-        xmlNode      *node;
-
-        GString      *response_str;
-
-        guint         argument_count;
-};
+GUPnPServiceAction *
+gupnp_service_action_new ()
+{
+        return g_atomic_rc_box_new0 (GUPnPServiceAction);
+}
 
 GUPnPServiceAction *
 gupnp_service_action_ref (GUPnPServiceAction *action)
 {
         g_return_val_if_fail (action, NULL);
-        g_return_val_if_fail (action->ref_count > 0, NULL);
 
-        g_atomic_int_inc (&action->ref_count);
+        return g_atomic_rc_box_acquire (action);
+}
 
-        return action;
+static void
+action_dispose (GUPnPServiceAction *action)
+{
+        g_free (action->name);
+        g_object_unref (action->msg);
+        g_object_unref (action->context);
+        g_object_unref (action->doc);
 }
 
 void
 gupnp_service_action_unref (GUPnPServiceAction *action)
 {
         g_return_if_fail (action);
-        g_return_if_fail (action->ref_count > 0);
-
-        if (g_atomic_int_dec_and_test (&action->ref_count)) {
-                g_free (action->name);
-                g_object_unref (action->msg);
-                g_object_unref (action->context);
-                g_object_unref (action->doc);
 
-                g_slice_free (GUPnPServiceAction, action);
-        }
+        g_atomic_rc_box_release_full (action, (GDestroyNotify) action_dispose);
 }
 
 /**
@@ -1012,9 +1002,7 @@
         }
 
         /* Create action structure */
-        action = g_slice_new0 (GUPnPServiceAction);
-
-        action->ref_count      = 1;
+        action                 = gupnp_service_action_new ();
         action->name           = g_strdup (action_name);
         action->msg            = g_object_ref (msg);
         action->doc            = gupnp_xml_doc_new(doc);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/libgupnp/meson.build 
new/gupnp-1.2.2/libgupnp/meson.build
--- old/gupnp-1.2.1/libgupnp/meson.build        2019-05-01 23:02:02.000000000 
+0200
+++ new/gupnp-1.2.2/libgupnp/meson.build        2020-01-02 13:07:01.000000000 
+0100
@@ -90,10 +90,20 @@
     'xml-util.c'
 )
 
+version = '0.0.0'
+version_arr = version.split('.')
+major_version = version_arr[0].to_int()
+minor_version = version_arr[1].to_int()
+micro_version = version_arr[2].to_int()
+current = major_version + minor_version + 1
+interface_age = micro_version
+darwin_versions = [current, '@0@.@1@'.format(current, interface_age)]
+
 libgupnp = library(
     'gupnp-1.2',
     sources + context_manager_impl + enums,
-    version : '0.0.0',
+    version : version,
+    darwin_versions : darwin_versions,
     dependencies : dependencies + system_deps,
     c_args : context_manager_args,
     include_directories: include_directories('..'),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/meson.build new/gupnp-1.2.2/meson.build
--- old/gupnp-1.2.1/meson.build 2019-05-01 23:02:02.000000000 +0200
+++ new/gupnp-1.2.2/meson.build 2020-01-02 13:07:01.000000000 +0100
@@ -1,4 +1,4 @@
-project('gupnp', 'c', version : '1.2.1')
+project('gupnp', 'c', version : '1.2.2', meson_version : '>= 0.48.0')
 gnome = import('gnome')
 pkg = import('pkgconfig')
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-1.2.1/tests/gtest/test-bugs.c 
new/gupnp-1.2.2/tests/gtest/test-bugs.c
--- old/gupnp-1.2.1/tests/gtest/test-bugs.c     2019-05-01 23:02:02.000000000 
+0200
+++ new/gupnp-1.2.2/tests/gtest/test-bugs.c     2020-01-02 13:07:01.000000000 
+0100
@@ -24,26 +24,7 @@
 #endif
 
 #include <libgupnp/gupnp.h>
-
-
-struct _GUPnPServiceAction {
-        volatile gint ref_count;
-
-        GUPnPContext *context;
-
-        char         *name;
-
-        SoupMessage  *msg;
-        gboolean      accept_gzip;
-
-        GUPnPXMLDoc  *doc;
-        xmlNode      *node;
-
-        GString      *response_str;
-
-        guint         argument_count;
-};
-
+#include <libgupnp/gupnp-service-private.h>
 
 typedef struct _TestBgo678701Service {
     GUPnPServiceProxy parent_instance;


Reply via email to