telepathy-gabble: JingleInfo: refactor google:jingleinfo feature stuff

Will Thompson wjt at kemper.freedesktop.org
Thu Dec 6 04:29:03 PST 2012


Module: telepathy-gabble
Branch: master
Commit: da988bf629a94eaaa7cd5971705f3aec4b3cb1c5
URL:    http://cgit.freedesktop.org/telepathy/telepathy-gabble/commit/?id=da988bf629a94eaaa7cd5971705f3aec4b3cb1c5

Author: Will Thompson <will.thompson at collabora.co.uk>
Date:   Thu Nov 22 17:41:42 2012 +0000

JingleInfo: refactor google:jingleinfo feature stuff

---

 src/jingle-info.c                   |   31 ++++++++++++++++++++++---------
 src/jingle-info.h                   |    4 +++-
 src/jingle-mint.c                   |   11 ++++++-----
 tests/twisted/jingle/stun-server.py |    6 ++++++
 4 files changed, 37 insertions(+), 15 deletions(-)

diff --git a/src/jingle-info.c b/src/jingle-info.c
index bd1f686..9a44473 100644
--- a/src/jingle-info.c
+++ b/src/jingle-info.c
@@ -145,11 +145,6 @@ gabble_jingle_info_constructed (GObject *object)
     parent_class->constructed (object);
 
   g_assert (priv->porter != NULL);
-  priv->jingle_info_handler_id = wocky_c2s_porter_register_handler_from_server (
-      WOCKY_C2S_PORTER (priv->porter),
-      WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_SET,
-      WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, jingle_info_cb, self,
-      '(', "query", ':', NS_GOOGLE_JINGLE_INFO, ')', NULL);
 }
 
 static void
@@ -161,8 +156,10 @@ gabble_jingle_info_dispose (GObject *object)
 
   if (priv->porter != NULL)
     {
-      g_assert (priv->jingle_info_handler_id != 0);
-      wocky_porter_unregister_handler (priv->porter, priv->jingle_info_handler_id);
+      if (priv->jingle_info_handler_id != 0)
+        wocky_porter_unregister_handler (priv->porter,
+            priv->jingle_info_handler_id);
+
       g_clear_object (&priv->porter);
     }
 
@@ -504,8 +501,9 @@ jingle_info_reply_cb (
   g_object_unref (self);
 }
 
-void
-gabble_jingle_info_send_request (GabbleJingleInfo *self)
+static void
+gabble_jingle_info_send_google_request (
+    GabbleJingleInfo *self)
 {
   GabbleJingleInfoPrivate *priv = self->priv;
   WockyStanza *stanza = wocky_stanza_build (
@@ -516,6 +514,21 @@ gabble_jingle_info_send_request (GabbleJingleInfo *self)
   wocky_porter_send_iq_async (priv->porter, stanza, NULL, jingle_info_reply_cb,
       g_object_ref (self));
   g_object_unref (stanza);
+
+  priv->jingle_info_handler_id = wocky_c2s_porter_register_handler_from_server (
+      WOCKY_C2S_PORTER (priv->porter),
+      WOCKY_STANZA_TYPE_IQ, WOCKY_STANZA_SUB_TYPE_SET,
+      WOCKY_PORTER_HANDLER_PRIORITY_NORMAL, jingle_info_cb, self,
+      '(', "query", ':', NS_GOOGLE_JINGLE_INFO, ')', NULL);
+}
+
+void
+gabble_jingle_info_send_request (
+    GabbleJingleInfo *self,
+    gboolean google_jingleinfo_supported)
+{
+  if (google_jingleinfo_supported)
+    gabble_jingle_info_send_google_request (self);
 }
 
 gboolean
diff --git a/src/jingle-info.h b/src/jingle-info.h
index 2ce8111..e8fb5b0 100644
--- a/src/jingle-info.h
+++ b/src/jingle-info.h
@@ -47,7 +47,9 @@ void gabble_jingle_info_take_stun_server (
     gchar *stun_server,
     guint16 stun_port,
     gboolean is_fallback);
-void gabble_jingle_info_send_request (GabbleJingleInfo *self);
+void gabble_jingle_info_send_request (
+    GabbleJingleInfo *self,
+    gboolean google_jingleinfo_supported);
 
 gboolean gabble_jingle_info_get_stun_server (
     GabbleJingleInfo *self,
diff --git a/src/jingle-mint.c b/src/jingle-mint.c
index f575cfd..2cb6d0e 100644
--- a/src/jingle-mint.c
+++ b/src/jingle-mint.c
@@ -229,11 +229,12 @@ connection_status_changed_cb (
             gabble_jingle_info_take_stun_server (info,
                 stun_server, stun_port, TRUE);
 
-          if (priv->conn->features &
-              GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO)
-            {
-              gabble_jingle_info_send_request (info);
-            }
+          gabble_jingle_info_send_request (info,
+              /* FIXME: one day Wocky will know about caps and then we won't
+               * have to pass in a flag here.
+               */
+              !!(priv->conn->features &
+                 GABBLE_CONNECTION_FEATURES_GOOGLE_JINGLE_INFO));
         }
       break;
 
diff --git a/tests/twisted/jingle/stun-server.py b/tests/twisted/jingle/stun-server.py
index 6fab4c8..83111d4 100644
--- a/tests/twisted/jingle/stun-server.py
+++ b/tests/twisted/jingle/stun-server.py
@@ -52,6 +52,12 @@ def init_test(q, conn, stream, google=False):
         relay = jingleinfo.firstChildElement().addElement('relay')
         relay.addElement('token', content='jingle all the way')
         stream.send(jingleinfo)
+    else:
+        # We shouldn't be sending google:jingleinfo queries if the server
+        # doesn't support it.
+        q.forbid_events([
+            EventPattern('stream-iq', query_ns=ns.GOOGLE_JINGLE_INFO),
+            ])
 
     # We need remote end's presence for capabilities
     jt.send_remote_presence()



More information about the telepathy-commits mailing list