Hello community,

here is the log from the commit of package gupnp for openSUSE:Factory checked 
in at 2013-04-09 10:27:12
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gupnp (Old)
 and      /work/SRC/openSUSE:Factory/.gupnp.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "gupnp", Maintainer is "[email protected]"

Changes:
--------
--- /work/SRC/openSUSE:Factory/gupnp/gupnp.changes      2013-04-02 
11:51:31.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.gupnp.new/gupnp.changes 2013-04-09 
10:27:14.000000000 +0200
@@ -1,0 +2,10 @@
+Sat Apr  6 15:10:31 UTC 2013 - [email protected]
+
+- Update to version 0.20.2:
+  + Fix some typos in docs and warning messages.
+  + Fix argument order issue introduced with the va_list fix in
+    0.20.1.
+  + Add some tests for this bug.
+  + Bugs fixed: bgo#695591, bgo#696762.
+
+-------------------------------------------------------------------

Old:
----
  gupnp-0.20.1.tar.xz

New:
----
  gupnp-0.20.2.tar.xz

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

Other differences:
------------------
++++++ gupnp.spec ++++++
--- /var/tmp/diff_new_pack.jUzAii/_old  2013-04-09 10:27:16.000000000 +0200
+++ /var/tmp/diff_new_pack.jUzAii/_new  2013-04-09 10:27:16.000000000 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           gupnp
-Version:        0.20.1
+Version:        0.20.2
 Release:        0
 Summary:        Implementation of the UPnP specification
 License:        LGPL-2.0+

++++++ gupnp-0.20.1.tar.xz -> gupnp-0.20.2.tar.xz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/NEWS new/gupnp-0.20.2/NEWS
--- old/gupnp-0.20.1/NEWS       2013-03-06 11:24:33.000000000 +0100
+++ new/gupnp-0.20.2/NEWS       2013-04-05 13:36:40.000000000 +0200
@@ -1,3 +1,19 @@
+0.20.2
+======
+
+Changes since 0.20.1:
+- Fix some typos in docs and warning messages.
+- Fix argument order issue introduced with the va_list fix in 0.20.1.
+- Add some tests for this bug.
+
+Bugs fixed in this release:
+ - https://bugzilla.gnome.org/show_bug.cgi?id=695591
+ - https://bugzilla.gnome.org/show_bug.cgi?id=696762
+
+All contributors to this release:
+  Jens Georg <[email protected]>
+  Benjamin Kerensa <[email protected]>
+
 0.20.1
 ======
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/configure new/gupnp-0.20.2/configure
--- old/gupnp-0.20.1/configure  2013-03-06 11:26:12.000000000 +0100
+++ new/gupnp-0.20.2/configure  2013-04-05 13:37:15.000000000 +0200
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gupnp 0.20.1.
+# Generated by GNU Autoconf 2.69 for gupnp 0.20.2.
 #
 # Report bugs to 
<http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp>.
 #
@@ -651,8 +651,8 @@
 # Identity of this package.
 PACKAGE_NAME='gupnp'
 PACKAGE_TARNAME='gupnp'
-PACKAGE_VERSION='0.20.1'
-PACKAGE_STRING='gupnp 0.20.1'
+PACKAGE_VERSION='0.20.2'
+PACKAGE_STRING='gupnp 0.20.2'
 
PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp'
 PACKAGE_URL='http://www.gupnp.org/'
 
@@ -1460,7 +1460,7 @@
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures gupnp 0.20.1 to adapt to many kinds of systems.
+\`configure' configures gupnp 0.20.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1531,7 +1531,7 @@
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gupnp 0.20.1:";;
+     short | recursive ) echo "Configuration of gupnp 0.20.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1673,7 +1673,7 @@
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gupnp configure 0.20.1
+gupnp configure 0.20.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1951,7 +1951,7 @@
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gupnp $as_me 0.20.1, which was
+It was created by gupnp $as_me 0.20.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2886,7 +2886,7 @@
 
 # Define the identity of the package.
  PACKAGE='gupnp'
- VERSION='0.20.1'
+ VERSION='0.20.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -13835,7 +13835,7 @@
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gupnp $as_me 0.20.1, which was
+This file was extended by gupnp $as_me 0.20.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13902,7 +13902,7 @@
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; 
s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gupnp config.status 0.20.1
+gupnp config.status 0.20.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/configure.ac 
new/gupnp-0.20.2/configure.ac
--- old/gupnp-0.20.1/configure.ac       2013-03-06 11:13:11.000000000 +0100
+++ new/gupnp-0.20.2/configure.ac       2013-04-05 13:36:40.000000000 +0200
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([gupnp],
-        [0.20.1],
+        [0.20.2],
         
[http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gupnp],
         [gupnp],
         [http://www.gupnp.org/])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/doc/html/client-tutorial.html 
new/gupnp-0.20.2/doc/html/client-tutorial.html
--- old/gupnp-0.20.1/doc/html/client-tutorial.html      2013-03-06 
11:39:36.000000000 +0100
+++ new/gupnp-0.20.2/doc/html/client-tutorial.html      2013-04-05 
13:42:55.000000000 +0200
@@ -24,7 +24,7 @@
 <a name="client-tutorial"></a>Writing a UPnP Client</h2></div></div></div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id462980"></a>Introduction</h2></div></div></div>
+<a name="id598360"></a>Introduction</h2></div></div></div>
 <p>
       This chapter explains how to write an application which fetches the
       external IP address from an UPnP-compliant modem.  To do this a
@@ -41,7 +41,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id443326"></a>Finding Services</h2></div></div></div>
+<a name="id602345"></a>Finding Services</h2></div></div></div>
 <p>
       First, we initialize GUPnP and create a control point targeting the
       service type.  Then we connect a signal handler so that we are notified
@@ -104,7 +104,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id440342"></a>Invoking Actions</h2></div></div></div>
+<a name="id576247"></a>Invoking Actions</h2></div></div></div>
 <p>
       Now we have an application which searches for the service we specified 
and
       calls <code class="function">service_proxy_available_cb</code> for each 
one it
@@ -154,7 +154,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id467974"></a>Subscribing to state variable change 
notifications</h2></div></div></div>
+<a name="id574950"></a>Subscribing to state variable change 
notifications</h2></div></div></div>
 <p>
       It is possible to get change notifications for the service state 
variables 
       that have attribute <code class="literal">sendEvents="yes"</code>. We'll 
demonstrate
@@ -189,7 +189,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id467560"></a>Generating Wrappers</h2></div></div></div>
+<a name="id599291"></a>Generating Wrappers</h2></div></div></div>
 <p>
       Using <a class="link" 
href="GUPnPServiceProxy.html#gupnp-service-proxy-send-action" 
title="gupnp_service_proxy_send_action ()"><code 
class="function">gupnp_service_proxy_send_action()</code></a> and <a 
class="link" href="GUPnPServiceProxy.html#gupnp-service-proxy-add-notify" 
title="gupnp_service_proxy_add_notify ()"><code 
class="function">gupnp_service_proxy_add_notify()</code></a>
       can become tedious, because of the requirement to specify the types and 
deal
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/doc/html/gupnp-binding-tool.html 
new/gupnp-0.20.2/doc/html/gupnp-binding-tool.html
--- old/gupnp-0.20.1/doc/html/gupnp-binding-tool.html   2013-03-06 
11:39:36.000000000 +0100
+++ new/gupnp-0.20.2/doc/html/gupnp-binding-tool.html   2013-04-05 
13:42:55.000000000 +0200
@@ -33,7 +33,7 @@
 <div class="cmdsynopsis"><p><code class="command">gupnp-binding-tool</code>  
[--prefix {PREFIX}] [--mode {client|server}] {SCPD file}</p></div>
 </div>
 <div class="refsect1">
-<a name="id467862"></a><h2>Description</h2>
+<a name="id599965"></a><h2>Description</h2>
 <p>
       <span class="command"><strong>gupnp-binding-tool</strong></span> takes a 
<a class="glossterm" href="glossary.html#scpd"><em class="glossterm">SCPD 
file</em></a> and generates convenience C functions
       which call the actual GUPnP functions. The client-side bindings can be 
seen
@@ -49,7 +49,7 @@
     </p>
 </div>
 <div class="refsect1">
-<a name="id481812"></a><h2>Client side bindings</h2>
+<a name="id624727"></a><h2>Client side bindings</h2>
 <p>
       As an example, this action:
     </p>
@@ -138,7 +138,7 @@
     </p>
 </div>
 <div class="refsect1">
-<a name="id501402"></a><h2>Server side bindings</h2>
+<a name="id627728"></a><h2>Server side bindings</h2>
 <p>
       The corresponding server bindings for the same UPnP action 
       (DeletePortMapping) look like this:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/gupnp-0.20.1/doc/html/gupnp-gupnp-service-introspection.html 
new/gupnp-0.20.2/doc/html/gupnp-gupnp-service-introspection.html
--- old/gupnp-0.20.1/doc/html/gupnp-gupnp-service-introspection.html    
2013-03-06 11:39:36.000000000 +0100
+++ new/gupnp-0.20.2/doc/html/gupnp-gupnp-service-introspection.html    
2013-04-05 13:42:55.000000000 +0200
@@ -334,7 +334,7 @@
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>action_name</code></em> 
:</span></p></td>
-<td>The name of the action to retreive</td>
+<td>The name of the action to retrieve</td>
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> 
:</span></p></td>
@@ -415,7 +415,7 @@
 </tr>
 <tr>
 <td><p><span class="term"><em 
class="parameter"><code>variable_name</code></em> :</span></p></td>
-<td>The name of the variable to retreive</td>
+<td>The name of the variable to retrieve</td>
 </tr>
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> 
:</span></p></td>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/doc/html/index.html 
new/gupnp-0.20.2/doc/html/index.html
--- old/gupnp-0.20.1/doc/html/index.html        2013-03-06 11:39:36.000000000 
+0100
+++ new/gupnp-0.20.2/doc/html/index.html        2013-04-05 13:42:55.000000000 
+0200
@@ -14,11 +14,11 @@
 <div class="titlepage">
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" 
cellspacing="0"><tr><th valign="middle"><p class="title">GUPnP Reference 
Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Version 0.20.1
+<div><p class="releaseinfo">Version 0.20.2
 </p></div>
 <div><p class="copyright">Copyright © 2007, 2008, 2009 OpenedHand Ltd, Nokia 
Corporation</p></div>
 <div><div class="legalnotice">
-<a name="id396334"></a><p>
+<a name="id529886"></a><p>
         Permission is granted to copy, distribute and/or modify this
         document under the terms of the <em class="citetitle">GNU Free
         Documentation License</em>, Version 1.1 or any later
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/doc/html/ix01.html 
new/gupnp-0.20.2/doc/html/ix01.html
--- old/gupnp-0.20.1/doc/html/ix01.html 2013-03-06 11:39:36.000000000 +0100
+++ new/gupnp-0.20.2/doc/html/ix01.html 2013-04-05 13:42:55.000000000 +0200
@@ -20,7 +20,7 @@
 </tr></table>
 <div class="index">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="id390549"></a>Index</h2></div></div></div>
+<a name="id528631"></a>Index</h2></div></div></div>
 <div class="index"><div class="indexdiv">
 <h3>G</h3>
 <dl>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/doc/html/server-tutorial.html 
new/gupnp-0.20.2/doc/html/server-tutorial.html
--- old/gupnp-0.20.1/doc/html/server-tutorial.html      2013-03-06 
11:39:36.000000000 +0100
+++ new/gupnp-0.20.2/doc/html/server-tutorial.html      2013-04-05 
13:42:55.000000000 +0200
@@ -24,7 +24,7 @@
 <a name="server-tutorial"></a>Writing a UPnP Service</h2></div></div></div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id464336"></a>Introduction</h2></div></div></div>
+<a name="id599468"></a>Introduction</h2></div></div></div>
 <p>
       This chapter explains how to implement a UPnP service using GUPnP. For
       this example we will create a virtual UPnP-enabled light bulb.
@@ -42,7 +42,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id447794"></a>Defining the Device</h2></div></div></div>
+<a name="id578186"></a>Defining the Device</h2></div></div></div>
 <p>
       The first step is to write the <em class="firstterm">device 
description</em>
       file.  This is a short XML document which describes the device and what
@@ -118,7 +118,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id472354"></a>Defining Services</h2></div></div></div>
+<a name="id601658"></a>Defining Services</h2></div></div></div>
 <p>
       Because we are using a standard service we can use the service 
description
       from the specification.  This is the <code 
class="literal">SwitchPower1</code>
@@ -211,7 +211,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id454182"></a>Implementing the Device</h2></div></div></div>
+<a name="id576166"></a>Implementing the Device</h2></div></div></div>
 <p>
       Before starting to implement the device, some boilerplate code is needed
       to initialise GUPnP.  GLib types and threading needs to be initialised,
@@ -249,7 +249,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id436458"></a>Implementing a Service</h2></div></div></div>
+<a name="id602736"></a>Implementing a Service</h2></div></div></div>
 <p>
       To implement a service we first fetch the <a class="link" 
href="GUPnPService.html" title="GUPnPService"><span 
class="type">GUPnPService</span></a> from the root
       device using <a class="link" 
href="GUPnPDeviceInfo.html#gupnp-device-info-get-service" 
title="gupnp_device_info_get_service ()"><code 
class="function">gupnp_device_info_get_service()</code></a> (<a class="link" 
href="GUPnPRootDevice.html" title="GUPnPRootDevice"><span 
class="type">GUPnPRootDevice</span></a> is a
@@ -358,7 +358,7 @@
 </div>
 <div class="simplesect">
 <div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id474473"></a>Generating Service-specific 
Wrappers</h2></div></div></div>
+<a name="id570038"></a>Generating Service-specific 
Wrappers</h2></div></div></div>
 <p>
       Using service-specific wrappers can simplify the implementation of a 
service.
       Wrappers can be generated with <a class="xref" 
href="gupnp-binding-tool.html" title="gupnp-binding-tool"><span 
class="refentrytitle">gupnp-binding-tool</span>(1)</a>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/libgupnp/gupnp-service-introspection.c 
new/gupnp-0.20.2/libgupnp/gupnp-service-introspection.c
--- old/gupnp-0.20.1/libgupnp/gupnp-service-introspection.c     2012-10-26 
20:58:55.000000000 +0200
+++ new/gupnp-0.20.2/libgupnp/gupnp-service-introspection.c     2013-03-28 
12:24:56.000000000 +0100
@@ -445,7 +445,7 @@
         }
 
         if (type == G_TYPE_INVALID) {
-                g_warning ("Unkown type '%s' in the SCPD", data_type);
+                g_warning ("Unknown type '%s' in the SCPD", data_type);
                 return FALSE;
         }
 
@@ -851,7 +851,7 @@
 /**
  * gupnp_service_introspection_get_state_variable:
  * @introspection: A #GUPnPServiceIntrospection
- * @variable_name: The name of the variable to retreive
+ * @variable_name: The name of the variable to retrieve
  *
  * Returns the state variable by the name @variable_name in this service.
  *
@@ -888,7 +888,7 @@
 /**
  * gupnp_service_introspection_get_action:
  * @introspection: A #GUPnPServiceIntrospection
- * @action_name: The name of the action to retreive
+ * @action_name: The name of the action to retrieve
  *
  * Returns the action by the name @action_name in this service.
  *
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/libgupnp/gupnp-service-proxy.c 
new/gupnp-0.20.2/libgupnp/gupnp-service-proxy.c
--- old/gupnp-0.20.1/libgupnp/gupnp-service-proxy.c     2013-03-06 
11:05:52.000000000 +0100
+++ new/gupnp-0.20.2/libgupnp/gupnp-service-proxy.c     2013-04-05 
12:33:55.000000000 +0200
@@ -461,7 +461,7 @@
 /* Initializes hash table to hold arg names as keys and GValues of
  * given type and value.
  */
-#define VAR_ARGS_TO_IN_HASH_TABLE(var_args, hash) \
+#define VAR_ARGS_TO_IN_LIST(var_args, names, values) \
         G_STMT_START { \
                 const gchar *arg_name = va_arg (var_args, const gchar *); \
          \
@@ -476,7 +476,8 @@
                                               G_VALUE_NOCOPY_CONTENTS, \
                                               &error); \
                         if (error == NULL) { \
-                                g_hash_table_insert (hash, g_strdup 
(arg_name), value); \
+                                names = g_list_prepend (names, g_strdup 
(arg_name)); \
+                                values = g_list_prepend (values, value); \
                         } else { \
                                 g_warning ("Failed to collect value of type %s 
for %s: %s", \
                                            g_type_name (type), \
@@ -486,6 +487,8 @@
                         } \
                         arg_name = va_arg (var_args, const gchar *); \
                 } \
+                names = g_list_reverse (names); \
+                values = g_list_reverse (values); \
         } G_STMT_END
 
 /* Puts values stored in hash table with GValues into var args.
@@ -552,20 +555,22 @@
                                         GError           **error,
                                         va_list            var_args)
 {
-        GHashTable *in_hash;
-        GHashTable *out_hash;
+        GList *in_names = NULL, *in_values = NULL;
+        GHashTable *out_hash = NULL;
         va_list var_args_copy;
         gboolean result;
         GError *local_error;
+        GMainLoop *main_loop;
+        GUPnPServiceProxyAction *handle;
 
         g_return_val_if_fail (GUPNP_IS_SERVICE_PROXY (proxy), FALSE);
         g_return_val_if_fail (action, FALSE);
 
-        in_hash = g_hash_table_new_full (g_str_hash,
-                                         g_str_equal,
-                                         g_free,
-                                         value_free);
-        VAR_ARGS_TO_IN_HASH_TABLE (var_args, in_hash);
+
+        main_loop = g_main_loop_new (g_main_context_get_thread_default (),
+                                     TRUE);
+
+        VAR_ARGS_TO_IN_LIST (var_args, in_names, in_values);
         G_VA_COPY (var_args_copy, var_args);
         out_hash = g_hash_table_new_full (g_str_hash,
                                           g_str_equal,
@@ -574,11 +579,28 @@
         VAR_ARGS_TO_OUT_HASH_TABLE (var_args, out_hash);
 
         local_error = NULL;
-        result = gupnp_service_proxy_send_action_hash (proxy,
-                                                       action,
-                                                       &local_error,
-                                                       in_hash,
-                                                       out_hash);
+        handle = gupnp_service_proxy_begin_action_list (proxy,
+                                                        action,
+                                                        in_names,
+                                                        in_values,
+                                                        stop_main_loop,
+                                                        main_loop);
+        if (!handle) {
+                g_main_loop_unref (main_loop);
+
+                return FALSE;
+        }
+
+        /* Loop till we get a reply (or time out) */
+        if (g_main_loop_is_running (main_loop))
+                g_main_loop_run (main_loop);
+
+        g_main_loop_unref (main_loop);
+
+        result = gupnp_service_proxy_end_action_hash (proxy,
+                                                      handle,
+                                                      &local_error,
+                                                      out_hash);
 
         if (local_error == NULL) {
                 OUT_HASH_TABLE_TO_VAR_ARGS (out_hash, var_args_copy);
@@ -586,7 +608,8 @@
                 g_propagate_error (error, local_error);
         }
         va_end (var_args_copy);
-        g_hash_table_unref (in_hash);
+        g_list_free_full (in_names, g_free);
+        g_list_free_full (in_values, value_free);
         g_hash_table_unref (out_hash);
 
         return result;
@@ -969,24 +992,21 @@
                                     va_list                         var_args)
 {
         GUPnPServiceProxyAction *ret;
-        GHashTable *in_hash;
+        GList *in_names = NULL, *in_values = NULL;
 
         g_return_val_if_fail (GUPNP_IS_SERVICE_PROXY (proxy), NULL);
         g_return_val_if_fail (action, NULL);
         g_return_val_if_fail (callback, NULL);
 
-
-        in_hash = g_hash_table_new_full (g_str_hash,
-                                         g_str_equal,
-                                         g_free,
-                                         value_free);
-        VAR_ARGS_TO_IN_HASH_TABLE (var_args, in_hash);
-        ret = gupnp_service_proxy_begin_action_hash (proxy,
+        VAR_ARGS_TO_IN_LIST (var_args, in_names, in_values);
+        ret = gupnp_service_proxy_begin_action_list (proxy,
                                                      action,
+                                                     in_names,
+                                                     in_values,
                                                      callback,
-                                                     user_data,
-                                                     in_hash);
-        g_hash_table_unref (in_hash);
+                                                     user_data);
+        g_list_free_full (in_names, g_free);
+        g_list_free_full (in_values, value_free);
 
         return ret;
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/libgupnp/gupnp-service.c 
new/gupnp-0.20.2/libgupnp/gupnp-service.c
--- old/gupnp-0.20.1/libgupnp/gupnp-service.c   2013-02-20 13:35:57.000000000 
+0100
+++ new/gupnp-0.20.2/libgupnp/gupnp-service.c   2013-03-28 12:24:56.000000000 
+0100
@@ -491,7 +491,7 @@
         }
 
         if (!found)
-                g_warning ("Failed to retreive '%s' argument of '%s' action",
+                g_warning ("Failed to retrieve '%s' argument of '%s' action",
                            argument,
                            action->name);
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/tests/gtest/Makefile.am 
new/gupnp-0.20.2/tests/gtest/Makefile.am
--- old/gupnp-0.20.1/tests/gtest/Makefile.am    2012-12-09 21:05:27.000000000 
+0100
+++ new/gupnp-0.20.2/tests/gtest/Makefile.am    2013-04-05 13:36:40.000000000 
+0200
@@ -4,9 +4,10 @@
 
 TESTS=$(check_PROGRAMS)
 
-check_PROGRAMS = test-context
+check_PROGRAMS = test-context test-bugs
 
 test_context_SOURCES = test-context.c
+test_bugs_SOURCES = test-bugs.c
 endif
 
 LDADD = \
@@ -17,4 +18,4 @@
            -I $(top_srcdir) \
            -DDATA_PATH="\"$(srcdir)/data\""
 
-EXTRA_DIST=data/random4k.bin
+EXTRA_DIST=data/random4k.bin data/ServiceBgo69762.xml data/TestBgo696762.xml
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/tests/gtest/Makefile.in 
new/gupnp-0.20.2/tests/gtest/Makefile.in
--- old/gupnp-0.20.1/tests/gtest/Makefile.in    2013-03-06 11:26:14.000000000 
+0100
+++ new/gupnp-0.20.2/tests/gtest/Makefile.in    2013-04-05 13:37:16.000000000 
+0200
@@ -51,7 +51,8 @@
 build_triplet = @build@
 host_triplet = @host@
 target_triplet = @target@
-@HAVE_GTEST_TRUE@check_PROGRAMS = test-context$(EXEEXT)
+@HAVE_GTEST_TRUE@check_PROGRAMS = test-context$(EXEEXT) \
+@HAVE_GTEST_TRUE@      test-bugs$(EXEEXT)
 subdir = tests/gtest
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
@@ -66,16 +67,22 @@
 CONFIG_HEADER = $(top_builddir)/config.h
 CONFIG_CLEAN_FILES =
 CONFIG_CLEAN_VPATH_FILES =
+am__test_bugs_SOURCES_DIST = test-bugs.c
+@HAVE_GTEST_TRUE@am_test_bugs_OBJECTS = test-bugs.$(OBJEXT)
+test_bugs_OBJECTS = $(am_test_bugs_OBJECTS)
+test_bugs_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+test_bugs_DEPENDENCIES = $(top_builddir)/libgupnp/libgupnp-1.0.la \
+       $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
 am__test_context_SOURCES_DIST = test-context.c
 @HAVE_GTEST_TRUE@am_test_context_OBJECTS = test-context.$(OBJEXT)
 test_context_OBJECTS = $(am_test_context_OBJECTS)
 test_context_LDADD = $(LDADD)
-am__DEPENDENCIES_1 =
 test_context_DEPENDENCIES = $(top_builddir)/libgupnp/libgupnp-1.0.la \
        $(am__DEPENDENCIES_1)
-AM_V_lt = $(am__v_lt_@AM_V@)
-am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
-am__v_lt_0 = --silent
 DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
 depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
 am__depfiles_maybe = depfiles
@@ -102,8 +109,9 @@
 AM_V_GEN = $(am__v_GEN_@AM_V@)
 am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
 am__v_GEN_0 = @echo "  GEN   " $@;
-SOURCES = $(test_context_SOURCES)
-DIST_SOURCES = $(am__test_context_SOURCES_DIST)
+SOURCES = $(test_bugs_SOURCES) $(test_context_SOURCES)
+DIST_SOURCES = $(am__test_bugs_SOURCES_DIST) \
+       $(am__test_context_SOURCES_DIST)
 am__can_run_installinfo = \
   case $$AM_UPDATE_INFO_DIR in \
     n|no|NO) false;; \
@@ -269,6 +277,7 @@
 
 @HAVE_GTEST_TRUE@TESTS = $(check_PROGRAMS)
 @HAVE_GTEST_TRUE@test_context_SOURCES = test-context.c
+@HAVE_GTEST_TRUE@test_bugs_SOURCES = test-bugs.c
 LDADD = \
        $(top_builddir)/libgupnp/libgupnp-1.0.la \
        $(LIBGUPNP_LIBS)
@@ -278,7 +287,7 @@
            -I $(top_srcdir) \
            -DDATA_PATH="\"$(srcdir)/data\""
 
-EXTRA_DIST = data/random4k.bin
+EXTRA_DIST = data/random4k.bin data/ServiceBgo69762.xml data/TestBgo696762.xml
 all: all-am
 
 .SUFFIXES:
@@ -322,6 +331,9 @@
        list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
        echo " rm -f" $$list; \
        rm -f $$list
+test-bugs$(EXEEXT): $(test_bugs_OBJECTS) $(test_bugs_DEPENDENCIES) 
$(EXTRA_test_bugs_DEPENDENCIES) 
+       @rm -f test-bugs$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(test_bugs_OBJECTS) $(test_bugs_LDADD) $(LIBS)
 test-context$(EXEEXT): $(test_context_OBJECTS) $(test_context_DEPENDENCIES) 
$(EXTRA_test_context_DEPENDENCIES) 
        @rm -f test-context$(EXEEXT)
        $(AM_V_CCLD)$(LINK) $(test_context_OBJECTS) $(test_context_LDADD) 
$(LIBS)
@@ -332,6 +344,7 @@
 distclean-compile:
        -rm -f *.tab.c
 
+@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-bugs.Po@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test-context.Po@am__quote@
 
 .c.o:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/tests/gtest/data/ServiceBgo69762.xml 
new/gupnp-0.20.2/tests/gtest/data/ServiceBgo69762.xml
--- old/gupnp-0.20.1/tests/gtest/data/ServiceBgo69762.xml       1970-01-01 
01:00:00.000000000 +0100
+++ new/gupnp-0.20.2/tests/gtest/data/ServiceBgo69762.xml       2013-04-05 
12:33:55.000000000 +0200
@@ -0,0 +1,107 @@
+<scpd xmlns="urn:schemas-upnp-org:service-1-0">
+  <specVersion>
+    <major>1</major>
+    <minor>0</minor>
+  </specVersion>
+  <serviceStateTable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_ObjectID</name>
+      <dataType>string</dataType>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_Result</name>
+      <dataType>string</dataType>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_BrowseFlag</name>
+      <dataType>string</dataType>
+      <allowedValueList>
+        <allowedValue>BrowseMetadata</allowedValue>
+        <allowedValue>BrowseDirectChildren</allowedValue>
+      </allowedValueList>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_Filter</name>
+      <dataType>string</dataType>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_SortCriteria</name>
+      <dataType>string</dataType>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_Index</name>
+      <dataType>ui4</dataType>
+    </stateVariable>
+    <stateVariable sendEvents="no">
+      <name>A_ARG_TYPE_Count</name>
+      <dataType>ui4</dataType>
+    </stateVariable>
+  </serviceStateTable>
+  <actionList>
+    <action>
+      <name>Browse</name>
+      <argumentList>
+        <argument>
+          <name>ObjectID</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_ObjectID</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>BrowseFlag</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_BrowseFlag</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>Filter</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Filter</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>StartingIndex</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Index</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>RequestedCount</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Count</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>SortCriteria</name>
+          <direction>in</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_SortCriteria</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>Result</name>
+          <direction>out</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Result</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>NumberReturned</name>
+          <direction>out</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Count</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>TotalMatches</name>
+          <direction>out</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_Count</relatedStateVariable>
+        </argument>
+        <argument>
+          <name>UpdateID</name>
+          <direction>out</direction>
+          <relatedStateVariable>
+          A_ARG_TYPE_UpdateID</relatedStateVariable>
+        </argument>
+      </argumentList>
+    </action>
+  </actionList>
+</scpd>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/tests/gtest/data/TestBgo696762.xml 
new/gupnp-0.20.2/tests/gtest/data/TestBgo696762.xml
--- old/gupnp-0.20.1/tests/gtest/data/TestBgo696762.xml 1970-01-01 
01:00:00.000000000 +0100
+++ new/gupnp-0.20.2/tests/gtest/data/TestBgo696762.xml 2013-04-05 
12:33:55.000000000 +0200
@@ -0,0 +1,21 @@
+<root xmlns="urn:schemas-upnp-org:device-1-0">
+<specVersion>
+<major>1</major>
+<minor>0</minor>
+</specVersion>
+<device>
+<deviceType>urn:test-gupnp-org:device:TestBgo696762:1</deviceType>
+<friendlyName>Regression Test for bgo#696762</friendlyName>
+<modelURL>https://bugzilla.gnome.org/show_bug.cgi?id=696762</modelURL>
+<UDN>uuid:1234</UDN>
+<serviceList>
+<service>
+<serviceType>urn:test-gupnp-org:service:bgo696762:1</serviceType>
+<serviceId>urn:test-gupnp-org:serviceId:bgo696762:1</serviceId>
+<SCPDURL>/ServiceBgo69762.xml</SCPDURL>
+<controlURL>/ServiceBgo69762/Control</controlURL>
+<eventSubURL>/ServiceBgo69762/Event</eventSubURL>
+</service>
+</serviceList>
+</device>
+</root>
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/gupnp-0.20.1/tests/gtest/test-bugs.c 
new/gupnp-0.20.2/tests/gtest/test-bugs.c
--- old/gupnp-0.20.1/tests/gtest/test-bugs.c    1970-01-01 01:00:00.000000000 
+0100
+++ new/gupnp-0.20.2/tests/gtest/test-bugs.c    2013-04-05 12:33:55.000000000 
+0200
@@ -0,0 +1,183 @@
+/*
+ * Copyright (C) 2013 Intel Corporation.
+ *
+ * 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.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#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;
+};
+
+typedef struct _TestBgo696762Data {
+    GMainLoop *loop;
+    GUPnPServiceProxy *proxy;
+} TestBgo696762Data;
+
+static void
+test_bgo_696762_on_browse_call (GUPnPService *service,
+                                GUPnPServiceAction *action,
+                                gpointer user_data)
+{
+    xmlNode *node = action->node->children;
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "ObjectID");
+    node = node->next;
+
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "BrowseFlag");
+    node = node->next;
+
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "Filter");
+    node = node->next;
+
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "StartingIndex");
+    node = node->next;
+
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "RequestedCount");
+    node = node->next;
+
+    g_assert (node != NULL);
+    g_assert_cmpstr (node->name, ==, "SortCriteria");
+    node = node->next;
+    gupnp_service_action_return (action);
+}
+
+static void
+test_bgo_696762_on_browse (GUPnPServiceProxy *proxy,
+                           GUPnPServiceProxyAction *action,
+                           gpointer                 user_data)
+{
+    TestBgo696762Data *data = (TestBgo696762Data *) user_data;
+
+    g_main_loop_quit (data->loop);
+}
+
+static void
+test_bgo_696762_on_sp_available (GUPnPControlPoint *cp,
+                                 GUPnPServiceProxy *proxy,
+                                 gpointer           user_data)
+{
+    TestBgo696762Data *data = (TestBgo696762Data *) user_data;
+
+    data->proxy = g_object_ref (proxy);
+
+    g_main_loop_quit (data->loop);
+}
+
+static gboolean
+test_bgo_696762_on_timeout (gpointer user_data)
+{
+    g_assert_not_reached ();
+
+    return FALSE;
+}
+
+/* Test if a call on a service proxy keeps argument order */
+static void
+test_bgo_696762 (void)
+{
+    GUPnPContext *context = NULL;
+    GError *error = NULL;
+    GUPnPControlPoint *cp = NULL;
+    guint timeout_id = 0;
+    GUPnPRootDevice *rd;
+    TestBgo696762Data data = { NULL, NULL };
+    GUPnPServiceInfo *info = NULL;
+
+    data.loop = g_main_loop_new (NULL, FALSE);
+
+    context = gupnp_context_new (NULL, "lo", 0, &error);
+    g_assert (context != NULL);
+    g_assert (error == NULL);
+
+    cp = gupnp_control_point_new (context,
+                                  "urn:test-gupnp-org:service:bgo696762:1");
+
+    gssdp_resource_browser_set_active (GSSDP_RESOURCE_BROWSER (cp), TRUE);
+
+    g_signal_connect (G_OBJECT (cp),
+                      "service-proxy-available",
+                      G_CALLBACK (test_bgo_696762_on_sp_available),
+                      &data);
+
+
+    rd = gupnp_root_device_new (context, "TestBgo696762.xml", DATA_PATH);
+    gupnp_root_device_set_available (rd, TRUE);
+    info = gupnp_device_info_get_service (GUPNP_DEVICE_INFO (rd),
+                                          
"urn:test-gupnp-org:service:bgo696762:1");
+    g_signal_connect (G_OBJECT (info),
+                      "action-invoked::Browse",
+                      G_CALLBACK (test_bgo_696762_on_browse_call),
+                      &data);
+
+    timeout_id = g_timeout_add_seconds (2, test_bgo_696762_on_timeout, 
&(data.loop));
+    g_main_loop_run (data.loop);
+    g_source_remove (timeout_id);
+    g_assert (data.proxy != NULL);
+
+    gupnp_service_proxy_begin_action (data.proxy,
+                                      "Browse",
+                                      test_bgo_696762_on_browse,
+                                      &data,
+                                      "ObjectID", G_TYPE_STRING, "0",
+                                      "BrowseFlag", G_TYPE_STRING, 
"BrowseDirectChildren",
+                                      "Filter", G_TYPE_STRING, 
"res,dc:date,res@size",
+                                      "StartingIndex", G_TYPE_UINT, 0,
+                                      "RequestedCount", G_TYPE_UINT, 0,
+                                      "SortCriteria", G_TYPE_STRING, "",
+                                      NULL);
+
+    timeout_id = g_timeout_add_seconds (2, test_bgo_696762_on_timeout, 
&(data.loop));
+    g_main_loop_run (data.loop);
+    g_source_remove (timeout_id);
+}
+
+int
+main (int argc, char *argv[]) {
+#if !GLIB_CHECK_VERSION(2,35,0)
+    g_type_init ();
+#endif
+    g_test_init (&argc, &argv, NULL);
+    g_test_add_func ("/bugs/696762", test_bgo_696762);
+
+    return g_test_run ();
+}

-- 
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to