comparison libpurple/protocols/jabber/jabber.c @ 23867:4bc74deeb503

propagate from branch 'im.pidgin.pidgin' (head 434563a4b8fadb9593c241db4bb5ffd0bf2c0627) to branch 'im.pidgin.soc.2008.vv' (head 59d05cb38af9346d82ce57477273f7b381054bcc)
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sat, 09 Aug 2008 02:24:38 +0000
parents fa8567fa0ca0 e23b447aa5ca
children 551a462b346a
comparison
equal deleted inserted replaced
23684:de8f2d3e538a 23867:4bc74deeb503
54 #include "ping.h" 54 #include "ping.h"
55 #include "si.h" 55 #include "si.h"
56 #include "xdata.h" 56 #include "xdata.h"
57 #include "pep.h" 57 #include "pep.h"
58 #include "adhoccommands.h" 58 #include "adhoccommands.h"
59 #include "jingle.h"
60
61 #ifdef USE_VV
62 #include <gst/farsight/fs-conference-iface.h>
63
64 #define XEP_0167_AUDIO_CAP "urn:xmpp:tmp:jingle:apps:rtp#audio"
65 #define XEP_0167_VIDEO_CAP "urn:xmpp:tmp:jingle:apps:rtp#video"
66 #define GTALK_CAP "http://www.google.com/session/phone"
67
68 #endif
59 69
60 #define JABBER_CONNECT_STEPS (js->gsc ? 9 : 5) 70 #define JABBER_CONNECT_STEPS (js->gsc ? 9 : 5)
61 71
62 static PurplePlugin *my_protocol = NULL; 72 static PurplePlugin *my_protocol = NULL;
63 GList *jabber_features = NULL; 73 GList *jabber_features = NULL;
656 js->next_id = g_random_int(); 666 js->next_id = g_random_int();
657 js->write_buffer = purple_circ_buffer_new(512); 667 js->write_buffer = purple_circ_buffer_new(512);
658 js->old_length = 0; 668 js->old_length = 0;
659 js->keepalive_timeout = -1; 669 js->keepalive_timeout = -1;
660 js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user ? js->user->domain : NULL); 670 js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user ? js->user->domain : NULL);
671
672 #ifdef USE_VV
673 js->sessions = NULL;
674 #endif
661 675
662 if(!js->user) { 676 if(!js->user) {
663 purple_connection_error_reason (gc, 677 purple_connection_error_reason (gc,
664 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS, 678 PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
665 _("Invalid XMPP ID")); 679 _("Invalid XMPP ID"));
1267 1281
1268 void jabber_close(PurpleConnection *gc) 1282 void jabber_close(PurpleConnection *gc)
1269 { 1283 {
1270 JabberStream *js = gc->proto_data; 1284 JabberStream *js = gc->proto_data;
1271 1285
1286 #ifdef USE_VV
1287 /* Close all of the open Jingle sessions on this stream */
1288 jabber_jingle_session_terminate_sessions(js);
1289 #endif
1290
1272 /* Don't perform any actions on the ssl connection 1291 /* Don't perform any actions on the ssl connection
1273 * if we were forcibly disconnected because it will crash 1292 * if we were forcibly disconnected because it will crash
1274 * on some SSL backends. 1293 * on some SSL backends.
1275 */ 1294 */
1276 if (!gc->disconnect_timeout) 1295 if (!gc->disconnect_timeout)
1896 JabberBuddyResource *jbr; 1915 JabberBuddyResource *jbr;
1897 1916
1898 if(!(jid = jabber_id_new(who))) 1917 if(!(jid = jabber_id_new(who)))
1899 return; 1918 return;
1900 1919
1920 #ifdef USE_VV
1921 jabber_jingle_session_terminate_session_media(js, who);
1922 #endif
1901 if((jb = jabber_buddy_find(js, who, TRUE)) && 1923 if((jb = jabber_buddy_find(js, who, TRUE)) &&
1902 (jbr = jabber_buddy_find_resource(jb, jid->resource))) { 1924 (jbr = jabber_buddy_find_resource(jb, jid->resource))) {
1903 if(jbr->thread_id) { 1925 if(jbr->thread_id) {
1904 g_free(jbr->thread_id); 1926 g_free(jbr->thread_id);
1905 jbr->thread_id = NULL; 1927 jbr->thread_id = NULL;
2372 2394
2373 gboolean jabber_offline_message(const PurpleBuddy *buddy) 2395 gboolean jabber_offline_message(const PurpleBuddy *buddy)
2374 { 2396 {
2375 return TRUE; 2397 return TRUE;
2376 } 2398 }
2399
2400 #ifdef USE_VV
2401
2402 PurpleMedia *
2403 jabber_initiate_media(PurpleConnection *gc, const char *who,
2404 PurpleMediaStreamType type)
2405 {
2406 return jabber_jingle_session_initiate_media(gc->proto_data, who, type);
2407 }
2408
2409 gboolean jabber_can_do_media(PurpleConnection *gc, const char *who,
2410 PurpleMediaStreamType type)
2411 {
2412 JabberStream *js = (JabberStream *) gc->proto_data;
2413 JabberBuddy *jb;
2414
2415 if (!js) {
2416 purple_debug_error("jabber", "jabber_can_do_media: NULL stream\n");
2417 return FALSE;
2418 }
2419
2420 jb = jabber_buddy_find(js, who, FALSE);
2421
2422 if (!jb) {
2423 purple_debug_error("jabber", "Could not find buddy\n");
2424 return FALSE;
2425 }
2426 /* XMPP will only support two-way media, AFAIK... */
2427 if (type == (PURPLE_MEDIA_AUDIO | PURPLE_MEDIA_VIDEO)) {
2428 purple_debug_info("jabber",
2429 "Checking audio/video XEP support for %s\n", who);
2430 return (jabber_buddy_has_capability(jb, XEP_0167_AUDIO_CAP) ||
2431 jabber_buddy_has_capability(jb, GTALK_CAP)) &&
2432 jabber_buddy_has_capability(jb, XEP_0167_VIDEO_CAP);
2433 } else if (type == (PURPLE_MEDIA_AUDIO)) {
2434 purple_debug_info("jabber",
2435 "Checking audio XEP support for %s\n", who);
2436 return jabber_buddy_has_capability(jb, XEP_0167_AUDIO_CAP) ||
2437 jabber_buddy_has_capability(jb, GTALK_CAP);
2438 } else if (type == (PURPLE_MEDIA_VIDEO)) {
2439 purple_debug_info("jabber",
2440 "Checking video XEP support for %s\n", who);
2441 return jabber_buddy_has_capability(jb, XEP_0167_VIDEO_CAP);
2442 }
2443
2444 return FALSE;
2445 }
2446
2447 #endif
2377 2448
2378 void jabber_register_commands(void) 2449 void jabber_register_commands(void)
2379 { 2450 {
2380 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL, 2451 purple_cmd_register("config", "", PURPLE_CMD_P_PRPL,
2381 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY, 2452 PURPLE_CMD_FLAG_CHAT | PURPLE_CMD_FLAG_PRPL_ONLY,