libpurple/protocols/jabber/jingle.c

Wed, 04 Jun 2008 19:21:49 +0000

author
Michael Ruprecht <maiku@pidgin.im>
date
Wed, 04 Jun 2008 19:21:49 +0000
branch
soc.2008.vv
changeset 23720
6d4abd450c18
parent 23719
444a2ca670af
child 23721
15285d082f6c
permissions
-rw-r--r--

Added functions to help create Jingle packets. Revised some of the Jingle flow.

22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
1 /*
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
2 * purple - Jabber Protocol Plugin
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
3 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
4 * 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
5 * 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
6 * 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
7 * (at your option) any later version.
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
8 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
9 * 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
10 * 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
11 * 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
12 * GNU General Public License for more details.
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
13 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
14 * 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
15 * 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
16 * 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
17 *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
18 */
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 #include "config.h"
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
21 #include "purple.h"
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
22 #include "jingle.h"
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
23 #include "xmlnode.h"
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
24 #include "iq.h"
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
25
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
26 #include <stdlib.h>
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
27 #include <string.h>
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
28 #include <glib.h>
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
29
23704
9b88c9b23aed Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents: 23698
diff changeset
30 #ifdef USE_VV
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
31
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
32 #include <gst/farsight/fs-candidate.h>
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
33
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
34 #define JINGLE "urn:xmpp:tmp:jingle"
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
35 #define JINGLE_AUDIO "urn:xmpp:tmp:jingle:apps:audio-rtp"
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
36 #define JINGLE_VIDEO "urn:xmpp:tmp:jingle:apps:video-rtp"
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
37 #define TRANSPORT_ICEUDP "urn:xmpp:tmp:jingle:transports:ice-udp"
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
38
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
39 typedef struct {
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
40 char *id;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
41 JabberStream *js;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
42 PurpleMedia *media;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
43 char *remote_jid;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
44 char *initiator;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
45 gboolean is_initiator;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
46 gboolean session_started;
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
47 GHashTable *contents; /* JingleSessionContent table */
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
48 } JingleSession;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
49
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
50 typedef struct {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
51 gchar *name;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
52 JingleSession *session;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
53 gchar *creator;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
54 gchar *sender;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
55 gchar *transport_type;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
56 gchar *type;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
57 } JingleSessionContent;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
58
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
59 static void
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
60 jabber_jingle_session_content_create_internal(JingleSession *session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
61 const gchar *name,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
62 const gchar *creator,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
63 const gchar *sender,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
64 const gchar *transport_type,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
65 const gchar *type)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
66 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
67 JingleSessionContent *content = g_new0(JingleSessionContent, 1);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
68 content->session = session;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
69 content->name = g_strdup(name);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
70 content->creator = g_strdup(creator);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
71 content->sender = g_strdup(sender);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
72 content->transport_type = g_strdup(transport_type);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
73 content->type = g_strdup(type);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
74
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
75 if (!session->contents) {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
76 purple_debug_info("jingle", "Creating hash table for contents\n");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
77 session->contents = g_hash_table_new(g_str_hash, g_str_equal);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
78 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
79 purple_debug_info("jingle", "inserting content with name == \"%s\" into table\n",
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
80 content->name);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
81 g_hash_table_insert(session->contents, content->name, content);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
82 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
83
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
84 static void
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
85 jabber_jingle_session_destroy_content(JingleSessionContent *content)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
86 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
87 purple_debug_info("jingle", "destroying content with name == \"%s\"\n",
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
88 content->name);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
89 g_hash_table_remove(content->session->contents, content->name);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
90 g_free(content->name);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
91 g_free(content->creator);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
92 g_free(content->sender);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
93 g_free(content->transport_type);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
94 g_free(content->type);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
95 g_free(content);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
96 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
97
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
98 static const gchar *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
99 jabber_jingle_session_content_get_name(const JingleSessionContent *jsc)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
100 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
101 return jsc->name;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
102 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
103
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
104 static JingleSession *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
105 jabber_jingle_session_content_get_session(const JingleSessionContent *jsc)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
106 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
107 return jsc->session;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
108 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
109
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
110 static const gchar *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
111 jabber_jingle_session_content_get_creator(const JingleSessionContent *jsc)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
112 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
113 return jsc->creator;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
114 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
115
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
116 static const gchar *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
117 jabber_jingle_session_content_get_sender(const JingleSessionContent *jsc)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
118 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
119 return jsc->sender;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
120 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
121
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
122 static const gchar *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
123 jabber_jingle_session_content_get_transport_type(const JingleSessionContent *jsc)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
124 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
125 return jsc->transport_type;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
126 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
127
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
128 static gboolean
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
129 jabber_jingle_session_content_is_transport_type(const JingleSessionContent *jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
130 const gchar *transport_type)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
131 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
132 return !strcmp(jabber_jingle_session_content_get_transport_type(jsc),
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
133 transport_type);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
134 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
135
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
136 static const gchar *
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
137 jabber_jingle_session_content_get_type(const JingleSessionContent *jsc)
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 return jsc->type;
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
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
142 static gboolean
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
143 jabber_jingle_session_content_is_type(const JingleSessionContent *jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
144 const gchar *type)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
145 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
146 return !strcmp(jabber_jingle_session_content_get_type(jsc), type);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
147 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
148
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
149 static gboolean
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
150 jabber_jingle_session_content_is_vv(const JingleSessionContent *jsc)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
151 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
152 return jabber_jingle_session_content_is_type(jsc, JINGLE_AUDIO) ||
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
153 jabber_jingle_session_content_is_type(jsc, JINGLE_VIDEO);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
154 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
155
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
156 static void
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
157 jabber_jingle_session_content_set_sender(JingleSessionContent *jsc,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
158 const char *sender)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
159 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
160 if (jsc->sender)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
161 g_free(jsc->sender);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
162 jsc->sender = g_strdup(sender);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
163 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
164
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
165 static gboolean
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
166 jabber_jingle_session_equal(gconstpointer a, gconstpointer b)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
167 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
168 purple_debug_info("jingle",
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
169 "jabber_jingle_session_equal, comparing %s and %s\n",
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
170 ((JingleSession *)a)->id,
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
171 ((JingleSession *)b)->id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
172 return !strcmp(((JingleSession *) a)->id, ((JingleSession *) b)->id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
173 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
174
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
175 static JingleSession *
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
176 jabber_jingle_session_create_internal(JabberStream *js,
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
177 const char *id)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
178 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
179 JingleSession *sess = g_new0(JingleSession, 1);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
180 sess->js = js;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
181
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
182 if (id) {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
183 sess->id = g_strdup(id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
184 } else if (js) {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
185 /* init the session ID... */
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
186 sess->id = jabber_get_next_id(js);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
187 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
188
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
189 /* insert it into the hash table */
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
190 if (!js->sessions) {
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
191 purple_debug_info("jingle", "Creating hash table for sessions\n");
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
192 js->sessions = g_hash_table_new(g_str_hash, g_str_equal);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
193 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
194 purple_debug_info("jingle", "inserting session with key: %s into table\n",
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
195 sess->id);
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
196 g_hash_table_insert(js->sessions, sess->id, sess);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
197
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
198 sess->session_started = FALSE;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
199
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
200 return sess;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
201 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
202
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
203 static JabberStream *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
204 jabber_jingle_session_get_js(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
205 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
206 return sess->js;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
207 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
208
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
209 static JingleSession *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
210 jabber_jingle_session_create(JabberStream *js)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
211 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
212 JingleSession *sess = jabber_jingle_session_create_internal(js, NULL);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
213 sess->is_initiator = TRUE;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
214 return sess;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
215 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
216
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
217 static JingleSession *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
218 jabber_jingle_session_create_by_id(JabberStream *js, const char *id)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
219 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
220 JingleSession *sess = jabber_jingle_session_create_internal(js, id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
221 sess->is_initiator = FALSE;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
222 return sess;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
223 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
224
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
225 static const char *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
226 jabber_jingle_session_get_id(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
227 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
228 return sess->id;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
229 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
230
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
231 static void
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
232 jabber_jingle_session_destroy(JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
233 {
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
234 GList *contents = g_hash_table_get_values(sess->contents);
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
235 g_hash_table_remove(sess->js->sessions, sess->id);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
236 g_free(sess->id);
23711
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
237 g_object_unref(sess->media);
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
238
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
239 for (; contents; contents = contents->next)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
240 jabber_jingle_session_destroy_content(contents->data);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
241
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
242 g_list_free(contents);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
243 g_free(sess);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
244 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
245
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
246 static JingleSession *
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
247 jabber_jingle_session_find_by_id(JabberStream *js, const char *id)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
248 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
249 purple_debug_info("jingle", "find_by_id %s\n", id);
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
250 purple_debug_info("jingle", "hash table: %p\n", js->sessions);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
251 purple_debug_info("jingle", "hash table size %d\n",
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
252 g_hash_table_size(js->sessions));
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
253 purple_debug_info("jingle", "lookup: %p\n", g_hash_table_lookup(js->sessions, id));
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
254 return (JingleSession *) g_hash_table_lookup(js->sessions, id);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
255 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
256
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
257 static JingleSession *
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
258 jabber_jingle_session_find_by_jid(JabberStream *js, const char *jid)
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
259 {
23698
0815965bd80b Moved jingle.c global variable "sessions" into JabberStream.
Michael Ruprecht <maiku@pidgin.im>
parents: 23697
diff changeset
260 GList *values = g_hash_table_get_values(js->sessions);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
261 GList *iter = values;
23711
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
262 gboolean use_bare = strchr(jid, '/') == NULL;
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
263
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
264 for (; iter; iter = iter->next) {
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
265 JingleSession *session = (JingleSession *)iter->data;
23711
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
266 gchar *cmp_jid = use_bare ? jabber_get_bare_jid(session->remote_jid)
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
267 : g_strdup(session->remote_jid);
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
268 if (!strcmp(jid, cmp_jid)) {
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
269 g_free(cmp_jid);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
270 g_list_free(values);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
271 return session;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
272 }
23711
c5058fc31d26 Free the PurpleMedia object when the media session ends and fix ending
Michael Ruprecht <maiku@pidgin.im>
parents: 23704
diff changeset
273 g_free(cmp_jid);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
274 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
275
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
276 g_list_free(values);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
277 return NULL;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
278 }
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
279
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
280 static GList *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
281 jabber_jingle_get_codecs(const xmlnode *description)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
282 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
283 GList *codecs = NULL;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
284 xmlnode *codec_element = NULL;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
285 const char *encoding_name,*id, *clock_rate;
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
286 FsCodec *codec;
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
287
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
288 for (codec_element = xmlnode_get_child(description, "payload-type") ;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
289 codec_element ;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
290 codec_element = xmlnode_get_next_twin(codec_element)) {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
291 encoding_name = xmlnode_get_attrib(codec_element, "name");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
292 id = xmlnode_get_attrib(codec_element, "id");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
293 clock_rate = xmlnode_get_attrib(codec_element, "clockrate");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
294
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
295 codec = fs_codec_new(atoi(id), encoding_name,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
296 FS_MEDIA_TYPE_AUDIO,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
297 clock_rate ? atoi(clock_rate) : 0);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
298 codecs = g_list_append(codecs, codec);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
299 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
300 return codecs;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
301 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
302
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
303 static GList *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
304 jabber_jingle_get_candidates(const xmlnode *transport)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
305 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
306 GList *candidates = NULL;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
307 xmlnode *candidate = NULL;
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
308 FsCandidate *c;
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
309
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
310 for (candidate = xmlnode_get_child(transport, "candidate") ;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
311 candidate ;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
312 candidate = xmlnode_get_next_twin(candidate)) {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
313 const char *type = xmlnode_get_attrib(candidate, "type");
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
314 c = fs_candidate_new(xmlnode_get_attrib(candidate, "component"),
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
315 atoi(xmlnode_get_attrib(candidate, "component")),
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
316 strcmp(type, "host") == 0 ?
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
317 FS_CANDIDATE_TYPE_HOST :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
318 strcmp(type, "prflx") == 0 ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
319 FS_CANDIDATE_TYPE_PRFLX :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
320 strcmp(type, "relay") == 0 ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
321 FS_CANDIDATE_TYPE_RELAY :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
322 strcmp(type, "srflx") == 0 ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
323 FS_CANDIDATE_TYPE_SRFLX : 0,
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
324 strcmp(xmlnode_get_attrib(candidate, "protocol"),
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
325 "udp") == 0 ?
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
326 FS_NETWORK_PROTOCOL_UDP :
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
327 FS_NETWORK_PROTOCOL_TCP,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
328 xmlnode_get_attrib(candidate, "ip"),
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
329 atoi(xmlnode_get_attrib(candidate, "port")));
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
330 candidates = g_list_append(candidates, c);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
331 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
332
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
333 return candidates;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
334 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
335
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
336 static JingleSessionContent *
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
337 jabber_jingle_session_get_content(const JingleSession *session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
338 const char *name)
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
339 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
340 return (JingleSession *) name ?
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
341 g_hash_table_lookup(session->contents, name) : NULL;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
342 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
343
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
344 static GList *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
345 jabber_jingle_session_get_contents(const JingleSession *session)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
346 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
347 return g_hash_table_get_values(session->contents);
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
348 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
349
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
350 static PurpleMedia *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
351 jabber_jingle_session_get_media(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
352 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
353 return sess->media;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
354 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
355
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
356 static void
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
357 jabber_jingle_session_set_media(JingleSession *sess, PurpleMedia *media)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
358 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
359 sess->media = media;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
360 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
361
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
362 static const char *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
363 jabber_jingle_session_get_remote_jid(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
364 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
365 return sess->remote_jid;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
366 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
367
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
368 static void
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
369 jabber_jingle_session_set_remote_jid(JingleSession *sess,
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
370 const char *remote_jid)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
371 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
372 sess->remote_jid = strdup(remote_jid);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
373 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
374
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
375 static const char *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
376 jabber_jingle_session_get_initiator(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
377 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
378 return sess->initiator;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
379 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
380
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
381 static void
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
382 jabber_jingle_session_set_initiator(JingleSession *sess,
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
383 const char *initiator)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
384 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
385 sess->initiator = g_strdup(initiator);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
386 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
387
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
388 static gboolean
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
389 jabber_jingle_session_is_initiator(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
390 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
391 return sess->is_initiator;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
392 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
393
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
394 static void
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
395 jabber_jingle_session_add_payload_types(const JingleSessionContent *jsc,
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
396 xmlnode *description)
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
397 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
398 JingleSession *session = jabber_jingle_session_content_get_session(jsc);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
399 PurpleMedia *media = jabber_jingle_session_get_media(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
400 /* change this to the generic function when PurpleMedia supports video */
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
401 GList *codecs = purple_media_get_local_audio_codecs(media);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
402
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
403 for (; codecs ; codecs = codecs->next) {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
404 FsCodec *codec = (FsCodec*)codecs->data;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
405 char id[8], clockrate[10], channels[10];
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
406 xmlnode *payload = xmlnode_new_child(description, "payload-type");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
407
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
408 g_snprintf(id, sizeof(id), "%d", codec->id);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
409 g_snprintf(clockrate, sizeof(clockrate), "%d", codec->clock_rate);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
410 g_snprintf(channels, sizeof(channels), "%d",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
411 codec->channels == 0 ? 1 : codec->channels);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
412
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
413 xmlnode_set_attrib(payload, "name", codec->encoding_name);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
414 xmlnode_set_attrib(payload, "id", id);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
415 xmlnode_set_attrib(payload, "clockrate", clockrate);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
416 xmlnode_set_attrib(payload, "channels", channels);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
417 }
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
418 fs_codec_list_destroy(codecs);
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
419 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
420
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
421 static xmlnode *
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
422 jabber_jingle_session_add_description_vv(const JingleSessionContent *jsc,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
423 xmlnode *description)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
424 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
425 xmlnode_set_attrib(description, "profile", "RTP/AVP");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
426 return description;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
427 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
428
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
429 static xmlnode *
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
430 jabber_jingle_session_add_description(const JingleSessionContent *jsc,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
431 xmlnode *content)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
432 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
433 xmlnode *description = xmlnode_new_child(content, "description");
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
434 xmlnode_set_namespace(description,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
435 jabber_jingle_session_content_get_type(jsc));
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
436
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
437 if (jabber_jingle_session_content_is_vv(jsc))
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
438 return jabber_jingle_session_add_description_vv(jsc, description);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
439 else
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
440 return description;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
441 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
442
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
443 static xmlnode *
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
444 jabber_jingle_session_add_candidate_iceudp(xmlnode *transport,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
445 FsCandidate *c,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
446 FsCandidate *remote)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
447 {
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
448 char port[8];
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
449 char prio[8];
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
450 char component[8];
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
451 xmlnode *candidate = xmlnode_new_child(transport, "candidate");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
452
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
453 g_snprintf(port, sizeof(port), "%d", c->port);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
454 g_snprintf(prio, sizeof(prio), "%d", c->priority);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
455 g_snprintf(component, sizeof(component), "%d", c->component_id);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
456
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
457 xmlnode_set_attrib(candidate, "component", component);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
458 xmlnode_set_attrib(candidate, "foundation", "1"); /* what about this? */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
459 xmlnode_set_attrib(candidate, "generation", "0"); /* ? */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
460 xmlnode_set_attrib(candidate, "ip", c->ip);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
461 xmlnode_set_attrib(candidate, "network", "0"); /* ? */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
462 xmlnode_set_attrib(candidate, "port", port);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
463 xmlnode_set_attrib(candidate, "priority", prio); /* Is this correct? */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
464 xmlnode_set_attrib(candidate, "protocol",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
465 c->proto == FS_NETWORK_PROTOCOL_UDP ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
466 "udp" : "tcp");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
467 if (c->username)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
468 xmlnode_set_attrib(transport, "ufrag", c->username);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
469 if (c->password)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
470 xmlnode_set_attrib(transport, "pwd", c->password);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
471
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
472 xmlnode_set_attrib(candidate, "type",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
473 c->type == FS_CANDIDATE_TYPE_HOST ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
474 "host" :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
475 c->type == FS_CANDIDATE_TYPE_PRFLX ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
476 "prflx" :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
477 c->type == FS_CANDIDATE_TYPE_RELAY ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
478 "relay" :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
479 c->type == FS_CANDIDATE_TYPE_SRFLX ?
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
480 "srflx" : NULL);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
481
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
482 /* relay */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
483 if (c->type == FS_CANDIDATE_TYPE_RELAY) {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
484 /* set rel-addr and rel-port? How? */
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
485 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
486
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
487 if (remote) {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
488 char remote_port[8];
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
489 g_snprintf(remote_port, sizeof(remote_port), "%d", remote->port);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
490 xmlnode_set_attrib(candidate, "rem-addr", remote->ip);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
491 xmlnode_set_attrib(candidate, "rem-port", remote_port);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
492 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
493
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
494 return candidate;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
495 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
496
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
497 static xmlnode *
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
498 jabber_jingle_session_add_transport(const JingleSessionContent *jsc,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
499 xmlnode *content)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
500 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
501 xmlnode *transport = xmlnode_new_child(content, "transport");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
502 const gchar *transport_type = jabber_jingle_session_content_get_transport_type(jsc);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
503 xmlnode_set_namespace(transport, transport_type);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
504 return transport;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
505 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
506
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
507 static xmlnode *
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
508 jabber_jingle_session_add_content(const JingleSessionContent *jsc,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
509 xmlnode *jingle)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
510 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
511 xmlnode *content = xmlnode_new_child(jingle, "content");
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
512 xmlnode_set_attrib(content, "creator",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
513 jabber_jingle_session_content_get_creator(jsc));
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
514 xmlnode_set_attrib(content, "name",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
515 jabber_jingle_session_content_get_name(jsc));
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
516 xmlnode_set_attrib(content, "sender",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
517 jabber_jingle_session_content_get_sender(jsc));
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
518 return content;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
519 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
520
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
521
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
522 static xmlnode *
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
523 jabber_jingle_session_add_jingle(const JingleSession *sess,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
524 JabberIq *iq, const char *action)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
525 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
526 xmlnode *jingle = iq ? xmlnode_new_child(iq->node, "jingle") :
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
527 xmlnode_new("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
528 xmlnode_set_namespace(jingle, JINGLE);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
529 xmlnode_set_attrib(jingle, "action", action);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
530 xmlnode_set_attrib(jingle, "initiator",
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
531 jabber_jingle_session_get_initiator(sess));
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
532 if (jabber_jingle_session_is_initiator(sess))
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
533 xmlnode_set_attrib(jingle, "responder",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
534 jabber_jingle_session_get_remote_jid(sess));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
535 else {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
536 gchar *responder = g_strdup_printf("%s@%s/%s",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
537 sess->js->user->node,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
538 sess->js->user->domain,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
539 sess->js->user->resource);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
540 xmlnode_set_attrib(jingle, "responder", responder);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
541 g_free(responder);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
542 }
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
543 xmlnode_set_attrib(jingle, "sid", jabber_jingle_session_get_id(sess));
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
544
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
545 return jingle;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
546 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
547
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
548 static JabberIq *
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
549 jabber_jingle_session_create_ack(JabberStream *js, xmlnode *packet)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
550 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
551 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
552 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id"));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
553 xmlnode_set_attrib(result->node, "from", xmlnode_get_attrib(packet, "to"));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
554 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
555 return result;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
556 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
557
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
558 static JabberIq *
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
559 jabber_jingle_session_create_iq(const JingleSession *session)
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
560 {
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
561 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
562 JABBER_IQ_SET);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
563 gchar *from = g_strdup_printf("%s@%s/%s", session->js->user->node,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
564 session->js->user->domain,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
565 session->js->user->resource);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
566 xmlnode_set_attrib(result->node, "from", from);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
567 g_free(from);
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
568 xmlnode_set_attrib(result->node, "to",
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
569 jabber_jingle_session_get_remote_jid(session));
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
570 return result;
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
571 }
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
572
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
573 static xmlnode *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
574 jabber_jingle_session_create_description(const JingleSession *sess)
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
575 {
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
576 GList *codecs = purple_media_get_local_audio_codecs(sess->media);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
577 xmlnode *description = xmlnode_new("description");
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
578
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
579 xmlnode_set_namespace(description, JINGLE_AUDIO);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
580
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
581 /* get codecs */
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
582 for (; codecs ; codecs = codecs->next) {
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
583 FsCodec *codec = (FsCodec*)codecs->data;
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
584 char id[8], clockrate[10], channels[10];
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
585 xmlnode *payload = xmlnode_new_child(description, "payload-type");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
586
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
587 g_snprintf(id, sizeof(id), "%d", codec->id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
588 g_snprintf(clockrate, sizeof(clockrate), "%d", codec->clock_rate);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
589 g_snprintf(channels, sizeof(channels), "%d", codec->channels);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
590
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
591 xmlnode_set_attrib(payload, "name", codec->encoding_name);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
592 xmlnode_set_attrib(payload, "id", id);
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
593 xmlnode_set_attrib(payload, "clockrate", clockrate);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
594 xmlnode_set_attrib(payload, "channels", channels);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
595 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
596
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
597 fs_codec_list_destroy(codecs);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
598 return description;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
599 }
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
600
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
601 static xmlnode *
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
602 jabber_jingle_session_create_content_accept(const JingleSession *sess)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
603 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
604 xmlnode *jingle =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
605 jabber_jingle_session_add_jingle(sess, NULL, "content-accept");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
606
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
607 xmlnode *content = xmlnode_new_child(jingle, "content");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
608 xmlnode *description = jabber_jingle_session_create_description(sess);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
609
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
610 xmlnode_set_attrib(content, "creator", "initiator");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
611 xmlnode_set_attrib(content, "name", "audio-content");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
612 xmlnode_set_attrib(content, "profile", "RTP/AVP");
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
613
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
614 xmlnode_insert_child(content, description);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
615
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
616 return jingle;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
617 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
618
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
619 static xmlnode *
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
620 jabber_jingle_session_create_content_replace(const JingleSession *sess,
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
621 FsCandidate *native_candidate,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
622 FsCandidate *remote_candidate)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
623 {
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
624 xmlnode *jingle =
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
625 jabber_jingle_session_add_jingle(sess, NULL, "content-replace");
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
626 xmlnode *content = NULL;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
627 xmlnode *transport = NULL;
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
628
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
629 purple_debug_info("jingle", "creating content-modify for native candidate %s " \
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
630 ", remote candidate %s\n", native_candidate->candidate_id,
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
631 remote_candidate->candidate_id);
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
632
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
633 content = xmlnode_new_child(jingle, "content");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
634 xmlnode_set_attrib(content, "creator", "initiator");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
635 xmlnode_set_attrib(content, "name", "audio-content");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
636 xmlnode_set_attrib(content, "profile", "RTP/AVP");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
637
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
638 /* get top codec from codec_intersection to put here... */
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
639 /* later on this should probably handle changing codec */
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
640
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
641 xmlnode_insert_child(content, jabber_jingle_session_create_description(sess));
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
642
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
643 transport = xmlnode_new_child(content, "transport");
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
644 xmlnode_set_namespace(transport, TRANSPORT_ICEUDP);
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
645 jabber_jingle_session_add_candidate_iceudp(transport, native_candidate,
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
646 remote_candidate);
23697
299bafcd8eb8 Updates voice and video to use Farsight 2, gets XMPP voice conferences
Michael Ruprecht <maiku@pidgin.im>
parents: 22649
diff changeset
647
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
648 purple_debug_info("jingle", "End create content modify\n");
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
650 return jingle;
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
651 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
652
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
653 static JabberIq *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
654 jabber_jingle_session_create_session_accept(const JingleSession *session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
655 FsCandidate *local,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
656 FsCandidate *remote)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
657 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
658 JabberIq *request = jabber_jingle_session_create_iq(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
659 xmlnode *jingle =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
660 jabber_jingle_session_add_jingle(session, request,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
661 "session-accept");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
662 GList *contents = jabber_jingle_session_get_contents(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
663
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
664 for (; contents; contents = contents->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
665 JingleSessionContent *jsc = contents->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
666 xmlnode *content = jabber_jingle_session_add_content(jsc, jingle);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
667 xmlnode *description = jabber_jingle_session_add_description(jsc, content);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
668 xmlnode *transport = jabber_jingle_session_add_transport(jsc, content);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
669 if (jabber_jingle_session_content_is_vv(jsc))
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
670 jabber_jingle_session_add_payload_types(jsc, description);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
671 if (jabber_jingle_session_content_is_transport_type(jsc, TRANSPORT_ICEUDP))
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
672 jabber_jingle_session_add_candidate_iceudp(transport, local, remote);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
673 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
674
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
675 return request;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
676 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
677
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
678 static JabberIq *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
679 jabber_jingle_session_create_session_info(const JingleSession *session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
680 const gchar *type)
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
681 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
682 JabberIq *request = jabber_jingle_session_create_iq(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
683 xmlnode *jingle =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
684 jabber_jingle_session_add_jingle(session, request,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
685 "session-info");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
686 xmlnode *info = xmlnode_new_child(jingle, type);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
687 xmlnode_set_namespace(info, JINGLE_AUDIO ":info");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
688 return request;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
689 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
690
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
691 static JabberIq *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
692 jabber_jingle_session_create_session_initiate(const JingleSession *session)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
693 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
694 JabberIq *request = jabber_jingle_session_create_iq(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
695 xmlnode *jingle =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
696 jabber_jingle_session_add_jingle(session, request,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
697 "session-initiate");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
698 GList *contents = jabber_jingle_session_get_contents(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
699
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
700 for (; contents; contents = contents->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
701 JingleSessionContent *jsc = contents->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
702 xmlnode *content = jabber_jingle_session_add_content(jsc, jingle);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
703 xmlnode *description = jabber_jingle_session_add_description(jsc, content);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
704 if (jabber_jingle_session_content_is_vv(jsc))
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
705 jabber_jingle_session_add_payload_types(jsc, description);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
706 jabber_jingle_session_add_transport(jsc, content);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
707 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
708
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
709 return request;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
710 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
711
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
712 static JabberIq *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
713 jabber_jingle_session_create_session_terminate(const JingleSession *sess,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
714 const char *reasoncode,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
715 const char *reasontext)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
716 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
717 JabberIq *request = jabber_jingle_session_create_iq(sess);
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
718 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
719 jabber_jingle_session_add_jingle(sess, request,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
720 "session-terminate");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
721 xmlnode *reason = xmlnode_new_child(jingle, "reason");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
722 xmlnode *condition = xmlnode_new_child(reason, "condition");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
723 xmlnode_new_child(condition, reasoncode);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
724 if (reasontext) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
725 xmlnode *text = xmlnode_new_child(reason, "text");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
726 xmlnode_insert_data(text, reasontext, strlen(reasontext));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
727 }
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
728
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
729 return request;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
730 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
731
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
732 static JabberIq *
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
733 jabber_jingle_session_create_transport_info(const JingleSessionContent *jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
734 FsCandidate *candidate)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
735 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
736 JingleSession *session =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
737 jabber_jingle_session_content_get_session(jsc);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
738 JabberIq *request = jabber_jingle_session_create_iq(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
739 xmlnode *jingle =
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
740 jabber_jingle_session_add_jingle(session, request,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
741 "transport-info");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
742 xmlnode *content = jabber_jingle_session_add_content(jsc, jingle);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
743 xmlnode *transport = jabber_jingle_session_add_transport(jsc, content);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
744 jabber_jingle_session_add_candidate_iceudp(transport, candidate, NULL);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
745 return request;
22649
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
746 }
d29483a90e40 Add the new jingle.c/h files.
Sadrul Habib Chowdhury <sadrul@pidgin.im>
parents:
diff changeset
747
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
748 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
749 jabber_jingle_session_send_content_accept(JingleSession *session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
750 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
751 JabberIq *result = jabber_iq_new(jabber_jingle_session_get_js(session),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
752 JABBER_IQ_SET);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
753 xmlnode *jingle = jabber_jingle_session_create_content_accept(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
754 xmlnode_set_attrib(result->node, "to",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
755 jabber_jingle_session_get_remote_jid(session));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
756
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
757 xmlnode_insert_child(result->node, jingle);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
758 jabber_iq_send(result);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
759 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
760
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
761 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
762 jabber_jingle_session_send_session_accept(JingleSession *session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
763 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
764 /* create transport-info packages */
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
765 PurpleMedia *media = jabber_jingle_session_get_media(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
766 GList *contents = jabber_jingle_session_get_contents(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
767 for (; contents; contents = contents->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
768 JingleSessionContent *jsc = contents->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
769 GList *candidates = purple_media_get_local_audio_candidates(
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
770 jabber_jingle_session_get_media(session));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
771 purple_debug_info("jabber",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
772 "jabber_session_candidates_prepared: %d candidates\n",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
773 g_list_length(candidates));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
774 for (; candidates; candidates = candidates->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
775 FsCandidate *candidate = candidates->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
776 JabberIq *result = jabber_jingle_session_create_transport_info(jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
777 candidate);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
778 jabber_iq_send(result);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
779 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
780 fs_candidate_list_destroy(candidates);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
781 }
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
782
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
783 jabber_iq_send(jabber_jingle_session_create_session_accept(session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
784 purple_media_get_local_candidate(media),
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
785 purple_media_get_remote_candidate(media)));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
786
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
787 purple_debug_info("jabber", "Sent session accept, starting stream\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
788 gst_element_set_state(purple_media_get_audio_pipeline(session->media), GST_STATE_PLAYING);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
789
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
790 session->session_started = TRUE;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
791 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
792
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
793 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
794 jabber_jingle_session_send_session_reject(JingleSession *session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
795 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
796 jabber_iq_send(jabber_jingle_session_create_session_terminate(session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
797 "decline", NULL));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
798 jabber_jingle_session_destroy(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
799 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
800
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
801 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
802 jabber_jingle_session_send_session_terminate(JingleSession *session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
803 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
804 jabber_iq_send(jabber_jingle_session_create_session_terminate(session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
805 "no-error", NULL));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
806 jabber_jingle_session_destroy(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
807 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
808
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
809 static void
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
810 jabber_jingle_session_content_create_media(JingleSession *session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
811 PurpleMediaStreamType type)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
812 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
813 gchar sender[10] = "";
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
814
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
815 if (type & PURPLE_MEDIA_AUDIO) {
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
816 if (type == PURPLE_MEDIA_SEND_AUDIO)
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
817 strcpy(sender, "initiator");
23719
444a2ca670af Added functions to help with the creation of Jingle packets.
Michael Ruprecht <maiku@pidgin.im>
parents: 23718
diff changeset
818 else if (type == PURPLE_MEDIA_RECV_AUDIO)
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
819 strcpy(sender, "responder");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
820 else
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
821 strcpy(sender, "both");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
822 jabber_jingle_session_content_create_internal(session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
823 "audio-content", "initiator", sender,
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
824 TRANSPORT_ICEUDP, JINGLE_AUDIO);
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
825 } else if (type & PURPLE_MEDIA_VIDEO) {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
826 if (type == PURPLE_MEDIA_SEND_VIDEO)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
827 strcpy(sender, "initiator");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
828 else if (type == PURPLE_MEDIA_RECV_VIDEO)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
829 strcpy(sender, "responder");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
830 else
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
831 strcpy(sender, "both");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
832 jabber_jingle_session_content_create_internal(session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
833 "video-content", "initiator", sender,
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
834 TRANSPORT_ICEUDP, JINGLE_VIDEO);
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
835 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
836 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
837
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
838 static void
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
839 jabber_jingle_session_content_create_parse(JingleSession *session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
840 xmlnode *jingle)
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
841 {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
842 xmlnode *content = xmlnode_get_child(jingle, "content");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
843 xmlnode *description = xmlnode_get_child(content, "description");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
844 xmlnode *transport = xmlnode_get_child(content, "transport");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
845
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
846 const gchar *creator = xmlnode_get_attrib(content, "creator");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
847 const gchar *sender = xmlnode_get_attrib(content, "sender");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
848
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
849 jabber_jingle_session_content_create_internal(session,
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
850 xmlnode_get_attrib(content, "name"),
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
851 creator ? creator : "initiator",
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
852 sender ? sender : "both",
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
853 xmlnode_get_namespace(transport),
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
854 xmlnode_get_namespace(description));
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
855 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
856
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
857 /* callback called when new local transport candidate(s) are available on the
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
858 Farsight stream */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
859 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
860 jabber_jingle_session_candidates_prepared(PurpleMedia *media, JingleSession *session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
861 {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
862 #if 0
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
863 if (!jabber_jingle_session_is_initiator(session)) {
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
864 /* create transport-info packages */
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
865 GList *contents = jabber_jingle_session_get_contents(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
866 for (; contents; contents = contents->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
867 JingleSessionContent *jsc = contents->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
868 GList *candidates = purple_media_get_local_audio_candidates(
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
869 jabber_jingle_session_get_media(session));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
870 purple_debug_info("jabber",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
871 "jabber_session_candidates_prepared: %d candidates\n",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
872 g_list_length(candidates));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
873 for (; candidates; candidates = candidates->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
874 FsCandidate *candidate = candidates->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
875 JabberIq *result = jabber_jingle_session_create_transport_info(jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
876 candidate);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
877 jabber_iq_send(result);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
878 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
879 fs_candidate_list_destroy(candidates);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
880 }
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
881 }
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
882 #endif
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
883 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
884
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
885 /* callback called when a pair of transport candidates (local and remote)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
886 has been established */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
887 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
888 jabber_jingle_session_candidate_pair_established(PurpleMedia *media,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
889 FsCandidate *native_candidate,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
890 FsCandidate *remote_candidate,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
891 JingleSession *session)
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
892 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
893 #if 0
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
894 purple_debug_info("jabber", "jabber_candidate_pair_established called\n");
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
895 /* if we are the responder, we should send a sesson-accept message */
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
896 if (!jabber_jingle_session_is_initiator(session) &&
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
897 !session->session_started) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
898 jabber_iq_send(jabber_jingle_session_create_session_accept(session,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
899 native_candidate, remote_candidate));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
900 }
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
901 #endif
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
902 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
903
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
904 static gboolean
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
905 jabber_jingle_session_initiate_media_internal(JingleSession *session,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
906 const char *initiator,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
907 const char *remote_jid)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
908 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
909 PurpleMedia *media = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
910
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
911 media = purple_media_manager_create_media(purple_media_manager_get(),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
912 session->js->gc, "fsrtpconference", remote_jid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
913
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
914 if (!media) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
915 purple_debug_error("jabber", "Couldn't create fsrtpconference\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
916 return FALSE;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
917 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
918
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
919 /* this will need to be changed to "nice" once the libnice transmitter is finished */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
920 if (!purple_media_add_stream(media, remote_jid, PURPLE_MEDIA_AUDIO, "rawudp")) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
921 purple_debug_error("jabber", "Couldn't create audio stream\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
922 purple_media_reject(media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
923 return FALSE;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
924 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
925
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
926 jabber_jingle_session_set_remote_jid(session, remote_jid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
927 jabber_jingle_session_set_initiator(session, initiator);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
928 jabber_jingle_session_set_media(session, media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
929
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
930 /* connect callbacks */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
931 g_signal_connect_swapped(G_OBJECT(media), "accepted",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
932 G_CALLBACK(jabber_jingle_session_send_session_accept), session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
933 g_signal_connect_swapped(G_OBJECT(media), "reject",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
934 G_CALLBACK(jabber_jingle_session_send_session_reject), session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
935 g_signal_connect_swapped(G_OBJECT(media), "hangup",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
936 G_CALLBACK(jabber_jingle_session_send_session_terminate), session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
937 g_signal_connect(G_OBJECT(media), "candidates-prepared",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
938 G_CALLBACK(jabber_jingle_session_candidates_prepared), session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
939 g_signal_connect(G_OBJECT(media), "candidate-pair",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
940 G_CALLBACK(jabber_jingle_session_candidate_pair_established), session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
941
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
942 purple_media_ready(media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
943
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
944 return TRUE;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
945 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
946
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
947 static void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
948 jabber_jingle_session_initiate_result_cb(JabberStream *js, xmlnode *packet, gpointer data)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
949 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
950 const char *from = xmlnode_get_attrib(packet, "from");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
951 JingleSession *session = jabber_jingle_session_find_by_jid(js, from);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
952 PurpleMedia *media = session->media;
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
953 GList *contents;
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
954
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
955 if (!strcmp(xmlnode_get_attrib(packet, "type"), "error")) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
956 purple_media_got_hangup(media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
957 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
958 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
959
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
960 /* catch errors */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
961 if (xmlnode_get_child(packet, "error")) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
962 purple_media_got_hangup(media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
963 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
964 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
965
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
966 /* create transport-info packages */
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
967 contents = jabber_jingle_session_get_contents(session);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
968 for (; contents; contents = contents->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
969 JingleSessionContent *jsc = contents->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
970 GList *candidates = purple_media_get_local_audio_candidates(
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
971 jabber_jingle_session_get_media(session));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
972 purple_debug_info("jabber",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
973 "jabber_session_candidates_prepared: %d candidates\n",
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
974 g_list_length(candidates));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
975 for (; candidates; candidates = candidates->next) {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
976 FsCandidate *candidate = candidates->data;
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
977 JabberIq *result = jabber_jingle_session_create_transport_info(jsc,
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
978 candidate);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
979 jabber_iq_send(result);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
980 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
981 fs_candidate_list_destroy(candidates);
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
982 }
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
983 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
984
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
985 PurpleMedia *
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
986 jabber_jingle_session_initiate_media(JabberStream *js, const char *who,
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
987 PurpleMediaStreamType type)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
988 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
989 /* create content negotiation */
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
990 JabberIq *request;
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
991 JingleSession *session;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
992 JabberBuddy *jb;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
993 JabberBuddyResource *jbr;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
994
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
995 char *jid = NULL, *me = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
996
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
997 /* construct JID to send to */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
998 jb = jabber_buddy_find(js, who, FALSE);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
999 if (!jb) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1000 purple_debug_error("jabber", "Could not find Jabber buddy\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1001 return NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1002 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1003 jbr = jabber_buddy_find_resource(jb, NULL);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1004 if (!jbr) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1005 purple_debug_error("jabber", "Could not find buddy's resource\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1006 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1007
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1008 if ((strchr(who, '/') == NULL) && jbr && (jbr->name != NULL)) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1009 jid = g_strdup_printf("%s/%s", who, jbr->name);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1010 } else {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1011 jid = g_strdup(who);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1012 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1013
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1014 session = jabber_jingle_session_create(js);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1015 /* set ourselves as initiator */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1016 me = g_strdup_printf("%s@%s/%s", js->user->node, js->user->domain, js->user->resource);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1017
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1018 if (!jabber_jingle_session_initiate_media_internal(session, me, jid)) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1019 g_free(jid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1020 g_free(me);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1021 jabber_jingle_session_destroy(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1022 return NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1023 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1024
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1025 g_free(jid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1026 g_free(me);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1027
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1028 jabber_jingle_session_content_create_media(session, type);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1029
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1030 /* create request */
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1031 request = jabber_jingle_session_create_session_initiate(session);
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1032 jabber_iq_set_callback(request, jabber_jingle_session_initiate_result_cb, NULL);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1033
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1034 /* send request to other part */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1035 jabber_iq_send(request);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1036
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1037 return session->media;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1038 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1039
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1040 void
23717
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1041 jabber_jingle_session_terminate_session_media(JabberStream *js, const gchar *who)
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1042 {
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1043 JingleSession *session;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1044
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1045 session = jabber_jingle_session_find_by_jid(js, who);
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1046
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1047 if (session)
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1048 purple_media_hangup(session->media);
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1049 }
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1050
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1051 void
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1052 jabber_jingle_session_terminate_sessions(JabberStream *js)
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1053 {
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1054 GList *values = g_hash_table_get_values(js->sessions);
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1055
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1056 for (; values; values = values->next) {
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1057 JingleSession *session = (JingleSession *)values->data;
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1058 purple_media_hangup(session->media);
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1059 }
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1060
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1061 g_list_free(values);
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1062 }
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1063
5a7e463b226d Further decoupled Jingle code from jabber.c:
Michael Ruprecht <maiku@pidgin.im>
parents: 23716
diff changeset
1064 void
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1065 jabber_jingle_session_handle_content_replace(JabberStream *js, xmlnode *packet)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1066 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1067 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1068 const char *sid = xmlnode_get_attrib(jingle, "sid");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1069 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1070
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1071 if (!jabber_jingle_session_is_initiator(session) && session->session_started) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1072 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1073 JabberIq *accept = jabber_iq_new(js, JABBER_IQ_SET);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1074 xmlnode *content_accept = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1075
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1076 /* send acknowledement */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1077 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1078 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1079 jabber_iq_send(result);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1080
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1081 /* send content-accept */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1082 content_accept = jabber_jingle_session_create_content_accept(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1083 xmlnode_set_attrib(accept->node, "id", xmlnode_get_attrib(packet, "id"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1084 xmlnode_set_attrib(accept->node, "to", xmlnode_get_attrib(packet, "from"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1085 xmlnode_insert_child(accept->node, content_accept);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1086
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1087 jabber_iq_send(accept);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1088 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1089 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1090
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1091 void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1092 jabber_jingle_session_handle_session_accept(JabberStream *js, xmlnode *packet)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1093 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1094 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1095 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1096 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
1097 const char *sid = xmlnode_get_attrib(jingle, "sid");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1098 const char *action = xmlnode_get_attrib(jingle, "action");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1099 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1100 GList *remote_codecs = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1101 GList *remote_transports = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1102 GList *codec_intersection;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1103 FsCodec *top = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1104 xmlnode *description = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1105 xmlnode *transport = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1106
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1107 /* We should probably check validity of the incoming XML... */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1108
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1109 xmlnode_set_attrib(result->node, "to",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1110 jabber_jingle_session_get_remote_jid(session));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1111 jabber_iq_set_id(result, xmlnode_get_attrib(packet, "id"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1112
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1113 description = xmlnode_get_child(content, "description");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1114 transport = xmlnode_get_child(content, "transport");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1115
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1116 /* fetch codecs from remote party */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1117 purple_debug_info("jabber", "get codecs from session-accept\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1118 remote_codecs = jabber_jingle_get_codecs(description);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1119 purple_debug_info("jabber", "get transport candidates from session accept\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1120 remote_transports = jabber_jingle_get_candidates(transport);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1121
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1122 purple_debug_info("jabber", "Got %d codecs from responder\n",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1123 g_list_length(remote_codecs));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1124 purple_debug_info("jabber", "Got %d transport candidates from responder\n",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1125 g_list_length(remote_transports));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1126
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1127 purple_debug_info("jabber", "Setting remote codecs on stream\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1128
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1129 purple_media_set_remote_audio_codecs(session->media,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1130 jabber_jingle_session_get_remote_jid(session),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1131 remote_codecs);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1132
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1133 codec_intersection = purple_media_get_negotiated_audio_codecs(session->media);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1134 purple_debug_info("jabber", "codec_intersection contains %d elems\n",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1135 g_list_length(codec_intersection));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1136 /* get the top codec */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1137 if (g_list_length(codec_intersection) > 0) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1138 top = (FsCodec *) codec_intersection->data;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1139 purple_debug_info("jabber", "Found a suitable codec on stream = %d\n",
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1140 top->id);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1141
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1142 /* we have found a suitable codec, but we will not start the stream
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1143 just yet, wait for transport negotiation to complete... */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1144 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1145 /* if we also got transport candidates, add them to our streams
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1146 list of known remote candidates */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1147 if (g_list_length(remote_transports) > 0) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1148 purple_media_add_remote_audio_candidates(session->media,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1149 jabber_jingle_session_get_remote_jid(session),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1150 remote_transports);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1151 fs_candidate_list_destroy(remote_transports);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1152 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1153 if (g_list_length(codec_intersection) == 0 &&
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1154 g_list_length(remote_transports)) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1155 /* we didn't get any candidates and the codec intersection is empty,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1156 this means this was not a content-accept message and we couldn't
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1157 find any suitable codecs, should return error and hang up */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1158
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1159 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1160
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1161 g_list_free(codec_intersection);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1162
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1163 if (!strcmp(action, "session-accept")) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1164 purple_media_got_accept(jabber_jingle_session_get_media(session));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1165 purple_debug_info("jabber", "Got session-accept, starting stream\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1166 gst_element_set_state(purple_media_get_audio_pipeline(session->media),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1167 GST_STATE_PLAYING);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1168 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1169
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1170 jabber_iq_send(result);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1171
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1172 session->session_started = TRUE;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1173 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1174
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1175 void
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1176 jabber_jingle_session_handle_session_info(JabberStream *js, xmlnode *packet)
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1177 {
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1178 purple_debug_info("jingle", "got session-info\n");
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1179 jabber_iq_send(jabber_jingle_session_create_ack(js, packet));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1180 }
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1181
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1182 void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1183 jabber_jingle_session_handle_session_initiate(JabberStream *js, xmlnode *packet)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1184 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1185 JingleSession *session = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1186 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1187 xmlnode *content = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1188 xmlnode *description = NULL;
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1189 xmlnode *transport = NULL;
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1190 const char *sid = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1191 const char *initiator = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1192 GList *codecs = NULL;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1193
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1194 if (!jingle) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1195 purple_debug_error("jabber", "Malformed request");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1196 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1197 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1198
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1199 sid = xmlnode_get_attrib(jingle, "sid");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1200 initiator = xmlnode_get_attrib(jingle, "initiator");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1201
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1202 if (jabber_jingle_session_find_by_id(js, sid)) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1203 /* This should only happen if you start a session with yourself */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1204 purple_debug_error("jabber", "Jingle session with id={%s} already exists\n", sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1205 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1206 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1207 session = jabber_jingle_session_create_by_id(js, sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1208
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1209 /* init media */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1210 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
1211 if (!content) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1212 purple_debug_error("jabber", "jingle tag must contain content tag\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1213 /* should send error here */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1214 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1215 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1216
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1217 description = xmlnode_get_child(content, "description");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1218
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1219 if (!description) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1220 purple_debug_error("jabber", "content tag must contain description tag\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1221 /* we should create an error iq here */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1222 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1223 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1224
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1225 transport = xmlnode_get_child(content, "transport");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1226
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1227 if (!transport) {
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1228 purple_debug_error("jingle", "content tag must contain transport tag\n");
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1229 /* we should create an error iq here */
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1230 return;
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1231 }
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1232
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1233 if (!jabber_jingle_session_initiate_media_internal(session, initiator, initiator)) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1234 purple_debug_error("jabber", "Couldn't start media session with %s\n", initiator);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1235 jabber_jingle_session_destroy(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1236 /* we should create an error iq here */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1237 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1238 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1239
23718
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1240 jabber_jingle_session_content_create_parse(session, jingle);
a18432f6cf64 Added JingleSessionContent structure to store content information
Michael Ruprecht <maiku@pidgin.im>
parents: 23717
diff changeset
1241
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1242 codecs = jabber_jingle_get_codecs(description);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1243
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1244 purple_media_set_remote_audio_codecs(session->media, initiator, codecs);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1245
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1246 jabber_iq_send(jabber_jingle_session_create_ack(js, packet));
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1247 jabber_iq_send(jabber_jingle_session_create_session_info(session, "ringing"));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1248 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1249
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1250 void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1251 jabber_jingle_session_handle_session_terminate(JabberStream *js, xmlnode *packet)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1252 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1253 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1254 const char *sid = xmlnode_get_attrib(jingle, "sid");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1255 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1256
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1257 if (!session) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1258 purple_debug_error("jabber", "jabber_handle_session_terminate couldn't find session\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1259 return;
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1260 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1261
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1262 /* maybe we should look at the reasoncode to determine if it was
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1263 a hangup or a reject, and call different callbacks to purple_media */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1264 gst_element_set_state(purple_media_get_audio_pipeline(session->media), GST_STATE_NULL);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1265
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1266 purple_media_got_hangup(jabber_jingle_session_get_media(session));
23720
6d4abd450c18 Added functions to help create Jingle packets. Revised some of the Jingle flow.
Michael Ruprecht <maiku@pidgin.im>
parents: 23719
diff changeset
1267 jabber_iq_send(jabber_jingle_session_create_ack(js, packet));
23716
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1268 jabber_jingle_session_destroy(session);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1269 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1270
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1271 void
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1272 jabber_jingle_session_handle_transport_info(JabberStream *js, xmlnode *packet)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1273 {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1274 JabberIq *result = jabber_iq_new(js, JABBER_IQ_RESULT);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1275 xmlnode *jingle = xmlnode_get_child(packet, "jingle");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1276 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
1277 xmlnode *transport = xmlnode_get_child(content, "transport");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1278 GList *remote_candidates = jabber_jingle_get_candidates(transport);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1279 const char *sid = xmlnode_get_attrib(jingle, "sid");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1280 JingleSession *session = jabber_jingle_session_find_by_id(js, sid);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1281
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1282 if (!session)
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1283 purple_debug_error("jabber", "jabber_handle_session_candidates couldn't find session\n");
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1284
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1285 /* send acknowledement */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1286 xmlnode_set_attrib(result->node, "id", xmlnode_get_attrib(packet, "id"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1287 xmlnode_set_attrib(result->node, "to", xmlnode_get_attrib(packet, "from"));
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1288 jabber_iq_send(result);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1289
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1290 /* add candidates to our list of remote candidates */
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1291 if (g_list_length(remote_candidates) > 0) {
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1292 purple_media_add_remote_audio_candidates(session->media,
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1293 xmlnode_get_attrib(packet, "from"),
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1294 remote_candidates);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1295 fs_candidate_list_destroy(remote_candidates);
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1296 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1297 }
e1a9c55075ba Moved Jingle message handlers from jabber.c to jingle.c.
Michael Ruprecht <maiku@pidgin.im>
parents: 23711
diff changeset
1298
23704
9b88c9b23aed Use USE_VV instead of USE_FARSIGHT.
Michael Ruprecht <maiku@pidgin.im>
parents: 23698
diff changeset
1299 #endif /* USE_VV */

mercurial