diff libpurple/protocols/jabber/jabber.c @ 25005:44a528094cbf

Support initiating voice calls to GTalk and Gmail.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Wed, 07 Jan 2009 04:40:24 +0000
parents f0c2e27c7ae7
children 685c8f5f85c7
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jabber.c	Wed Jan 07 03:07:01 2009 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Wed Jan 07 04:40:24 2009 +0000
@@ -2552,7 +2552,29 @@
 jabber_initiate_media(PurpleConnection *gc, const char *who, 
 		      PurpleMediaSessionType type)
 {
-	return jingle_rtp_initiate_media(gc->proto_data, who, type);
+	JabberStream *js = (JabberStream *) gc->proto_data;
+	JabberBuddy *jb;
+
+	if (!js) {
+		purple_debug_error("jabber",
+				"jabber_initiate_media: NULL stream\n");
+		return NULL;
+	}
+
+	jb = jabber_buddy_find(js, who, FALSE);
+
+	if (!jb) {
+		purple_debug_error("jabber", "Could not find buddy\n");
+		return NULL;
+	}
+
+	if (type & PURPLE_MEDIA_AUDIO &&
+			!jabber_buddy_has_capability(jb,
+			JINGLE_APP_RTP_SUPPORT_AUDIO) &&
+			jabber_buddy_has_capability(jb, GTALK_CAP))
+		return jabber_google_session_initiate(gc->proto_data, who, type);
+	else
+		return jingle_rtp_initiate_media(gc->proto_data, who, type);
 }
 
 gboolean jabber_can_do_media(PurpleConnection *gc, const char *who, 
@@ -2575,8 +2597,9 @@
 
 	if (!jabber_buddy_has_capability(jb, JINGLE_TRANSPORT_ICEUDP) &&
 			!jabber_buddy_has_capability(jb,
-			JINGLE_TRANSPORT_RAWUDP)) {
-		purple_debug_error("jingle-rtp", "Buddy doesn't support "
+			JINGLE_TRANSPORT_RAWUDP) &&
+			!jabber_buddy_has_capability(jb, GTALK_CAP)) {
+		purple_debug_info("jingle-rtp", "Buddy doesn't support "
 				"the same transport types\n");
 		return FALSE;
 	}