Updated GSSDP version to 0.14.2 (a39de89) submit/2.0/20130320.101230
authorRegis Merlino <regis.merlino@intel.com>
Wed, 6 Mar 2013 16:59:23 +0000 (17:59 +0100)
committerRegis Merlino <regis.merlino@intel.com>
Thu, 7 Mar 2013 08:57:31 +0000 (09:57 +0100)
29 files changed:
NEWS
configure
configure.ac
doc/gssdp-sections.txt
doc/html/GSSDPClient.html
doc/html/GSSDPResourceBrowser.html
doc/html/GSSDPResourceGroup.html
doc/html/ch01.html
doc/html/gssdp.devhelp2
doc/html/index.html
doc/html/index.sgml
doc/tmpl/gssdp-client.sgml
doc/tmpl/gssdp-resource-browser.sgml
doc/version.xml
libgssdp/gssdp-client.c
libgssdp/gssdp-resource-browser.c
libgssdp/gssdp-resource-browser.h
libgssdp/gssdp-resource-group.c
libgssdp/gssdp-socket-functions.c
libgssdp/gssdp-socket-source.c
libgssdp/gssdp-socket-source.h
packaging/GSSDP.changes
packaging/GSSDP.spec
tests/gtest/Makefile.am
tests/gtest/Makefile.in
tests/gtest/test-functional.c
tests/gtest/test-regression.c
tests/test-browser.c
tests/test-publish.c

diff --git a/NEWS b/NEWS
index bfe01f0..6cf1296 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,63 @@
+0.14.2
+======
+
+- Fix memory leaks on initial interface search.
+- Make default interface detection a little bit smarter.
+
+All contributors to this release:
+  Krzesimir Nowak <krnowak@openismus.com>
+
+0.14.1
+======
+
+- Fix a crash on network announcements.
+
+Bugs fixed in this release:
+ - https://bugzilla.gnome.org/show_bug.cgi?id=694418
+
+All contributors to this release:
+  Krzesimir Nowak <krnowak@openismus.com>
+  Jussi Kukkonen <jussi.kukkonen@intel.com>
+
+0.14.0
+======
+- Don't use inet_netof to filter for correct source networks.
+- Add gssdp_resource_browser_rescan() function.
+- Allow custom TTL values for GSSDPClient.
+
+Bugs fixed in this release:
+ - https://bugzilla.gnome.org/show_bug.cgi?id=656406
+ - https://bugzilla.gnome.org/show_bug.cgi?id=668922
+ - https://bugzilla.gnome.org/show_bug.cgi?id=692516
+
+All contributors to this release:
+
+Jens Georg <mail@jensge.org>
+Krzesimir Nowak <krnowak@openismus.com>
+gnupnp <gnupnp@dorgby.net>
+
+0.13.2
+======
+- Fix implementation of GInitable such that _init() is callable multiple times
+  without breaking.
+- Really ignore invalid MAN headers.
+- Fix port reuse on NetBSD.
+- Allow non-sourcedir build from git.
+- Don't use -Werror by default.
+- Silence some deprecation warnings.
+
+Bugs fixed in this release:
+ - https://github.com/01org/media-service-upnp/issues/54
+ - https://bugzilla.gnome.org/show_bug.cgi?id=685949
+ - https://bugzilla.gnome.org/show_bug.cgi?id=682576
+ - https://bugzilla.gnome.org/show_bug.cgi?id=682308
+
+All contributors to this release:
+
+Jens Georg <mail@jensge.org>
+Theppitak Karoonboonyanan <thep@linux.thai.net>
+Matthias Drochner <M.Drochner@fz-juelich.de>
+
 0.13.1
 ======
 - Run introspection in make distcheck.
index cd709c0..0ca1cc7 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,6 +1,6 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for gssdp 0.13.1.
+# Generated by GNU Autoconf 2.69 for gssdp 0.14.2.
 #
 # Report bugs to <http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gssdp>.
 #
@@ -651,8 +651,8 @@ MAKEFLAGS=
 # Identity of this package.
 PACKAGE_NAME='gssdp'
 PACKAGE_TARNAME='gssdp'
-PACKAGE_VERSION='0.13.1'
-PACKAGE_STRING='gssdp 0.13.1'
+PACKAGE_VERSION='0.14.2'
+PACKAGE_STRING='gssdp 0.14.2'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gssdp'
 PACKAGE_URL='http://www.gupnp.org/'
 
@@ -869,6 +869,7 @@ with_sysroot
 enable_libtool_lock
 with_gtk
 enable_debug
+enable_strict_c
 enable_introspection
 with_html_dir
 enable_gtk_doc
@@ -1433,7 +1434,7 @@ if test "$ac_init_help" = "long"; then
   # 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 gssdp 0.13.1 to adapt to many kinds of systems.
+\`configure' configures gssdp 0.14.2 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1503,7 +1504,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gssdp 0.13.1:";;
+     short | recursive ) echo "Configuration of gssdp 0.14.2:";;
    esac
   cat <<\_ACEOF
 
@@ -1523,6 +1524,7 @@ Optional Features:
                           optimize for fast installation [default=yes]
   --disable-libtool-lock  avoid locking (might break parallel builds)
   --enable-debug          enable debugging
+  --enable-strict-c       Error out on warnings
   --enable-introspection=[no/auto/yes]
                           Enable introspection for this build
   --enable-gtk-doc        use gtk-doc to build documentation [[default=no]]
@@ -1633,7 +1635,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gssdp configure 0.13.1
+gssdp configure 0.14.2
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1911,7 +1913,7 @@ cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by gssdp $as_me 0.13.1, which was
+It was created by gssdp $as_me 0.14.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2732,7 +2734,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='gssdp'
- VERSION='0.13.1'
+ VERSION='0.14.2'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -12350,20 +12352,20 @@ if test -n "$LIBGSSDP_CFLAGS"; then
     pkg_cv_LIBGSSDP_CFLAGS="$LIBGSSDP_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22 \\
-                            gobject-2.0 >= 2.22 \\
-                            gio-2.0 >= 2.22 \\
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.32 \\
+                            gobject-2.0 >= 2.32 \\
+                            gio-2.0 >= 2.32 \\
                             libsoup-2.4 >= 2.26.1\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGSSDP_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+  pkg_cv_LIBGSSDP_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
@@ -12376,20 +12378,20 @@ if test -n "$LIBGSSDP_LIBS"; then
     pkg_cv_LIBGSSDP_LIBS="$LIBGSSDP_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.22 \\
-                            gobject-2.0 >= 2.22 \\
-                            gio-2.0 >= 2.22 \\
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.32 \\
+                            gobject-2.0 >= 2.32 \\
+                            gio-2.0 >= 2.32 \\
                             libsoup-2.4 >= 2.26.1\""; } >&5
-  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+  ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGSSDP_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+  pkg_cv_LIBGSSDP_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1" 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
@@ -12411,22 +12413,22 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               LIBGSSDP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+               LIBGSSDP_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1" 2>&1`
         else
-               LIBGSSDP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+               LIBGSSDP_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1" 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$LIBGSSDP_PKG_ERRORS" >&5
 
-       as_fn_error $? "Package requirements (glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+       as_fn_error $? "Package requirements (glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1) were not met:
 
 $LIBGSSDP_PKG_ERRORS
@@ -12593,7 +12595,18 @@ else
 fi
 
 if test "x$enable_debug" = "xyes"; then
-        CFLAGS="$CFLAGS -g -Wall -Werror"
+        CFLAGS="$CFLAGS -g -Wall"
+fi
+
+# Check whether --enable-strict-c was given.
+if test "${enable_strict_c+set}" = set; then :
+  enableval=$enable_strict_c;
+else
+  enable_strict_c=no
+fi
+
+if test "x$enable_strict_c" = "xyes"; then :
+  CFLAGS="$CFLAGS -Werror"
 fi
 
 
@@ -13686,7 +13699,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by gssdp $as_me 0.13.1, which was
+This file was extended by gssdp $as_me 0.14.2, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13753,7 +13766,7 @@ _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-gssdp config.status 0.13.1
+gssdp config.status 0.14.2
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
index 0525314..3019c0a 100644 (file)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([gssdp],
-        [0.13.1],
+        [0.14.2],
         [http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gssdp],
         [gssdp],
         [http://www.gupnp.org/])
@@ -22,9 +22,9 @@ AC_HEADER_STDC
 LT_PREREQ([2.2])
 LT_INIT
 
-PKG_CHECK_MODULES(LIBGSSDP, glib-2.0 >= 2.22 \
-                            gobject-2.0 >= 2.22 \
-                            gio-2.0 >= 2.22 \
+PKG_CHECK_MODULES(LIBGSSDP, glib-2.0 >= 2.32 \
+                            gobject-2.0 >= 2.32 \
+                            gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1)
 
 LIBGTK_REQUIRED=2.12.0
@@ -69,9 +69,15 @@ AC_ARG_ENABLE(debug,
        [  --enable-debug          enable debugging],,
         enable_debug=no)
 if test "x$enable_debug" = "xyes"; then
-        CFLAGS="$CFLAGS -g -Wall -Werror"
+        CFLAGS="$CFLAGS -g -Wall"
 fi
 
+AC_ARG_ENABLE([strict-c],
+              AS_HELP_STRING([--enable-strict-c],[Error out on warnings]),,
+              [enable_strict_c=no])
+AS_IF([test "x$[]enable_strict_c" = "xyes"],
+      [CFLAGS="$CFLAGS -Werror"])
+
 GOBJECT_INTROSPECTION_CHECK([0.6.7])
 
 # vapigen
index 7b73261..4f4361f 100644 (file)
@@ -63,6 +63,7 @@ gssdp_resource_browser_set_mx
 gssdp_resource_browser_get_mx
 gssdp_resource_browser_set_active
 gssdp_resource_browser_get_active
+gssdp_resource_browser_rescan
 <SUBSECTION Standard>
 GSSDP_RESOURCE_BROWSER
 GSSDP_IS_RESOURCE_BROWSER
index 197d0f8..b5f0285 100644 (file)
 <div class="refsynopsisdiv">
 <a name="GSSDPClient.synopsis"></a><h2>Synopsis</h2>
 <pre class="synopsis">struct              <a class="link" href="GSSDPClient.html#GSSDPClient-struct" title="struct GSSDPClient">GSSDPClient</a>;
-<a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="returnvalue">GSSDPClient</span></a> *       <a class="link" href="GSSDPClient.html#gssdp-client-new" title="gssdp_client_new ()">gssdp_client_new</a>                    (<em class="parameter"><code><span class="type">GMainContext</span> *main_context</code></em>,
+<a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="returnvalue">GSSDPClient</span></a> *       <a class="link" href="GSSDPClient.html#gssdp-client-new" title="gssdp_client_new ()">gssdp_client_new</a>                    (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *main_context</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *iface</code></em>,
-                                                         <em class="parameter"><code><span class="type">GError</span> **error</code></em>);
-<span class="returnvalue">GMainContext</span> *      <a class="link" href="GSSDPClient.html#gssdp-client-get-main-context" title="gssdp_client_get_main_context ()">gssdp_client_get_main_context</a>       (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="returnvalue">GMainContext</span></a> *      <a class="link" href="GSSDPClient.html#gssdp-client-get-main-context" title="gssdp_client_get_main_context ()">gssdp_client_get_main_context</a>       (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPClient.html#gssdp-client-set-server-id" title="gssdp_client_set_server_id ()">gssdp_client_set_server_id</a>          (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *server_id</code></em>);
 const <span class="returnvalue">char</span> *        <a class="link" href="GSSDPClient.html#gssdp-client-get-server-id" title="gssdp_client_get_server_id ()">gssdp_client_get_server_id</a>          (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
@@ -58,13 +58,13 @@ const <span class="returnvalue">char</span> *        <a class="link" href="GSSDP
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPClient.html#gssdp-client-set-network" title="gssdp_client_set_network ()">gssdp_client_set_network</a>            (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *network</code></em>);
 const <span class="returnvalue">char</span> *        <a class="link" href="GSSDPClient.html#gssdp-client-get-network" title="gssdp_client_get_network ()">gssdp_client_get_network</a>            (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
-<span class="returnvalue">gboolean</span>            <a class="link" href="GSSDPClient.html#gssdp-client-get-active" title="gssdp_client_get_active ()">gssdp_client_get_active</a>             (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GSSDPClient.html#gssdp-client-get-active" title="gssdp_client_get_active ()">gssdp_client_get_active</a>             (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPClient.object-hierarchy"></a><h2>Object Hierarchy</h2>
 <pre class="synopsis">
-  GObject
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----GSSDPClient
 </pre>
 </div>
@@ -72,23 +72,24 @@ const <span class="returnvalue">char</span> *        <a class="link" href="GSSDP
 <a name="GSSDPClient.implemented-interfaces"></a><h2>Implemented Interfaces</h2>
 <p>
 GSSDPClient implements
GInitable.</p>
<a href="http://library.gnome.org/devel/gio/unstable/GInitable.html">GInitable</a>.</p>
 </div>
 <div class="refsect1">
 <a name="GSSDPClient.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--active" title='The "active" property'>active</a>"                   <span class="type">gboolean</span>              : Read / Write
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--host-ip" title='The "host-ip" property'>host-ip</a>"                  <span class="type">gchar</span>*                : Read
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--interface" title='The "interface" property'>interface</a>"                <span class="type">gchar</span>*                : Read / Write / Construct Only
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--main-context" title='The "main-context" property'>main-context</a>"             <span class="type">gpointer</span>              : Read / Write / Construct Only
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--network" title='The "network" property'>network</a>"                  <span class="type">gchar</span>*                : Read / Write / Construct
-  "<a class="link" href="GSSDPClient.html#GSSDPClient--server-id" title='The "server-id" property'>server-id</a>"                <span class="type">gchar</span>*                : Read / Write
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--active" title='The "active" property'>active</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--host-ip" title='The "host-ip" property'>host-ip</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--interface" title='The "interface" property'>interface</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct Only
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--main-context" title='The "main-context" property'>main-context</a>"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>              : Read / Write / Construct Only
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--network" title='The "network" property'>network</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--server-id" title='The "server-id" property'>server-id</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
+  "<a class="link" href="GSSDPClient.html#GSSDPClient--socket-ttl" title='The "socket-ttl" property'>socket-ttl</a>"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write / Construct Only
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPClient.signals"></a><h2>Signals</h2>
 <pre class="synopsis">
-  "<a class="link" href="GSSDPClient.html#GSSDPClient-message-received" title='The "message-received" signal'>message-received</a>"                               : <code class="literal">Run Last</code>
+  "<a class="link" href="GSSDPClient.html#GSSDPClient-message-received" title='The "message-received" signal'>message-received</a>"                               : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
 </pre>
 </div>
 <div class="refsect1">
@@ -109,21 +110,21 @@ and <a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><s
 <hr>
 <div class="refsect2">
 <a name="gssdp-client-new"></a><h3>gssdp_client_new ()</h3>
-<pre class="programlisting"><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="returnvalue">GSSDPClient</span></a> *       gssdp_client_new                    (<em class="parameter"><code><span class="type">GMainContext</span> *main_context</code></em>,
+<pre class="programlisting"><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="returnvalue">GSSDPClient</span></a> *       gssdp_client_new                    (<em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> *main_context</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *iface</code></em>,
-                                                         <em class="parameter"><code><span class="type">GError</span> **error</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Error-Reporting.html#GError"><span class="type">GError</span></a> **error</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>main_context</code></em> :</span></p></td>
 <td>Deprecated: 0.11.2: Always set to NULL. If you want to
-specify a context use <code class="function">g_main_context_push_thread_default()</code>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
+specify a context use <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-context-push-thread-default"><code class="function">g_main_context_push_thread_default()</code></a>. <span class="annotation">[<acronym title="NULL is ok, both for passing and for returning."><span class="acronym">allow-none</span></acronym>]</span>
 </td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>iface</code></em> :</span></p></td>
-<td>The name of the network interface, or <code class="literal">NULL</code> for auto-detection.</td>
+<td>The name of the network interface, or <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#NULL:CAPS"><code class="literal">NULL</code></a> for auto-detection.</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>error</code></em> :</span></p></td>
@@ -139,7 +140,7 @@ specify a context use <code class="function">g_main_context_push_thread_default(
 <hr>
 <div class="refsect2">
 <a name="gssdp-client-get-main-context"></a><h3>gssdp_client_get_main_context ()</h3>
-<pre class="programlisting"><span class="returnvalue">GMainContext</span> *      gssdp_client_get_main_context       (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="returnvalue">GMainContext</span></a> *      gssdp_client_get_main_context       (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);</pre>
 <p>
 </p>
 </div>
@@ -277,7 +278,7 @@ Get the network this client is associated with.
 <hr>
 <div class="refsect2">
 <a name="gssdp-client-get-active"></a><h3>gssdp_client_get_active ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span>            gssdp_client_get_active             (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gssdp_client_get_active             (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -289,7 +290,7 @@ Get the network this client is associated with.
 <tr>
 <td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
 <td>
-<code class="literal">TRUE</code> if <em class="parameter"><code>client</code></em> is active, <code class="literal">FALSE</code> otherwise.</td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if <em class="parameter"><code>client</code></em> is active, <a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#FALSE:CAPS"><code class="literal">FALSE</code></a> otherwise.</td>
 </tr>
 </tbody>
 </table></div>
@@ -299,7 +300,7 @@ Get the network this client is associated with.
 <a name="GSSDPClient.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GSSDPClient--active"></a><h3>The <code class="literal">"active"</code> property</h3>
-<pre class="programlisting">  "active"                   <span class="type">gboolean</span>              : Read / Write</pre>
+<pre class="programlisting">  "active"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
 <p>
 Whether this client is active or not (passive). When active
 (default), the client sends messages on the network, otherwise
@@ -310,7 +311,7 @@ not. In most cases, you don't want to touch this property.
 <hr>
 <div class="refsect2">
 <a name="GSSDPClient--host-ip"></a><h3>The <code class="literal">"host-ip"</code> property</h3>
-<pre class="programlisting">  "host-ip"                  <span class="type">gchar</span>*                : Read</pre>
+<pre class="programlisting">  "host-ip"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read</pre>
 <p>
 The IP address of the assoicated network interface.
 </p>
@@ -319,7 +320,7 @@ The IP address of the assoicated network interface.
 <hr>
 <div class="refsect2">
 <a name="GSSDPClient--interface"></a><h3>The <code class="literal">"interface"</code> property</h3>
-<pre class="programlisting">  "interface"                <span class="type">gchar</span>*                : Read / Write / Construct Only</pre>
+<pre class="programlisting">  "interface"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct Only</pre>
 <p>
 The name of the network interface this client is associated with.
 Set to NULL to autodetect.
@@ -329,23 +330,23 @@ Set to NULL to autodetect.
 <hr>
 <div class="refsect2">
 <a name="GSSDPClient--main-context"></a><h3>The <code class="literal">"main-context"</code> property</h3>
-<pre class="programlisting">  "main-context"             <span class="type">gpointer</span>              : Read / Write / Construct Only</pre>
+<pre class="programlisting">  "main-context"             <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>              : Read / Write / Construct Only</pre>
 <div class="warning" style="margin-left: 0.5in; margin-right: 0.5in;">
 <h3 class="title">Warning</h3>
-<p><code class="literal">GSSDPClient:main-context</code> has been deprecated since version 0.11.2 and should not be used in newly-written code. Use <code class="function">g_main_context_push_thread_default()</code>.</p>
+<p><code class="literal">GSSDPClient:main-context</code> has been deprecated since version 0.11.2 and should not be used in newly-written code. Use <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#g-main-context-push-thread-default"><code class="function">g_main_context_push_thread_default()</code></a>.</p>
 </div>
 <p>
-The <span class="type">GMainContext</span> to use. Set to NULL to use the default.
+The <a href="http://library.gnome.org/devel/glib/unstable/glib-The-Main-Event-Loop.html#GMainContext"><span class="type">GMainContext</span></a> to use. Set to NULL to use the default.
 </p>
 </div>
 <hr>
 <div class="refsect2">
 <a name="GSSDPClient--network"></a><h3>The <code class="literal">"network"</code> property</h3>
-<pre class="programlisting">  "network"                  <span class="type">gchar</span>*                : Read / Write / Construct</pre>
+<pre class="programlisting">  "network"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write / Construct</pre>
 <p>
 The network this client is currently connected to. You could set this
 to anything you want to identify the network this client is
-associated with. If you are using <a href="../gupnp/GUPnPContextManager.html"><span class="type">GUPnPContextManager</span></a> and associated
+associated with. If you are using <span class="type">GUPnPContextManager</span> and associated
 interface is a WiFi interface, this property is set to the ESSID of
 the network. Otherwise, expect this to be the network IP address by
 default.
@@ -355,23 +356,35 @@ default.
 <hr>
 <div class="refsect2">
 <a name="GSSDPClient--server-id"></a><h3>The <code class="literal">"server-id"</code> property</h3>
-<pre class="programlisting">  "server-id"                <span class="type">gchar</span>*                : Read / Write</pre>
+<pre class="programlisting">  "server-id"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
 <p>
 The SSDP server's identifier.
 </p>
 <p>Default value: NULL</p>
 </div>
+<hr>
+<div class="refsect2">
+<a name="GSSDPClient--socket-ttl"></a><h3>The <code class="literal">"socket-ttl"</code> property</h3>
+<pre class="programlisting">  "socket-ttl"               <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write / Construct Only</pre>
+<p>
+Time-to-live value to use for all sockets created by this client.
+If not set (or set to 0) the value recommended by UPnP will be used.
+This property can only be set during object construction.
+</p>
+<p>Allowed values: &lt;= 255</p>
+<p>Default value: 0</p>
+</div>
 </div>
 <div class="refsect1">
 <a name="GSSDPClient.signal-details"></a><h2>Signal Details</h2>
 <div class="refsect2">
 <a name="GSSDPClient-message-received"></a><h3>The <code class="literal">"message-received"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *arg0,
-                                                        <span class="type">gchar</span>       *arg1,
-                                                        <span class="type">guint</span>        arg2,
-                                                        <span class="type">gint</span>         arg3,
-                                                        <span class="type">gpointer</span>     arg4,
-                                                        <span class="type">gpointer</span>     user_data)      : <code class="literal">Run Last</code></pre>
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>       *arg1,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>        arg2,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gint"><span class="type">gint</span></a>         arg3,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     arg4,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>     user_data)      : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 Internal signal.
 </p>
index b226458..1cdd85b 100644 (file)
                                                          <em class="parameter"><code>const <span class="type">char</span> *target</code></em>);
 const <span class="returnvalue">char</span> *        <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-get-target" title="gssdp_resource_browser_get_target ()">gssdp_resource_browser_get_target</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-set-mx" title="gssdp_resource_browser_set_mx ()">gssdp_resource_browser_set_mx</a>       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>,
-                                                         <em class="parameter"><code><span class="type">gushort</span> mx</code></em>);
-<span class="returnvalue">gushort</span>             <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-get-mx" title="gssdp_resource_browser_get_mx ()">gssdp_resource_browser_get_mx</a>       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"><span class="type">gushort</span></a> mx</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"><span class="returnvalue">gushort</span></a>             <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-get-mx" title="gssdp_resource_browser_get_mx ()">gssdp_resource_browser_get_mx</a>       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-set-active" title="gssdp_resource_browser_set_active ()">gssdp_resource_browser_set_active</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>,
-                                                         <em class="parameter"><code><span class="type">gboolean</span> active</code></em>);
-<span class="returnvalue">gboolean</span>            <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-get-active" title="gssdp_resource_browser_get_active ()">gssdp_resource_browser_get_active</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-get-active" title="gssdp_resource_browser_get_active ()">gssdp_resource_browser_get_active</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GSSDPResourceBrowser.html#gssdp-resource-browser-rescan" title="gssdp_resource_browser_rescan ()">gssdp_resource_browser_rescan</a>       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceBrowser.object-hierarchy"></a><h2>Object Hierarchy</h2>
 <pre class="synopsis">
-  GObject
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----GSSDPResourceBrowser
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceBrowser.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--active" title='The "active" property'>active</a>"                   <span class="type">gboolean</span>              : Read / Write
+  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--active" title='The "active" property'>active</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--client" title='The "client" property'>client</a>"                   <a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a>*          : Read / Write / Construct Only
-  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--mx" title='The "mx" property'>mx</a>"                       <span class="type">guint</span>                 : Read / Write
-  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--target" title='The "target" property'>target</a>"                   <span class="type">gchar</span>*                : Read / Write
+  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--mx" title='The "mx" property'>mx</a>"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser--target" title='The "target" property'>target</a>"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceBrowser.signals"></a><h2>Signals</h2>
 <pre class="synopsis">
-  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser-resource-available" title='The "resource-available" signal'>resource-available</a>"                             : <code class="literal">Run Last</code>
-  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser-resource-unavailable" title='The "resource-unavailable" signal'>resource-unavailable</a>"                           : <code class="literal">Run Last</code>
+  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser-resource-available" title='The "resource-available" signal'>resource-available</a>"                             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
+  "<a class="link" href="GSSDPResourceBrowser.html#GSSDPResourceBrowser-resource-unavailable" title='The "resource-unavailable" signal'>resource-unavailable</a>"                           : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a>
 </pre>
 </div>
 <div class="refsect1">
@@ -194,7 +195,7 @@ Sets the browser target of <em class="parameter"><code>resource_browser</code></
 <div class="refsect2">
 <a name="gssdp-resource-browser-set-mx"></a><h3>gssdp_resource_browser_set_mx ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_browser_set_mx       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>,
-                                                         <em class="parameter"><code><span class="type">gushort</span> mx</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"><span class="type">gushort</span></a> mx</code></em>);</pre>
 <p>
 Sets the used MX value of <em class="parameter"><code>resource_browser</code></em> to <em class="parameter"><code>mx</code></em>.
 </p>
@@ -216,7 +217,7 @@ Sets the used MX value of <em class="parameter"><code>resource_browser</code></e
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-browser-get-mx"></a><h3>gssdp_resource_browser_get_mx ()</h3>
-<pre class="programlisting"><span class="returnvalue">gushort</span>             gssdp_resource_browser_get_mx       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gushort"><span class="returnvalue">gushort</span></a>             gssdp_resource_browser_get_mx       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -236,7 +237,7 @@ Sets the used MX value of <em class="parameter"><code>resource_browser</code></e
 <div class="refsect2">
 <a name="gssdp-resource-browser-set-active"></a><h3>gssdp_resource_browser_set_active ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_browser_set_active   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>,
-                                                         <em class="parameter"><code><span class="type">gboolean</span> active</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> active</code></em>);</pre>
 <p>
 (De)activates <em class="parameter"><code>resource_browser</code></em>.
 </p>
@@ -259,7 +260,7 @@ Sets the used MX value of <em class="parameter"><code>resource_browser</code></e
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-browser-get-active"></a><h3>gssdp_resource_browser_get_active ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span>            gssdp_resource_browser_get_active   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gssdp_resource_browser_get_active   (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -275,12 +276,36 @@ Sets the used MX value of <em class="parameter"><code>resource_browser</code></e
 </tbody>
 </table></div>
 </div>
+<hr>
+<div class="refsect2">
+<a name="gssdp-resource-browser-rescan"></a><h3>gssdp_resource_browser_rescan ()</h3>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gssdp_resource_browser_rescan       (<em class="parameter"><code><a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser</code></em>);</pre>
+<p>
+Begins discovery if <em class="parameter"><code>resource_browser</code></em> is active and no discovery is
+performed. Otherwise does nothing.
+</p>
+<div class="variablelist"><table border="0">
+<col align="left" valign="top">
+<tbody>
+<tr>
+<td><p><span class="term"><em class="parameter"><code>resource_browser</code></em> :</span></p></td>
+<td>A <a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a>
+</td>
+</tr>
+<tr>
+<td><p><span class="term"><span class="emphasis"><em>Returns</em></span> :</span></p></td>
+<td>
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Standard-Macros.html#TRUE:CAPS"><code class="literal">TRUE</code></a> if rescaning has been started.</td>
+</tr>
+</tbody>
+</table></div>
+</div>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceBrowser.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GSSDPResourceBrowser--active"></a><h3>The <code class="literal">"active"</code> property</h3>
-<pre class="programlisting">  "active"                   <span class="type">gboolean</span>              : Read / Write</pre>
+<pre class="programlisting">  "active"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
 <p>
 Whether this browser is active or not.
 </p>
@@ -297,7 +322,7 @@ The <a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="typ
 <hr>
 <div class="refsect2">
 <a name="GSSDPResourceBrowser--mx"></a><h3>The <code class="literal">"mx"</code> property</h3>
-<pre class="programlisting">  "mx"                       <span class="type">guint</span>                 : Read / Write</pre>
+<pre class="programlisting">  "mx"                       <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
 <p>
 The maximum number of seconds in which to request other parties
 to respond.
@@ -308,7 +333,7 @@ to respond.
 <hr>
 <div class="refsect2">
 <a name="GSSDPResourceBrowser--target"></a><h3>The <code class="literal">"target"</code> property</h3>
-<pre class="programlisting">  "target"                   <span class="type">gchar</span>*                : Read / Write</pre>
+<pre class="programlisting">  "target"                   <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>*                : Read / Write</pre>
 <p>
 The discovery target.
 </p>
@@ -320,9 +345,9 @@ The discovery target.
 <div class="refsect2">
 <a name="GSSDPResourceBrowser-resource-available"></a><h3>The <code class="literal">"resource-available"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser,
-                                                        <span class="type">gchar</span>                *usn,
-                                                        <span class="type">gpointer</span>              locations,
-                                                        <span class="type">gpointer</span>              user_data)             : <code class="literal">Run Last</code></pre>
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>                *usn,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>              locations,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>              user_data)             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 The ::resource-available signal is emitted whenever a new resource
 has become available.
@@ -341,7 +366,7 @@ signal</td>
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>locations</code></em> :</span></p></td>
-<td>A <span class="type">GList</span> of strings describing the locations of the
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of strings describing the locations of the
 discovered resource. <span class="annotation">[<acronym title="Override the parsed C type with given type"><span class="acronym">type</span></acronym> GList*][<acronym title="Don't free data after the code is done."><span class="acronym">transfer none</span></acronym>][<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
 </td>
 </tr>
@@ -356,8 +381,8 @@ discovered resource. <span class="annotation">[<acronym title="Override the pars
 <div class="refsect2">
 <a name="GSSDPResourceBrowser-resource-unavailable"></a><h3>The <code class="literal">"resource-unavailable"</code> signal</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                user_function                      (<a class="link" href="GSSDPResourceBrowser.html" title="GSSDPResourceBrowser"><span class="type">GSSDPResourceBrowser</span></a> *resource_browser,
-                                                        <span class="type">gchar</span>                *usn,
-                                                        <span class="type">gpointer</span>              user_data)             : <code class="literal">Run Last</code></pre>
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gchar"><span class="type">gchar</span></a>                *usn,
+                                                        <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gpointer"><span class="type">gpointer</span></a>              user_data)             : <a href="http://library.gnome.org/devel/gobject/unstable/gobject-Signals.html#G-SIGNAL-RUN-LAST:CAPS"><code class="literal">Run Last</code></a></pre>
 <p>
 The ::resource-unavailable signal is emitted whenever a resource
 is not available any more.
index e06c645..8e966ff 100644 (file)
 <a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="returnvalue">GSSDPResourceGroup</span></a> * <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-new" title="gssdp_resource_group_new ()">gssdp_resource_group_new</a>           (<em class="parameter"><code><a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a> *client</code></em>);
 <a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="returnvalue">GSSDPClient</span></a> *       <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-client" title="gssdp_resource_group_get_client ()">gssdp_resource_group_get_client</a>     (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-set-max-age" title="gssdp_resource_group_set_max_age ()">gssdp_resource_group_set_max_age</a>    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> max_age</code></em>);
-<span class="returnvalue">guint</span>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-max-age" title="gssdp_resource_group_get_max_age ()">gssdp_resource_group_get_max_age</a>    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> max_age</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-max-age" title="gssdp_resource_group_get_max_age ()">gssdp_resource_group_get_max_age</a>    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-set-available" title="gssdp_resource_group_set_available ()">gssdp_resource_group_set_available</a>  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">gboolean</span> available</code></em>);
-<span class="returnvalue">gboolean</span>            <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-available" title="gssdp_resource_group_get_available ()">gssdp_resource_group_get_available</a>  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> available</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-available" title="gssdp_resource_group_get_available ()">gssdp_resource_group_get_available</a>  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-set-message-delay" title="gssdp_resource_group_set_message_delay ()">gssdp_resource_group_set_message_delay</a>
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> message_delay</code></em>);
-<span class="returnvalue">guint</span>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-message-delay" title="gssdp_resource_group_get_message_delay ()">gssdp_resource_group_get_message_delay</a>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> message_delay</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-get-message-delay" title="gssdp_resource_group_get_message_delay ()">gssdp_resource_group_get_message_delay</a>
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);
-<span class="returnvalue">guint</span>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-add-resource" title="gssdp_resource_group_add_resource ()">gssdp_resource_group_add_resource</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-add-resource" title="gssdp_resource_group_add_resource ()">gssdp_resource_group_add_resource</a>   (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *target</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *usn</code></em>,
-                                                         <em class="parameter"><code><span class="type">GList</span> *locations</code></em>);
-<span class="returnvalue">guint</span>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-add-resource-simple" title="gssdp_resource_group_add_resource_simple ()">gssdp_resource_group_add_resource_simple</a>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *locations</code></em>);
+<a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-add-resource-simple" title="gssdp_resource_group_add_resource_simple ()">gssdp_resource_group_add_resource_simple</a>
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *target</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *usn</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *location</code></em>);
 <span class="returnvalue">void</span>                <a class="link" href="GSSDPResourceGroup.html#gssdp-resource-group-remove-resource" title="gssdp_resource_group_remove_resource ()">gssdp_resource_group_remove_resource</a>
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> resource_id</code></em>);
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> resource_id</code></em>);
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceGroup.object-hierarchy"></a><h2>Object Hierarchy</h2>
 <pre class="synopsis">
-  GObject
+  <a href="http://library.gnome.org/devel/gobject/unstable/gobject-The-Base-Object-Type.html#GObject">GObject</a>
    +----GSSDPResourceGroup
 </pre>
 </div>
 <div class="refsect1">
 <a name="GSSDPResourceGroup.properties"></a><h2>Properties</h2>
 <pre class="synopsis">
-  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--available" title='The "available" property'>available</a>"                <span class="type">gboolean</span>              : Read / Write
+  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--available" title='The "available" property'>available</a>"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write
   "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--client" title='The "client" property'>client</a>"                   <a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="type">GSSDPClient</span></a>*          : Read / Write / Construct Only
-  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--max-age" title='The "max-age" property'>max-age</a>"                  <span class="type">guint</span>                 : Read / Write
-  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--message-delay" title='The "message-delay" property'>message-delay</a>"            <span class="type">guint</span>                 : Read / Write
+  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--max-age" title='The "max-age" property'>max-age</a>"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
+  "<a class="link" href="GSSDPResourceGroup.html#GSSDPResourceGroup--message-delay" title='The "message-delay" property'>message-delay</a>"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write
 </pre>
 </div>
 <div class="refsect1">
@@ -143,7 +143,7 @@ service as multiple SSDP resources (UPnP does this for example).
 <div class="refsect2">
 <a name="gssdp-resource-group-set-max-age"></a><h3>gssdp_resource_group_set_max_age ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_group_set_max_age    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> max_age</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> max_age</code></em>);</pre>
 <p>
 Sets the number of seconds advertisements are valid to <em class="parameter"><code>max_age</code></em>.
 </p>
@@ -165,7 +165,7 @@ Sets the number of seconds advertisements are valid to <em class="parameter"><co
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-group-get-max-age"></a><h3>gssdp_resource_group_get_max_age ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint</span>               gssdp_resource_group_get_max_age    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gssdp_resource_group_get_max_age    (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -185,7 +185,7 @@ Sets the number of seconds advertisements are valid to <em class="parameter"><co
 <div class="refsect2">
 <a name="gssdp-resource-group-set-available"></a><h3>gssdp_resource_group_set_available ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_group_set_available  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">gboolean</span> available</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a> available</code></em>);</pre>
 <p>
 Sets <em class="parameter"><code>resource_group</code></em>s availability to <em class="parameter"><code>available</code></em>. Changing
 <em class="parameter"><code>resource_group</code></em>s availability causes it to announce its new state
@@ -209,7 +209,7 @@ to listening SSDP clients.
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-group-get-available"></a><h3>gssdp_resource_group_get_available ()</h3>
-<pre class="programlisting"><span class="returnvalue">gboolean</span>            gssdp_resource_group_get_available  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);</pre>
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="returnvalue">gboolean</span></a>            gssdp_resource_group_get_available  (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
 <tbody>
@@ -230,7 +230,7 @@ to listening SSDP clients.
 <a name="gssdp-resource-group-set-message-delay"></a><h3>gssdp_resource_group_set_message_delay ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_group_set_message_delay
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> message_delay</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> message_delay</code></em>);</pre>
 <p>
 Sets the minimum time between each SSDP message.
 </p>
@@ -252,7 +252,7 @@ Sets the minimum time between each SSDP message.
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-group-get-message-delay"></a><h3>gssdp_resource_group_get_message_delay ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint</span>               gssdp_resource_group_get_message_delay
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gssdp_resource_group_get_message_delay
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>);</pre>
 <div class="variablelist"><table border="0">
 <col align="left" valign="top">
@@ -272,10 +272,10 @@ Sets the minimum time between each SSDP message.
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-group-add-resource"></a><h3>gssdp_resource_group_add_resource ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint</span>               gssdp_resource_group_add_resource   (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gssdp_resource_group_add_resource   (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *target</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *usn</code></em>,
-                                                         <em class="parameter"><code><span class="type">GList</span> *locations</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> *locations</code></em>);</pre>
 <p>
 Adds a resource with target <em class="parameter"><code>target</code></em>, USN <em class="parameter"><code>usn</code></em>, and locations <em class="parameter"><code>locations</code></em>
 to <em class="parameter"><code>resource_group</code></em>.
@@ -298,7 +298,7 @@ to <em class="parameter"><code>resource_group</code></em>.
 </tr>
 <tr>
 <td><p><span class="term"><em class="parameter"><code>locations</code></em> :</span></p></td>
-<td>A <span class="type">GList</span> of the resource's locations. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
+<td>A <a href="http://library.gnome.org/devel/glib/unstable/glib-Doubly-Linked-Lists.html#GList"><span class="type">GList</span></a> of the resource's locations. <span class="annotation">[<acronym title="Generics and defining elements of containers and arrays."><span class="acronym">element-type</span></acronym> utf8]</span>
 </td>
 </tr>
 <tr>
@@ -311,7 +311,7 @@ to <em class="parameter"><code>resource_group</code></em>.
 <hr>
 <div class="refsect2">
 <a name="gssdp-resource-group-add-resource-simple"></a><h3>gssdp_resource_group_add_resource_simple ()</h3>
-<pre class="programlisting"><span class="returnvalue">guint</span>               gssdp_resource_group_add_resource_simple
+<pre class="programlisting"><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="returnvalue">guint</span></a>               gssdp_resource_group_add_resource_simple
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *target</code></em>,
                                                          <em class="parameter"><code>const <span class="type">char</span> *usn</code></em>,
@@ -352,7 +352,7 @@ to <em class="parameter"><code>resource_group</code></em>.
 <a name="gssdp-resource-group-remove-resource"></a><h3>gssdp_resource_group_remove_resource ()</h3>
 <pre class="programlisting"><span class="returnvalue">void</span>                gssdp_resource_group_remove_resource
                                                         (<em class="parameter"><code><a class="link" href="GSSDPResourceGroup.html" title="GSSDPResourceGroup"><span class="type">GSSDPResourceGroup</span></a> *resource_group</code></em>,
-                                                         <em class="parameter"><code><span class="type">guint</span> resource_id</code></em>);</pre>
+                                                         <em class="parameter"><code><a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a> resource_id</code></em>);</pre>
 <p>
 Removes the resource with ID <em class="parameter"><code>resource_id</code></em> from <em class="parameter"><code>resource_group</code></em>.
 </p>
@@ -376,7 +376,7 @@ Removes the resource with ID <em class="parameter"><code>resource_id</code></em>
 <a name="GSSDPResourceGroup.property-details"></a><h2>Property Details</h2>
 <div class="refsect2">
 <a name="GSSDPResourceGroup--available"></a><h3>The <code class="literal">"available"</code> property</h3>
-<pre class="programlisting">  "available"                <span class="type">gboolean</span>              : Read / Write</pre>
+<pre class="programlisting">  "available"                <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#gboolean"><span class="type">gboolean</span></a>              : Read / Write</pre>
 <p>
 Whether this group of resources is available or not.
 </p>
@@ -393,7 +393,7 @@ The <a class="link" href="GSSDPClient.html" title="GSSDPClient"><span class="typ
 <hr>
 <div class="refsect2">
 <a name="GSSDPResourceGroup--max-age"></a><h3>The <code class="literal">"max-age"</code> property</h3>
-<pre class="programlisting">  "max-age"                  <span class="type">guint</span>                 : Read / Write</pre>
+<pre class="programlisting">  "max-age"                  <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
 <p>
 The number of seconds our advertisements are valid.
 </p>
@@ -402,7 +402,7 @@ The number of seconds our advertisements are valid.
 <hr>
 <div class="refsect2">
 <a name="GSSDPResourceGroup--message-delay"></a><h3>The <code class="literal">"message-delay"</code> property</h3>
-<pre class="programlisting">  "message-delay"            <span class="type">guint</span>                 : Read / Write</pre>
+<pre class="programlisting">  "message-delay"            <a href="http://library.gnome.org/devel/glib/unstable/glib-Basic-Types.html#guint"><span class="type">guint</span></a>                 : Read / Write</pre>
 <p>
 The minimum number of milliseconds between SSDP messages.
 The default is 120 based on DLNA specification.
index 420875e..46a8325 100644 (file)
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp2512832"></a>GSSDP</h2></div></div></div>
+<a name="idp4153152"></a>GSSDP</h2></div></div></div>
 <div class="toc"><dl>
 <dt>
 <span class="refentrytitle"><a href="GSSDPClient.html">GSSDPClient</a></span><span class="refpurpose"> â€” SSDP "bus" wrapper.</span>
index aa9248c..097080a 100644 (file)
@@ -27,6 +27,7 @@
     <keyword type="property" name="The &quot;main-context&quot; property" link="GSSDPClient.html#GSSDPClient--main-context"/>
     <keyword type="property" name="The &quot;network&quot; property" link="GSSDPClient.html#GSSDPClient--network"/>
     <keyword type="property" name="The &quot;server-id&quot; property" link="GSSDPClient.html#GSSDPClient--server-id"/>
+    <keyword type="property" name="The &quot;socket-ttl&quot; property" link="GSSDPClient.html#GSSDPClient--socket-ttl"/>
     <keyword type="signal" name="The &quot;message-received&quot; signal" link="GSSDPClient.html#GSSDPClient-message-received"/>
     <keyword type="struct" name="struct GSSDPResourceBrowser" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser-struct"/>
     <keyword type="macro" name="GSSDP_ALL_RESOURCES" link="GSSDPResourceBrowser.html#GSSDP-ALL-RESOURCES:CAPS"/>
@@ -38,6 +39,7 @@
     <keyword type="function" name="gssdp_resource_browser_get_mx ()" link="GSSDPResourceBrowser.html#gssdp-resource-browser-get-mx"/>
     <keyword type="function" name="gssdp_resource_browser_set_active ()" link="GSSDPResourceBrowser.html#gssdp-resource-browser-set-active"/>
     <keyword type="function" name="gssdp_resource_browser_get_active ()" link="GSSDPResourceBrowser.html#gssdp-resource-browser-get-active"/>
+    <keyword type="function" name="gssdp_resource_browser_rescan ()" link="GSSDPResourceBrowser.html#gssdp-resource-browser-rescan"/>
     <keyword type="property" name="The &quot;active&quot; property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--active"/>
     <keyword type="property" name="The &quot;client&quot; property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--client"/>
     <keyword type="property" name="The &quot;mx&quot; property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--mx"/>
index 75dfae6..8f8dddc 100644 (file)
 <div class="titlepage">
 <div>
 <div><table class="navigation" id="top" width="100%" cellpadding="2" cellspacing="0"><tr><th valign="middle"><p class="title">GSSDP Reference Manual</p></th></tr></table></div>
-<div><p class="releaseinfo">Version 0.13.1
+<div><p class="releaseinfo">Version 0.14.2
 
         <a class="ulink" href="http://developer.gnome.org/gssdp/stable/" target="_top">http://developer.gnome.org/gssdp/stable/</a>
     </p></div>
 <div><p class="copyright">Copyright Â© 2007 OpenedHand LTD</p></div>
 <div><p class="copyright">Copyright Â© 2009, 2010, 2011 Nokia Corporation</p></div>
 <div><div class="legalnotice">
-<a name="idp264568"></a><p>
+<a name="idp897248"></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
index 2e7411b..d5fde34 100644 (file)
@@ -28,6 +28,7 @@
 <ANCHOR id="GSSDPClient--main-context" href="gssdp/GSSDPClient.html#GSSDPClient--main-context">
 <ANCHOR id="GSSDPClient--network" href="gssdp/GSSDPClient.html#GSSDPClient--network">
 <ANCHOR id="GSSDPClient--server-id" href="gssdp/GSSDPClient.html#GSSDPClient--server-id">
+<ANCHOR id="GSSDPClient--socket-ttl" href="gssdp/GSSDPClient.html#GSSDPClient--socket-ttl">
 <ANCHOR id="GSSDPClient.signal-details" href="gssdp/GSSDPClient.html#GSSDPClient.signal-details">
 <ANCHOR id="GSSDPClient-message-received" href="gssdp/GSSDPClient.html#GSSDPClient-message-received">
 <ANCHOR id="GSSDPResourceBrowser" href="gssdp/GSSDPResourceBrowser.html">
@@ -47,6 +48,7 @@
 <ANCHOR id="gssdp-resource-browser-get-mx" href="gssdp/GSSDPResourceBrowser.html#gssdp-resource-browser-get-mx">
 <ANCHOR id="gssdp-resource-browser-set-active" href="gssdp/GSSDPResourceBrowser.html#gssdp-resource-browser-set-active">
 <ANCHOR id="gssdp-resource-browser-get-active" href="gssdp/GSSDPResourceBrowser.html#gssdp-resource-browser-get-active">
+<ANCHOR id="gssdp-resource-browser-rescan" href="gssdp/GSSDPResourceBrowser.html#gssdp-resource-browser-rescan">
 <ANCHOR id="GSSDPResourceBrowser.property-details" href="gssdp/GSSDPResourceBrowser.html#GSSDPResourceBrowser.property-details">
 <ANCHOR id="GSSDPResourceBrowser--active" href="gssdp/GSSDPResourceBrowser.html#GSSDPResourceBrowser--active">
 <ANCHOR id="GSSDPResourceBrowser--client" href="gssdp/GSSDPResourceBrowser.html#GSSDPResourceBrowser--client">
index 5a0a47d..10f0269 100644 (file)
@@ -69,6 +69,11 @@ GSSDPClient
 
 </para>
 
+<!-- ##### ARG GSSDPClient:socket-ttl ##### -->
+<para>
+
+</para>
+
 <!-- ##### FUNCTION gssdp_client_new ##### -->
 <para>
 
index a61c129..7455aab 100644 (file)
@@ -145,3 +145,12 @@ GSSDPResourceBrowser
 @Returns: 
 
 
+<!-- ##### FUNCTION gssdp_resource_browser_rescan ##### -->
+<para>
+
+</para>
+
+@resource_browser: 
+@Returns: 
+
+
index c317a91..e867cc2 100644 (file)
@@ -1 +1 @@
-0.13.1
+0.14.2
index c96286d..9770035 100644 (file)
@@ -84,17 +84,26 @@ G_DEFINE_TYPE_EXTENDED (GSSDPClient,
                                 (G_TYPE_INITABLE,
                                  gssdp_client_initable_iface_init));
 
+struct _GSSDPNetworkDevice {
+        char *iface_name;
+        char *host_ip;
+        char *network;
+        struct sockaddr_in mask;
+};
+typedef struct _GSSDPNetworkDevice GSSDPNetworkDevice;
+
 struct _GSSDPClientPrivate {
         char              *server_id;
-        char              *iface;
-        char              *host_ip;
-        char              *network;
+
+        guint              socket_ttl;
+        GSSDPNetworkDevice device;
 
         GSSDPSocketSource *request_socket;
         GSSDPSocketSource *multicast_socket;
         GSSDPSocketSource *search_socket;
 
         gboolean           active;
+        gboolean           initialized;
 };
 
 enum {
@@ -104,7 +113,8 @@ enum {
         PROP_IFACE,
         PROP_NETWORK,
         PROP_HOST_IP,
-        PROP_ACTIVE
+        PROP_ACTIVE,
+        PROP_SOCKET_TTL,
 };
 
 enum {
@@ -167,6 +177,10 @@ gssdp_client_initable_init (GInitable     *initable,
 {
         GSSDPClient *client = GSSDP_CLIENT (initable);
         GError *internal_error = NULL;
+
+        if (client->priv->initialized)
+                return TRUE;
+
 #ifdef G_OS_WIN32
         WSADATA wsaData = {0};
         if (WSAStartup (MAKEWORD (2,2), &wsaData) != 0) {
@@ -191,6 +205,7 @@ gssdp_client_initable_init (GInitable     *initable,
         client->priv->request_socket =
                 gssdp_socket_source_new (GSSDP_SOCKET_SOURCE_TYPE_REQUEST,
                                          gssdp_client_get_host_ip (client),
+                                         client->priv->socket_ttl,
                                          &internal_error);
         if (client->priv->request_socket != NULL) {
                 gssdp_socket_source_set_callback
@@ -204,6 +219,7 @@ gssdp_client_initable_init (GInitable     *initable,
         client->priv->multicast_socket =
                 gssdp_socket_source_new (GSSDP_SOCKET_SOURCE_TYPE_MULTICAST,
                                          gssdp_client_get_host_ip (client),
+                                         client->priv->socket_ttl,
                                          &internal_error);
         if (client->priv->multicast_socket != NULL) {
                 gssdp_socket_source_set_callback
@@ -219,6 +235,7 @@ gssdp_client_initable_init (GInitable     *initable,
         client->priv->search_socket = gssdp_socket_source_new
                                         (GSSDP_SOCKET_SOURCE_TYPE_SEARCH,
                                          gssdp_client_get_host_ip (client),
+                                         client->priv->socket_ttl,
                                          &internal_error);
         if (client->priv->search_socket != NULL) {
                 gssdp_socket_source_set_callback
@@ -257,6 +274,8 @@ gssdp_client_initable_init (GInitable     *initable,
         gssdp_socket_source_attach (client->priv->multicast_socket);
         gssdp_socket_source_attach (client->priv->search_socket);
 
+        client->priv->initialized = TRUE;
+
         return TRUE;
 }
 
@@ -299,6 +318,9 @@ gssdp_client_get_property (GObject    *object,
         case PROP_ACTIVE:
                 g_value_set_boolean (value, client->priv->active);
                 break;
+        case PROP_SOCKET_TTL:
+                g_value_set_uint (value, client->priv->socket_ttl);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
                 break;
@@ -326,14 +348,17 @@ gssdp_client_set_property (GObject      *object,
                                    " Please use g_main_context_push_thread_default()");
                 break;
         case PROP_IFACE:
-                client->priv->iface = g_value_dup_string (value);
+                client->priv->device.iface_name = g_value_dup_string (value);
                 break;
         case PROP_NETWORK:
-                client->priv->network = g_value_dup_string (value);
+                client->priv->device.network = g_value_dup_string (value);
                 break;
         case PROP_ACTIVE:
                 client->priv->active = g_value_get_boolean (value);
                 break;
+        case PROP_SOCKET_TTL:
+                client->priv->socket_ttl = g_value_get_uint (value);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
                 break;
@@ -377,9 +402,9 @@ gssdp_client_finalize (GObject *object)
 #endif
 
         g_free (client->priv->server_id);
-        g_free (client->priv->iface);
-        g_free (client->priv->host_ip);
-        g_free (client->priv->network);
+        g_free (client->priv->device.iface_name);
+        g_free (client->priv->device.host_ip);
+        g_free (client->priv->device.network);
 
         G_OBJECT_CLASS (gssdp_client_parent_class)->finalize (object);
 }
@@ -516,6 +541,26 @@ gssdp_client_class_init (GSSDPClientClass *klass)
                           G_PARAM_STATIC_BLURB));
 
         /**
+         * GSSDPClient:socket-ttl:
+         *
+         * Time-to-live value to use for all sockets created by this client.
+         * If not set (or set to 0) the value recommended by UPnP will be used.
+         * This property can only be set during object construction.
+         */
+        g_object_class_install_property
+                (object_class,
+                 PROP_SOCKET_TTL,
+                 g_param_spec_uint
+                        ("socket-ttl",
+                         "Socket TTL",
+                         "Time To Live for client's sockets",
+                         0, 255,
+                         0,
+                         G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
+                         G_PARAM_STATIC_BLURB));
+
+        /**
          * GSSDPClient::message-received: (skip)
          *
          * Internal signal.
@@ -629,7 +674,7 @@ gssdp_client_get_interface (GSSDPClient *client)
 {
         g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
 
-        return client->priv->iface;
+        return client->priv->device.iface_name;
 }
 
 /**
@@ -645,7 +690,7 @@ gssdp_client_get_host_ip (GSSDPClient *client)
 {
         g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
 
-        return client->priv->host_ip;
+        return client->priv->device.host_ip;
 }
 
 /**
@@ -661,13 +706,13 @@ gssdp_client_set_network (GSSDPClient *client,
 {
         g_return_if_fail (GSSDP_IS_CLIENT (client));
 
-        if (client->priv->network) {
-                g_free (client->priv->network);
-                client->priv->network = NULL;
+        if (client->priv->device.network) {
+                g_free (client->priv->device.network);
+                client->priv->device.network = NULL;
         }
 
         if (network)
-                client->priv->network = g_strdup (network);
+                client->priv->device.network = g_strdup (network);
 
         g_object_notify (G_OBJECT (client), "network");
 }
@@ -685,7 +730,7 @@ gssdp_client_get_network (GSSDPClient *client)
 {
         g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
 
-        return client->priv->network;
+        return client->priv->device.network;
 }
 
 /**
@@ -878,20 +923,6 @@ parse_http_response (char                *buf,
         }
 }
 
-#ifdef G_OS_WIN32
-static in_addr_t
-inet_netof (struct in_addr in) {
-        in_addr_t i = ntohl(in.s_addr);
-
-        if (IN_CLASSA (i))
-            return (((i) & IN_CLASSA_NET) >> IN_CLASSA_NSHIFT);
-        else if (IN_CLASSB (i))
-            return (((i) & IN_CLASSB_NET) >> IN_CLASSB_NSHIFT);
-        else
-            return (((i) & IN_CLASSC_NET) >> IN_CLASSC_NSHIFT);
-}
-#endif
-
 /*
  * Called when data can be read from the socket
  */
@@ -908,9 +939,8 @@ socket_source_cb (GSSDPSocketSource *socket_source, GSSDPClient *client)
         char *ip_string = NULL;
         guint16 port;
         GError *error = NULL;
-        in_addr_t recv_network;
-        in_addr_t our_network;
-        struct in_addr our_addr;
+        in_addr_t our_addr;
+        in_addr_t mask;
         struct sockaddr_in addr;
 
         /* Get Socket */
@@ -945,10 +975,10 @@ socket_source_cb (GSSDPSocketSource *socket_source, GSSDPClient *client)
                 goto out;
         }
 
-        recv_network = inet_netof (addr.sin_addr);
-        our_addr.s_addr = inet_addr (gssdp_client_get_host_ip (client));
-        our_network = inet_netof (our_addr);
-        if (recv_network != our_network)
+        mask = client->priv->device.mask.sin_addr.s_addr;
+        our_addr = inet_addr (gssdp_client_get_host_ip (client));
+
+        if ((addr.sin_addr.s_addr & mask) != (our_addr & mask))
                 goto out;
 
         if (bytes >= BUF_SIZE) {
@@ -1107,11 +1137,10 @@ extract_address_and_prefix (PIP_ADAPTER_UNICAST_ADDRESS  adapter,
  * appropriately.
  */
 
-static char *
-get_host_ip (char **iface, char **network)
+static gboolean
+get_host_ip (GSSDPNetworkDevice *device)
 {
 #ifdef G_OS_WIN32
-        char *addr = NULL;
         GList *up_ifaces = NULL, *ifaceptr = NULL;
         ULONG flags = GAA_FLAG_INCLUDE_PREFIX |
                       GAA_FLAG_SKIP_DNS_SERVER |
@@ -1144,8 +1173,8 @@ get_host_ip (char **iface, char **network)
                         if (adapter->IfType == IF_TYPE_PPP)
                                 continue;
 
-                        if (*iface != NULL &&
-                            strcmp (*iface, adapter->AdapterName) != 0)
+                        if (device->iface_name != NULL &&
+                            strcmp (device->iface_name, adapter->AdapterName) != 0)
                                 continue;
 
                         /* I think that IPv6 is done via pseudo-adapters, so
@@ -1174,28 +1203,35 @@ get_host_ip (char **iface, char **network)
                 adapter = (PIP_ADAPTER_ADDRESSES) ifaceptr->data;
                 address = adapter->FirstUnicastAddress;
 
-                switch (address->Address.lpSockaddr->sa_family) {
-                        case AF_INET:
-                        case AF_INET6:
-                                if (extract_address_and_prefix (
-                                         address,
-                                         adapter->FirstPrefix,
-                                         ip,
-                                         prefix)) {
-                                        p = ip;
-                                        q = prefix;
-                                }
-                                break;
-                        default:
-                                continue;
+                if (address->Address.lpSockaddr->sa_family != AF_INET)
+                        continue;
+
+                if (extract_address_and_prefix (address,
+                                                adapter->FirstPrefix,
+                                                ip,
+                                                prefix)) {
+                                                p = ip;
+                                                q = prefix;
                 }
 
                 if (p != NULL) {
-                        addr = g_strdup (p);
-                        if (*iface == NULL)
-                                *iface = g_strdup (adapter->AdapterName);
-                        if (*network == NULL)
-                                *network = g_strdup (q);
+                        device->host_ip = g_strdup (p);
+                        /* This relies on the compiler doing an arithmetic
+                         * shift here!
+                         */
+                        gint32 mask = 0;
+                        if (adapter->FirstPrefix->PrefixLength > 0) {
+                                mask = (gint32) 0x80000000;
+                                mask >>= adapter->FirstPrefix->PrefixLength - 1;
+                        }
+                        device->mask.sin_family = AF_INET;
+                        device->mask.sin_port = 0;
+                        device->mask.sin_addr.s_addr = htonl ((guint32) mask);
+
+                        if (device->iface_name == NULL)
+                                device->iface_name = g_strdup (adapter->AdapterName);
+                        if (device->network == NULL)
+                                device->network = g_strdup (q);
                         break;
                 }
 
@@ -1203,27 +1239,26 @@ get_host_ip (char **iface, char **network)
         g_list_free (up_ifaces);
         g_free (adapters_addresses);
 
-        return addr;
+        return TRUE;
 #else
         struct ifaddrs *ifa_list, *ifa;
-        char *ret;
         GList *up_ifaces, *ifaceptr;
 
-        ret = NULL;
         up_ifaces = NULL;
 
         if (getifaddrs (&ifa_list) != 0) {
                 g_error ("Failed to retrieve list of network interfaces:\n%s\n",
                          strerror (errno));
 
-                return NULL;
+                return FALSE;
         }
 
         for (ifa = ifa_list; ifa != NULL; ifa = ifa->ifa_next) {
                 if (ifa->ifa_addr == NULL)
                         continue;
 
-                if (*iface && strcmp (*iface, ifa->ifa_name) != 0)
+                if (device->iface_name &&
+                    strcmp (device->iface_name, ifa->ifa_name) != 0)
                         continue;
                 else if (!(ifa->ifa_flags & IFF_UP))
                         continue;
@@ -1244,59 +1279,38 @@ get_host_ip (char **iface, char **network)
                 char ip[INET6_ADDRSTRLEN];
                 char net[INET6_ADDRSTRLEN];
                 const char *p, *q;
-                int i = 0;
                 struct sockaddr_in *s4, *s4_mask;
-                struct sockaddr_in6 *s6, *s6_mask;
                 struct in_addr net_addr;
-                struct in6_addr net6_addr;
-
-                p = NULL;
 
                 ifa = ifaceptr->data;
 
-                switch (ifa->ifa_addr->sa_family) {
-                case AF_INET:
-                        s4 = (struct sockaddr_in *) ifa->ifa_addr;
-                        p = inet_ntop (AF_INET,
-                                       &s4->sin_addr, ip, sizeof (ip));
-                        s4_mask = (struct sockaddr_in *) ifa->ifa_netmask;
-                        net_addr.s_addr = (in_addr_t) s4->sin_addr.s_addr &
-                                          (in_addr_t) s4_mask->sin_addr.s_addr;
-                        q = inet_ntop (AF_INET, &net_addr, net, sizeof (net));
-                        break;
-                case AF_INET6:
-                        s6 = (struct sockaddr_in6 *) ifa->ifa_addr;
-                        p = inet_ntop (AF_INET6,
-                                       &s6->sin6_addr, ip, sizeof (ip));
-                        s6_mask = (struct sockaddr_in6 *) ifa->ifa_netmask;
-                        /* FIXME: Is this the right way to calculate this? */
-                        /* FIXME: Does this work on big endian machines? */
-                        for (i = 0; i < 16; ++i) {
-                                net6_addr.s6_addr[i] =
-                                        s6->sin6_addr.s6_addr[i] &
-                                        s6_mask->sin6_addr.s6_addr[i];
-                        }
-                        q = inet_ntop (AF_INET6, &net6_addr, net, sizeof (net));
-                        break;
-                default:
-                        continue; /* Unknown: ignore */
+                if (ifa->ifa_addr->sa_family != AF_INET) {
+                        continue;
                 }
 
-                if (p != NULL) {
-                        ret = g_strdup (p);
-
-                        if (*iface == NULL)
-                                *iface = g_strdup (ifa->ifa_name);
-                        if (*network == NULL)
-                                *network = g_strdup (q);
-                        break;
-                }
+                s4 = (struct sockaddr_in *) ifa->ifa_addr;
+                p = inet_ntop (AF_INET,
+                               &s4->sin_addr,
+                               ip,
+                               sizeof (ip));
+                device->host_ip = g_strdup (p);
+                s4_mask = (struct sockaddr_in *) ifa->ifa_netmask;
+                memcpy (&(device->mask), s4_mask, sizeof (struct sockaddr_in));
+                net_addr.s_addr = (in_addr_t) s4->sin_addr.s_addr &
+                                  (in_addr_t) s4_mask->sin_addr.s_addr;
+                q = inet_ntop (AF_INET, &net_addr, net, sizeof (net));
+
+                if (device->iface_name == NULL)
+                        device->iface_name = g_strdup (ifa->ifa_name);
+                if (device->network == NULL)
+                        device->network = g_strdup (q);
+                break;
         }
 
         g_list_free (up_ifaces);
         freeifaddrs (ifa_list);
 
-        return ret;
+        return TRUE;
 #endif
 }
 
@@ -1305,24 +1319,27 @@ init_network_info (GSSDPClient *client, GError **error)
 {
         gboolean ret = TRUE;
 
-        if (client->priv->iface == NULL || client->priv->host_ip == NULL)
-                client->priv->host_ip =
-                        get_host_ip (&client->priv->iface,
-                                     &client->priv->network);
+        /* Either interface name or host_ip wasn't given during construction.
+         * If one is given, try to find the other, otherwise just pick an
+         * interface.
+         */
+        if (client->priv->device.iface_name == NULL ||
+            client->priv->device.host_ip == NULL)
+                get_host_ip (&(client->priv->device));
 
-        if (client->priv->iface == NULL) {
+        if (client->priv->device.iface_name == NULL) {
                 g_set_error_literal (error,
                                      GSSDP_ERROR,
                                      GSSDP_ERROR_FAILED,
                                      "No default route?");
 
                 ret = FALSE;
-        } else if (client->priv->host_ip == NULL) {
+        } else if (client->priv->device.host_ip == NULL) {
                         g_set_error (error,
                                      GSSDP_ERROR,
                                      GSSDP_ERROR_NO_IP_ADDRESS,
                                      "Failed to find IP of interface %s",
-                                     client->priv->iface);
+                                     client->priv->device.iface_name);
 
                 ret = FALSE;
         }
index c8208fe..b4ca354 100644 (file)
@@ -41,6 +41,7 @@
 #include "gssdp-protocol.h"
 #include "gssdp-marshal.h"
 
+#define RESCAN_TIMEOUT 5 /* 5 seconds */
 #define MAX_DISCOVERY_MESSAGES 3
 #define DISCOVERY_FREQUENCY    500 /* 500 ms */
 
@@ -65,6 +66,9 @@ struct _GSSDPResourceBrowserPrivate {
         GSource     *timeout_src;
         guint        num_discovery;
         guint        version;
+
+        GSource     *refresh_cache_src;
+        GHashTable  *fresh_resources;
 };
 
 enum {
@@ -112,6 +116,8 @@ static void
 start_discovery                  (GSSDPResourceBrowser *resource_browser);
 static void
 stop_discovery                   (GSSDPResourceBrowser *resource_browser);
+static gboolean
+refresh_cache                    (gpointer data);
 
 static void
 gssdp_resource_browser_init (GSSDPResourceBrowser *resource_browser)
@@ -582,6 +588,30 @@ gssdp_resource_browser_get_active (GSSDPResourceBrowser *resource_browser)
         return resource_browser->priv->active;
 }
 
+/**
+ * gssdp_resource_browser_rescan:
+ * @resource_browser: A #GSSDPResourceBrowser
+ *
+ * Begins discovery if @resource_browser is active and no discovery is
+ * performed. Otherwise does nothing.
+ *
+ * Return value: %TRUE if rescaning has been started.
+ **/
+gboolean
+gssdp_resource_browser_rescan (GSSDPResourceBrowser *resource_browser)
+{
+        g_return_val_if_fail (GSSDP_IS_RESOURCE_BROWSER (resource_browser), 0);
+
+        if (resource_browser->priv->active &&
+            resource_browser->priv->timeout_src == NULL &&
+            resource_browser->priv->refresh_cache_src == NULL) {
+                start_discovery (resource_browser);
+                return TRUE;
+        }
+
+        return FALSE;
+}
+
 /*
  * Resource expired: Remove
  */
@@ -652,6 +682,13 @@ resource_available (GSSDPResourceBrowser *resource_browser,
         /* Get from cache, if possible */
         resource = g_hash_table_lookup (resource_browser->priv->resources,
                                         canonical_usn);
+        /* Put usn into fresh resources, so this resource will not be
+         * removed on cache refreshing. */
+        if (resource_browser->priv->fresh_resources != NULL) {
+                g_hash_table_add (resource_browser->priv->fresh_resources,
+                                  g_strdup (canonical_usn));
+        }
+
         if (resource) {
                 /* Remove old timeout */
                 g_source_destroy (resource->timeout_src);
@@ -1032,6 +1069,18 @@ discovery_timeout (gpointer data)
                 resource_browser->priv->timeout_src = NULL;
                 resource_browser->priv->num_discovery = 0;
 
+                /* Setup cache refreshing */
+                resource_browser->priv->refresh_cache_src =
+                                  g_timeout_source_new_seconds (RESCAN_TIMEOUT);
+                g_source_set_callback
+                                     (resource_browser->priv->refresh_cache_src,
+                                      refresh_cache,
+                                      resource_browser,
+                                      NULL);
+                g_source_attach (resource_browser->priv->refresh_cache_src,
+                                 g_main_context_get_thread_default ());
+                g_source_unref (resource_browser->priv->refresh_cache_src);
+
                 return FALSE;
         } else
                 return TRUE;
@@ -1056,6 +1105,13 @@ start_discovery (GSSDPResourceBrowser *resource_browser)
                          g_main_context_get_thread_default ());
 
         g_source_unref (resource_browser->priv->timeout_src);
+
+        /* Setup a set of responsive resources for cache refreshing */
+        resource_browser->priv->fresh_resources = g_hash_table_new_full
+                                        (g_str_hash,
+                                         g_str_equal,
+                                         g_free,
+                                         NULL);
 }
 
 /* Stops the sending of discovery messages */
@@ -1067,4 +1123,50 @@ stop_discovery (GSSDPResourceBrowser *resource_browser)
                 resource_browser->priv->timeout_src = NULL;
                 resource_browser->priv->num_discovery = 0;
         }
+        if (resource_browser->priv->refresh_cache_src) {
+                g_source_destroy (resource_browser->priv->refresh_cache_src);
+                resource_browser->priv->refresh_cache_src = NULL;
+        }
+        if (resource_browser->priv->fresh_resources) {
+                g_hash_table_unref (resource_browser->priv->fresh_resources);
+                resource_browser->priv->fresh_resources = NULL;
+        }
+}
+
+static gboolean
+refresh_cache_helper (gpointer key, gpointer value, gpointer data)
+{
+        Resource *resource;
+        GHashTable *fresh_resources;
+
+        resource = value;
+        fresh_resources = data;
+
+        if (g_hash_table_contains (fresh_resources, key))
+                return FALSE;
+        else {
+                g_signal_emit (resource->resource_browser,
+                               signals[RESOURCE_UNAVAILABLE],
+                               0,
+                               resource->usn);
+
+                return TRUE;
+        }
+}
+
+/* Removes non-responsive resources */
+static gboolean
+refresh_cache (gpointer data)
+{
+        GSSDPResourceBrowser *resource_browser;
+
+        resource_browser = GSSDP_RESOURCE_BROWSER (data);
+        g_hash_table_foreach_remove (resource_browser->priv->resources,
+                                     refresh_cache_helper,
+                                     resource_browser->priv->fresh_resources);
+        g_hash_table_unref (resource_browser->priv->fresh_resources);
+        resource_browser->priv->fresh_resources = NULL;
+        resource_browser->priv->refresh_cache_src = NULL;
+
+        return FALSE;
 }
index bf98358..720074e 100644 (file)
@@ -113,6 +113,9 @@ gssdp_resource_browser_set_active (GSSDPResourceBrowser *resource_browser,
 gboolean
 gssdp_resource_browser_get_active (GSSDPResourceBrowser *resource_browser);
 
+gboolean
+gssdp_resource_browser_rescan     (GSSDPResourceBrowser *resource_browser);
+
 G_END_DECLS
 
 #endif /* __GSSDP_RESOURCE_BROWSER_H__ */
index 0c489cc..262a865 100644 (file)
@@ -44,6 +44,8 @@ G_DEFINE_TYPE (GSSDPResourceGroup,
                gssdp_resource_group,
                G_TYPE_OBJECT);
 
+#define DEFAULT_MAN_HEADER "\"ssdp:discover\""
+
 struct _GSSDPResourceGroupPrivate {
         GSSDPClient *client;
 
@@ -774,12 +776,12 @@ message_received_cb (GSSDPClient        *client,
         mx_str = soup_message_headers_get_one (headers, "MX");
         if (!mx_str || atoi (mx_str) <= 0) {
                 g_warning ("Discovery request did not have a valid MX header");
+
                 return;
         }
 
         man = soup_message_headers_get_one (headers, "MAN");
-        if (!man) {
+        if (!man || strcmp (man, DEFAULT_MAN_HEADER) != 0) {
                 g_warning ("Discovery request did not have a valid MAN header");
 
                 return;
index 2481fe2..8f4ea36 100644 (file)
@@ -157,10 +157,10 @@ gboolean
 gssdp_socket_reuse_address (GSocket *socket,
                             gboolean enable,
                             GError **error) {
-#if defined(G_OS_WIN32) || defined(__OpenBSD__)
+#if defined(G_OS_WIN32) || defined(__OpenBSD__) || defined(__NetBSD__)
         return gssdp_socket_option_set (socket,
                                         SOL_SOCKET,
-#if defined(__OpenBSD__)
+#if defined(__OpenBSD__) || defined (__NetBSD__)
                                         SO_REUSEPORT,
 #else
                                         SO_REUSEADDR,
index e51b1fe..aa32c63 100644 (file)
@@ -47,13 +47,16 @@ struct _GSSDPSocketSourcePrivate {
         GSource              *source;
         GSocket              *socket;
         GSSDPSocketSourceType type;
+
         char                 *host_ip;
+        guint                 ttl;
 };
 
 enum {
     PROP_0,
     PROP_TYPE,
-    PROP_HOST_IP
+    PROP_HOST_IP,
+    PROP_TTL,
 };
 
 static void
@@ -108,6 +111,9 @@ gssdp_socket_source_set_property (GObject          *object,
         case PROP_HOST_IP:
                 self->priv->host_ip = g_value_dup_string (value);
                 break;
+        case PROP_TTL:
+                self->priv->ttl = g_value_get_uint (value);
+                break;
         default:
                 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
                 break;
@@ -122,6 +128,7 @@ gssdp_socket_source_set_property (GObject          *object,
 GSSDPSocketSource *
 gssdp_socket_source_new (GSSDPSocketSourceType type,
                          const char           *host_ip,
+                         guint                 ttl,
                          GError              **error)
 {
         return g_initable_new (GSSDP_TYPE_SOCKET_SOURCE,
@@ -131,6 +138,8 @@ gssdp_socket_source_new (GSSDPSocketSourceType type,
                                type,
                                "host-ip",
                                host_ip,
+                               "ttl",
+                               ttl,
                                NULL);
 }
 
@@ -198,15 +207,20 @@ gssdp_socket_source_do_init (GInitable     *initable,
         }
 
         /* TTL */
+        if (!self->priv->ttl)
+                /* UDA/1.0 says 4, UDA/1.1 says 2 */
+                self->priv->ttl = 4;
+
         if (!gssdp_socket_set_ttl (self->priv->socket,
-                                   4,
+                                   self->priv->ttl,
                                    &inner_error)) {
                 g_propagate_prefixed_error (error,
                                             inner_error,
-                                            "Failed to set TTL");
+                                            "Failed to set TTL to %u", self->priv->ttl);
 
                 goto error;
         }
+
         /* Set up additional things according to the type of socket desired */
         if (self->priv->type == GSSDP_SOCKET_SOURCE_TYPE_MULTICAST) {
                 /* Enable multicast loopback */
@@ -422,4 +436,17 @@ gssdp_socket_source_class_init (GSSDPSocketSourceClass *klass)
                          G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
                          G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
                          G_PARAM_STATIC_BLURB));
+
+        g_object_class_install_property
+                (object_class,
+                 PROP_TTL,
+                 g_param_spec_uint
+                        ("ttl",
+                         "TTL",
+                         "Time To Live for the socket",
+                         0, 255,
+                         0,
+                         G_PARAM_WRITABLE | G_PARAM_CONSTRUCT_ONLY |
+                         G_PARAM_STATIC_NAME | G_PARAM_STATIC_NICK |
+                         G_PARAM_STATIC_BLURB));
 }
index d40af3e..c3bba90 100644 (file)
@@ -74,6 +74,7 @@ typedef struct _GSSDPSocketSourceClass {
 G_GNUC_INTERNAL GSSDPSocketSource *
 gssdp_socket_source_new        (GSSDPSocketSourceType  type,
                                 const char            *host_ip,
+                                guint                  ttl,
                                 GError               **error);
 G_GNUC_INTERNAL GSocket*
 gssdp_socket_source_get_socket (GSSDPSocketSource     *socket_source);
index ae9e83c..554c545 100644 (file)
@@ -1,3 +1,6 @@
+* Thu Mar 07 2013 Regis Merlino <regis.merlino@intel.com>
+- Submit version 0.14.2 of GSSDP (a39de89)
+
 * Mon Nov 26 09:40:48 CET 2012 - Mark Ryan <mark.d.ryan@intel.com>
 - Submit version 0.13.1 of GSSDP (85c939e)
 
index f5aa925..78c9f0d 100644 (file)
@@ -7,12 +7,12 @@
 
 Name:       gssdp
 Summary:    GSSDP implements resource discovery and announcement over SSDP
-Version:    0.13.1
+Version:    0.14.2
 Release:    1
 Group:      System/Libraries
 License:    LGPLv2+
 URL:        http://www.gupnp.org
-Source0:    http://download.gnome.org/sources/%{name}/0.13/%{name}-%{version}.tar.bz2
+Source0:    http://download.gnome.org/sources/%{name}/0.14/%{name}-%{version}.tar.bz2
 Requires:   dbus
 Requires:   libsoup2.4
 Requires(post): /sbin/ldconfig
index 8a8fc8d..722f058 100644 (file)
@@ -1,5 +1,5 @@
 TESTS_ENVIRONMENT = G_SLICE=debug-blocks \
-                   LD_LIBRARY_PATH=$(top_builddir)/libgssdp/.libs
+                   LD_LIBRARY_PATH=$(top_builddir)/libgssdp/.libs:$(LD_LIBRARY_PATH)
 
 TESTS=$(check_PROGRAMS)
 
index ef202cc..4d551fb 100644 (file)
@@ -271,7 +271,7 @@ top_build_prefix = @top_build_prefix@
 top_builddir = @top_builddir@
 top_srcdir = @top_srcdir@
 TESTS_ENVIRONMENT = G_SLICE=debug-blocks \
-                   LD_LIBRARY_PATH=$(top_builddir)/libgssdp/.libs
+                   LD_LIBRARY_PATH=$(top_builddir)/libgssdp/.libs:$(LD_LIBRARY_PATH)
 
 TESTS = $(check_PROGRAMS)
 noinst_LIBRARIES = libtestutil.a
index 2908b25..e263ecf 100644 (file)
@@ -489,7 +489,9 @@ test_discovery_versioned_ignore_older (void)
 
 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 ("/functional/resource-group/discovery/ssdp:all",
index 4459b28..a68e44c 100644 (file)
@@ -250,7 +250,9 @@ void test_bgo682099 (void)
 
 int main (int argc, char *argv[])
 {
+#if !GLIB_CHECK_VERSION (2, 35, 0)
         g_type_init ();
+#endif
         g_test_init (&argc, &argv, NULL);
 
         if (g_test_slow ()) {
index ac1c15b..c09b017 100644 (file)
@@ -56,7 +56,9 @@ main (int    argc,
         GError *error;
         GMainLoop *main_loop;
 
+#if !GLIB_CHECK_VERSION (2, 35, 0)
         g_type_init ();
+#endif
 
         error = NULL;
         client = g_initable_new (GSSDP_TYPE_CLIENT,
index 52c819c..601bbfb 100644 (file)
@@ -32,7 +32,9 @@ main (int    argc,
         GError *error;
         GMainLoop *main_loop;
 
+#if !GLIB_CHECK_VERSION (2, 35, 0)
         g_type_init ();
+#endif
 
         error = NULL;
         client = g_initable_new (GSSDP_TYPE_CLIENT,