diff libpurple/protocols/jabber/jabber.c @ 25648:16543025aed1

Moved jingle.c global variable "sessions" into JabberStream. Allows media sessions between two accounts in the same client.
author Mike Ruprecht <maiku@soc.pidgin.im>
date Sat, 24 May 2008 01:40:34 +0000
parents e1c8ec1259de
children 4b9b265a8100
line wrap: on
line diff
--- a/libpurple/protocols/jabber/jabber.c	Fri May 23 02:42:32 2008 +0000
+++ b/libpurple/protocols/jabber/jabber.c	Sat May 24 01:40:34 2008 +0000
@@ -632,6 +632,10 @@
 	js->keepalive_timeout = -1;
 	js->certificate_CN = g_strdup(connect_server[0] ? connect_server : js->user->domain);
 
+#ifdef USE_FARSIGHT
+	js->sessions = NULL;
+#endif
+
 	if(!js->user) {
 		purple_connection_error_reason (gc,
 			PURPLE_CONNECTION_ERROR_INVALID_SETTINGS,
@@ -1244,12 +1248,15 @@
 
 #ifdef USE_FARSIGHT
 	/* Close all of the open media sessions on this stream */
-	GList *iter = jabber_jingle_session_find_by_js(js);
+	GList *values = g_hash_table_get_values(js->sessions);
+	GList *iter = values;
 
 	for (; iter; iter = iter->next) {
 		JingleSession *session = (JingleSession *)iter->data;
 		purple_media_hangup(session->media);
 	}
+
+	g_list_free(values);
 #endif
 
 	/* Don't perform any actions on the ssl connection
@@ -2625,7 +2632,7 @@
 	xmlnode *content = xmlnode_get_child(jingle, "content");
 	const char *sid = xmlnode_get_attrib(jingle, "sid");
 	const char *action = xmlnode_get_attrib(jingle, "action");
-	JingleSession *session = jabber_jingle_session_find_by_id(sid);
+	JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
 	GList *remote_codecs = NULL;
 	GList *remote_transports = NULL;
 	GList *codec_intersection;
@@ -2706,7 +2713,7 @@
 	JabberIq *result = jabber_iq_new(js, JABBER_IQ_SET);
 	xmlnode *jingle = xmlnode_get_child(packet, "jingle");
 	const char *sid = xmlnode_get_attrib(jingle, "sid");
-	JingleSession *session = jabber_jingle_session_find_by_id(sid);
+	JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
 
 	xmlnode_set_attrib(result->node, "to",
 			jabber_jingle_session_get_remote_jid(session));
@@ -2732,7 +2739,7 @@
 	xmlnode *transport = xmlnode_get_child(content, "transport");
 	GList *remote_candidates = jabber_jingle_get_candidates(transport);
 	const char *sid = xmlnode_get_attrib(jingle, "sid");
-	JingleSession *session = jabber_jingle_session_find_by_id(sid);
+	JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
 
 	if(!session)
 		purple_debug_error("jabber", "jabber_handle_session_candidates couldn't find session\n");
@@ -2757,7 +2764,7 @@
 {
 	xmlnode *jingle = xmlnode_get_child(packet, "jingle");
 	const char *sid = xmlnode_get_attrib(jingle, "sid");
-	JingleSession *session = jabber_jingle_session_find_by_id(sid);
+	JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
 
 	if (!jabber_jingle_session_is_initiator(session) && session->session_started) {
 		JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
@@ -2799,7 +2806,7 @@
 	sid = xmlnode_get_attrib(jingle, "sid");
 	initiator = xmlnode_get_attrib(jingle, "initiator");
 
-	if (jabber_jingle_session_find_by_id(sid)) {
+	if (jabber_jingle_session_find_by_id(js, sid)) {
 		/* This should only happen if you start a session with yourself */
 		purple_debug_error("jabber", "Jingle session with id={%s} already exists\n", sid);
 		return;