Update gssdp to 0.14.3 (e2f1b0d)
authorRegis Merlino <regis.merlino@intel.com>
Mon, 10 Jun 2013 12:48:55 +0000 (14:48 +0200)
committerRegis Merlino <regis.merlino@intel.com>
Mon, 10 Jun 2013 12:48:55 +0000 (14:48 +0200)
18 files changed:
NEWS
configure
configure.ac
doc/html/ch01.html
doc/html/index.html
doc/version.xml
libgssdp/gssdp-client.c
libgssdp/gssdp-resource-browser.c
libgssdp/gssdp-resource-group.c
libgssdp/gssdp-socket-functions.c
libgssdp/gssdp-socket-source.c
m4/vapigen.m4
packaging/GSSDP.spec
tests/gtest/test-util.c
tests/test-browser.c
tests/test-publish.c
tools/gssdp-device-sniffer.c
tools/gssdp-device-sniffer.ui

diff --git a/NEWS b/NEWS
index 6cf1296..eacdb9e 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,3 +1,20 @@
+0.14.3
+======
+
+- Add --interface, -i commandline option to gssdp-device-sniffer to specify a
+  network interface for it to run on.
+- Update the GSSDP device sniffer to GTK+3.
+- Depend on vapigen >= 0.20 if gobject-introspection is 1.36 or newer.
+- Some minor UI fixes in gssdp-device-sniffer.
+- Make it compile with -Wall -Wextra.
+
+All contributors to this release:
+  Jens Georg <jensg@openismus.com>
+
+Changes in dependencies:
+  Gtk+ >= 3.0
+  vapigen >= 0.20 if gobject-introspection is >= 1.36
+
 0.14.2
 ======
 
index 0ca1cc7..4f2e6e0 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.14.2.
+# Generated by GNU Autoconf 2.69 for gssdp 0.14.3.
 #
 # 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.14.2'
-PACKAGE_STRING='gssdp 0.14.2'
+PACKAGE_VERSION='0.14.3'
+PACKAGE_STRING='gssdp 0.14.3'
 PACKAGE_BUGREPORT='http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gssdp'
 PACKAGE_URL='http://www.gupnp.org/'
 
@@ -1434,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.14.2 to adapt to many kinds of systems.
+\`configure' configures gssdp 0.14.3 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1504,7 +1504,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of gssdp 0.14.2:";;
+     short | recursive ) echo "Configuration of gssdp 0.14.3:";;
    esac
   cat <<\_ACEOF
 
@@ -1635,7 +1635,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-gssdp configure 0.14.2
+gssdp configure 0.14.3
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1913,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.14.2, which was
+It was created by gssdp $as_me 0.14.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2734,7 +2734,7 @@ fi
 
 # Define the identity of the package.
  PACKAGE='gssdp'
- VERSION='0.14.2'
+ VERSION='0.14.3'
 
 
 cat >>confdefs.h <<_ACEOF
@@ -12462,7 +12462,7 @@ $as_echo "yes" >&6; }
 
 fi
 
-LIBGTK_REQUIRED=2.12.0
+LIBGTK_REQUIRED=3.0
 
 
 # Check whether --with-gtk was given.
@@ -12484,12 +12484,12 @@ if test -n "$LIBGTK_CFLAGS"; then
     pkg_cv_LIBGTK_CFLAGS="$LIBGTK_CFLAGS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$LIBGTK_REQUIRED \""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $LIBGTK_REQUIRED ") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= \$LIBGTK_REQUIRED \""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= $LIBGTK_REQUIRED ") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= $LIBGTK_REQUIRED " 2>/dev/null`
+  pkg_cv_LIBGTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-3.0 >= $LIBGTK_REQUIRED " 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -12501,12 +12501,12 @@ if test -n "$LIBGTK_LIBS"; then
     pkg_cv_LIBGTK_LIBS="$LIBGTK_LIBS"
  elif test -n "$PKG_CONFIG"; then
     if test -n "$PKG_CONFIG" && \
-    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= \$LIBGTK_REQUIRED \""; } >&5
-  ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= $LIBGTK_REQUIRED ") 2>&5
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-3.0 >= \$LIBGTK_REQUIRED \""; } >&5
+  ($PKG_CONFIG --exists --print-errors "gtk+-3.0 >= $LIBGTK_REQUIRED ") 2>&5
   ac_status=$?
   $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
   test $ac_status = 0; }; then
-  pkg_cv_LIBGTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= $LIBGTK_REQUIRED " 2>/dev/null`
+  pkg_cv_LIBGTK_LIBS=`$PKG_CONFIG --libs "gtk+-3.0 >= $LIBGTK_REQUIRED " 2>/dev/null`
                      test "x$?" != "x0" && pkg_failed=yes
 else
   pkg_failed=yes
@@ -12527,9 +12527,9 @@ else
         _pkg_short_errors_supported=no
 fi
         if test $_pkg_short_errors_supported = yes; then
-               LIBGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-2.0 >= $LIBGTK_REQUIRED " 2>&1`
+               LIBGTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "gtk+-3.0 >= $LIBGTK_REQUIRED " 2>&1`
         else
-               LIBGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-2.0 >= $LIBGTK_REQUIRED " 2>&1`
+               LIBGTK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "gtk+-3.0 >= $LIBGTK_REQUIRED " 2>&1`
         fi
        # Put the nasty error message in config.log where it belongs
        echo "$LIBGTK_PKG_ERRORS" >&5
 
 
 # vapigen
+have_vapigen=no
 if test "x$found_introspection" = "xyes"; then :
 
+              { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether G-I is 1.36 or newer" >&5
+$as_echo_n "checking whether G-I is 1.36 or newer... " >&6; }
+       VAPIGEN_MIN_VERSION=0.14
+       if pkg-config --atleast-version=1.36.0 gobject-introspection-1.0; then :
+
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+              VAPIGEN_MIN_VERSION=0.20
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+
+fi
        # Extract the first word of "vapigen", so it can be a program name with args.
 set dummy vapigen; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
   { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: No Vala API Generator found. You will not be able to generate .vapi files." >&5
 $as_echo "$as_me: WARNING: No Vala API Generator found. You will not be able to generate .vapi files." >&2;}
 else
-  if test -n "0.14"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking $VAPIGEN is at least version 0.14" >&5
-$as_echo_n "checking $VAPIGEN is at least version 0.14... " >&6; }
+  if test -n "$VAPIGEN_MIN_VERSION"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking $VAPIGEN is at least version $VAPIGEN_MIN_VERSION" >&5
+$as_echo_n "checking $VAPIGEN is at least version $VAPIGEN_MIN_VERSION... " >&6; }
          am__vapigen_version=`$VAPIGEN --version | sed 's/Vala API Generator  *//'`
-         as_arg_v1=0.14
+         as_arg_v1=$VAPIGEN_MIN_VERSION
 as_arg_v2="$am__vapigen_version"
 awk "$as_awk_strverscmp" v1="$as_arg_v1" v2="$as_arg_v2" /dev/null
 case $? in #(
@@ -12767,8 +12782,10 @@ $as_echo "yes" >&6; } ;; #(
   2) :
     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Vala API Generator 0.14 not found." >&5
-$as_echo "$as_me: WARNING: Vala API Generator 0.14 not found." >&2;} ;; #(
+            { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Vala API Generator $VAPIGEN_MIN_VERSION not found." >&5
+$as_echo "$as_me: WARNING: Vala API Generator $VAPIGEN_MIN_VERSION not found." >&2;}
+            VAPIGEN=""
+            ;; #(
   *) :
      ;;
 esac
@@ -12778,6 +12795,9 @@ fi
 
 
 fi
+if test "x$VAPIGEN" != "x"; then :
+  have_vapigen=yes
+fi
  if test "x$VAPIGEN" != "x"; then
   HAVE_VAPIGEN_TRUE=
   HAVE_VAPIGEN_FALSE='#'
@@ -12787,7 +12807,6 @@ else
 fi
 
 
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Win32" >&5
 $as_echo_n "checking for Win32... " >&6; }
 case "$host" in
@@ -13699,7 +13718,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.14.2, which was
+This file was extended by gssdp $as_me 0.14.3, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -13766,7 +13785,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.14.2
+gssdp config.status 0.14.3
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -15543,3 +15562,12 @@ if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
 fi
 
+
+echo "
+    ${PACKAGE} ${VERSION}
+    ---------------------
+
+    Prefix:                ${prefix}
+    GObject-Introspection: ${found_introspection}
+    VALA bindings:         ${have_vapigen}
+"
index 3019c0a..d0ea65a 100644 (file)
@@ -1,6 +1,6 @@
 AC_PREREQ([2.64])
 AC_INIT([gssdp],
-        [0.14.2],
+        [0.14.3],
         [http://bugzilla.gnome.org/enter_bug.cgi?product=gupnp&component=gssdp],
         [gssdp],
         [http://www.gupnp.org/])
@@ -27,7 +27,7 @@ PKG_CHECK_MODULES(LIBGSSDP, glib-2.0 >= 2.32 \
                             gio-2.0 >= 2.32 \
                             libsoup-2.4 >= 2.26.1)
 
-LIBGTK_REQUIRED=2.12.0
+LIBGTK_REQUIRED=3.0
 
 AC_ARG_WITH( gtk,
   AS_HELP_STRING([--without-gtk],[compile without gtk+ support]),
@@ -36,7 +36,7 @@ AC_ARG_WITH( gtk,
 HAVE_LIBGTK=no
 if test x$try_gtk = xyes ; then
     dnl check for gtk+
-    PKG_CHECK_MODULES(LIBGTK, gtk+-2.0 >= $LIBGTK_REQUIRED ,
+    PKG_CHECK_MODULES(LIBGTK, gtk+-3.0 >= $LIBGTK_REQUIRED ,
       [
         HAVE_LIBGTK=yes
         AC_SUBST(LIBGTK_CFLAGS)
@@ -81,14 +81,24 @@ AS_IF([test "x$[]enable_strict_c" = "xyes"],
 GOBJECT_INTROSPECTION_CHECK([0.6.7])
 
 # vapigen
+have_vapigen=no
 AS_IF([test "x$found_introspection" = "xyes"],
       [
-       VALA_PROG_VAPIGEN([0.14])
+       dnl output of g-i >= 1.36.0 needs vapigen >= 0.20 to process
+       AC_MSG_CHECKING([whether G-I is 1.36 or newer])
+       VAPIGEN_MIN_VERSION=0.14
+       AS_IF([pkg-config --atleast-version=1.36.0 gobject-introspection-1.0],
+             [
+              AC_MSG_RESULT([yes])
+              VAPIGEN_MIN_VERSION=0.20
+             ],[AC_MSG_RESULT([no])]
+       )
+       GUPNP_PROG_VAPIGEN([$VAPIGEN_MIN_VERSION])
       ]
 )
+AS_IF([test "x$VAPIGEN" != "x"], [have_vapigen=yes])
 AM_CONDITIONAL([HAVE_VAPIGEN], [test "x$VAPIGEN" != "x"])
 
-
 dnl Check for Win32
 AC_MSG_CHECKING([for Win32])
 case "$host" in
@@ -117,3 +127,12 @@ gssdp-1.0.pc
 gssdp-1.0-uninstalled.pc
 ])
 AC_OUTPUT
+
+echo "
+    ${PACKAGE} ${VERSION}
+    ---------------------
+
+    Prefix:                ${prefix}
+    GObject-Introspection: ${found_introspection}
+    VALA bindings:         ${have_vapigen}
+"
index 46a8325..47e6eb5 100644 (file)
@@ -21,7 +21,7 @@
 </tr></table>
 <div class="chapter">
 <div class="titlepage"><div><div><h2 class="title">
-<a name="idp4153152"></a>GSSDP</h2></div></div></div>
+<a name="idp898112"></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 8f8dddc..1449528 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.14.2
+<div><p class="releaseinfo">Version 0.14.3
 
         <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="idp897248"></a><p>
+<a name="idp4164416"></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 e867cc2..ac4a796 100644 (file)
@@ -1 +1 @@
-0.14.2
+0.14.3
index 9770035..048d5e6 100644 (file)
@@ -163,17 +163,17 @@ gssdp_client_init (GSSDPClient *client)
 }
 
 static void
-gssdp_client_initable_iface_init (gpointer g_iface,
-                                  gpointer iface_data)
+gssdp_client_initable_iface_init (gpointer               g_iface,
+                                  G_GNUC_UNUSED gpointer iface_data)
 {
         GInitableIface *iface = (GInitableIface *)g_iface;
         iface->init = gssdp_client_initable_init;
 }
 
 static gboolean
-gssdp_client_initable_init (GInitable     *initable,
-                            GCancellable  *cancellable,
-                            GError       **error)
+gssdp_client_initable_init (GInitable                   *initable,
+                            G_GNUC_UNUSED GCancellable  *cancellable,
+                            GError                     **error)
 {
         GSSDPClient *client = GSSDP_CLIENT (initable);
         GError *internal_error = NULL;
@@ -1052,9 +1052,9 @@ out:
 }
 
 static gboolean
-request_socket_source_cb (GIOChannel  *source,
-                          GIOCondition condition,
-                          gpointer     user_data)
+request_socket_source_cb (G_GNUC_UNUSED GIOChannel  *source,
+                          G_GNUC_UNUSED GIOCondition condition,
+                          gpointer                   user_data)
 {
         GSSDPClient *client;
 
@@ -1064,9 +1064,9 @@ request_socket_source_cb (GIOChannel  *source,
 }
 
 static gboolean
-multicast_socket_source_cb (GIOChannel  *source,
-                            GIOCondition condition,
-                            gpointer     user_data)
+multicast_socket_source_cb (G_GNUC_UNUSED GIOChannel  *source,
+                            G_GNUC_UNUSED GIOCondition condition,
+                            gpointer                   user_data)
 {
         GSSDPClient *client;
 
@@ -1076,9 +1076,9 @@ multicast_socket_source_cb (GIOChannel  *source,
 }
 
 static gboolean
-search_socket_source_cb (GIOChannel  *source,
-                         GIOCondition condition,
-                         gpointer     user_data)
+search_socket_source_cb (G_GNUC_UNUSED GIOChannel  *source,
+                         G_GNUC_UNUSED GIOCondition condition,
+                         gpointer                   user_data)
 {
         GSSDPClient *client;
 
index b4ca354..6a41e77 100644 (file)
@@ -913,7 +913,11 @@ check_target_compat (GSSDPResourceBrowser *resource_browser,
         g_free (tmp);
         g_match_info_free (info);
 
-        return version >= resource_browser->priv->version;
+        if (version < 0) {
+            return FALSE;
+        }
+
+        return (uint) version >= resource_browser->priv->version;
 }
 
 static void
@@ -964,12 +968,12 @@ received_announcement (GSSDPResourceBrowser *resource_browser,
  * Received a message
  */
 static void
-message_received_cb (GSSDPClient        *client,
-                     const char         *from_ip,
-                     gushort             from_port,
-                     _GSSDPMessageType   type,
-                     SoupMessageHeaders *headers,
-                     gpointer            user_data)
+message_received_cb (G_GNUC_UNUSED GSSDPClient *client,
+                     G_GNUC_UNUSED const char  *from_ip,
+                     G_GNUC_UNUSED gushort      from_port,
+                     _GSSDPMessageType          type,
+                     SoupMessageHeaders        *headers,
+                     gpointer                   user_data)
 {
         GSSDPResourceBrowser *resource_browser;
 
@@ -1008,7 +1012,9 @@ resource_free (gpointer data)
 }
 
 static gboolean
-clear_cache_helper (gpointer key, gpointer value, gpointer data)
+clear_cache_helper (G_GNUC_UNUSED gpointer key,
+                    gpointer               value,
+                    G_GNUC_UNUSED gpointer data)
 {
         Resource *resource;
 
index 262a865..08f2f7e 100644 (file)
@@ -738,12 +738,12 @@ resource_group_timeout (gpointer user_data)
  * Received a message
  */
 static void
-message_received_cb (GSSDPClient        *client,
-                     const char         *from_ip,
-                     gushort             from_port,
-                     _GSSDPMessageType   type,
-                     SoupMessageHeaders *headers,
-                     gpointer            user_data)
+message_received_cb (G_GNUC_UNUSED GSSDPClient *client,
+                     const char                *from_ip,
+                     gushort                    from_port,
+                     _GSSDPMessageType          type,
+                     SoupMessageHeaders        *headers,
+                     gpointer                   user_data)
 {
         GSSDPResourceGroup *resource_group;
         const char *target, *mx_str, *version_str, *man;
@@ -807,7 +807,7 @@ message_received_cb (GSSDPClient        *client,
                                     target,
                                     0,
                                     NULL) &&
-                     version <= resource->version)) {
+                     (guint) version <= resource->version)) {
                         /* Match. */
                         guint timeout;
                         DiscoveryResponse *response;
index 8f4ea36..4669f96 100644 (file)
@@ -153,6 +153,8 @@ gssdp_socket_mcast_interface_set (GSocket      *socket,
                                         error);
 }
 
+#define __GSSDP_UNUSED(x) (void)(x)
+
 gboolean
 gssdp_socket_reuse_address (GSocket *socket,
                             gboolean enable,
@@ -169,6 +171,10 @@ gssdp_socket_reuse_address (GSocket *socket,
                                         (char *) &enable,
                                         sizeof (enable),
                                         error);
+#else
+        __GSSDP_UNUSED(socket);
+        __GSSDP_UNUSED(enable);
+        __GSSDP_UNUSED(error);
 #endif
         return TRUE;
 }
index aa32c63..a59fab1 100644 (file)
@@ -73,18 +73,18 @@ gssdp_socket_source_do_init (GInitable     *initable,
                              GError       **error);
 
 static void
-gssdp_socket_source_initable_init (gpointer g_iface,
-                                   gpointer iface_data)
+gssdp_socket_source_initable_init (gpointer               g_iface,
+                                   G_GNUC_UNUSED gpointer iface_data)
 {
         GInitableIface *iface = (GInitableIface *)g_iface;
         iface->init = gssdp_socket_source_do_init;
 }
 
 static void
-gssdp_socket_source_get_property (GObject    *object,
-                                  guint       property_id,
-                                  GValue     *value,
-                                  GParamSpec *pspec)
+gssdp_socket_source_get_property (GObject              *object,
+                                  guint                 property_id,
+                                  G_GNUC_UNUSED GValue *value,
+                                  GParamSpec           *pspec)
 {
         /* All properties are construct-only, write-only */
         switch (property_id) {
@@ -144,9 +144,9 @@ gssdp_socket_source_new (GSSDPSocketSourceType type,
 }
 
 static gboolean
-gssdp_socket_source_do_init (GInitable     *initable,
-                             GCancellable  *cancellable,
-                             GError       **error)
+gssdp_socket_source_do_init (GInitable                   *initable,
+                             G_GNUC_UNUSED GCancellable  *cancellable,
+                             GError                     **error)
 {
         GSSDPSocketSource *self = NULL;
         GInetAddress *iface_address = NULL;
index df6395d..c909726 100644 (file)
@@ -26,7 +26,7 @@ dnl dropped everything but VALA_PROG_VAPIGEN - Jens Georg <mail@jensge.org>
 #
 # VALA_PROG_VAPIGEN([MINIMUM-VERSION])
 # ------------------------------------
-AC_DEFUN([VALA_PROG_VAPIGEN],
+AC_DEFUN([GUPNP_PROG_VAPIGEN],
 [AC_PATH_PROG([VAPIGEN], [vapigen], [])
   AS_IF([test -z "$VAPIGEN"],
     [AC_MSG_WARN([No Vala API Generator found. You will not be able to generate .vapi files.])],
@@ -37,5 +37,7 @@ AC_DEFUN([VALA_PROG_VAPIGEN],
            [AC_MSG_RESULT([yes])],
            [AC_MSG_RESULT([yes])],
            [AC_MSG_RESULT([no])
-            AC_MSG_WARN([Vala API Generator $1 not found.])])])])
+            AC_MSG_WARN([Vala API Generator $1 not found.])
+            VAPIGEN=""
+           ])])])
 ])
index 78c9f0d..b139448 100644 (file)
@@ -7,14 +7,14 @@
 
 Name:       gssdp
 Summary:    GSSDP implements resource discovery and announcement over SSDP
-Version:    0.14.2
+Version:    0.14.3
 Release:    1
 Group:      System/Libraries
 License:    LGPLv2+
 URL:        http://www.gupnp.org
 Source0:    http://download.gnome.org/sources/%{name}/0.14/%{name}-%{version}.tar.bz2
 Requires:   dbus
-Requires:   libsoup2.4
+Requires:   libsoup
 Requires(post): /sbin/ldconfig
 Requires(postun): /sbin/ldconfig
 BuildRequires:  pkgconfig(dbus-glib-1)
index 6349eaa..7bf87fd 100644 (file)
 #include "test-util.h"
 
 void
-on_resource_unavailable_assert_not_reached (GSSDPResourceBrowser *src,
-                                            const char           *usn,
-                                            gpointer              user_data)
+on_resource_unavailable_assert_not_reached (G_GNUC_UNUSED GSSDPResourceBrowser *src,
+                                            G_GNUC_UNUSED const char           *usn,
+                                            G_GNUC_UNUSED gpointer              user_data)
 {
         g_assert_not_reached ();
 }
 
 void
-on_resource_available_assert_not_reached (GSSDPResourceBrowser *src,
-                                          const char           *usn,
-                                          GList                *locations,
-                                          gpointer              user_data)
+on_resource_available_assert_not_reached (G_GNUC_UNUSED GSSDPResourceBrowser *src,
+                                          G_GNUC_UNUSED const char           *usn,
+                                          G_GNUC_UNUSED GList                *locations,
+                                          G_GNUC_UNUSED gpointer              user_data)
 {
         g_assert_not_reached ();
 }
index c09b017..91feaca 100644 (file)
@@ -24,9 +24,9 @@
 #include <stdlib.h>
 
 static void
-resource_available_cb (GSSDPResourceBrowser *resource_browser,
-                       const char           *usn,
-                       GList                *locations)
+resource_available_cb (G_GNUC_UNUSED GSSDPResourceBrowser *resource_browser,
+                       const char                         *usn,
+                       GList                              *locations)
 {
         GList *l;
 
@@ -39,8 +39,8 @@ resource_available_cb (GSSDPResourceBrowser *resource_browser,
 }
 
 static void
-resource_unavailable_cb (GSSDPResourceBrowser *resource_browser,
-                         const char           *usn)
+resource_unavailable_cb (G_GNUC_UNUSED GSSDPResourceBrowser *resource_browser,
+                         const char                         *usn)
 {
         g_print ("resource unavailable\n"
                  "  USN:      %s\n",
@@ -48,8 +48,8 @@ resource_unavailable_cb (GSSDPResourceBrowser *resource_browser,
 }
 
 int
-main (int    argc,
-      char **argv)
+main (G_GNUC_UNUSED int    argc,
+      G_GNUC_UNUSED char **argv)
 {
         GSSDPClient *client;
         GSSDPResourceBrowser *resource_browser;
index 601bbfb..e77ca4c 100644 (file)
@@ -24,8 +24,8 @@
 #include <stdlib.h>
 
 int
-main (int    argc,
-      char **argv)
+main (G_GNUC_UNUSED int    argc,
+      G_GNUC_UNUSED char **argv)
 {
         GSSDPClient *client;
         GSSDPResourceGroup *resource_group;
index b53858c..0e4bd06 100644 (file)
 #define UI_FILE "gssdp-device-sniffer.ui"
 #define MAX_IP_LEN 16
 
+static char *interface = NULL;
+
 GtkBuilder *builder;
 GSSDPResourceBrowser *resource_browser;
 GSSDPClient *client;
 char *ip_filter = NULL;
 gboolean capture_packets = TRUE;
 
+GOptionEntry entries[] =
+{
+        {"interface", 'i', 0, G_OPTION_ARG_STRING, &interface, "Network interface to listen on", NULL },
+        { NULL }
+};
+
 G_MODULE_EXPORT
 void
-on_enable_packet_capture_activate (GtkCheckMenuItem *menuitem, gpointer user_data)
+on_enable_packet_capture_activate (GtkCheckMenuItem      *menuitem,
+                                   G_GNUC_UNUSED gpointer user_data)
 {
         capture_packets = gtk_check_menu_item_get_active (menuitem);
 }
@@ -125,7 +134,8 @@ display_packet (time_t arrival_time, SoupMessageHeaders *packet_headers)
 }
 
 static void
-on_packet_selected (GtkTreeSelection *selection, gpointer user_data)
+on_packet_selected (GtkTreeSelection      *selection,
+                    G_GNUC_UNUSED gpointer user_data)
 {
         GtkTreeModel *model;
         GtkTreeIter iter;
@@ -148,7 +158,8 @@ on_packet_selected (GtkTreeSelection *selection, gpointer user_data)
 
 G_MODULE_EXPORT
 void
-on_clear_packet_capture_activate (GtkMenuItem *menuitem, gpointer user_data)
+on_clear_packet_capture_activate (G_GNUC_UNUSED GtkMenuItem *menuitem,
+                                  G_GNUC_UNUSED gpointer     user_data)
 {
         clear_packet_treeview ();
 }
@@ -156,10 +167,10 @@ on_clear_packet_capture_activate (GtkMenuItem *menuitem, gpointer user_data)
 static char *message_types[] = {"M-SEARCH", "RESPONSE", "NOTIFY"};
 
 static char **
-packet_to_treeview_data (const gchar *from_ip,
-                time_t arrival_time,
-                _GSSDPMessageType type,
-                SoupMessageHeaders *headers)
+packet_to_treeview_data (const gchar        *from_ip,
+                         time_t              arrival_time,
+                         _GSSDPMessageType   type,
+                         SoupMessageHeaders *headers)
 {
         char **packet_data;
         const char *target;
@@ -222,12 +233,12 @@ append_packet (const gchar *from_ip,
 }
 
 static void
-on_ssdp_message (GSSDPClient *client,
-                const gchar *from_ip,
-                gushort from_port,
-                _GSSDPMessageType type,
-                SoupMessageHeaders *headers,
-                gpointer user_data)
+on_ssdp_message (G_GNUC_UNUSED GSSDPClient *client,
+                 G_GNUC_UNUSED const gchar *from_ip,
+                 G_GNUC_UNUSED gushort      from_port,
+                 _GSSDPMessageType          type,
+                 SoupMessageHeaders        *headers,
+                 G_GNUC_UNUSED gpointer     user_data)
 {
         time_t arrival_time;
         
@@ -297,9 +308,9 @@ append_device (const char *uuid,
 }
 
 static void
-resource_available_cb (GSSDPResourceBrowser *resource_browser,
-                       const char           *usn,
-                       GList                *locations)
+resource_available_cb (G_GNUC_UNUSED GSSDPResourceBrowser *resource_browser,
+                       const char                         *usn,
+                       GList                              *locations)
 {
 
         char **usn_tokens;
@@ -359,8 +370,8 @@ remove_device (const char *uuid)
 }
 
 static void
-resource_unavailable_cb (GSSDPResourceBrowser *resource_browser,
-                         const char           *usn)
+resource_unavailable_cb (G_GNUC_UNUSED GSSDPResourceBrowser *resource_browser,
+                         const char                         *usn)
 {
         char **usn_tokens;
         char *uuid;
@@ -376,8 +387,8 @@ resource_unavailable_cb (GSSDPResourceBrowser *resource_browser,
 
 G_MODULE_EXPORT
 void
-on_use_filter_radiobutton_toggled (GtkToggleButton *togglebutton,
-                gpointer         user_data)
+on_use_filter_radiobutton_toggled (GtkToggleButton       *togglebutton,
+                                   G_GNUC_UNUSED gpointer user_data)
 {
         GtkWidget *filter_hbox;
         gboolean use_filter;
@@ -416,9 +427,9 @@ get_ip_filter ()
 
 G_MODULE_EXPORT
 void
-on_address_filter_dialog_response (GtkDialog *dialog,
-                gint       response,
-                gpointer   user_data)
+on_address_filter_dialog_response (GtkDialog             *dialog,
+                                   G_GNUC_UNUSED gint     response,
+                                   G_GNUC_UNUSED gpointer user_data)
 {
         GtkWidget *use_filter_radio;
 
@@ -536,11 +547,12 @@ setup_treeviews ()
 
 G_MODULE_EXPORT
 gboolean
-on_delete_event (GtkWidget *widget,
-                GdkEvent  *event,
-                gpointer   user_data)
+on_delete_event (G_GNUC_UNUSED GtkWidget *widget,
+                 G_GNUC_UNUSED GdkEvent  *event,
+                 G_GNUC_UNUSED gpointer   user_data)
 {
         gtk_main_quit ();
+
         return TRUE;
 }
 
@@ -550,8 +562,18 @@ init_ui (gint *argc, gchar **argv[])
         GtkWidget *main_window;
         gint window_width, window_height;
         gchar *ui_path = NULL;
-        
-        gtk_init (argc, argv);
+        GError *error = NULL;
+        GOptionContext *context;
+
+        context = g_option_context_new ("- graphical SSDP debug tool");
+        g_option_context_add_main_entries (context, entries, NULL);
+        g_option_context_add_group (context, gtk_get_option_group (TRUE));
+        if (!g_option_context_parse (context, argc, argv, &error)) {
+                g_print ("Failed to parse options: %s\n", error->message);
+                g_error_free (error);
+
+                return FALSE;
+        }
 
         /* Try to fetch the ui file from the CWD first */
         ui_path = UI_FILE;
@@ -604,6 +626,7 @@ init_upnp (void)
         client = g_initable_new (GSSDP_TYPE_CLIENT,
                                  NULL,
                                  &error,
+                                 "interface", interface,
                                  NULL);
         if (error) {
                 g_printerr ("Error creating the GSSDP client: %s\n",
index f16b3bc..8779a17 100644 (file)
-<?xml version="1.0"?>
-<!--*- mode: xml -*-->
+<?xml version="1.0" encoding="UTF-8"?>
 <interface>
-  <object class="GtkUIManager" id="uimanager1">
-    <child>
-      <object class="GtkActionGroup" id="actiongroup1">
-        <child>
-          <object class="GtkAction" id="file_menuitem">
-            <property name="name">file_menuitem</property>
-            <property name="label" translatable="yes">_File</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="clear_packet_capture">
-            <property name="stock_id">gtk-clear</property>
-            <property name="name">clear_packet_capture</property>
-            <property name="label" translatable="yes">Clear Packet Capture</property>
-            <signal handler="on_clear_packet_capture_activate" last_modification_time="Tue, 08 May 2007 08:41:08 GMT" name="activate"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkToggleAction" id="show_packet_details">
-            <property name="active">True</property>
-            <property name="name">show_packet_details</property>
-            <property name="label" translatable="yes">Show Packet Details</property>
-            <signal handler="on_details_activate" last_modification_time="Mon, 23 Apr 2007 21:27:46 GMT" name="activate" object="packet-details-scrolledwindow"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkToggleAction" id="show_device_tracking">
-            <property name="active">True</property>
-            <property name="name">show_device_tracking</property>
-            <property name="label" translatable="yes">Show Device Tracking</property>
-            <signal handler="on_details_activate" last_modification_time="Mon, 23 Apr 2007 21:30:07 GMT" name="activate" object="packet-details-scrolledwindow"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="quit">
-            <property name="stock_id">gtk-quit</property>
-            <property name="name">quit</property>
-            <signal handler="gtk_main_quit" last_modification_time="Sat, 21 Apr 2007 14:46:54 GMT" name="activate"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="filter_menuitem">
-            <property name="name">filter_menuitem</property>
-            <property name="label" translatable="yes">Filter</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkToggleAction" id="enable_packet_capture">
-            <property name="active">True</property>
-            <property name="name">enable_packet_capture</property>
-            <property name="label" translatable="yes">Enable Packet Capture</property>
-            <signal handler="on_enable_packet_capture_activate" last_modification_time="Fri, 20 Apr 2007 14:59:37 GMT" name="activate"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="address_filter">
-            <property name="name">address_filter</property>
-            <property name="label" translatable="yes">Address Filter</property>
-            <signal handler="gtk_widget_show" last_modification_time="Fri, 11 May 2007 10:58:14 GMT" name="activate" object="address-filter-dialog"/>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="help_menuitem">
-            <property name="name">help_menuitem</property>
-            <property name="label" translatable="yes">_Help</property>
-          </object>
-        </child>
-        <child>
-          <object class="GtkAction" id="about">
-            <property name="stock_id">gtk-about</property>
-            <property name="name">about</property>
-            <signal handler="gtk_widget_show" last_modification_time="Sat, 21 Apr 2007 15:23:48 GMT" name="activate" object="about-dialog"/>
-          </object>
-        </child>
-      </object>
-    </child>
-    <ui>
-      <menubar name="menubar">
-        <menu action="file_menuitem">
-          <menuitem action="clear_packet_capture"/>
-          <separator/>
-          <menuitem action="show_packet_details"/>
-          <menuitem action="show_device_tracking"/>
-          <separator/>
-          <menuitem action="quit"/>
-        </menu>
-        <menu action="filter_menuitem">
-          <menuitem action="enable_packet_capture"/>
-          <menuitem action="address_filter"/>
-        </menu>
-        <menu action="help_menuitem">
-          <menuitem action="about"/>
-        </menu>
-      </menubar>
-    </ui>
-  </object>
-  <object class="GtkWindow" id="main-window">
-    <property name="title" translatable="yes">GSSDP Device Sniffer</property>
-    <property name="type">GTK_WINDOW_TOPLEVEL</property>
-    <property name="window_position">GTK_WIN_POS_NONE</property>
-    <property name="modal">False</property>
-    <property name="resizable">True</property>
-    <property name="destroy_with_parent">False</property>
-    <property name="decorated">True</property>
-    <property name="skip_taskbar_hint">False</property>
-    <property name="skip_pager_hint">False</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_NORMAL</property>
-    <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-    <property name="focus_on_map">True</property>
-    <property name="urgency_hint">False</property>
-    <signal handler="on_delete_event" last_modification_time="Fri, 11 May 2007 10:36:15 GMT" name="delete_event"/>
-    <child>
-      <object class="GtkVBox" id="vbox2">
-        <property name="visible">True</property>
-        <property name="homogeneous">False</property>
-        <property name="spacing">0</property>
-        <child>
-          <object class="GtkMenuBar" constructor="uimanager1" id="menubar">
-            <property name="visible">True</property>
-            <property name="pack_direction">GTK_PACK_DIRECTION_LTR</property>
-            <property name="child_pack_direction">GTK_PACK_DIRECTION_LTR</property>
+  <!-- interface-requires gtk+ 3.0 -->
+  <object class="GtkAboutDialog" id="about-dialog">
+    <property name="can_focus">False</property>
+    <property name="resizable">False</property>
+    <property name="type_hint">normal</property>
+    <property name="transient_for">main-window</property>
+    <property name="copyright" translatable="yes">Copyright (C) 2007 Zeeshan Ali (Khattak)</property>
+    <property name="comments" translatable="yes">A Device Sniffer tool based on GSSDP framework.
+Inspired by Intel Tools for UPnP.</property>
+    <property name="authors">Zeeshan Ali (Khattak) &lt;zeeshanak@gnome.org&gt;</property>
+    <property name="translator_credits" translatable="yes" comments="TRANSLATORS: Replace this string with your names, one name per line.">translator-credits</property>
+    <property name="license_type">lgpl-2-1</property>
+    <signal name="delete-event" handler="gtk_widget_hide" object="about-dialog" swapped="yes"/>
+    <signal name="response" handler="gtk_widget_hide" object="about-dialog" swapped="yes"/>
+    <child internal-child="vbox">
+      <object class="GtkBox" id="aboutdialog-vbox1">
+        <property name="can_focus">False</property>
+        <property name="orientation">vertical</property>
+        <child internal-child="action_area">
+          <object class="GtkButtonBox" id="aboutdialog-action_area1">
+            <property name="can_focus">False</property>
           </object>
           <packing>
-            <property name="padding">0</property>
             <property name="expand">False</property>
-            <property name="fill">False</property>
-          </packing>
-        </child>
-        <child>
-          <object class="GtkVBox" id="vbox">
-            <property name="border_width">6</property>
-            <property name="visible">True</property>
-            <property name="homogeneous">False</property>
-            <property name="spacing">6</property>
-            <child>
-              <object class="GtkScrolledWindow" id="packet-scrolledwindow">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="shadow_type">GTK_SHADOW_IN</property>
-                <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-                <child>
-                  <object class="GtkTreeView" id="packet-treeview">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="headers_visible">True</property>
-                    <property name="rules_hint">False</property>
-                    <property name="reorderable">False</property>
-                    <property name="enable_search">True</property>
-                    <property name="fixed_height_mode">False</property>
-                    <property name="hover_selection">False</property>
-                    <property name="hover_expand">False</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="padding">0</property>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScrolledWindow" id="packet-details-scrolledwindow">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="shadow_type">GTK_SHADOW_IN</property>
-                <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-                <child>
-                  <object class="GtkTextView" id="packet-details-textview">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="editable">False</property>
-                    <property name="overwrite">False</property>
-                    <property name="accepts_tab">True</property>
-                    <property name="justification">GTK_JUSTIFY_LEFT</property>
-                    <property name="wrap_mode">GTK_WRAP_NONE</property>
-                    <property name="cursor_visible">True</property>
-                    <property name="pixels_above_lines">0</property>
-                    <property name="pixels_below_lines">0</property>
-                    <property name="pixels_inside_wrap">0</property>
-                    <property name="left_margin">0</property>
-                    <property name="right_margin">0</property>
-                    <property name="indent">0</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="padding">0</property>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScrolledWindow" id="device-details-scrolledwindow">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-                <property name="shadow_type">GTK_SHADOW_IN</property>
-                <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-                <child>
-                  <object class="GtkTreeView" id="device-details-treeview">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="headers_visible">True</property>
-                    <property name="rules_hint">False</property>
-                    <property name="reorderable">False</property>
-                    <property name="enable_search">True</property>
-                    <property name="fixed_height_mode">False</property>
-                    <property name="hover_selection">False</property>
-                    <property name="hover_expand">False</property>
-                  </object>
-                </child>
-              </object>
-              <packing>
-                <property name="padding">0</property>
-                <property name="expand">True</property>
-                <property name="fill">True</property>
-              </packing>
-            </child>
-          </object>
-          <packing>
-            <property name="padding">0</property>
-            <property name="expand">True</property>
             <property name="fill">True</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
           </packing>
         </child>
       </object>
     </child>
   </object>
-  <object class="GtkAboutDialog" id="about-dialog">
-    <property name="destroy_with_parent">False</property>
-    <property name="name" translatable="yes">GSSDP Device Sniffer</property>
-    <property name="copyright" translatable="yes">Copyright (C) 2007 Zeeshan Ali (Khattak)</property>
-    <property name="comments" translatable="yes">A Device Sniffer tool based on GSSDP framework.
-Inspired by Intel Tools for UPnP.</property>
-    <property name="license" translatable="yes">LGPL</property>
-    <property name="wrap_license">False</property>
-    <property name="authors">Zeeshan Ali (Khattak) &lt;zeeshanak@gnome.org&gt;</property>
-    <property comments="TRANSLATORS: Replace this string with your names, one name per line." name="translator_credits" translatable="yes">translator-credits</property>
-    <signal handler="gtk_widget_hide" last_modification_time="Sat, 19 May 2007 20:52:15 GMT" name="response" object="about-dialog"/>
-    <signal handler="gtk_widget_hide" last_modification_time="Tue, 15 May 2007 21:17:51 GMT" name="delete_event" object="about-dialog"/>
-  </object>
   <object class="GtkDialog" id="address-filter-dialog">
+    <property name="can_focus">False</property>
     <property name="border_width">7</property>
     <property name="title" translatable="yes">Address Filter</property>
-    <property name="type">GTK_WINDOW_TOPLEVEL</property>
-    <property name="window_position">GTK_WIN_POS_NONE</property>
-    <property name="modal">False</property>
     <property name="resizable">False</property>
-    <property name="destroy_with_parent">False</property>
-    <property name="decorated">True</property>
-    <property name="skip_taskbar_hint">False</property>
-    <property name="skip_pager_hint">False</property>
-    <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
-    <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-    <property name="focus_on_map">True</property>
-    <property name="urgency_hint">False</property>
-    <property name="has_separator">False</property>
-    <signal handler="on_address_filter_dialog_response" last_modification_time="Fri, 11 May 2007 11:00:37 GMT" name="response"/>
+    <property name="type_hint">dialog</property>
+    <property name="transient_for">main-window</property>
+    <signal name="response" handler="on_address_filter_dialog_response" swapped="no"/>
     <child internal-child="vbox">
-      <object class="GtkVBox" id="dialog-vbox1">
+      <object class="GtkBox" id="dialog-vbox1">
         <property name="visible">True</property>
-        <property name="homogeneous">False</property>
+        <property name="can_focus">False</property>
         <property name="spacing">8</property>
         <child internal-child="action_area">
-          <object class="GtkHButtonBox" id="dialog-action_area1">
+          <object class="GtkButtonBox" id="dialog-action_area1">
             <property name="visible">True</property>
-            <property name="layout_style">GTK_BUTTONBOX_END</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
             <child>
               <object class="GtkButton" id="closebutton1">
+                <property name="label">gtk-close</property>
                 <property name="visible">True</property>
-                <property name="can_default">True</property>
                 <property name="can_focus">True</property>
-                <property name="label">gtk-close</property>
+                <property name="can_default">True</property>
+                <property name="receives_default">False</property>
                 <property name="use_stock">True</property>
-                <property name="relief">GTK_RELIEF_NORMAL</property>
-                <property name="focus_on_click">True</property>
               </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
             </child>
           </object>
           <packing>
-            <property name="padding">0</property>
             <property name="expand">False</property>
             <property name="fill">True</property>
-            <property name="pack_type">GTK_PACK_END</property>
+            <property name="pack_type">end</property>
+            <property name="position">0</property>
           </packing>
         </child>
         <child>
           <object class="GtkVBox" id="vbox1">
-            <property name="border_width">5</property>
             <property name="visible">True</property>
-            <property name="homogeneous">False</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">5</property>
             <property name="spacing">4</property>
             <child>
               <object class="GtkRadioButton" id="dont-use-filter-radiobutton">
+                <property name="label" translatable="yes">No filter, capture all traffic</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="label" translatable="yes">No filter, capture all traffic</property>
+                <property name="receives_default">False</property>
                 <property name="use_underline">True</property>
-                <property name="relief">GTK_RELIEF_NORMAL</property>
-                <property name="focus_on_click">True</property>
+                <property name="xalign">0.5</property>
                 <property name="active">True</property>
-                <property name="inconsistent">False</property>
                 <property name="draw_indicator">True</property>
               </object>
               <packing>
-                <property name="padding">0</property>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
+                <property name="position">0</property>
               </packing>
             </child>
             <child>
               <object class="GtkRadioButton" id="use-filter-radiobutton">
+                <property name="label" translatable="yes">Use IP address filter</property>
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
-                <property name="label" translatable="yes">Use IP address filter</property>
+                <property name="receives_default">False</property>
                 <property name="use_underline">True</property>
-                <property name="relief">GTK_RELIEF_NORMAL</property>
-                <property name="focus_on_click">True</property>
-                <property name="active">False</property>
-                <property name="inconsistent">False</property>
+                <property name="xalign">0.5</property>
                 <property name="draw_indicator">True</property>
                 <property name="group">dont-use-filter-radiobutton</property>
-                <signal handler="on_use_filter_radiobutton_toggled" last_modification_time="Fri, 11 May 2007 10:55:01 GMT" name="toggled"/>
+                <signal name="toggled" handler="on_use_filter_radiobutton_toggled" swapped="no"/>
               </object>
               <packing>
-                <property name="padding">0</property>
                 <property name="expand">False</property>
                 <property name="fill">False</property>
+                <property name="position">1</property>
               </packing>
             </child>
             <child>
               <object class="GtkAlignment" id="alignment1">
                 <property name="visible">True</property>
-                <property name="xalign">0.5</property>
-                <property name="yalign">0.5</property>
-                <property name="xscale">1</property>
-                <property name="yscale">1</property>
-                <property name="top_padding">0</property>
-                <property name="bottom_padding">0</property>
+                <property name="can_focus">False</property>
                 <property name="left_padding">50</property>
-                <property name="right_padding">0</property>
                 <child>
                   <object class="GtkHBox" id="address-filter-hbox">
                     <property name="visible">True</property>
                     <property name="sensitive">False</property>
-                    <property name="homogeneous">False</property>
-                    <property name="spacing">0</property>
+                    <property name="can_focus">False</property>
                     <child>
                       <object class="GtkEntry" id="address-entry0">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="editable">True</property>
-                        <property name="visibility">True</property>
                         <property name="max_length">3</property>
-                        <property name="text" translatable="yes"/>
-                        <property name="has_frame">True</property>
-                        <property name="invisible_char">*</property>
                         <property name="activates_default">True</property>
                         <property name="width_chars">4</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">True</property>
                         <property name="fill">True</property>
+                        <property name="position">0</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="address-label0">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">.</property>
-                        <property name="use_underline">False</property>
-                        <property name="use_markup">False</property>
-                        <property name="justify">GTK_JUSTIFY_LEFT</property>
-                        <property name="wrap">False</property>
-                        <property name="selectable">False</property>
-                        <property name="xalign">0.5</property>
-                        <property name="yalign">0.5</property>
-                        <property name="xpad">0</property>
-                        <property name="ypad">0</property>
-                        <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-                        <property name="width_chars">-1</property>
-                        <property name="single_line_mode">False</property>
-                        <property name="angle">0</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkEntry" id="address-entry1">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="editable">True</property>
-                        <property name="visibility">True</property>
                         <property name="max_length">3</property>
-                        <property name="text" translatable="yes"/>
-                        <property name="has_frame">True</property>
-                        <property name="invisible_char">*</property>
                         <property name="activates_default">True</property>
                         <property name="width_chars">4</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">True</property>
                         <property name="fill">True</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="address-label1">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">.</property>
-                        <property name="use_underline">False</property>
-                        <property name="use_markup">False</property>
-                        <property name="justify">GTK_JUSTIFY_LEFT</property>
-                        <property name="wrap">False</property>
-                        <property name="selectable">False</property>
-                        <property name="xalign">0.5</property>
-                        <property name="yalign">0.5</property>
-                        <property name="xpad">0</property>
-                        <property name="ypad">0</property>
-                        <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-                        <property name="width_chars">-1</property>
-                        <property name="single_line_mode">False</property>
-                        <property name="angle">0</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
+                        <property name="position">3</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkEntry" id="address-entry2">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="editable">True</property>
-                        <property name="visibility">True</property>
                         <property name="max_length">3</property>
-                        <property name="text" translatable="yes"/>
-                        <property name="has_frame">True</property>
-                        <property name="invisible_char">*</property>
                         <property name="activates_default">True</property>
                         <property name="width_chars">4</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">True</property>
                         <property name="fill">True</property>
+                        <property name="position">4</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkLabel" id="address-label2">
                         <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <property name="label" translatable="yes">.</property>
-                        <property name="use_underline">False</property>
-                        <property name="use_markup">False</property>
-                        <property name="justify">GTK_JUSTIFY_LEFT</property>
-                        <property name="wrap">False</property>
-                        <property name="selectable">False</property>
-                        <property name="xalign">0.5</property>
-                        <property name="yalign">0.5</property>
-                        <property name="xpad">0</property>
-                        <property name="ypad">0</property>
-                        <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
-                        <property name="width_chars">-1</property>
-                        <property name="single_line_mode">False</property>
-                        <property name="angle">0</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">False</property>
                         <property name="fill">False</property>
+                        <property name="position">5</property>
                       </packing>
                     </child>
                     <child>
                       <object class="GtkEntry" id="address-entry3">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property name="editable">True</property>
-                        <property name="visibility">True</property>
                         <property name="max_length">3</property>
-                        <property name="text" translatable="yes"/>
-                        <property name="has_frame">True</property>
-                        <property name="invisible_char">*</property>
                         <property name="activates_default">True</property>
                         <property name="width_chars">4</property>
                       </object>
                       <packing>
-                        <property name="padding">0</property>
                         <property name="expand">True</property>
                         <property name="fill">True</property>
+                        <property name="position">6</property>
                       </packing>
                     </child>
                   </object>
                 </child>
               </object>
               <packing>
-                <property name="padding">0</property>
                 <property name="expand">True</property>
                 <property name="fill">True</property>
+                <property name="position">2</property>
               </packing>
             </child>
           </object>
           <packing>
-            <property name="padding">0</property>
             <property name="expand">True</property>
             <property name="fill">True</property>
+            <property name="position">1</property>
           </packing>
         </child>
       </object>
@@ -523,4 +238,229 @@ Inspired by Intel Tools for UPnP.</property>
       <action-widget response="-5">closebutton1</action-widget>
     </action-widgets>
   </object>
+  <object class="GtkImage" id="image1">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-clear</property>
+  </object>
+  <object class="GtkWindow" id="main-window">
+    <property name="can_focus">False</property>
+    <property name="title" translatable="yes">GSSDP Device Sniffer</property>
+    <signal name="delete-event" handler="on_delete_event" swapped="no"/>
+    <child>
+      <object class="GtkVBox" id="vbox2">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <child>
+          <object class="GtkMenuBar" id="menubar">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <child>
+              <object class="GtkMenuItem" id="menu_file">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">_File</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu1">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="item_clear_packet_capture">
+                        <property name="label" translatable="yes">Clear Packet Capture</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="image">image1</property>
+                        <property name="use_stock">False</property>
+                        <signal name="activate" handler="on_clear_packet_capture_activate" swapped="no"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem" id="separator1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckMenuItem" id="item_show_packet_details">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Show Packet Details</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" handler="on_details_activate" object="packet-details-scrolledwindow" swapped="yes"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkCheckMenuItem" id="item_show_device_tracking">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Show Device Tracking</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" handler="on_details_activate" object="device-details-scrolledwindow" swapped="yes"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkSeparatorMenuItem" id="separator2">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkImageMenuItem" id="item_quit">
+                        <property name="label">gtk-quit</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <accelerator key="q" signal="activate" modifiers="GDK_CONTROL_MASK"/>
+                        <signal name="activate" handler="gtk_main_quit" swapped="no"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menu_filter">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Filter</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu2">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkCheckMenuItem" id="item_toggle_capture">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Enable Packet Capture</property>
+                        <property name="use_underline">True</property>
+                        <property name="active">True</property>
+                        <signal name="toggled" handler="on_enable_packet_capture_activate" swapped="no"/>
+                      </object>
+                    </child>
+                    <child>
+                      <object class="GtkMenuItem" id="item_address_filter">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="label" translatable="yes">Address Filter</property>
+                        <property name="use_underline">True</property>
+                        <signal name="activate" handler="gtk_widget_show" object="address-filter-dialog" swapped="yes"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+            <child>
+              <object class="GtkMenuItem" id="menu_help">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">_Help</property>
+                <property name="use_underline">True</property>
+                <child type="submenu">
+                  <object class="GtkMenu" id="menu3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkImageMenuItem" id="item_about">
+                        <property name="label">gtk-about</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="use_underline">True</property>
+                        <property name="use_stock">True</property>
+                        <signal name="activate" handler="gtk_widget_show" object="about-dialog" swapped="yes"/>
+                      </object>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">False</property>
+            <property name="position">0</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkVBox" id="vbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="border_width">6</property>
+            <property name="spacing">6</property>
+            <child>
+              <object class="GtkScrolledWindow" id="packet-scrolledwindow">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="packet-treeview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection1"/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="packet-details-scrolledwindow">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTextView" id="packet-details-textview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <property name="editable">False</property>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">1</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkScrolledWindow" id="device-details-scrolledwindow">
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkTreeView" id="device-details-treeview">
+                    <property name="visible">True</property>
+                    <property name="can_focus">True</property>
+                    <child internal-child="selection">
+                      <object class="GtkTreeSelection" id="treeview-selection2"/>
+                    </child>
+                  </object>
+                </child>
+              </object>
+              <packing>
+                <property name="expand">True</property>
+                <property name="fill">True</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+  </object>
 </interface>