libpurple/protocols/jabber/jingle/jingle.c

Wed, 13 May 2009 20:29:03 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Wed, 13 May 2009 20:29:03 +0000
changeset 27110
05ca719b901b
parent 26694
3d9ac30490ab
child 28322
ac8fec1d2234
permissions
-rw-r--r--

Support custom smileys in MUCs (when all participants support BoB and a maximum
of 10 participants are in the chat).
Always announce support for BoB, since disable custom smileys will still turn
off fetching them, and BoB can be used for other purposes further on.

22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 /*
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
2 * @file jingle.c
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
3 *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
4 * purple - Jabber Protocol Plugin
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
5 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
10 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
15 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
19 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
20 */
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
22 #include "internal.h"
26286
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
23 #include "network.h"
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
24
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
25 #include "content.h"
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
26 #include "debug.h"
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27 #include "jingle.h"
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28 #include <string.h>
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
29 #include "session.h"
26166
ad7d09fef256 Added a Jingle ice-udp transmitter.
Michael Ruprecht <maiku@pidgin.im>
parents: 26149
diff changeset
30 #include "iceudp.h"
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
31 #include "rawudp.h"
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
32 #include "rtp.h"
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
33
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
34 GType
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
35 jingle_get_type(const gchar *type)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
36 {
26215
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
37 if (!strcmp(type, JINGLE_TRANSPORT_RAWUDP))
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
38 return JINGLE_TYPE_RAWUDP;
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
39 else if (!strcmp(type, JINGLE_TRANSPORT_ICEUDP))
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
40 return JINGLE_TYPE_ICEUDP;
26166
ad7d09fef256 Added a Jingle ice-udp transmitter.
Michael Ruprecht <maiku@pidgin.im>
parents: 26149
diff changeset
41 #if 0
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
42 else if (!strcmp(type, JINGLE_TRANSPORT_SOCKS))
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
43 return JINGLE_TYPE_SOCKS;
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
44 else if (!strcmp(type, JINGLE_TRANSPORT_IBB))
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
45 return JINGLE_TYPE_IBB;
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
46 #endif
26215
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
47 #ifdef USE_VV
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
48 else if (!strcmp(type, JINGLE_APP_RTP))
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
49 return JINGLE_TYPE_RTP;
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
50 #endif
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
51 #if 0
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
52 else if (!strcmp(type, JINGLE_APP_FT))
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
53 return JINGLE_TYPE_FT;
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
54 else if (!strcmp(type, JINGLE_APP_XML))
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
55 return JINGLE_TYPE_XML;
9ecaa256d77b Fix compiling with --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26166
diff changeset
56 #endif
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
57 else
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
58 return G_TYPE_NONE;
23730
ed15b42da75c Jingle sessions now keep track of their transaction state to a degree.
Michael Ruprecht <maiku@pidgin.im>
parents: 23725
diff changeset
59 }
ed15b42da75c Jingle sessions now keep track of their transaction state to a degree.
Michael Ruprecht <maiku@pidgin.im>
parents: 23725
diff changeset
60
ed15b42da75c Jingle sessions now keep track of their transaction state to a degree.
Michael Ruprecht <maiku@pidgin.im>
parents: 23725
diff changeset
61 static void
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
62 jingle_handle_unknown_type(JingleSession *session, xmlnode *jingle)
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
63 {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
64 /* Send error */
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
65 }
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
66
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
67 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
68 jingle_handle_content_accept(JingleSession *session, xmlnode *jingle)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
69 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
70 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
71 jabber_iq_send(jingle_session_create_ack(session, jingle));
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
72
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
73 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
74 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
75 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
76 jingle_session_accept_content(session, name, creator);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
77 /* signal here */
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
78 }
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
79 }
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
80
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
81 static void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
82 jingle_handle_content_add(JingleSession *session, xmlnode *jingle)
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
83 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
84 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
85 jabber_iq_send(jingle_session_create_ack(session, jingle));
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
86
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
87 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
88 JingleContent *pending_content =
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
89 jingle_content_parse(content);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
90 if (pending_content == NULL) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
91 purple_debug_error("jingle",
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
92 "Error parsing \"content-add\" content.\n");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
93 /* XXX: send error here */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
94 } else {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
95 jingle_session_add_pending_content(session,
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
96 pending_content);
23730
ed15b42da75c Jingle sessions now keep track of their transaction state to a degree.
Michael Ruprecht <maiku@pidgin.im>
parents: 23725
diff changeset
97 }
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
98 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
99
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
100 /* XXX: signal here */
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
101 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
102
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
103 static void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
104 jingle_handle_content_modify(JingleSession *session, xmlnode *jingle)
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
105 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
106 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
107 jabber_iq_send(jingle_session_create_ack(session, jingle));
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
108
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
109 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
110 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
111 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
112 JingleContent *local_content = jingle_session_find_content(session, name, creator);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
113
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
114 if (content != NULL) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
115 const gchar *senders = xmlnode_get_attrib(content, "senders");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
116 gchar *local_senders = jingle_content_get_senders(local_content);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
117 if (strcmp(senders, local_senders))
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
118 jingle_content_modify(local_content, senders);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
119 g_free(local_senders);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
120 } else {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
121 purple_debug_error("jingle", "content_modify: unknown content\n");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
122 /* XXX: send error */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
123 }
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
124 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
125 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
126
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
127 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
128 jingle_handle_content_reject(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
129 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
130 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
131 jabber_iq_send(jingle_session_create_ack(session, jingle));
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
132
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
133 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
134 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
135 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
136 jingle_session_remove_pending_content(session, name, creator);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
137 /* signal here */
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
138 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
139 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
140
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
141 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
142 jingle_handle_content_remove(JingleSession *session, xmlnode *jingle)
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
143 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
144 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
145
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
146 jabber_iq_send(jingle_session_create_ack(session, jingle));
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
147
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
148 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
149 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
150 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
151 jingle_session_remove_content(session, name, creator);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
152 }
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
153 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
154
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
155 static void
26293
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
156 jingle_handle_description_info(JingleSession *session, xmlnode *jingle)
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
157 {
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
158 xmlnode *content = xmlnode_get_child(jingle, "content");
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
159
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
160 jabber_iq_send(jingle_session_create_ack(session, jingle));
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
161
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
162 jingle_session_accept_session(session);
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
163
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
164 for (; content; content = xmlnode_get_next_twin(content)) {
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
165 const gchar *name = xmlnode_get_attrib(content, "name");
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
166 const gchar *creator = xmlnode_get_attrib(content, "creator");
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
167 JingleContent *parsed_content =
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
168 jingle_session_find_content(session, name, creator);
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
169 if (parsed_content == NULL) {
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
170 purple_debug_error("jingle", "Error parsing content\n");
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
171 /* XXX: send error */
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
172 } else {
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
173 jingle_content_handle_action(parsed_content, content,
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
174 JINGLE_DESCRIPTION_INFO);
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
175 }
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
176 }
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
177 }
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
178
477ccf9db427 Update to newest XEP-0166 Jingle spec.
Michael Ruprecht <maiku@pidgin.im>
parents: 26286
diff changeset
179 static void
26403
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
180 jingle_handle_security_info(JingleSession *session, xmlnode *jingle)
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
181 {
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
182 jabber_iq_send(jingle_session_create_ack(session, jingle));
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
183 }
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
184
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
185 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
186 jingle_handle_session_accept(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
187 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
188 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
189
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
190 jabber_iq_send(jingle_session_create_ack(session, jingle));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
191
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
192 jingle_session_accept_session(session);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
193
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
194 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
195 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
196 const gchar *creator = xmlnode_get_attrib(content, "creator");
26149
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
197 JingleContent *parsed_content =
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
198 jingle_session_find_content(session, name, creator);
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
199 if (parsed_content == NULL) {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
200 purple_debug_error("jingle", "Error parsing content\n");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
201 /* XXX: send error */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
202 } else {
26149
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
203 jingle_content_handle_action(parsed_content, content,
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
204 JINGLE_SESSION_ACCEPT);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
205 }
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
206 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
207 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
208
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
209 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
210 jingle_handle_session_info(JingleSession *session, xmlnode *jingle)
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
211 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
212 jabber_iq_send(jingle_session_create_ack(session, jingle));
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
213 /* XXX: call signal */
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
214 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
215
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
216 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
217 jingle_handle_session_initiate(JingleSession *session, xmlnode *jingle)
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
218 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
219 xmlnode *content = xmlnode_get_child(jingle, "content");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
220
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
221 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
222 JingleContent *parsed_content = jingle_content_parse(content);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
223 if (parsed_content == NULL) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
224 purple_debug_error("jingle", "Error parsing content\n");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
225 /* XXX: send error */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
226 } else {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
227 jingle_session_add_content(session, parsed_content);
26149
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
228 jingle_content_handle_action(parsed_content, content,
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
229 JINGLE_SESSION_INITIATE);
26137
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
230 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
231 }
0688cf5221c9 Wait for Farsight 2's codecs-ready property to be TRUE before using codecs.
Michael Ruprecht <maiku@pidgin.im>
parents: 26136
diff changeset
232
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
233 jabber_iq_send(jingle_session_create_ack(session, jingle));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
234 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
235
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
236 static void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
237 jingle_handle_session_terminate(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
238 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
239 jabber_iq_send(jingle_session_create_ack(session, jingle));
26113
ad871f934f18 Decouple stream direction. Allows send only or recv only streams.
Michael Ruprecht <maiku@pidgin.im>
parents: 26111
diff changeset
240
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
241 jingle_session_handle_action(session, jingle,
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
242 JINGLE_SESSION_TERMINATE);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
243 /* display reason? */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
244 g_object_unref(session);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
245 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
246
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
247 static void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
248 jingle_handle_transport_accept(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
249 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
250 xmlnode *content = xmlnode_get_child(jingle, "content");
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
251
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
252 jabber_iq_send(jingle_session_create_ack(session, jingle));
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
253
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
254 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
255 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
256 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
257 JingleContent *content = jingle_session_find_content(session, name, creator);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
258 jingle_content_accept_transport(content);
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
259 }
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
260 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
261
23748
bc578c4d64f2 Hide unnecessarily exposed Jingle handler functions
Michael Ruprecht <maiku@pidgin.im>
parents: 23747
diff changeset
262 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
263 jingle_handle_transport_info(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
264 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
265 xmlnode *content = xmlnode_get_child(jingle, "content");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
266
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
267 jabber_iq_send(jingle_session_create_ack(session, jingle));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
268
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
269 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
270 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
271 const gchar *creator = xmlnode_get_attrib(content, "creator");
26149
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
272 JingleContent *parsed_content =
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
273 jingle_session_find_content(session, name, creator);
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
274 if (parsed_content == NULL) {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
275 purple_debug_error("jingle", "Error parsing content\n");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
276 /* XXX: send error */
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
277 } else {
26149
92b095c37277 Fix support for audio and video (at the same time) sessions.
Michael Ruprecht <maiku@pidgin.im>
parents: 26144
diff changeset
278 jingle_content_handle_action(parsed_content, content,
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
279 JINGLE_TRANSPORT_INFO);
23721
15285d082f6c Refactored PurpleMedia to make creating audio or video sessions virtually identical. Audio, video, and audio/video sessions now work. Also added videotestsrc to the video plugin preference.
Michael Ruprecht <maiku@pidgin.im>
parents: 23720
diff changeset
280 }
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
281 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
282 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
283
23748
bc578c4d64f2 Hide unnecessarily exposed Jingle handler functions
Michael Ruprecht <maiku@pidgin.im>
parents: 23747
diff changeset
284 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
285 jingle_handle_transport_reject(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
286 {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
287 xmlnode *content = xmlnode_get_child(jingle, "content");
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
288
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
289 jabber_iq_send(jingle_session_create_ack(session, jingle));
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
290
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
291 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
292 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
293 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
294 JingleContent *content = jingle_session_find_content(session, name, creator);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
295 jingle_content_remove_pending_transport(content);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
296 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
297 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
298
23748
bc578c4d64f2 Hide unnecessarily exposed Jingle handler functions
Michael Ruprecht <maiku@pidgin.im>
parents: 23747
diff changeset
299 static void
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
300 jingle_handle_transport_replace(JingleSession *session, xmlnode *jingle)
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
301 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
302 xmlnode *content = xmlnode_get_child(jingle, "content");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
303
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
304 jabber_iq_send(jingle_session_create_ack(session, jingle));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
305
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
306 for (; content; content = xmlnode_get_next_twin(content)) {
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
307 const gchar *name = xmlnode_get_attrib(content, "name");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
308 const gchar *creator = xmlnode_get_attrib(content, "creator");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
309 xmlnode *xmltransport = xmlnode_get_child(content, "transport");
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
310 JingleTransport *transport = jingle_transport_parse(xmltransport);
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
311 JingleContent *content = jingle_session_find_content(session, name, creator);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
312
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
313 jingle_content_set_pending_transport(content, transport);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
314 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
315 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
316
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
317 typedef struct {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
318 const char *name;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
319 void (*handler)(JingleSession*, xmlnode*);
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
320 } JingleAction;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
321
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
322 static const JingleAction jingle_actions[] = {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
323 {"unknown-type", jingle_handle_unknown_type},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
324 {"content-accept", jingle_handle_content_accept},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
325 {"content-add", jingle_handle_content_add},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
326 {"content-modify", jingle_handle_content_modify},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
327 {"content-reject", jingle_handle_content_reject},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
328 {"content-remove", jingle_handle_content_remove},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
329 {"description-info", jingle_handle_description_info},
26403
6cbd9cac430c Update to be closer to the current Jingle XEP.
Michael Ruprecht <maiku@pidgin.im>
parents: 26402
diff changeset
330 {"security-info", jingle_handle_security_info},
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
331 {"session-accept", jingle_handle_session_accept},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
332 {"session-info", jingle_handle_session_info},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
333 {"session-initiate", jingle_handle_session_initiate},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
334 {"session-terminate", jingle_handle_session_terminate},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
335 {"transport-accept", jingle_handle_transport_accept},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
336 {"transport-info", jingle_handle_transport_info},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
337 {"transport-reject", jingle_handle_transport_reject},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
338 {"transport-replace", jingle_handle_transport_replace},
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
339 };
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
340
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
341 const gchar *
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
342 jingle_get_action_name(JingleActionType action)
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
343 {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
344 return jingle_actions[action].name;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
345 }
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
346
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
347 JingleActionType
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
348 jingle_get_action_type(const gchar *action)
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
349 {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
350 static const int num_actions =
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
351 sizeof(jingle_actions)/sizeof(JingleAction);
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
352 /* Start at 1 to skip the unknown-action type */
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
353 int i = 1;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
354 for (; i < num_actions; ++i) {
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
355 if (!strcmp(action, jingle_actions[i].name))
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
356 return i;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
357 }
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
358 return JINGLE_UNKNOWN_TYPE;
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
359 }
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
360
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
361 void
26694
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
362 jingle_parse(JabberStream *js, const char *from, JabberIqType type,
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
363 const char *id, xmlnode *jingle)
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
364 {
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
365 const gchar *action;
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
366 const gchar *sid;
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
367 JingleActionType action_type;
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
368 JingleSession *session;
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
369
26694
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
370 if (type != JABBER_IQ_SET) {
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
371 /* TODO: send iq error here */
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
372 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
373 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
374
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
375 if (!(action = xmlnode_get_attrib(jingle, "action"))) {
26694
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
376 /* TODO: send iq error here */
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
377 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
378 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
379
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
380 action_type = jingle_get_action_type(action);
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
381
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
382 purple_debug_info("jabber", "got Jingle package action = %s\n",
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
383 action);
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
384
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
385 if (!(sid = xmlnode_get_attrib(jingle, "sid"))) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
386 /* send iq error here */
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
387 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
388 }
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
389
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
390 if (!(session = jingle_session_find_by_sid(js, sid))
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
391 && strcmp(action, "session-initiate")) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
392 purple_debug_error("jingle", "jabber_jingle_session_parse couldn't find session\n");
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
393 /* send iq error here */
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
394 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
395 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
396
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
397 if (action_type == JINGLE_SESSION_INITIATE) {
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
398 if (session) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
399 /* This should only happen if you start a session with yourself */
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
400 purple_debug_error("jingle", "Jingle session with "
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
401 "id={%s} already exists\n", sid);
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
402 /* send iq error */
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
403 return;
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
404 } else {
26694
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
405 char *own_jid = g_strdup_printf("%s@%s/%s", js->user->node,
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
406 js->user->domain, js->user->resource);
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
407 session = jingle_session_create(js, sid, own_jid, from, FALSE);
3d9ac30490ab Fix merge for ./jingle/
Paul Aurich <darkrain42@pidgin.im>
parents: 26403
diff changeset
408 g_free(own_jid);
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
409 }
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
410 }
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
411
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
412 jingle_actions[action_type].handler(session, jingle);
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
413 }
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
414
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
415 static void
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
416 jingle_terminate_sessions_gh(gpointer key, gpointer value, gpointer user_data)
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
417 {
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
418 g_object_unref(value);
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
419 }
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
420
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
421 void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
422 jingle_terminate_sessions(JabberStream *js)
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
423 {
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
424 if (js->sessions)
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
425 g_hash_table_foreach(js->sessions,
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
426 jingle_terminate_sessions_gh, NULL);
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
427 }
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
428
26286
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
429 GParameter *
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
430 jingle_get_params(JabberStream *js, guint *num)
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
431 {
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
432 /* don't set a STUN server if one is set globally in prefs, in that case
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
433 this will be handled in media.c */
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
434 gboolean has_account_stun = js->stun_ip && !purple_network_get_stun_ip();
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
435 guint num_params = has_account_stun ? 2 : 0;
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
436 GParameter *params = NULL;
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
437
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
438 if (num_params > 0) {
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
439 params = g_new0(GParameter, num_params);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
440
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
441 purple_debug_info("jabber",
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
442 "setting param stun-ip for stream using Google auto-config: %s\n",
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
443 js->stun_ip);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
444 params[0].name = "stun-ip";
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
445 g_value_init(&params[0].value, G_TYPE_STRING);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
446 g_value_set_string(&params[0].value, js->stun_ip);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
447 purple_debug_info("jabber",
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
448 "setting param stun-port for stream using Google auto-config: %d\n",
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
449 js->stun_port);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
450 params[1].name = "stun-port";
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
451 g_value_init(&params[1].value, G_TYPE_UINT);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
452 g_value_set_uint(&params[1].value, js->stun_port);
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
453 }
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
454
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
455 *num = num_params;
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
456 return params;
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
457 }

mercurial