[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