libpurple/protocols/jabber/jingle/jingle.c

Sat, 28 Mar 2009 00:58:02 +0000

author
Michael Ruprecht <maiku@pidgin.im>
date
Sat, 28 Mar 2009 00:58:02 +0000
branch
vv
changeset 26495
52846ebe1c7d
parent 26403
6cbd9cac430c
child 26694
3d9ac30490ab
permissions
-rw-r--r--

Don't assume a PurpleMedia instance will be created immediately.

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
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
362 jingle_parse(JabberStream *js, xmlnode *packet)
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
363 {
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
364 const gchar *type = xmlnode_get_attrib(packet, "type");
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
365 xmlnode *jingle;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
366 const gchar *action;
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
367 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
368 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
369 JingleSession *session;
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
370
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
371 if (!type || strcmp(type, "set")) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
372 /* 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
373 return;
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
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
376 /* is this a Jingle package? */
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
377 if (!(jingle = xmlnode_get_child(packet, "jingle"))) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
378 /* 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
379 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
380 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
381
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
382 if (!(action = xmlnode_get_attrib(jingle, "action"))) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
383 /* 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
384 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
385 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
386
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
387 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
388
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
389 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
390 action);
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
391
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
392 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
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 }
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
396
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
397 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
398 && 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
399 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
400 /* 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
401 return;
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
402 }
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
403
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
404 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
405 if (session) {
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
406 /* 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
407 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
408 "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
409 /* 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
410 return;
23749
526619469cc1 Simplify the Jingle handlers by moving repetitive code into the parse function.
Michael Ruprecht <maiku@pidgin.im>
parents: 23748
diff changeset
411 } else {
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
412 session = jingle_session_create(js, sid,
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
413 xmlnode_get_attrib(packet, "to"),
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
414 xmlnode_get_attrib(packet, "from"), FALSE);
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
415 }
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
416 }
26401
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
417
83a81d5e61ad Restructure Jingle action handlers to only require modification in one place.
Michael Ruprecht <maiku@pidgin.im>
parents: 26293
diff changeset
418 jingle_actions[action_type].handler(session, jingle);
23747
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
419 }
86aacf5be74e Further decouple Jingle from iq.c
Michael Ruprecht <maiku@pidgin.im>
parents: 23745
diff changeset
420
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
421 static void
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
422 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
423 {
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
424 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
425 }
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
426
26143
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
427 void
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
428 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
429 {
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
430 if (js->sessions)
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26215
diff changeset
431 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
432 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
433 }
673b6665624d Restructure Jingle code to more easily support multiple application types.
Michael Ruprecht <maiku@pidgin.im>
parents: 26137
diff changeset
434
26286
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
435 GParameter *
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
436 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
437 {
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
438 /* 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
439 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
440 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
441 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
442 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
443
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
444 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
445 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
446
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-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
449 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
450 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
451 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
452 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
453 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
454 "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
455 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
456 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
457 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
458 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
459 }
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
460
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
461 *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
462 return params;
443041606e32 Add automatic discovery of GTalk STUN servers when using a Gtalk account
Marcus Lundblad <malu@pidgin.im>
parents: 26221
diff changeset
463 }

mercurial