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