[telepathy-gabble/master] Simplify _pick_best_resource.

Will Thompson will.thompson at collabora.co.uk
Thu Jun 25 11:12:56 PDT 2009


The previous logic had some ... interesting features, like assuming that
anyone who speaks modern Jingle understands audio and video. This is
somewhat more straightforward:

 * Try modern Jingle;
 * Try Jingle draft 0.15;
 * Try GTalk 0.3, with video if appropriate;
 * Try GTalk 0.4.
---
 src/media-channel.c |   72 ++++++++++++++++++++-------------------------------
 1 files changed, 28 insertions(+), 44 deletions(-)

diff --git a/src/media-channel.c b/src/media-channel.c
index 0728445..2bd46ac 100644
--- a/src/media-channel.c
+++ b/src/media-channel.c
@@ -1391,6 +1391,12 @@ _pick_best_resource (GabbleMediaChannel *chan,
 
   /* Try newest Jingle standard */
   caps = PRESENCE_CAP_JINGLE_RTP;
+
+  if (want_audio)
+    caps |= PRESENCE_CAP_JINGLE_RTP_AUDIO;
+  if (want_video)
+    caps |= PRESENCE_CAP_JINGLE_RTP_VIDEO;
+
   resource = gabble_presence_pick_resource_by_caps (presence, caps);
 
   if (resource != NULL)
@@ -1399,9 +1405,14 @@ _pick_best_resource (GabbleMediaChannel *chan,
       goto CHOOSE_TRANSPORT;
     }
 
-  /* Else try older Jingle draft, audio + video */
-  caps = PRESENCE_CAP_JINGLE_DESCRIPTION_VIDEO |
-      PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO;
+  /* Else try older Jingle draft */
+  caps = 0;
+
+  if (want_audio)
+    caps |= PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO;
+  if (want_video)
+    caps |= PRESENCE_CAP_JINGLE_DESCRIPTION_VIDEO;
+
   resource = gabble_presence_pick_resource_by_caps (presence, caps);
 
   if (resource != NULL)
@@ -1410,67 +1421,40 @@ _pick_best_resource (GabbleMediaChannel *chan,
       goto CHOOSE_TRANSPORT;
     }
 
-  /* There is still hope, try GTalk, but only when asked for both audio and
-   * video */
-  if (want_audio && want_video)
-    {
-      caps = PRESENCE_CAP_GOOGLE_VIDEO | PRESENCE_CAP_GOOGLE_VOICE;
-      resource = gabble_presence_pick_resource_by_caps (presence, caps);
-
-      if (resource != NULL)
-        {
-          *dialect = JINGLE_DIALECT_GTALK3;
-          goto CHOOSE_TRANSPORT;
-        }
-    }
-
-  /* In this unlikely case, we can get by with just video */
+  /* The Google dialects can't do video alone. */
   if (!want_audio)
     {
-      caps = PRESENCE_CAP_JINGLE_DESCRIPTION_VIDEO;
-      resource = gabble_presence_pick_resource_by_caps (presence, caps);
-
-      if (resource != NULL)
-        {
-          *dialect = JINGLE_DIALECT_V015;
-          goto CHOOSE_TRANSPORT;
-        }
+      DEBUG ("No resource which supports video alone available");
+      return NULL;
     }
 
-  /* Uh, huh, we can't provide what's requested. */
+  /* Okay, let's try GTalk 0.3, possibly with video. */
+  caps = PRESENCE_CAP_GOOGLE_VOICE;
+
   if (want_video)
-    {
-      DEBUG ("No resource with video support available");
-      return NULL;
-    }
+    caps |= PRESENCE_CAP_GOOGLE_VIDEO;
 
-  /* Ok, try just older Jingle draft, audio */
-  caps = PRESENCE_CAP_JINGLE_DESCRIPTION_AUDIO;
   resource = gabble_presence_pick_resource_by_caps (presence, caps);
 
   if (resource != NULL)
     {
-      *dialect = JINGLE_DIALECT_V015;
+      *dialect = JINGLE_DIALECT_GTALK3;
       goto CHOOSE_TRANSPORT;
     }
 
-  /* There is still hope, try GTalk 0.4 */
-  caps = PRESENCE_CAP_GOOGLE_VOICE | PRESENCE_CAP_GOOGLE_TRANSPORT_P2P;
-  resource = gabble_presence_pick_resource_by_caps (presence, caps);
-
-  if (resource != NULL)
+  if (want_video)
     {
-      *dialect = JINGLE_DIALECT_GTALK4;
-      goto CHOOSE_TRANSPORT;
+      DEBUG ("No resource which supports audio+video available");
+      return NULL;
     }
 
-  /* GTalk 0.3 maybe ? */
-  caps = PRESENCE_CAP_GOOGLE_VOICE;
+  /* Maybe GTalk 0.4 will save us all... ? */
+  caps = PRESENCE_CAP_GOOGLE_VOICE | PRESENCE_CAP_GOOGLE_TRANSPORT_P2P;
   resource = gabble_presence_pick_resource_by_caps (presence, caps);
 
   if (resource != NULL)
     {
-      *dialect = JINGLE_DIALECT_GTALK3;
+      *dialect = JINGLE_DIALECT_GTALK4;
       goto CHOOSE_TRANSPORT;
     }
 
-- 
1.5.6.5




More information about the telepathy-commits mailing list