[telepathy-gabble/master] enabled use of JingleTransportIceUdp

Senko Rasic senko.rasic at collabora.co.uk
Mon Jun 29 04:43:04 PDT 2009


---
 src/capabilities.c   |    2 +-
 src/jingle-factory.c |    2 ++
 src/jingle-factory.h |    2 +-
 src/media-channel.c  |   41 +++++++++++++++++++++++++++++------------
 src/namespaces.h     |    5 ++---
 src/types.h          |    3 ++-
 6 files changed, 37 insertions(+), 18 deletions(-)

diff --git a/src/capabilities.c b/src/capabilities.c
index 50c2b91..a84fbc0 100644
--- a/src/capabilities.c
+++ b/src/capabilities.c
@@ -60,7 +60,7 @@ static const Feature self_advertised_features[] =
   { FEATURE_OPTIONAL, NS_JINGLE_RTP, PRESENCE_CAP_JINGLE_RTP },
   { FEATURE_OPTIONAL, NS_JINGLE_RTP_AUDIO, PRESENCE_CAP_JINGLE_RTP_AUDIO },
   { FEATURE_OPTIONAL, NS_JINGLE_RTP_VIDEO, PRESENCE_CAP_JINGLE_RTP_VIDEO },
-  { FEATURE_OPTIONAL, NS_JINGLE_TRANSPORT_ICE,
+  { FEATURE_OPTIONAL, NS_JINGLE_TRANSPORT_ICEUDP,
       PRESENCE_CAP_JINGLE_TRANSPORT_ICE },
 
   { FEATURE_OPTIONAL, NS_OLPC_BUDDY_PROPS "+notify", PRESENCE_CAP_OLPC_1},
diff --git a/src/jingle-factory.c b/src/jingle-factory.c
index 1a9db85..4e604f0 100644
--- a/src/jingle-factory.c
+++ b/src/jingle-factory.c
@@ -37,6 +37,7 @@
 #include "jingle-session.h"
 #include "jingle-transport-google.h"
 #include "jingle-transport-rawudp.h"
+#include "jingle-transport-iceudp.h"
 #include "namespaces.h"
 #include "util.h"
 
@@ -528,6 +529,7 @@ gabble_jingle_factory_constructor (GType type,
   jingle_media_rtp_register (self);
   jingle_transport_google_register (self);
   jingle_transport_rawudp_register (self);
+  jingle_transport_iceudp_register (self);
 
   return obj;
 }
diff --git a/src/jingle-factory.h b/src/jingle-factory.h
index 9af5452..2ca3854 100644
--- a/src/jingle-factory.h
+++ b/src/jingle-factory.h
@@ -80,7 +80,7 @@ typedef enum {
   JINGLE_TRANSPORT_UNKNOWN,
   JINGLE_TRANSPORT_GOOGLE_P2P,
   JINGLE_TRANSPORT_RAW_UDP,
-  JINGLE_TRANSPORT_ICE
+  JINGLE_TRANSPORT_ICE_UDP,
 } JingleTransportType;
 
 typedef enum {
diff --git a/src/media-channel.c b/src/media-channel.c
index 2bd46ac..2e870c2 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -1465,9 +1465,9 @@ CHOOSE_TRANSPORT:
   /* We prefer ICE, Google-P2P, then raw UDP */
 
   if (gabble_presence_resource_has_caps (presence, resource,
-        PRESENCE_CAP_JINGLE_TRANSPORT_ICE))
+        PRESENCE_CAP_JINGLE_TRANSPORT_ICEUDP))
     {
-      *transport_ns = NS_JINGLE_TRANSPORT_ICE;
+      *transport_ns = NS_JINGLE_TRANSPORT_ICEUDP;
     }
   else if (gabble_presence_resource_has_caps (presence, resource,
         PRESENCE_CAP_GOOGLE_TRANSPORT_P2P))
@@ -2482,7 +2482,7 @@ stream_direction_changed_cb (GabbleMediaStream *stream,
 
 #define JINGLE_CAPS \
   ( PRESENCE_CAP_JINGLE015 | PRESENCE_CAP_JINGLE032 \
-  | PRESENCE_CAP_GOOGLE_TRANSPORT_P2P )
+  | PRESENCE_CAP_JINGLE_TRANSPORT_RAWUDP )
 
 #define JINGLE_AUDIO_CAPS \
   ( PRESENCE_CAP_JINGLE_RTP | PRESENCE_CAP_JINGLE_RTP_AUDIO \
@@ -2496,20 +2496,37 @@ GabblePresenceCapabilities
 _gabble_media_channel_typeflags_to_caps (TpChannelMediaCapabilities flags)
 {
   GabblePresenceCapabilities caps = 0;
+  gboolean gtalk_p2p;
 
-  /* currently we can only signal any (GTalk or Jingle calls) using
-   * the GTalk-P2P transport */
-  if (flags & TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_GTALK_P2P)
+  DEBUG ("adding Jingle caps (%s, %s)",
+    flags & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO ? "audio" : "no audio",
+    flags & TP_CHANNEL_MEDIA_CAPABILITY_VIDEO ? "video" : "no video");
+
+  /* We speak Jingle (old and new), and can always do raw UDP */
+  caps |= JINGLE_CAPS;
+
+  if (flags & TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_ICE_UDP)
+    caps |= PRESENCE_CAP_JINGLE_TRANSPORT_ICEUDP;
+
+  gtalk_p2p = flags & TP_CHANNEL_MEDIA_CAPABILITY_NAT_TRAVERSAL_GTALK_P2P;
+
+  if (gtalk_p2p)
+    caps |= PRESENCE_CAP_GOOGLE_TRANSPORT_P2P;
+
+  if (flags & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO)
     {
-      DEBUG ("adding jingle caps");
+      caps |= JINGLE_AUDIO_CAPS;
 
-      caps |= JINGLE_CAPS;
+      if (gtalk_p2p)
+        caps |= GTALK_CAPS;
+    }
 
-      if (flags & TP_CHANNEL_MEDIA_CAPABILITY_AUDIO)
-        caps |= GTALK_CAPS | JINGLE_AUDIO_CAPS;
+  if (flags & TP_CHANNEL_MEDIA_CAPABILITY_VIDEO)
+    {
+      caps |= JINGLE_VIDEO_CAPS;
 
-      if (flags & TP_CHANNEL_MEDIA_CAPABILITY_VIDEO)
-        caps |= GTALK_VIDEO_CAPS | JINGLE_VIDEO_CAPS;
+      if (gtalk_p2p)
+        caps |= GTALK_VIDEO_CAPS;
     }
 
   return caps;
diff --git a/src/namespaces.h b/src/namespaces.h
index 391154f..e88513e 100644
--- a/src/namespaces.h
+++ b/src/namespaces.h
@@ -70,13 +70,12 @@
 /* Video capability in Google's Jingle dialect */
 #define NS_GOOGLE_SESSION_VIDEO "http://www.google.com/session/video"
 
-/* Jingle ICE-UDP transport */
-#define NS_JINGLE_TRANSPORT_ICE     \
-  "http://jabber.org/protocol/jingle/transport/ice"
 /* google-p2p transport */
 #define NS_GOOGLE_TRANSPORT_P2P "http://www.google.com/transport/p2p"
 /* Jingle RAW-UDP transport */
 #define NS_JINGLE_TRANSPORT_RAWUDP "urn:xmpp:jingle:transports:raw-udp:0"
+/* Jingle ICE-UDP transport */
+#define NS_JINGLE_TRANSPORT_ICEUDP "urn:xmpp:jingle:transports:ice-udp:0"
 
 #define NS_MUC                  "http://jabber.org/protocol/muc"
 #define NS_MUC_BYTESTREAM       "http://telepathy.freedesktop.org/xmpp/protocol/muc-bytestream"
diff --git a/src/types.h b/src/types.h
index f891417..9384301 100644
--- a/src/types.h
+++ b/src/types.h
@@ -48,6 +48,7 @@ typedef struct _GabbleJingleSession GabbleJingleSession;
 typedef struct _GabbleJingleContent GabbleJingleContent;
 typedef struct _GabbleJingleTransportGoogle GabbleJingleTransportGoogle;
 typedef struct _GabbleJingleTransportRawUdp GabbleJingleTransportRawUdp;
+typedef struct _GabbleJingleTransportIceUdp GabbleJingleTransportIceUdp;
 typedef struct _GabbleJingleMediaRtp GabbleJingleMediaRtp;
 
 typedef struct _JingleCandidate JingleCandidate;
@@ -73,7 +74,7 @@ typedef enum {
     PRESENCE_CAP_OLPC_1 = 1 << 11,
     PRESENCE_CAP_JINGLE_RTP = 1 << 12,
     PRESENCE_CAP_JINGLE032 = 1 << 13,
-    PRESENCE_CAP_JINGLE_TRANSPORT_ICE = 1 << 14,
+    PRESENCE_CAP_JINGLE_TRANSPORT_ICEUDP = 1 << 14,
     PRESENCE_CAP_JINGLE_TRANSPORT_RAWUDP = 1 << 15,
     PRESENCE_CAP_GEOLOCATION = 1 << 16,
     PRESENCE_CAP_SI_FILE_TRANSFER = 1 << 17,
-- 
1.5.6.5




More information about the telepathy-commits mailing list