Mercurial > pidgin.yaz
diff libpurple/protocols/jabber/jabber.c @ 26190:d6e23439b77c
Change purple_prpl_can_do_media to purple_prpl_get_media_caps.
This allows for it to only be called once. From the caps returned you
can then tell which media capabilities a buddy has without having to
call the function for each different type.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Wed, 11 Feb 2009 00:01:20 +0000 |
parents | af42303654a5 |
children | 9fcff08ce726 |
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jabber.c Sun Feb 08 23:17:51 2009 +0000 +++ b/libpurple/protocols/jabber/jabber.c Wed Feb 11 00:01:20 2009 +0000 @@ -2591,11 +2591,11 @@ return jingle_rtp_initiate_media(gc->proto_data, who, type); } -gboolean jabber_can_do_media(PurpleConnection *gc, const char *who, - PurpleMediaSessionType type) +PurpleMediaCaps jabber_get_media_caps(PurpleConnection *gc, const char *who) { JabberStream *js = (JabberStream *) gc->proto_data; JabberBuddy *jb; + PurpleMediaCaps caps = PURPLE_MEDIA_CAPS_NONE; if (!js) { purple_debug_error("jabber", "jabber_can_do_media: NULL stream\n"); @@ -2609,34 +2609,30 @@ return FALSE; } - if (!jabber_buddy_has_capability(jb, JINGLE_TRANSPORT_ICEUDP) && - !jabber_buddy_has_capability(jb, - 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; + if (jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_AUDIO)) + caps |= PURPLE_MEDIA_CAPS_AUDIO | + PURPLE_MEDIA_CAPS_AUDIO_SINGLE_DIRECTION; + if (jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_VIDEO)) + caps |= PURPLE_MEDIA_CAPS_VIDEO | + PURPLE_MEDIA_CAPS_VIDEO_SINGLE_DIRECTION; + if (caps & PURPLE_MEDIA_CAPS_AUDIO && caps & PURPLE_MEDIA_CAPS_VIDEO) + caps |= PURPLE_MEDIA_CAPS_AUDIO_VIDEO; + if (caps != PURPLE_MEDIA_CAPS_NONE) { + if (!jabber_buddy_has_capability(jb, + JINGLE_TRANSPORT_ICEUDP) && + !jabber_buddy_has_capability(jb, + JINGLE_TRANSPORT_RAWUDP)) { + purple_debug_info("jingle-rtp", "Buddy doesn't " + "support the same transport types\n"); + caps = PURPLE_MEDIA_CAPS_NONE; + } else + caps |= PURPLE_MEDIA_CAPS_MODIFY_SESSION | + PURPLE_MEDIA_CAPS_CHANGE_DIRECTION; } - - /* XMPP will only support two-way media, AFAIK... */ - if (type == (PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO)) { - purple_debug_info("jabber", - "Checking audio/video XEP support for %s\n", who); - return (jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_AUDIO) || - jabber_buddy_has_capability(jb, GTALK_CAP)) && - jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_VIDEO); - } else if (type == (PURPLE_MEDIA_AUDIO)) { - purple_debug_info("jabber", - "Checking audio XEP support for %s\n", who); - return jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_AUDIO) || - jabber_buddy_has_capability(jb, GTALK_CAP); - } else if (type == (PURPLE_MEDIA_VIDEO)) { - purple_debug_info("jabber", - "Checking video XEP support for %s\n", who); - return jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_VIDEO); - } - - return FALSE; + if (jabber_buddy_has_capability(jb, GTALK_CAP)) + caps |= PURPLE_MEDIA_CAPS_AUDIO; + + return caps; } #endif