Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/jabber.c @ 26022:46387cbfaf85
propagate from branch 'im.pidgin.pidgin' (head 0e036cef0f8a3bdfd1d7f7fc082edca43d3153df)
to branch 'im.pidgin.maiku.vv' (head e27dec62113f7fa6c149e927bef4838231e7315a)
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Sun, 19 Oct 2008 04:59:51 +0000 |
parents | a61c017d3a99 8bfa1f01f035 |
children | 70ae1029bb70 |
comparison
equal
deleted
inserted
replaced
24203:c35bb090d1f3 | 26022:46387cbfaf85 |
---|---|
56 #include "si.h" | 56 #include "si.h" |
57 #include "xdata.h" | 57 #include "xdata.h" |
58 #include "pep.h" | 58 #include "pep.h" |
59 #include "adhoccommands.h" | 59 #include "adhoccommands.h" |
60 | 60 |
61 #include "jingle/jingle.h" | |
62 #include "jingle/rtp.h" | |
63 | |
64 #ifdef USE_VV | |
65 #include <gst/farsight/fs-conference-iface.h> | |
66 | |
67 #define GTALK_CAP "http://www.google.com/session/phone" | |
68 | |
69 #endif | |
61 | 70 |
62 #define JABBER_CONNECT_STEPS (js->gsc ? 9 : 5) | 71 #define JABBER_CONNECT_STEPS (js->gsc ? 9 : 5) |
63 | 72 |
64 static PurplePlugin *my_protocol = NULL; | 73 static PurplePlugin *my_protocol = NULL; |
65 GList *jabber_features = NULL; | 74 GList *jabber_features = NULL; |
662 js->next_id = g_random_int(); | 671 js->next_id = g_random_int(); |
663 js->write_buffer = purple_circ_buffer_new(512); | 672 js->write_buffer = purple_circ_buffer_new(512); |
664 js->old_length = 0; | 673 js->old_length = 0; |
665 js->keepalive_timeout = -1; | 674 js->keepalive_timeout = -1; |
666 js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user ? js->user->domain : NULL); | 675 js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user ? js->user->domain : NULL); |
676 #ifdef USE_VV | |
677 js->sessions = NULL; | |
678 #endif | |
667 | 679 |
668 if(!js->user) { | 680 if(!js->user) { |
669 purple_connection_error_reason (gc, | 681 purple_connection_error_reason (gc, |
670 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, | 682 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, |
671 _("Invalid XMPP ID")); | 683 _("Invalid XMPP ID")); |
1273 | 1285 |
1274 void jabber_close(PurpleConnection *gc) | 1286 void jabber_close(PurpleConnection *gc) |
1275 { | 1287 { |
1276 JabberStream *js = gc->proto_data; | 1288 JabberStream *js = gc->proto_data; |
1277 | 1289 |
1290 #ifdef USE_VV | |
1291 /* Close all of the open Jingle sessions on this stream */ | |
1292 jingle_terminate_sessions(js); | |
1293 #endif | |
1294 | |
1278 /* Don't perform any actions on the ssl connection | 1295 /* Don't perform any actions on the ssl connection |
1279 * if we were forcibly disconnected because it will crash | 1296 * if we were forcibly disconnected because it will crash |
1280 * on some SSL backends. | 1297 * on some SSL backends. |
1281 */ | 1298 */ |
1282 if (!gc->disconnect_timeout) | 1299 if (!gc->disconnect_timeout) |
1903 { | 1920 { |
1904 JabberStream *js = gc->proto_data; | 1921 JabberStream *js = gc->proto_data; |
1905 JabberID *jid; | 1922 JabberID *jid; |
1906 JabberBuddy *jb; | 1923 JabberBuddy *jb; |
1907 JabberBuddyResource *jbr; | 1924 JabberBuddyResource *jbr; |
1908 | 1925 |
1909 if(!(jid = jabber_id_new(who))) | 1926 if(!(jid = jabber_id_new(who))) |
1910 return; | 1927 return; |
1911 | 1928 |
1929 #ifdef USE_VV | |
1930 jingle_rtp_terminate_session(js, who); | |
1931 #endif | |
1912 if((jb = jabber_buddy_find(js, who, TRUE)) && | 1932 if((jb = jabber_buddy_find(js, who, TRUE)) && |
1913 (jbr = jabber_buddy_find_resource(jb, jid->resource))) { | 1933 (jbr = jabber_buddy_find_resource(jb, jid->resource))) { |
1914 if(jbr->thread_id) { | 1934 if(jbr->thread_id) { |
1915 g_free(jbr->thread_id); | 1935 g_free(jbr->thread_id); |
1916 jbr->thread_id = NULL; | 1936 jbr->thread_id = NULL; |
2383 | 2403 |
2384 gboolean jabber_offline_message(const PurpleBuddy *buddy) | 2404 gboolean jabber_offline_message(const PurpleBuddy *buddy) |
2385 { | 2405 { |
2386 return TRUE; | 2406 return TRUE; |
2387 } | 2407 } |
2408 #ifdef USE_VV | |
2409 | |
2410 PurpleMedia * | |
2411 jabber_initiate_media(PurpleConnection *gc, const char *who, | |
2412 PurpleMediaSessionType type) | |
2413 { | |
2414 return jingle_rtp_initiate_media(gc->proto_data, who, type); | |
2415 } | |
2416 | |
2417 gboolean jabber_can_do_media(PurpleConnection *gc, const char *who, | |
2418 PurpleMediaSessionType type) | |
2419 { | |
2420 JabberStream *js = (JabberStream *) gc->proto_data; | |
2421 JabberBuddy *jb; | |
2422 | |
2423 if (!js) { | |
2424 purple_debug_error("jabber", "jabber_can_do_media: NULL stream\n"); | |
2425 return FALSE; | |
2426 } | |
2427 | |
2428 jb = jabber_buddy_find(js, who, FALSE); | |
2429 | |
2430 if (!jb) { | |
2431 purple_debug_error("jabber", "Could not find buddy\n"); | |
2432 return FALSE; | |
2433 } | |
2434 /* XMPP will only support two-way media, AFAIK... */ | |
2435 if (type == (PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO)) { | |
2436 purple_debug_info("jabber", | |
2437 "Checking audio/video XEP support for %s\n", who); | |
2438 return (jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_AUDIO) || | |
2439 jabber_buddy_has_capability(jb, GTALK_CAP)) && | |
2440 jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_VIDEO); | |
2441 } else if (type == (PURPLE_MEDIA_AUDIO)) { | |
2442 purple_debug_info("jabber", | |
2443 "Checking audio XEP support for %s\n", who); | |
2444 return jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_AUDIO) || | |
2445 jabber_buddy_has_capability(jb, GTALK_CAP); | |
2446 } else if (type == (PURPLE_MEDIA_VIDEO)) { | |
2447 purple_debug_info("jabber", | |
2448 "Checking video XEP support for %s\n", who); | |
2449 return jabber_buddy_has_capability(jb, JINGLE_APP_RTP_SUPPORT_VIDEO); | |
2450 } | |
2451 | |
2452 return FALSE; | |
2453 } | |
2454 | |
2455 #endif | |
2388 | 2456 |
2389 void jabber_register_commands(void) | 2457 void jabber_register_commands(void) |
2390 { | 2458 { |
2391 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL, | 2459 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL, |
2392 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, | 2460 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, |