Wed, 13 May 2009 20:29:03 +0000
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(¶ms[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(¶ms[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(¶ms[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(¶ms[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 | } |