+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.
#! /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>.
#
# 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/'
enable_libtool_lock
with_gtk
enable_debug
+enable_strict_c
enable_introspection
with_html_dir
enable_gtk_doc
# 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]...
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
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]]
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.
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 $@
# Define the identity of the package.
PACKAGE='gssdp'
- VERSION='0.13.1'
+ VERSION='0.14.2'
cat >>confdefs.h <<_ACEOF
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
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
_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
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
# 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
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\\"
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/])
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
[ --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
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
<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>);
<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>
<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">
<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>
<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>
<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>
<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>
<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
<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>
<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.
<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.
<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: <= 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>
<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">
<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>
<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>
<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>
<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>
</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>
<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.
<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>
<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.
</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>
<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.
<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">
<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>
<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>
<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
<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>
<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>
<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">
<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>.
</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>
<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>,
<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>
<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>
<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>
<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.
</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>
<keyword type="property" name="The "main-context" property" link="GSSDPClient.html#GSSDPClient--main-context"/>
<keyword type="property" name="The "network" property" link="GSSDPClient.html#GSSDPClient--network"/>
<keyword type="property" name="The "server-id" property" link="GSSDPClient.html#GSSDPClient--server-id"/>
+ <keyword type="property" name="The "socket-ttl" property" link="GSSDPClient.html#GSSDPClient--socket-ttl"/>
<keyword type="signal" name="The "message-received" 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"/>
<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 "active" property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--active"/>
<keyword type="property" name="The "client" property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--client"/>
<keyword type="property" name="The "mx" property" link="GSSDPResourceBrowser.html#GSSDPResourceBrowser--mx"/>
<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
<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">
<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">
</para>
+<!-- ##### ARG GSSDPClient:socket-ttl ##### -->
+<para>
+
+</para>
+
<!-- ##### FUNCTION gssdp_client_new ##### -->
<para>
@Returns:
+<!-- ##### FUNCTION gssdp_resource_browser_rescan ##### -->
+<para>
+
+</para>
+
+@resource_browser:
+@Returns:
+
+
(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 {
PROP_IFACE,
PROP_NETWORK,
PROP_HOST_IP,
- PROP_ACTIVE
+ PROP_ACTIVE,
+ PROP_SOCKET_TTL,
};
enum {
{
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) {
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
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
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
gssdp_socket_source_attach (client->priv->multicast_socket);
gssdp_socket_source_attach (client->priv->search_socket);
+ client->priv->initialized = TRUE;
+
return TRUE;
}
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;
" 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;
#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);
}
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.
{
g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
- return client->priv->iface;
+ return client->priv->device.iface_name;
}
/**
{
g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
- return client->priv->host_ip;
+ return client->priv->device.host_ip;
}
/**
{
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");
}
{
g_return_val_if_fail (GSSDP_IS_CLIENT (client), NULL);
- return client->priv->network;
+ return client->priv->device.network;
}
/**
}
}
-#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
*/
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 */
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) {
* 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 |
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
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;
}
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;
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
}
{
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;
}
#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 */
GSource *timeout_src;
guint num_discovery;
guint version;
+
+ GSource *refresh_cache_src;
+ GHashTable *fresh_resources;
};
enum {
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)
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
*/
/* 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);
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;
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 */
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;
}
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__ */
gssdp_resource_group,
G_TYPE_OBJECT);
+#define DEFAULT_MAN_HEADER "\"ssdp:discover\""
+
struct _GSSDPResourceGroupPrivate {
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;
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,
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
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;
GSSDPSocketSource *
gssdp_socket_source_new (GSSDPSocketSourceType type,
const char *host_ip,
+ guint ttl,
GError **error)
{
return g_initable_new (GSSDP_TYPE_SOCKET_SOURCE,
type,
"host-ip",
host_ip,
+ "ttl",
+ ttl,
NULL);
}
}
/* 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 */
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));
}
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);
+* 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)
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
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)
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
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",
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 ()) {
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,
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,