[telepathy-gabble/master] MediaChannel: set nat-traversal Tp property appropriately
Senko Rasic
senko.rasic at collabora.co.uk
Mon Jun 29 04:43:08 PDT 2009
---
src/media-channel.c | 14 +++++++++++++-
src/media-factory.c | 22 ++++++++++++++++++++++
2 files changed, 35 insertions(+), 1 deletions(-)
diff --git a/src/media-channel.c b/src/media-channel.c
index 2e870c2..b6516e0 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -745,7 +745,7 @@ gabble_media_channel_class_init (GabbleMediaChannelClass *gabble_media_channel_c
param_spec = g_param_spec_string ("nat-traversal", "NAT traversal",
"NAT traversal mechanism.",
"gtalk-p2p",
- G_PARAM_CONSTRUCT | G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS);
g_object_class_install_property (object_class, PROP_NAT_TRAVERSAL,
param_spec);
@@ -1708,6 +1708,18 @@ _gabble_media_channel_request_contents (GabbleMediaChannel *chan,
create_session (chan, peer, peer_resource);
g_object_set (priv->session, "dialect", dialect, NULL);
+
+ /* Change nat-transport type if we need to */
+ if (!tp_strdiff (transport_ns, NS_JINGLE_TRANSPORT_ICEUDP))
+ {
+ DEBUG ("changing nat-traversal property to ice-udp");
+ g_object_set (chan, "nat-traversal", "ice-udp", NULL);
+ }
+ else if (!tp_strdiff (transport_ns, NS_JINGLE_TRANSPORT_RAWUDP))
+ {
+ DEBUG ("changing nat-traversal property to raw-udp");
+ g_object_set (chan, "nat-traversal", "none", NULL);
+ }
}
/* check it's not a ridiculous number of streams */
diff --git a/src/media-factory.c b/src/media-factory.c
index 85485eb..1b216b1 100644
--- a/src/media-factory.c
+++ b/src/media-factory.c
@@ -42,6 +42,7 @@
#include "jingle-factory.h"
#include "jingle-media-rtp.h"
#include "jingle-session.h"
+
#include "media-channel.h"
#include "namespaces.h"
#include "util.h"
@@ -332,6 +333,27 @@ new_jingle_session_cb (GabbleJingleFactory *jf, GabbleJingleSession *sess, gpoin
{
GabbleMediaChannel *chan = new_media_channel (self, sess, sess->peer,
FALSE, FALSE, FALSE);
+ GList *cs;
+
+ /* FIXME: we need this detection to properly adjust nat-traversal on
+ * the channel. We hope all contents will have the same transport... */
+ cs = gabble_jingle_session_get_contents (sess);
+
+ if (cs != NULL)
+ {
+ GabbleJingleContent *c = cs->data;
+ gchar *ns;
+
+ g_object_get (c, "transport-ns", &ns, NULL);
+
+ if (!tp_strdiff (ns, NS_JINGLE_TRANSPORT_ICEUDP))
+ g_object_set (chan, "nat-traversal", "ice-udp", NULL);
+ else if (!tp_strdiff (ns, NS_JINGLE_TRANSPORT_RAWUDP))
+ g_object_set (chan, "nat-traversal", "none", NULL);
+
+ g_list_free (cs);
+ }
+
tp_channel_manager_emit_new_channel (self,
TP_EXPORTABLE_CHANNEL (chan), NULL);
}
--
1.5.6.5
More information about the telepathy-commits
mailing list