annotate libpurple/protocols/jabber/jingle.c @ 25667:41d6d4217d21

Further decoupled Jingle code from jabber.c: * Removed unnecessary Jingle functions from the header * Moved JingleSession structure to jingle.c * Created functions to remove jabber.c's dependence on JingleSession: - jabber_jingle_session_terminate_session_media - jabber_jingle_session_terminate_sessions
author Mike Ruprecht <maiku@soc.pidgin.im>
date Mon, 02 Jun 2008 21:58:39 +0000
parents e73b03097664
children 2ebe89114923
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
1 /*
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
3 *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
4 * This program is free software; you can redistribute it and/or modify
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
5 * it under the terms of the GNU General Public License as published by
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
6 * the Free Software Foundation; either version 2 of the License, or
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
7 * (at your option) any later version.
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
8 *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
9 * This program is distributed in the hope that it will be useful,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
12 * GNU General Public License for more details.
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
13 *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
14 * You should have received a copy of the GNU General Public License
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
15 * along with this program; if not, write to the Free Software
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
17 *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
18 */
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
19
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
20 #include "config.h"
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
21 #include "purple.h"
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
22 #include "jingle.h"
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
23 #include "xmlnode.h"
25666
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
24 #include "iq.h"
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
25
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
26 #include <stdlib.h>
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
27 #include <string.h>
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
28 #include <glib.h>
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
29
25654
cbe97caec684 Use USE_VV instead of USE_FARSIGHT.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25648
diff changeset
30 #ifdef USE_VV
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
31
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
32 #include <gst/farsight/fs-candidate.h>
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
33
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
34 typedef struct {
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
35 char *id;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
36 JabberStream *js;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
37 PurpleMedia *media;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
38 char *remote_jid;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
39 char *initiator;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
40 gboolean is_initiator;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
41 gboolean session_started;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
42 } JingleSession;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
43
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
44 static gboolean
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
45 jabber_jingle_session_equal(gconstpointer a, gconstpointer b)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
46 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
47 purple_debug_info("jingle",
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
48 "jabber_jingle_session_equal, comparing %s and %s\n",
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
49 ((JingleSession *)a)->id,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
50 ((JingleSession *)b)->id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
51 return !strcmp(((JingleSession *) a)->id, ((JingleSession *) b)->id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
52 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
53
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
54 static JingleSession *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
55 jabber_jingle_session_create_internal(JabberStream *js,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
56 const char *id)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
57 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
58 JingleSession *sess = g_new0(JingleSession, 1);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
59 sess->js = js;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
60
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
61 if (id) {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
62 sess->id = g_strdup(id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
63 } else if (js) {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
64 /* init the session ID... */
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
65 sess->id = jabber_get_next_id(js);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
66 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
67
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
68 /* insert it into the hash table */
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
69 if (!js->sessions) {
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
70 purple_debug_info("jingle", "Creating hash table for sessions\n");
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
71 js->sessions = g_hash_table_new(g_str_hash, g_str_equal);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
72 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
73 purple_debug_info("jingle", "inserting session with key: %s into table\n",
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
74 sess->id);
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
75 g_hash_table_insert(js->sessions, sess->id, sess);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
76
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
77 sess->session_started = FALSE;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
78
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
79 return sess;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
80 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
81
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
82 static JabberStream *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
83 jabber_jingle_session_get_js(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
84 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
85 return sess->js;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
86 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
87
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
88 static JingleSession *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
89 jabber_jingle_session_create(JabberStream *js)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
90 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
91 JingleSession *sess = jabber_jingle_session_create_internal(js, NULL);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
92 sess->is_initiator = TRUE;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
93 return sess;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
94 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
95
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
96 static JingleSession *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
97 jabber_jingle_session_create_by_id(JabberStream *js, const char *id)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
98 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
99 JingleSession *sess = jabber_jingle_session_create_internal(js, id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
100 sess->is_initiator = FALSE;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
101 return sess;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
102 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
103
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
104 static const char *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
105 jabber_jingle_session_get_id(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
106 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
107 return sess->id;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
108 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
109
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
110 static void
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
111 jabber_jingle_session_destroy(JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
112 {
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
113 g_hash_table_remove(sess->js->sessions, sess->id);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
114 g_free(sess->id);
25661
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
115 g_object_unref(sess->media);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
116 g_free(sess);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
117 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
118
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
119 static JingleSession *
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
120 jabber_jingle_session_find_by_id(JabberStream *js, const char *id)
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
121 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
122 purple_debug_info("jingle", "find_by_id %s\n", id);
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
123 purple_debug_info("jingle", "hash table: %p\n", js->sessions);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
124 purple_debug_info("jingle", "hash table size %d\n",
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
125 g_hash_table_size(js->sessions));
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
126 purple_debug_info("jingle", "lookup: %p\n", g_hash_table_lookup(js->sessions, id));
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
127 return (JingleSession *) g_hash_table_lookup(js->sessions, id);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
128 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
129
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
130 static JingleSession *
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
131 jabber_jingle_session_find_by_jid(JabberStream *js, const char *jid)
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
132 {
25648
16543025aed1 Moved jingle.c global variable "sessions" into JabberStream.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25647
diff changeset
133 GList *values = g_hash_table_get_values(js->sessions);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
134 GList *iter = values;
25661
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
135 gboolean use_bare = strchr(jid, '/') == NULL;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
136
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
137 for (; iter; iter = iter->next) {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
138 JingleSession *session = (JingleSession *)iter->data;
25661
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
139 gchar *cmp_jid = use_bare ? jabber_get_bare_jid(session->remote_jid)
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
140 : g_strdup(session->remote_jid);
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
141 if (!strcmp(jid, cmp_jid)) {
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
142 g_free(cmp_jid);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
143 g_list_free(values);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
144 return session;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
145 }
25661
d048100a43ab Free the PurpleMedia object when the media session ends and fix ending
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25654
diff changeset
146 g_free(cmp_jid);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
147 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
148
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
149 g_list_free(values);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
150 return NULL;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
151 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
152
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
153 static GList *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
154 jabber_jingle_get_codecs(const xmlnode *description)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
155 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
156 GList *codecs = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
157 xmlnode *codec_element = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
158 const char *encoding_name,*id, *clock_rate;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
159 FsCodec *codec;
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
160
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
161 for (codec_element = xmlnode_get_child(description, "payload-type") ;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
162 codec_element ;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
163 codec_element = xmlnode_get_next_twin(codec_element)) {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
164 encoding_name = xmlnode_get_attrib(codec_element, "name");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
165 id = xmlnode_get_attrib(codec_element, "id");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
166 clock_rate = xmlnode_get_attrib(codec_element, "clockrate");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
167
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
168 codec = fs_codec_new(atoi(id), encoding_name,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
169 FS_MEDIA_TYPE_AUDIO,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
170 clock_rate ? atoi(clock_rate) : 0);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
171 codecs = g_list_append(codecs, codec);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
172 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
173 return codecs;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
174 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
175
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
176 static GList *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
177 jabber_jingle_get_candidates(const xmlnode *transport)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
178 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
179 GList *candidates = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
180 xmlnode *candidate = NULL;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
181 FsCandidate *c;
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
182
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
183 for (candidate = xmlnode_get_child(transport, "candidate") ;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
184 candidate ;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
185 candidate = xmlnode_get_next_twin(candidate)) {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
186 const char *type = xmlnode_get_attrib(candidate, "type");
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
187 c = fs_candidate_new(xmlnode_get_attrib(candidate, "component"),
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
188 atoi(xmlnode_get_attrib(candidate, "component")),
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
189 strcmp(type, "host") == 0 ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
190 FS_CANDIDATE_TYPE_HOST :
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
191 strcmp(type, "prflx") == 0 ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
192 FS_CANDIDATE_TYPE_PRFLX :
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
193 FS_CANDIDATE_TYPE_RELAY,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
194 strcmp(xmlnode_get_attrib(candidate, "protocol"),
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
195 "udp") == 0 ?
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
196 FS_NETWORK_PROTOCOL_UDP :
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
197 FS_NETWORK_PROTOCOL_TCP,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
198 xmlnode_get_attrib(candidate, "ip"),
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
199 atoi(xmlnode_get_attrib(candidate, "port")));
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
200 candidates = g_list_append(candidates, c);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
201 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
202
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
203 return candidates;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
204 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
205
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
206 static PurpleMedia *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
207 jabber_jingle_session_get_media(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
208 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
209 return sess->media;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
210 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
211
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
212 static void
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
213 jabber_jingle_session_set_media(JingleSession *sess, PurpleMedia *media)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
214 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
215 sess->media = media;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
216 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
217
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
218 static const char *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
219 jabber_jingle_session_get_remote_jid(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
220 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
221 return sess->remote_jid;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
222 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
223
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
224 static void
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
225 jabber_jingle_session_set_remote_jid(JingleSession *sess,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
226 const char *remote_jid)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
227 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
228 sess->remote_jid = strdup(remote_jid);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
229 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
230
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
231 static const char *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
232 jabber_jingle_session_get_initiator(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
233 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
234 return sess->initiator;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
235 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
236
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
237 static void
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
238 jabber_jingle_session_set_initiator(JingleSession *sess,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
239 const char *initiator)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
240 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
241 sess->initiator = g_strdup(initiator);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
242 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
243
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
244 static gboolean
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
245 jabber_jingle_session_is_initiator(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
246 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
247 return sess->is_initiator;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
248 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
249
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
250 static xmlnode *
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
251 jabber_jingle_session_create_jingle_element(const JingleSession *sess,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
252 const char *action)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
253 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
254 xmlnode *jingle = xmlnode_new("jingle");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
255 xmlnode_set_namespace(jingle, "urn:xmpp:tmp:jingle");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
256 xmlnode_set_attrib(jingle, "action", action);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
257 xmlnode_set_attrib(jingle, "initiator",
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
258 jabber_jingle_session_get_initiator(sess));
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
259 xmlnode_set_attrib(jingle, "responder",
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
260 jabber_jingle_session_is_initiator(sess) ?
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
261 jabber_jingle_session_get_remote_jid(sess) :
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
262 jabber_jingle_session_get_initiator(sess));
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
263 xmlnode_set_attrib(jingle, "sid", sess->id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
264
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
265 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
266 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
267
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
268 static xmlnode *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
269 jabber_jingle_session_create_terminate(const JingleSession *sess,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
270 const char *reasoncode,
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
271 const char *reasontext)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
272 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
273 xmlnode *jingle =
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
274 jabber_jingle_session_create_jingle_element(sess, "session-terminate");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
275 xmlnode_set_attrib(jingle, "resoncode", reasoncode);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
276 if (reasontext) {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
277 xmlnode_set_attrib(jingle, "reasontext", reasontext);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
278 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
279 xmlnode_set_attrib(jingle, "sid", sess->id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
280
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
281 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
282 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
283
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
284 static xmlnode *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
285 jabber_jingle_session_create_description(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
286 {
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
287 GList *codecs = purple_media_get_local_audio_codecs(sess->media);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
288 xmlnode *description = xmlnode_new("description");
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
289
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
290 xmlnode_set_namespace(description, "urn:xmpp:tmp:jingle:apps:audio-rtp");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
291
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
292 /* get codecs */
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
293 for (; codecs ; codecs = codecs->next) {
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
294 FsCodec *codec = (FsCodec*)codecs->data;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
295 char id[8], clockrate[10], channels[10];
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
296 xmlnode *payload = xmlnode_new_child(description, "payload-type");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
297
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
298 g_snprintf(id, sizeof(id), "%d", codec->id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
299 g_snprintf(clockrate, sizeof(clockrate), "%d", codec->clock_rate);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
300 g_snprintf(channels, sizeof(channels), "%d", codec->channels);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
301
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
302 xmlnode_set_attrib(payload, "name", codec->encoding_name);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
303 xmlnode_set_attrib(payload, "id", id);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
304 xmlnode_set_attrib(payload, "clockrate", clockrate);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
305 xmlnode_set_attrib(payload, "channels", channels);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
306 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
307
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
308 fs_codec_list_destroy(codecs);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
309 return description;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
310 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
311
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
312 static guint
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
313 jabber_jingle_get_priority(guint type, guint network)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
314 {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
315 switch (type) {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
316 case FS_CANDIDATE_TYPE_HOST:
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
317 return network == 0 ? 4096 : network == 1 ? 2048 : 1024;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
318 break;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
319 case FS_CANDIDATE_TYPE_PRFLX:
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
320 return 126;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
321 break;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
322 case FS_CANDIDATE_TYPE_RELAY:
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
323 return 100;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
324 break;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
325 default:
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
326 return 0; /* unknown type, should not happen */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
327 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
328 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
329
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
330 static xmlnode *
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
331 jabber_jingle_session_create_candidate_info(FsCandidate *c, FsCandidate *remote)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
332 {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
333 char port[8];
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
334 char prio[8];
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
335 char component[8];
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
336 xmlnode *candidate = NULL;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
337
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
338 candidate = xmlnode_new("candidate");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
339
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
340 g_snprintf(port, sizeof(port), "%d", c->port);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
341 g_snprintf(prio, sizeof(prio), "%d",
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
342 jabber_jingle_get_priority(c->type, 0));
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
343 g_snprintf(component, sizeof(component), "%d", c->component_id);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
344
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
345 xmlnode_set_attrib(candidate, "component", component);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
346 xmlnode_set_attrib(candidate, "foundation", "1"); /* what about this? */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
347 xmlnode_set_attrib(candidate, "generation", "0"); /* ? */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
348 xmlnode_set_attrib(candidate, "ip", c->ip);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
349 xmlnode_set_attrib(candidate, "network", "0"); /* ? */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
350 xmlnode_set_attrib(candidate, "port", port);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
351 xmlnode_set_attrib(candidate, "priority", prio); /* Is this correct? */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
352 xmlnode_set_attrib(candidate, "protocol",
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
353 c->proto == FS_NETWORK_PROTOCOL_UDP ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
354 "udp" : "tcp");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
355 if (c->username)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
356 xmlnode_set_attrib(candidate, "ufrag", c->username);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
357 if (c->password)
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
358 xmlnode_set_attrib(candidate, "pwd", c->password);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
359
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
360 xmlnode_set_attrib(candidate, "type",
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
361 c->type == FS_CANDIDATE_TYPE_HOST ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
362 "host" :
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
363 c->type == FS_CANDIDATE_TYPE_PRFLX ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
364 "prflx" :
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
365 c->type == FS_CANDIDATE_TYPE_RELAY ?
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
366 "relay" : NULL);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
367
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
368 /* relay */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
369 if (c->type == FS_CANDIDATE_TYPE_RELAY) {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
370 /* set rel-addr and rel-port? How? */
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
371 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
372
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
373 if (remote) {
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
374 char remote_port[8];
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
375 g_snprintf(remote_port, sizeof(remote_port), "%d", remote->port);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
376 xmlnode_set_attrib(candidate, "rem-addr", remote->ip);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
377 xmlnode_set_attrib(candidate, "rem-port", remote_port);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
378 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
379
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
380 return candidate;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
381 }
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
382
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
383 /* split into two separate methods, one to generate session-accept
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
384 (includes codecs) and one to generate transport-info (includes transports
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
385 candidates) */
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
386 static xmlnode *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
387 jabber_jingle_session_create_session_accept(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
388 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
389 xmlnode *jingle =
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
390 jabber_jingle_session_create_jingle_element(sess, "session-accept");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
391 xmlnode *content = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
392 xmlnode *description = NULL;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
393 xmlnode *transport = NULL;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
394 xmlnode *candidate = NULL;
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
395
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
396
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
397 content = xmlnode_new_child(jingle, "content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
398 xmlnode_set_attrib(content, "creator", "initiator");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
399 xmlnode_set_attrib(content, "name", "audio-content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
400 xmlnode_set_attrib(content, "profile", "RTP/AVP");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
401
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
402 description = jabber_jingle_session_create_description(sess);
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
403 xmlnode_insert_child(content, description);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
404
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
405 transport = xmlnode_new_child(content, "transport");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
406 xmlnode_set_namespace(transport, "urn:xmpp:tmp:jingle:transports:ice-udp");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
407 candidate = jabber_jingle_session_create_candidate_info(
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
408 purple_media_get_local_candidate(sess->media),
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
409 purple_media_get_remote_candidate(sess->media));
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
410 xmlnode_insert_child(transport, candidate);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
411
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
412 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
413 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
414
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
415 static xmlnode *
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
416 jabber_jingle_session_create_transport_info(const JingleSession *sess)
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
417 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
418 xmlnode *jingle =
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
419 jabber_jingle_session_create_jingle_element(sess, "transport-info");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
420 xmlnode *content = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
421 xmlnode *transport = NULL;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
422 GList *candidates = purple_media_get_local_audio_candidates(sess->media);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
423
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
424 content = xmlnode_new_child(jingle, "content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
425 xmlnode_set_attrib(content, "creator", "initiator");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
426 xmlnode_set_attrib(content, "name", "audio-content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
427 xmlnode_set_attrib(content, "profile", "RTP/AVP");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
428
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
429 transport = xmlnode_new_child(content, "transport");
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
430 xmlnode_set_namespace(transport, "urn:xmpp:tmp:jingle:transports:ice-udp");
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
431
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
432 /* get transport candidate */
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
433 for (; candidates ; candidates = candidates->next) {
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
434 FsCandidate *c = (FsCandidate *) candidates->data;
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
435
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
436 if (!strcmp(c->ip, "127.0.0.1")) {
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
437 continue;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
438 }
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
439
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
440 xmlnode_insert_child(transport,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
441 jabber_jingle_session_create_candidate_info(c, NULL));
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
442 }
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
443 fs_candidate_list_destroy(candidates);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
444
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
445 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
446 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
447
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
448 static xmlnode *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
449 jabber_jingle_session_create_content_replace(const JingleSession *sess,
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
450 FsCandidate *native_candidate,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
451 FsCandidate *remote_candidate)
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
452 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
453 xmlnode *jingle =
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
454 jabber_jingle_session_create_jingle_element(sess, "content-replace");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
455 xmlnode *content = NULL;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
456 xmlnode *transport = NULL;
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
457
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
458 purple_debug_info("jingle", "creating content-modify for native candidate %s " \
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
459 ", remote candidate %s\n", native_candidate->candidate_id,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
460 remote_candidate->candidate_id);
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
461
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
462 content = xmlnode_new_child(jingle, "content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
463 xmlnode_set_attrib(content, "creator", "initiator");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
464 xmlnode_set_attrib(content, "name", "audio-content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
465 xmlnode_set_attrib(content, "profile", "RTP/AVP");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
466
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
467 /* get top codec from codec_intersection to put here... */
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
468 /* later on this should probably handle changing codec */
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
469
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
470 xmlnode_insert_child(content, jabber_jingle_session_create_description(sess));
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
471
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
472 transport = xmlnode_new_child(content, "transport");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
473 xmlnode_set_namespace(transport, "urn:xmpp:tmp:jingle:transports:ice-udp");
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
474 xmlnode_insert_child(transport,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
475 jabber_jingle_session_create_candidate_info(native_candidate,
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
476 remote_candidate));
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
477
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
478 purple_debug_info("jingle", "End create content modify\n");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
479
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
480 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
481 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
482
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
483 static xmlnode *
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
484 jabber_jingle_session_create_content_accept(const JingleSession *sess)
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
485 {
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
486 xmlnode *jingle =
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
487 jabber_jingle_session_create_jingle_element(sess, "content-accept");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
488
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
489 xmlnode *content = xmlnode_new_child(jingle, "content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
490 xmlnode *description = jabber_jingle_session_create_description(sess);
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
491
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
492 xmlnode_set_attrib(content, "creator", "initiator");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
493 xmlnode_set_attrib(content, "name", "audio-content");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
494 xmlnode_set_attrib(content, "profile", "RTP/AVP");
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
495
25647
e1c8ec1259de Updates voice and video to use Farsight 2, gets XMPP voice conferences
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25638
diff changeset
496 xmlnode_insert_child(content, description);
25638
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
497
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
498 return jingle;
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
499 }
9f36ed35615e Add the new jingle.c/h files.
Sadrul Habib Chowdhury <imadil@gmail.com>
parents:
diff changeset
500
25666
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
501 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
502 jabber_jingle_session_send_content_accept(JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
503 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
504 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
505 JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
506 xmlnode *jingle = jabber_jingle_session_create_content_accept(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
507 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
508 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
509
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
510 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
511 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
512 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
513
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
514 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
515 jabber_jingle_session_send_session_accept(JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
516 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
517 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
518 JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
519 xmlnode *jingle = jabber_jingle_session_create_session_accept(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
520 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
521 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
522
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
523 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
524 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
525 purple_debug_info("jabber", "Sent session accept, starting stream\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
526 gst_element_set_state(purple_media_get_audio_pipeline(session->media), GST_STATE_PLAYING);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
527
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
528 session->session_started = TRUE;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
529 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
530
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
531 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
532 jabber_jingle_session_send_session_reject(JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
533 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
534 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
535 JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
536 xmlnode *jingle = jabber_jingle_session_create_terminate(session,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
537 "decline", NULL);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
538 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
539 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
540 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
541 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
542 jabber_jingle_session_destroy(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
543 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
544
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
545 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
546 jabber_jingle_session_send_session_terminate(JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
547 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
548 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
549 JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
550 xmlnode *jingle = jabber_jingle_session_create_terminate(session,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
551 "no-error", NULL);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
552 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
553 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
554 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
555 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
556 jabber_jingle_session_destroy(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
557 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
558
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
559 /* callback called when new local transport candidate(s) are available on the
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
560 Farsight stream */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
561 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
562 jabber_jingle_session_candidates_prepared(PurpleMedia *media, JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
563 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
564 if (!jabber_jingle_session_is_initiator(session)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
565 /* create transport-info package */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
566 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
567 JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
568 xmlnode *jingle = jabber_jingle_session_create_transport_info(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
569 purple_debug_info("jabber", "jabber_session_candidates_prepared: %d candidates\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
570 g_list_length(purple_media_get_local_audio_candidates(session->media)));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
571 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
572 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
573
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
574 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
575 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
576 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
577 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
578
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
579 /* callback called when a pair of transport candidates (local and remote)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
580 has been established */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
581 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
582 jabber_jingle_session_candidate_pair_established(PurpleMedia *media,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
583 FsCandidate *native_candidate,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
584 FsCandidate *remote_candidate,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
585 JingleSession *session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
586 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
587 purple_debug_info("jabber", "jabber_candidate_pair_established called\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
588 /* if we are the initiator, we should send a content-modify message */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
589 if (jabber_jingle_session_is_initiator(session)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
590 JabberIq *result;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
591 xmlnode *jingle;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
592
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
593 purple_debug_info("jabber", "we are the initiator, let's send content-modify\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
594
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
595 result = jabber_iq_new(jabber_jingle_session_get_js(session), JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
596
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
597 /* shall change this to a "content-replace" */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
598 jingle = jabber_jingle_session_create_content_replace(session,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
599 native_candidate,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
600 remote_candidate);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
601 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
602 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
603 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
604 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
605 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
606 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
607
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
608 static gboolean
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
609 jabber_jingle_session_initiate_media_internal(JingleSession *session,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
610 const char *initiator,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
611 const char *remote_jid)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
612 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
613 PurpleMedia *media = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
614
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
615 media = purple_media_manager_create_media(purple_media_manager_get(),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
616 session->js->gc, "fsrtpconference", remote_jid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
617
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
618 if (!media) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
619 purple_debug_error("jabber", "Couldn't create fsrtpconference\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
620 return FALSE;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
621 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
622
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
623 /* this will need to be changed to "nice" once the libnice transmitter is finished */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
624 if (!purple_media_add_stream(media, remote_jid, PURPLE_MEDIA_AUDIO, "rawudp")) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
625 purple_debug_error("jabber", "Couldn't create audio stream\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
626 purple_media_reject(media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
627 return FALSE;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
628 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
629
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
630 jabber_jingle_session_set_remote_jid(session, remote_jid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
631 jabber_jingle_session_set_initiator(session, initiator);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
632 jabber_jingle_session_set_media(session, media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
633
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
634 /* connect callbacks */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
635 g_signal_connect_swapped(G_OBJECT(media), "accepted",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
636 G_CALLBACK(jabber_jingle_session_send_session_accept), session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
637 g_signal_connect_swapped(G_OBJECT(media), "reject",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
638 G_CALLBACK(jabber_jingle_session_send_session_reject), session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
639 g_signal_connect_swapped(G_OBJECT(media), "hangup",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
640 G_CALLBACK(jabber_jingle_session_send_session_terminate), session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
641 g_signal_connect(G_OBJECT(media), "candidates-prepared",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
642 G_CALLBACK(jabber_jingle_session_candidates_prepared), session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
643 g_signal_connect(G_OBJECT(media), "candidate-pair",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
644 G_CALLBACK(jabber_jingle_session_candidate_pair_established), session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
645
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
646 purple_media_ready(media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
647
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
648 return TRUE;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
649 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
650
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
651 static void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
652 jabber_jingle_session_initiate_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
653 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
654 const char *from = xmlnode_get_attrib(packet, "from");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
655 JingleSession *session = jabber_jingle_session_find_by_jid(js, from);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
656 PurpleMedia *media = session->media;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
657 JabberIq *result;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
658 xmlnode *jingle;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
659
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
660 if (!strcmp(xmlnode_get_attrib(packet, "type"), "error")) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
661 purple_media_got_hangup(media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
662 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
663 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
664
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
665 /* catch errors */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
666 if (xmlnode_get_child(packet, "error")) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
667 purple_media_got_hangup(media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
668 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
669 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
670
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
671 /* create transport-info package */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
672 result = jabber_iq_new(jabber_jingle_session_get_js(session), JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
673 jingle = jabber_jingle_session_create_transport_info(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
674 purple_debug_info("jabber", "jabber_session_candidates_prepared: %d candidates\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
675 g_list_length(purple_media_get_local_audio_candidates(session->media)));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
676 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
677 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
678
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
679 xmlnode_insert_child(result->node, jingle);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
680 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
681 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
682
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
683 PurpleMedia *
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
684 jabber_jingle_session_initiate_media(PurpleConnection *gc, const char *who,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
685 PurpleMediaStreamType type)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
686 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
687 /* create content negotiation */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
688 JabberStream *js = gc->proto_data;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
689 JabberIq *request = jabber_iq_new(js, JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
690 xmlnode *jingle, *content, *description, *transport;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
691 GList *codecs;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
692 JingleSession *session;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
693 JabberBuddy *jb;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
694 JabberBuddyResource *jbr;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
695
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
696 char *jid = NULL, *me = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
697
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
698 /* construct JID to send to */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
699 jb = jabber_buddy_find(js, who, FALSE);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
700 if (!jb) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
701 purple_debug_error("jabber", "Could not find Jabber buddy\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
702 return NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
703 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
704 jbr = jabber_buddy_find_resource(jb, NULL);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
705 if (!jbr) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
706 purple_debug_error("jabber", "Could not find buddy's resource\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
707 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
708
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
709 if ((strchr(who, '/') == NULL) && jbr && (jbr->name != NULL)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
710 jid = g_strdup_printf("%s/%s", who, jbr->name);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
711 } else {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
712 jid = g_strdup(who);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
713 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
714
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
715 session = jabber_jingle_session_create(js);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
716 /* set ourselves as initiator */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
717 me = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain, js->user->resource);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
718
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
719 if (!jabber_jingle_session_initiate_media_internal(session, me, jid)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
720 g_free(jid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
721 g_free(me);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
722 jabber_jingle_session_destroy(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
723 return NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
724 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
725
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
726 g_free(jid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
727 g_free(me);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
728
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
729 codecs = purple_media_get_local_audio_codecs(session->media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
730
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
731 /* create request */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
732
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
733 xmlnode_set_attrib(request->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
734 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
735 jingle = xmlnode_new_child(request->node, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
736 xmlnode_set_namespace(jingle, "urn:xmpp:tmp:jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
737 xmlnode_set_attrib(jingle, "action", "session-initiate");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
738 /* get our JID and a session id... */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
739 xmlnode_set_attrib(jingle, "initiator", jabber_jingle_session_get_initiator(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
740 xmlnode_set_attrib(jingle, "sid", jabber_jingle_session_get_id(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
741
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
742 content = xmlnode_new_child(jingle, "content");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
743 xmlnode_set_attrib(content, "name", "audio-content");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
744 xmlnode_set_attrib(content, "profile", "RTP/AVP");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
745
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
746 description = jabber_jingle_session_create_description(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
747 xmlnode_insert_child(content, description);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
748
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
749 transport = xmlnode_new_child(content, "transport");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
750 xmlnode_set_namespace(transport, "urn:xmpp:tmp:jingle:transports:ice-udp");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
751
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
752 jabber_iq_set_callback(request, jabber_jingle_session_initiate_result_cb, NULL);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
753
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
754 /* send request to other part */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
755 jabber_iq_send(request);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
756
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
757 fs_codec_list_destroy(codecs);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
758
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
759 return session->media;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
760 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
761
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
762 void
25667
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
763 jabber_jingle_session_terminate_session_media(JabberStream *js, const gchar *who)
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
764 {
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
765 JingleSession *session;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
766
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
767 session = jabber_jingle_session_find_by_jid(js, who);
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
768
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
769 if (session)
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
770 purple_media_hangup(session->media);
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
771 }
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
772
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
773 void
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
774 jabber_jingle_session_terminate_sessions(JabberStream *js)
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
775 {
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
776 GList *values = g_hash_table_get_values(js->sessions);
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
777
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
778 for (; values; values = values->next) {
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
779 JingleSession *session = (JingleSession *)values->data;
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
780 purple_media_hangup(session->media);
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
781 }
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
782
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
783 g_list_free(values);
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
784 }
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
785
41d6d4217d21 Further decoupled Jingle code from jabber.c:
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25666
diff changeset
786 void
25666
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
787 jabber_jingle_session_handle_content_replace(JabberStream *js, xmlnode *packet)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
788 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
789 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
790 const char *sid = xmlnode_get_attrib(jingle, "sid");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
791 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
792
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
793 if (!jabber_jingle_session_is_initiator(session) && session->session_started) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
794 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
795 JabberIq *accept = jabber_iq_new(js, JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
796 xmlnode *content_accept = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
797
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
798 /* send acknowledement */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
799 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
800 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
801 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
802
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
803 /* send content-accept */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
804 content_accept = jabber_jingle_session_create_content_accept(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
805 xmlnode_set_attrib(accept->node, "id", xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
806 xmlnode_set_attrib(accept->node, "to", xmlnode_get_attrib(packet, "from"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
807 xmlnode_insert_child(accept->node, content_accept);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
808
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
809 jabber_iq_send(accept);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
810 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
811 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
812
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
813 void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
814 jabber_jingle_session_handle_session_accept(JabberStream *js, xmlnode *packet)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
815 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
816 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
817 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
818 xmlnode *content = xmlnode_get_child(jingle, "content");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
819 const char *sid = xmlnode_get_attrib(jingle, "sid");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
820 const char *action = xmlnode_get_attrib(jingle, "action");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
821 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
822 GList *remote_codecs = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
823 GList *remote_transports = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
824 GList *codec_intersection;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
825 FsCodec *top = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
826 xmlnode *description = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
827 xmlnode *transport = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
828
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
829 /* We should probably check validity of the incoming XML... */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
830
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
831 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
832 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
833 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
834
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
835 description = xmlnode_get_child(content, "description");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
836 transport = xmlnode_get_child(content, "transport");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
837
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
838 /* fetch codecs from remote party */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
839 purple_debug_info("jabber", "get codecs from session-accept\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
840 remote_codecs = jabber_jingle_get_codecs(description);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
841 purple_debug_info("jabber", "get transport candidates from session accept\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
842 remote_transports = jabber_jingle_get_candidates(transport);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
843
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
844 purple_debug_info("jabber", "Got %d codecs from responder\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
845 g_list_length(remote_codecs));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
846 purple_debug_info("jabber", "Got %d transport candidates from responder\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
847 g_list_length(remote_transports));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
848
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
849 purple_debug_info("jabber", "Setting remote codecs on stream\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
850
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
851 purple_media_set_remote_audio_codecs(session->media,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
852 jabber_jingle_session_get_remote_jid(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
853 remote_codecs);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
854
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
855 codec_intersection = purple_media_get_negotiated_audio_codecs(session->media);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
856 purple_debug_info("jabber", "codec_intersection contains %d elems\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
857 g_list_length(codec_intersection));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
858 /* get the top codec */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
859 if (g_list_length(codec_intersection) > 0) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
860 top = (FsCodec *) codec_intersection->data;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
861 purple_debug_info("jabber", "Found a suitable codec on stream = %d\n",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
862 top->id);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
863
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
864 /* we have found a suitable codec, but we will not start the stream
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
865 just yet, wait for transport negotiation to complete... */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
866 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
867 /* if we also got transport candidates, add them to our streams
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
868 list of known remote candidates */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
869 if (g_list_length(remote_transports) > 0) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
870 purple_media_add_remote_audio_candidates(session->media,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
871 jabber_jingle_session_get_remote_jid(session),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
872 remote_transports);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
873 fs_candidate_list_destroy(remote_transports);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
874 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
875 if (g_list_length(codec_intersection) == 0 &&
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
876 g_list_length(remote_transports)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
877 /* we didn't get any candidates and the codec intersection is empty,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
878 this means this was not a content-accept message and we couldn't
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
879 find any suitable codecs, should return error and hang up */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
880
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
881 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
882
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
883 g_list_free(codec_intersection);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
884
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
885 if (!strcmp(action, "session-accept")) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
886 purple_media_got_accept(jabber_jingle_session_get_media(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
887 purple_debug_info("jabber", "Got session-accept, starting stream\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
888 gst_element_set_state(purple_media_get_audio_pipeline(session->media),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
889 GST_STATE_PLAYING);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
890 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
891
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
892 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
893
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
894 session->session_started = TRUE;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
895 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
896
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
897 void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
898 jabber_jingle_session_handle_session_initiate(JabberStream *js, xmlnode *packet)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
899 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
900 JingleSession *session = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
901 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
902 xmlnode *content = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
903 xmlnode *description = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
904 const char *sid = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
905 const char *initiator = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
906 GList *codecs = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
907 JabberIq *result = NULL;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
908
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
909 if (!jingle) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
910 purple_debug_error("jabber", "Malformed request");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
911 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
912 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
913
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
914 sid = xmlnode_get_attrib(jingle, "sid");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
915 initiator = xmlnode_get_attrib(jingle, "initiator");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
916
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
917 if (jabber_jingle_session_find_by_id(js, sid)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
918 /* This should only happen if you start a session with yourself */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
919 purple_debug_error("jabber", "Jingle session with id={%s} already exists\n", sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
920 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
921 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
922 session = jabber_jingle_session_create_by_id(js, sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
923
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
924 /* init media */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
925 content = xmlnode_get_child(jingle, "content");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
926 if (!content) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
927 purple_debug_error("jabber", "jingle tag must contain content tag\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
928 /* should send error here */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
929 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
930 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
931
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
932 description = xmlnode_get_child(content, "description");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
933
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
934 if (!description) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
935 purple_debug_error("jabber", "content tag must contain description tag\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
936 /* we should create an error iq here */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
937 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
938 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
939
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
940 if (!jabber_jingle_session_initiate_media_internal(session, initiator, initiator)) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
941 purple_debug_error("jabber", "Couldn't start media session with %s\n", initiator);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
942 jabber_jingle_session_destroy(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
943 /* we should create an error iq here */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
944 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
945 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
946
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
947 codecs = jabber_jingle_get_codecs(description);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
948
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
949 purple_media_set_remote_audio_codecs(session->media, initiator, codecs);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
950
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
951 result = jabber_iq_new(js, JABBER_IQ_RESULT);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
952 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
953 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
954 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
955 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
956
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
957 void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
958 jabber_jingle_session_handle_session_terminate(JabberStream *js, xmlnode *packet)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
959 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
960 JabberIq *result = jabber_iq_new(js, JABBER_IQ_SET);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
961 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
962 const char *sid = xmlnode_get_attrib(jingle, "sid");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
963 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
964
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
965 if (!session) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
966 purple_debug_error("jabber", "jabber_handle_session_terminate couldn't find session\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
967 return;
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
968 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
969
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
970 xmlnode_set_attrib(result->node, "to",
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
971 jabber_jingle_session_get_remote_jid(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
972 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
973
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
974
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
975
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
976 /* maybe we should look at the reasoncode to determine if it was
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
977 a hangup or a reject, and call different callbacks to purple_media */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
978 gst_element_set_state(purple_media_get_audio_pipeline(session->media), GST_STATE_NULL);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
979
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
980 purple_media_got_hangup(jabber_jingle_session_get_media(session));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
981 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
982 jabber_jingle_session_destroy(session);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
983 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
984
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
985 void
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
986 jabber_jingle_session_handle_transport_info(JabberStream *js, xmlnode *packet)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
987 {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
988 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
989 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
990 xmlnode *content = xmlnode_get_child(jingle, "content");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
991 xmlnode *transport = xmlnode_get_child(content, "transport");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
992 GList *remote_candidates = jabber_jingle_get_candidates(transport);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
993 const char *sid = xmlnode_get_attrib(jingle, "sid");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
994 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
995
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
996 if (!session)
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
997 purple_debug_error("jabber", "jabber_handle_session_candidates couldn't find session\n");
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
998
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
999 /* send acknowledement */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1000 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1001 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1002 jabber_iq_send(result);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1003
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1004 /* add candidates to our list of remote candidates */
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1005 if (g_list_length(remote_candidates) > 0) {
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1006 purple_media_add_remote_audio_candidates(session->media,
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1007 xmlnode_get_attrib(packet, "from"),
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1008 remote_candidates);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1009 fs_candidate_list_destroy(remote_candidates);
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1010 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1011 }
e73b03097664 Moved Jingle message handlers from jabber.c to jingle.c.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25661
diff changeset
1012
25654
cbe97caec684 Use USE_VV instead of USE_FARSIGHT.
Mike Ruprecht <maiku@soc.pidgin.im>
parents: 25648
diff changeset
1013 #endif /* USE_VV */