libpurple/protocols/jabber/google/google_session.c

Thu, 02 Sep 2010 21:00:25 +0000

author
Marcus Lundblad <malu@pidgin.im>
date
Thu, 02 Sep 2010 21:00:25 +0000
branch
cpw.malu.xmpp.google_relay
changeset 30772
cc32a6a56c13
parent 30771
66a23a6494bf
child 30773
530a74a5b97e
permissions
-rw-r--r--

Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...

29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
1 /**
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
2 * Purple is the legal property of its developers, whose names are too numerous
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
3 * to list here. Please refer to the COPYRIGHT file distributed with this
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
4 * source distribution.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
5 *
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
6 * This program is free software; you can redistribute it and/or modify
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
7 * it under the terms of the GNU General Public License as published by
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
8 * the Free Software Foundation; either version 2 of the License, or
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
9 * (at your option) any later version.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
10 *
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
11 * This program is distributed in the hope that it will be useful,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
14 * GNU General Public License for more details.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
15 *
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
16 * You should have received a copy of the GNU General Public License
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
17 * along with this program; if not, write to the Free Software
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
19 */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
20
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
21 #include "internal.h"
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
22 #include "debug.h"
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
23 #include "google_session.h"
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
24
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
25 #include "jingle/jingle.h"
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
26
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
27 #ifdef USE_VV
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
28
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
29 typedef struct {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
30 PurpleMedia *media;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
31 gboolean video;
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
32 GList *remote_audio_candidates; /* list of PurpleMediaCandidate */
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
33 GList *remote_video_candidates; /* list of PurpleMediaCandidate */
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
34 gboolean added_streams; /* this indicates if the streams have been
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
35 to media (ie. after getting relay credentials */
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
36 } GoogleAVSessionData;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
37
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
38 static gboolean
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
39 google_session_id_equal(gconstpointer a, gconstpointer b)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
40 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
41 GoogleSessionId *c = (GoogleSessionId*)a;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
42 GoogleSessionId *d = (GoogleSessionId*)b;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
43
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
44 return !strcmp(c->id, d->id) && !strcmp(c->initiator, d->initiator);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
45 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
46
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
47 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
48 google_session_destroy(GoogleSession *session)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
49 {
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
50 GoogleAVSessionData *session_data =
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
51 (GoogleAVSessionData *) session->session_data;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
52 g_free(session->id.id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
53 g_free(session->id.initiator);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
54 g_free(session->remote_jid);
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
55
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
56 if (session_data->remote_audio_candidates)
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
57 purple_media_candidate_list_free(session_data->remote_audio_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
58
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
59 if (session_data->remote_video_candidates)
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
60 purple_media_candidate_list_free(session_data->remote_video_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
61
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
62 g_free(session->session_data);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
63 g_free(session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
64 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
65
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
66 static xmlnode *
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
67 google_session_create_xmlnode(GoogleSession *session, const char *type)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
68 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
69 xmlnode *node = xmlnode_new("session");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
70 xmlnode_set_namespace(node, NS_GOOGLE_SESSION);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
71 xmlnode_set_attrib(node, "id", session->id.id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
72 xmlnode_set_attrib(node, "initiator", session->id.initiator);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
73 xmlnode_set_attrib(node, "type", type);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
74 return node;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
75 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
76
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
77 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
78 google_session_send_candidates(PurpleMedia *media, gchar *session_id,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
79 gchar *participant, GoogleSession *session)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
80 {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
81 PurpleMedia *session_media =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
82 ((GoogleAVSessionData *) session->session_data)->media;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
83 GList *candidates =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
84 purple_media_get_local_candidates(session_media, session_id,
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
85 session->remote_jid);
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
86 GList *iter;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
87 PurpleMediaCandidate *transport;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
88 gboolean video = FALSE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
89
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
90 if (!strcmp(session_id, "google-video"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
91 video = TRUE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
92
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
93 for (iter = candidates; iter; iter = iter->next) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
94 JabberIq *iq;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
95 gchar *ip, *port, *username, *password;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
96 gchar pref[16];
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
97 PurpleMediaCandidateType type;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
98 xmlnode *sess;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
99 xmlnode *candidate;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
100 guint component_id;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
101 transport = PURPLE_MEDIA_CANDIDATE(iter->data);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
102 component_id = purple_media_candidate_get_component_id(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
103 transport);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
104
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
105 iq = jabber_iq_new(session->js, JABBER_IQ_SET);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
106 sess = google_session_create_xmlnode(session, "candidates");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
107 xmlnode_insert_child(iq->node, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
108 xmlnode_set_attrib(iq->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
109
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
110 candidate = xmlnode_new("candidate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
111
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
112 ip = purple_media_candidate_get_ip(transport);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
113 port = g_strdup_printf("%d",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
114 purple_media_candidate_get_port(transport));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
115 g_ascii_dtostr(pref, 16,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
116 purple_media_candidate_get_priority(transport) / 1000.0);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
117 username = purple_media_candidate_get_username(transport);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
118 password = purple_media_candidate_get_password(transport);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
119 type = purple_media_candidate_get_candidate_type(transport);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
120
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
121 xmlnode_set_attrib(candidate, "address", ip);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
122 xmlnode_set_attrib(candidate, "port", port);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
123 xmlnode_set_attrib(candidate, "name",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
124 component_id == PURPLE_MEDIA_COMPONENT_RTP ?
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
125 video ? "video_rtp" : "rtp" :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
126 component_id == PURPLE_MEDIA_COMPONENT_RTCP ?
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
127 video ? "video_rtcp" : "rtcp" : "none");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
128 xmlnode_set_attrib(candidate, "username", username);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
129 /*
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
130 * As of this writing, Farsight 2 in Google compatibility
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
131 * mode doesn't provide a password. The Gmail client
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
132 * requires this to be set.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
133 */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
134 xmlnode_set_attrib(candidate, "password",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
135 password != NULL ? password : "");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
136 xmlnode_set_attrib(candidate, "preference", pref);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
137 xmlnode_set_attrib(candidate, "protocol",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
138 purple_media_candidate_get_protocol(transport)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
139 == PURPLE_MEDIA_NETWORK_PROTOCOL_UDP ?
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
140 "udp" : "tcp");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
141 xmlnode_set_attrib(candidate, "type", type ==
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
142 PURPLE_MEDIA_CANDIDATE_TYPE_HOST ? "local" :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
143 type ==
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
144 PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX ? "stun" :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
145 type ==
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
146 PURPLE_MEDIA_CANDIDATE_TYPE_RELAY ? "relay" :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
147 NULL);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
148 xmlnode_set_attrib(candidate, "generation", "0");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
149 xmlnode_set_attrib(candidate, "network", "0");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
150 xmlnode_insert_child(sess, candidate);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
151
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
152 g_free(ip);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
153 g_free(port);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
154 g_free(username);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
155 g_free(password);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
156
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
157 jabber_iq_send(iq);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
158 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
159 purple_media_candidate_list_free(candidates);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
160 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
161
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
162 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
163 google_session_ready(GoogleSession *session)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
164 {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
165 PurpleMedia *media =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
166 ((GoogleAVSessionData *)session->session_data)->media;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
167 gboolean video =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
168 ((GoogleAVSessionData *)session->session_data)->video;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
169 if (purple_media_codecs_ready(media, NULL) &&
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
170 purple_media_candidates_prepared(media, NULL, NULL)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
171 gchar *me = g_strdup_printf("%s@%s/%s",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
172 session->js->user->node,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
173 session->js->user->domain,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
174 session->js->user->resource);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
175 JabberIq *iq;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
176 xmlnode *sess, *desc, *payload;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
177 GList *codecs, *iter;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
178 gboolean is_initiator = !strcmp(session->id.initiator, me);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
179
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
180 if (!is_initiator &&
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
181 !purple_media_accepted(media, NULL, NULL)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
182 g_free(me);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
183 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
184 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
185
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
186 iq = jabber_iq_new(session->js, JABBER_IQ_SET);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
187
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
188 if (is_initiator) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
189 xmlnode_set_attrib(iq->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
190 xmlnode_set_attrib(iq->node, "from", session->id.initiator);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
191 sess = google_session_create_xmlnode(session, "initiate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
192 } else {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
193 google_session_send_candidates(media,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
194 "google-voice", session->remote_jid,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
195 session);
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
196 google_session_send_candidates(media,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
197 "google-video", session->remote_jid,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
198 session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
199 xmlnode_set_attrib(iq->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
200 xmlnode_set_attrib(iq->node, "from", me);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
201 sess = google_session_create_xmlnode(session, "accept");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
202 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
203 xmlnode_insert_child(iq->node, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
204 desc = xmlnode_new_child(sess, "description");
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
205 if (video)
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
206 xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_VIDEO);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
207 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
208 xmlnode_set_namespace(desc, NS_GOOGLE_SESSION_PHONE);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
209
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
210 codecs = purple_media_get_codecs(media, "google-video");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
211
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
212 for (iter = codecs; iter; iter = g_list_next(iter)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
213 PurpleMediaCodec *codec = (PurpleMediaCodec*)iter->data;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
214 gchar *id = g_strdup_printf("%d",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
215 purple_media_codec_get_id(codec));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
216 gchar *encoding_name =
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
217 purple_media_codec_get_encoding_name(codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
218 payload = xmlnode_new_child(desc, "payload-type");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
219 xmlnode_set_attrib(payload, "id", id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
220 xmlnode_set_attrib(payload, "name", encoding_name);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
221 xmlnode_set_attrib(payload, "width", "320");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
222 xmlnode_set_attrib(payload, "height", "200");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
223 xmlnode_set_attrib(payload, "framerate", "30");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
224 g_free(encoding_name);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
225 g_free(id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
226 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
227 purple_media_codec_list_free(codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
228
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
229 codecs = purple_media_get_codecs(media, "google-voice");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
230
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
231 for (iter = codecs; iter; iter = g_list_next(iter)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
232 PurpleMediaCodec *codec = (PurpleMediaCodec*)iter->data;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
233 gchar *id = g_strdup_printf("%d",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
234 purple_media_codec_get_id(codec));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
235 gchar *encoding_name =
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
236 purple_media_codec_get_encoding_name(codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
237 gchar *clock_rate = g_strdup_printf("%d",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
238 purple_media_codec_get_clock_rate(codec));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
239 payload = xmlnode_new_child(desc, "payload-type");
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
240 if (video)
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
241 xmlnode_set_namespace(payload, NS_GOOGLE_SESSION_PHONE);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
242 xmlnode_set_attrib(payload, "id", id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
243 /*
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
244 * Hack to make Gmail accept speex as the codec.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
245 * It shouldn't have to be case sensitive.
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
246 */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
247 if (purple_strequal(encoding_name, "SPEEX"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
248 xmlnode_set_attrib(payload, "name", "speex");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
249 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
250 xmlnode_set_attrib(payload, "name", encoding_name);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
251 xmlnode_set_attrib(payload, "clockrate", clock_rate);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
252 g_free(clock_rate);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
253 g_free(encoding_name);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
254 g_free(id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
255 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
256 purple_media_codec_list_free(codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
257
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
258 jabber_iq_send(iq);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
259
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
260 if (is_initiator) {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
261 google_session_send_candidates(media,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
262 "google-voice", session->remote_jid,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
263 session);
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
264 google_session_send_candidates(media,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
265 "google-video", session->remote_jid,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
266 session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
267 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
268
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
269 g_signal_handlers_disconnect_by_func(G_OBJECT(media),
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
270 G_CALLBACK(google_session_ready), session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
271 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
272 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
273
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
274 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
275 google_session_state_changed_cb(PurpleMedia *media, PurpleMediaState state,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
276 gchar *sid, gchar *name, GoogleSession *session)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
277 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
278 if (sid == NULL && name == NULL) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
279 if (state == PURPLE_MEDIA_STATE_END) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
280 google_session_destroy(session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
281 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
282 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
283 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
284
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
285 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
286 google_session_stream_info_cb(PurpleMedia *media, PurpleMediaInfoType type,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
287 gchar *sid, gchar *name, gboolean local,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
288 GoogleSession *session)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
289 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
290 if (sid != NULL || name != NULL)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
291 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
292
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
293 if (type == PURPLE_MEDIA_INFO_HANGUP) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
294 xmlnode *sess;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
295 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
296
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
297 xmlnode_set_attrib(iq->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
298 sess = google_session_create_xmlnode(session, "terminate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
299 xmlnode_insert_child(iq->node, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
300
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
301 jabber_iq_send(iq);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
302 } else if (type == PURPLE_MEDIA_INFO_REJECT) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
303 xmlnode *sess;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
304 JabberIq *iq = jabber_iq_new(session->js, JABBER_IQ_SET);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
305
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
306 xmlnode_set_attrib(iq->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
307 sess = google_session_create_xmlnode(session, "reject");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
308 xmlnode_insert_child(iq->node, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
309
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
310 jabber_iq_send(iq);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
311 } else if (type == PURPLE_MEDIA_INFO_ACCEPT && local == TRUE) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
312 google_session_ready(session);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
313 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
314 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
315
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
316 static GParameter *
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
317 jabber_google_session_get_params(JabberStream *js, const gchar *relay_ip,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
318 guint16 relay_udp, guint16 relay_tcp, guint16 relay_ssltcp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
319 const gchar *relay_username, const gchar *relay_password, guint *num)
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
320 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
321 guint num_params;
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
322 GParameter *params =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
323 jingle_get_params(js, relay_ip, relay_udp, relay_tcp, relay_ssltcp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
324 relay_username, relay_password, &num_params);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
325 GParameter *new_params = g_new0(GParameter, num_params + 1);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
326
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
327 memcpy(new_params, params, sizeof(GParameter) * num_params);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
328
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
329 purple_debug_info("jabber", "setting Google jingle compatibility param\n");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
330 new_params[num_params].name = "compatibility-mode";
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
331 g_value_init(&new_params[num_params].value, G_TYPE_UINT);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
332 g_value_set_uint(&new_params[num_params].value, 1); /* NICE_COMPATIBILITY_GOOGLE */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
333
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
334 g_free(params);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
335 *num = num_params + 1;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
336 return new_params;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
337 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
338
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
339 static void
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
340 jabber_google_relay_parse_response(const gchar *response, gchar **ip,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
341 guint *udp, guint *tcp, guint *ssltcp, gchar **username, gchar **password)
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
342 {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
343 gchar **lines = g_strsplit(response, "\n", -1);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
344 int i = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
345
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
346 for (; lines[i] ; i++) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
347 gchar *line = lines[i];
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
348 gchar **parts = g_strsplit(line, "=", 2);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
349
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
350 if (parts[0] && parts[1]) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
351 if (purple_strequal(parts[0], "relay.ip")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
352 *ip = g_strdup(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
353 } else if (purple_strequal(parts[0], "relay.udp_port")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
354 *udp = atoi(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
355 } else if (purple_strequal(parts[0], "relay.tcp_port")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
356 *tcp = atoi(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
357 } else if (purple_strequal(parts[0], "relay.ssltcp_port")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
358 *ssltcp = atoi(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
359 } else if (purple_strequal(parts[0], "username")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
360 *username = g_strdup(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
361 } else if (purple_strequal(parts[0], "password")) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
362 *password = g_strdup(parts[1]);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
363 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
364 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
365 g_strfreev(parts);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
366 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
367
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
368 g_strfreev(lines);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
369 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
370
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
371 static void
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
372 jabber_google_relay_remove_url_data(JabberStream *js,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
373 PurpleUtilFetchUrlData *url_data)
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
374 {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
375 GList *iter = js->google_relay_requests;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
376
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
377 while (iter) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
378 if (iter->data == url_data) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
379 js->google_relay_requests =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
380 g_list_delete_link(js->google_relay_requests, iter);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
381 break;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
382 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
383 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
384 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
385
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
386 static void
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
387 jabber_google_relay_response_session_initiate_cb(PurpleUtilFetchUrlData *url_data,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
388 gpointer user_data, const gchar *url_text, gsize len,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
389 const gchar *error_message)
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
390 {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
391 GoogleSession *session = (GoogleSession *) user_data;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
392 GParameter *params;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
393 guint num_params;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
394 JabberStream *js = session->js;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
395 gchar *relay_ip = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
396 guint relay_udp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
397 guint relay_tcp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
398 guint relay_ssltcp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
399 gchar *relay_username = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
400 gchar *relay_password = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
401 GoogleAVSessionData *session_data =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
402 (GoogleAVSessionData *) session->session_data;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
403
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
404 if (url_data) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
405 jabber_google_relay_remove_url_data(js, url_data);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
406 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
407
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
408 purple_debug_info("jabber", "got response on HTTP request to relay server\n");
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
409
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
410 if (url_text && len > 0) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
411 purple_debug_info("jabber", "got Google relay request response:\n%s\n",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
412 url_text);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
413 jabber_google_relay_parse_response(url_text, &relay_ip, &relay_udp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
414 &relay_tcp, &relay_ssltcp, &relay_username, &relay_password);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
415 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
416
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
417 session_data->media = purple_media_manager_create_media(
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
418 purple_media_manager_get(),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
419 purple_connection_get_account(js->gc),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
420 "fsrtpconference", session->remote_jid, TRUE);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
421
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
422 purple_media_set_prpl_data(session_data->media, session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
423
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
424 g_signal_connect_swapped(G_OBJECT(session_data->media),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
425 "candidates-prepared",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
426 G_CALLBACK(google_session_ready), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
427 g_signal_connect_swapped(G_OBJECT(session_data->media), "codecs-changed",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
428 G_CALLBACK(google_session_ready), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
429 g_signal_connect(G_OBJECT(session_data->media), "state-changed",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
430 G_CALLBACK(google_session_state_changed_cb), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
431 g_signal_connect(G_OBJECT(session_data->media), "stream-info",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
432 G_CALLBACK(google_session_stream_info_cb), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
433
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
434 params =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
435 jabber_google_session_get_params(js, relay_ip, relay_udp, relay_tcp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
436 relay_ssltcp, relay_username, relay_password, &num_params);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
437
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
438 g_free(relay_ip);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
439 g_free(relay_username);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
440 g_free(relay_password);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
441
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
442 if (purple_media_add_stream(session_data->media, "google-voice",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
443 session->remote_jid, PURPLE_MEDIA_AUDIO,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
444 TRUE, "nice", num_params, params) == FALSE ||
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
445 (session_data->video && purple_media_add_stream(
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
446 session_data->media, "google-video",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
447 session->remote_jid, PURPLE_MEDIA_VIDEO,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
448 TRUE, "nice", num_params, params) == FALSE)) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
449 purple_media_error(session_data->media, "Error adding stream.");
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
450 purple_media_end(session_data->media, NULL, NULL);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
451 g_free(params);
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
452 } else {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
453 session_data->added_streams = TRUE;
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
454 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
455
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
456 g_free(params);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
457 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
458
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
459 static void
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
460 jabber_google_do_relay_request(JabberStream *js, GoogleSession *session,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
461 PurpleUtilFetchUrlCallback cb)
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
462 {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
463 PurpleUtilFetchUrlData *url_data = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
464 gchar *url = g_strdup_printf("http://%s", js->google_relay_host);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
465 gchar *request =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
466 g_strdup_printf("GET /create_session HTTP/1.0\r\n"
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
467 "Host: %s\r\n"
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
468 "X-Talk-Google-Relay-Auth: %s\r\n"
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
469 "X-Google-Relay-Auth: %s\r\n\r\n",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
470 js->google_relay_host, js->google_relay_token, js->google_relay_token);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
471 purple_debug_info("jabber",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
472 "sending Google relay request %s to %s\n", request, url);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
473 url_data =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
474 purple_util_fetch_url_request(url, FALSE, NULL, FALSE, request, FALSE,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
475 cb, session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
476 if (url_data) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
477 js->google_relay_requests =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
478 g_list_prepend(js->google_relay_requests, url_data);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
479 } else {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
480 purple_debug_error("jabber", "unable to create Google relay request\n");
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
481 cb(NULL, session, NULL, 0, NULL);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
482 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
483 g_free(url);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
484 g_free(request);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
485 }
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
486
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
487 gboolean
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
488 jabber_google_session_initiate(JabberStream *js, const gchar *who, PurpleMediaSessionType type)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
489 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
490 GoogleSession *session;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
491 JabberBuddy *jb;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
492 JabberBuddyResource *jbr;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
493 gchar *jid;
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
494 GoogleAVSessionData *session_data = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
495
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
496 /* construct JID to send to */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
497 jb = jabber_buddy_find(js, who, FALSE);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
498 if (!jb) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
499 purple_debug_error("jingle-rtp",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
500 "Could not find Jabber buddy\n");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
501 return FALSE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
502 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
503 jbr = jabber_buddy_find_resource(jb, NULL);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
504 if (!jbr) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
505 purple_debug_error("jingle-rtp",
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
506 "Could not find buddy's resource\n");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
507 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
508
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
509 if ((strchr(who, '/') == NULL) && jbr && (jbr->name != NULL)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
510 jid = g_strdup_printf("%s/%s", who, jbr->name);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
511 } else {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
512 jid = g_strdup(who);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
513 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
514
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
515 session = g_new0(GoogleSession, 1);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
516 session->id.id = jabber_get_next_id(js);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
517 session->id.initiator = g_strdup_printf("%s@%s/%s", js->user->node,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
518 js->user->domain, js->user->resource);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
519 session->state = SENT_INITIATE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
520 session->js = js;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
521 session->remote_jid = jid;
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
522 session_data = g_new0(GoogleAVSessionData, 1);
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
523 session->session_data = session_data;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
524
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
525 if (type & PURPLE_MEDIA_VIDEO)
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
526 session_data->video = TRUE;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
527
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
528 /* if we got a relay token and relay host in google:jingleinfo, issue an
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
529 HTTP request to get that data */
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
530 if (js->google_relay_host && js->google_relay_token) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
531 jabber_google_do_relay_request(js, session,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
532 jabber_google_relay_response_session_initiate_cb);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
533 } else {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
534 jabber_google_relay_response_session_initiate_cb(NULL, session, NULL, 0,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
535 NULL);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
536 }
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
537
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
538 /* we don't actually know yet wether it succeeded... maybe this is very
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
539 wrong... */
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
540 return TRUE;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
541 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
542
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
543 static void
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
544 jabber_google_relay_response_session_handle_initiate_cb(
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
545 PurpleUtilFetchUrlData *url_data,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
546 gpointer user_data, const gchar *url_text, gsize len,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
547 const gchar *error_message)
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
548 {
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
549 GoogleSession *session = (GoogleSession *) user_data;
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
550 GParameter *params;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
551 guint num_params;
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
552 JabberStream *js = session->js;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
553 gchar *relay_ip = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
554 guint relay_udp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
555 guint relay_tcp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
556 guint relay_ssltcp = 0;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
557 gchar *relay_username = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
558 gchar *relay_password = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
559 xmlnode *codec_element;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
560 xmlnode *desc_element;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
561 const gchar *xmlns;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
562 PurpleMediaCodec *codec;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
563 GList *video_codecs = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
564 GList *codecs = NULL;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
565 JabberIq *result;
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
566 GoogleAVSessionData *session_data =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
567 (GoogleAVSessionData *) session->session_data;
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
568
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
569 if (url_data) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
570 jabber_google_relay_remove_url_data(js, url_data);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
571 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
572
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
573 if (url_text && len > 0) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
574 purple_debug_info("jabber", "got Google relay request response:\n%s\n",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
575 url_text);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
576 jabber_google_relay_parse_response(url_text, &relay_ip, &relay_udp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
577 &relay_tcp, &relay_ssltcp, &relay_username, &relay_password);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
578 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
579
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
580 params =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
581 jabber_google_session_get_params(js, relay_ip, relay_udp, relay_tcp,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
582 relay_ssltcp, relay_username, relay_password, &num_params);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
583
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
584 if (purple_media_add_stream(session_data->media, "google-voice",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
585 session->remote_jid, PURPLE_MEDIA_AUDIO, FALSE,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
586 "nice", num_params, params) == FALSE ||
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
587 (session_data->video && purple_media_add_stream(
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
588 session_data->media, "google-video",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
589 session->remote_jid, PURPLE_MEDIA_VIDEO,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
590 FALSE, "nice", num_params, params) == FALSE)) {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
591 purple_media_error(session_data->media, "Error adding stream.");
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
592 purple_media_stream_info(session_data->media,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
593 PURPLE_MEDIA_INFO_REJECT, NULL, NULL, TRUE);
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
594 } else {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
595 /* successfully added stream(s) */
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
596 session_data->added_streams = TRUE;
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
597
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
598 if (session_data->remote_audio_candidates) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
599 purple_media_add_remote_candidates(session_data->media,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
600 "google-voice", session->remote_jid,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
601 session_data->remote_audio_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
602 purple_media_candidate_list_free(session_data->remote_audio_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
603 session_data->remote_audio_candidates = NULL;
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
604 }
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
605 if (session_data->remote_video_candidates) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
606 purple_media_add_remote_candidates(session_data->media,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
607 "google-video", session->remote_jid,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
608 session_data->remote_video_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
609 purple_media_candidate_list_free(session_data->remote_video_candidates);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
610 session_data->remote_video_candidates = NULL;
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
611 }
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
612 }
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
613
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
614 g_free(params);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
615
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
616 for (codec_element = xmlnode_get_child(desc_element, "payload-type");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
617 codec_element; codec_element = codec_element->next) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
618 const char *id, *encoding_name, *clock_rate,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
619 *width, *height, *framerate;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
620 gboolean video;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
621 if (codec_element->name &&
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
622 strcmp(codec_element->name, "payload-type"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
623 continue;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
624
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
625 xmlns = xmlnode_get_namespace(codec_element);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
626 encoding_name = xmlnode_get_attrib(codec_element, "name");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
627 id = xmlnode_get_attrib(codec_element, "id");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
628
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
629 if (!session_data->video ||
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
630 (xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_PHONE))) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
631 clock_rate = xmlnode_get_attrib(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
632 codec_element, "clockrate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
633 video = FALSE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
634 } else {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
635 width = xmlnode_get_attrib(codec_element, "width");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
636 height = xmlnode_get_attrib(codec_element, "height");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
637 framerate = xmlnode_get_attrib(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
638 codec_element, "framerate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
639 clock_rate = "90000";
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
640 video = TRUE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
641 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
642
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
643 if (id) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
644 codec = purple_media_codec_new(atoi(id), encoding_name,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
645 video ? PURPLE_MEDIA_VIDEO :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
646 PURPLE_MEDIA_AUDIO,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
647 clock_rate ? atoi(clock_rate) : 0);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
648 if (video)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
649 video_codecs = g_list_append(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
650 video_codecs, codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
651 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
652 codecs = g_list_append(codecs, codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
653 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
654 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
655
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
656 if (codecs)
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
657 purple_media_set_remote_codecs(session_data->media, "google-voice",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
658 session->remote_jid, codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
659 if (video_codecs)
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
660 purple_media_set_remote_codecs(session_data->media, "google-video",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
661 session->remote_jid, video_codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
662
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
663 purple_media_codec_list_free(codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
664 purple_media_codec_list_free(video_codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
665
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
666 result = jabber_iq_new(js, JABBER_IQ_RESULT);
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
667 jabber_iq_set_id(result, session->iq_id);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
668 xmlnode_set_attrib(result->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
669 jabber_iq_send(result);
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
670 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
671
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
672 static gboolean
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
673 google_session_handle_initiate(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
674 {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
675 xmlnode *desc_element;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
676 const gchar *xmlns;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
677 GoogleAVSessionData *session_data =
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
678 (GoogleAVSessionData *) session->session_data;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
679
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
680 if (session->state != UNINIT) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
681 purple_debug_error("jabber", "Received initiate for active session.\n");
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
682 return FALSE;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
683 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
684
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
685 desc_element = xmlnode_get_child(sess, "description");
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
686 xmlns = xmlnode_get_namespace(desc_element);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
687
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
688 if (purple_strequal(xmlns, NS_GOOGLE_SESSION_PHONE))
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
689 session_data->video = FALSE;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
690 else if (purple_strequal(xmlns, NS_GOOGLE_SESSION_VIDEO))
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
691 session_data->video = TRUE;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
692 else {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
693 purple_debug_error("jabber", "Received initiate with "
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
694 "invalid namespace %s.\n", xmlns);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
695 return FALSE;
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
696 }
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
697
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
698 session_data->media = purple_media_manager_create_media(
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
699 purple_media_manager_get(),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
700 purple_connection_get_account(js->gc),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
701 "fsrtpconference", session->remote_jid, FALSE);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
702
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
703 purple_media_set_prpl_data(session_data->media, session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
704
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
705 g_signal_connect_swapped(G_OBJECT(session_data->media),
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
706 "candidates-prepared",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
707 G_CALLBACK(google_session_ready), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
708 g_signal_connect_swapped(G_OBJECT(session_data->media), "codecs-changed",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
709 G_CALLBACK(google_session_ready), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
710 g_signal_connect(G_OBJECT(session_data->media), "state-changed",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
711 G_CALLBACK(google_session_state_changed_cb), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
712 g_signal_connect(G_OBJECT(session_data->media), "stream-info",
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
713 G_CALLBACK(google_session_stream_info_cb), session);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
714
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
715 session->iq_id = g_strdup(iq_id);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
716
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
717 if (js->google_relay_host && js->google_relay_token) {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
718 jabber_google_do_relay_request(js, session,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
719 jabber_google_relay_response_session_handle_initiate_cb);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
720 } else {
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
721 jabber_google_relay_response_session_handle_initiate_cb(NULL, session,
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
722 NULL, 0, NULL);
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
723 }
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
724
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
725 return TRUE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
726 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
727
30771
66a23a6494bf Now it compiles again...
Marcus Lundblad <malu@pidgin.im>
parents: 30749
diff changeset
728
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
729 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
730 google_session_handle_candidates(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
731 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
732 JabberIq *result;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
733 GList *list = NULL, *video_list = NULL;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
734 xmlnode *cand;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
735 static int name = 0;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
736 char n[4];
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
737 GoogleAVSessionData *session_data =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
738 (GoogleAVSessionData *) session->session_data;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
739
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
740 for (cand = xmlnode_get_child(sess, "candidate"); cand;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
741 cand = xmlnode_get_next_twin(cand)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
742 PurpleMediaCandidate *info;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
743 const gchar *cname = xmlnode_get_attrib(cand, "name");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
744 const gchar *type = xmlnode_get_attrib(cand, "type");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
745 const gchar *protocol = xmlnode_get_attrib(cand, "protocol");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
746 const gchar *address = xmlnode_get_attrib(cand, "address");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
747 const gchar *port = xmlnode_get_attrib(cand, "port");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
748 guint component_id;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
749
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
750 if (cname && type && address && port) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
751 PurpleMediaCandidateType candidate_type;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
752
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
753 g_snprintf(n, sizeof(n), "S%d", name++);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
754
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
755 if (g_str_equal(type, "local"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
756 candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
757 else if (g_str_equal(type, "stun"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
758 candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_PRFLX;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
759 else if (g_str_equal(type, "relay"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
760 candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_RELAY;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
761 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
762 candidate_type = PURPLE_MEDIA_CANDIDATE_TYPE_HOST;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
763
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
764 if (purple_strequal(cname, "rtcp") ||
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
765 purple_strequal(cname, "video_rtcp"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
766 component_id = PURPLE_MEDIA_COMPONENT_RTCP;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
767 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
768 component_id = PURPLE_MEDIA_COMPONENT_RTP;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
769
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
770 info = purple_media_candidate_new(n, component_id,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
771 candidate_type,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
772 purple_strequal(protocol, "udp") ?
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
773 PURPLE_MEDIA_NETWORK_PROTOCOL_UDP :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
774 PURPLE_MEDIA_NETWORK_PROTOCOL_TCP,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
775 address,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
776 atoi(port));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
777 g_object_set(info, "username", xmlnode_get_attrib(cand, "username"),
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
778 "password", xmlnode_get_attrib(cand, "password"), NULL);
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
779 if (!strncmp(cname, "video_", 6)) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
780 if (session_data->added_streams) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
781 video_list = g_list_append(video_list, info);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
782 } else {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
783 session_data->remote_video_candidates =
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
784 g_list_append(session_data->remote_video_candidates,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
785 info);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
786 }
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
787 } else {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
788 if (session_data->added_streams) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
789 list = g_list_append(list, info);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
790 } else {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
791 session_data->remote_audio_candidates =
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
792 g_list_append(session_data->remote_audio_candidates,
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
793 info);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
794 }
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
795 }
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
796 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
797 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
798
30772
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
799 if (list) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
800 purple_media_add_remote_candidates(session_data->media, "google-voice",
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
801 session->remote_jid, list);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
802 purple_media_candidate_list_free(list);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
803 }
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
804 if (video_list) {
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
805 purple_media_add_remote_candidates(session_data->media, "google-video",
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
806 session->remote_jid, video_list);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
807 purple_media_candidate_list_free(video_list);
cc32a6a56c13 Actually handle candidates we receive from the initiator before setting up our own streams (after getting a relay response from the HTTP server). This seems to somewhat work now, though for some reason it seems to use relays also locally...
Marcus Lundblad <malu@pidgin.im>
parents: 30771
diff changeset
808 }
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
809
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
810 result = jabber_iq_new(js, JABBER_IQ_RESULT);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
811 jabber_iq_set_id(result, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
812 xmlnode_set_attrib(result->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
813 jabber_iq_send(result);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
814 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
815
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
816 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
817 google_session_handle_accept(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
818 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
819 xmlnode *desc_element = xmlnode_get_child(sess, "description");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
820 xmlnode *codec_element = xmlnode_get_child(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
821 desc_element, "payload-type");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
822 GList *codecs = NULL, *video_codecs = NULL;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
823 JabberIq *result = NULL;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
824 const gchar *xmlns = xmlnode_get_namespace(desc_element);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
825 gboolean video = (xmlns && !strcmp(xmlns, NS_GOOGLE_SESSION_VIDEO));
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
826 GoogleAVSessionData *session_data =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
827 (GoogleAVSessionData *) session->session_data;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
828
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
829 for (; codec_element; codec_element = codec_element->next) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
830 const gchar *xmlns, *encoding_name, *id,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
831 *clock_rate, *width, *height, *framerate;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
832 gboolean video_codec = FALSE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
833
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
834 if (!purple_strequal(codec_element->name, "payload-type"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
835 continue;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
836
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
837 xmlns = xmlnode_get_namespace(codec_element);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
838 encoding_name = xmlnode_get_attrib(codec_element, "name");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
839 id = xmlnode_get_attrib(codec_element, "id");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
840
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
841 if (!video || purple_strequal(xmlns, NS_GOOGLE_SESSION_PHONE))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
842 clock_rate = xmlnode_get_attrib(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
843 codec_element, "clockrate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
844 else {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
845 clock_rate = "90000";
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
846 width = xmlnode_get_attrib(codec_element, "width");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
847 height = xmlnode_get_attrib(codec_element, "height");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
848 framerate = xmlnode_get_attrib(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
849 codec_element, "framerate");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
850 video_codec = TRUE;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
851 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
852
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
853 if (id && encoding_name) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
854 PurpleMediaCodec *codec = purple_media_codec_new(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
855 atoi(id), encoding_name,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
856 video_codec ? PURPLE_MEDIA_VIDEO :
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
857 PURPLE_MEDIA_AUDIO,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
858 clock_rate ? atoi(clock_rate) : 0);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
859 if (video_codec)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
860 video_codecs = g_list_append(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
861 video_codecs, codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
862 else
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
863 codecs = g_list_append(codecs, codec);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
864 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
865 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
866
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
867 if (codecs)
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
868 purple_media_set_remote_codecs(session_data->media, "google-voice",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
869 session->remote_jid, codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
870 if (video_codecs)
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
871 purple_media_set_remote_codecs(session_data->media, "google-video",
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
872 session->remote_jid, video_codecs);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
873
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
874 purple_media_stream_info(session_data->media, PURPLE_MEDIA_INFO_ACCEPT,
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
875 NULL, NULL, FALSE);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
876
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
877 result = jabber_iq_new(js, JABBER_IQ_RESULT);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
878 jabber_iq_set_id(result, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
879 xmlnode_set_attrib(result->node, "to", session->remote_jid);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
880 jabber_iq_send(result);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
881 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
882
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
883 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
884 google_session_handle_reject(JabberStream *js, GoogleSession *session, xmlnode *sess)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
885 {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
886 GoogleAVSessionData *session_data =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
887 (GoogleAVSessionData *) session->session_data;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
888 purple_media_end(session_data->media, NULL, NULL);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
889 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
890
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
891 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
892 google_session_handle_terminate(JabberStream *js, GoogleSession *session, xmlnode *sess)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
893 {
29915
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
894 GoogleAVSessionData *session_data =
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
895 (GoogleAVSessionData *) session->session_data;
2ca9f271ed5a Remove direct use of PurpleMedia in the GoogleSession struct
Marcus Lundblad <malu@pidgin.im>
parents: 29914
diff changeset
896 purple_media_end(session_data->media, NULL, NULL);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
897 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
898
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
899 static void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
900 google_session_parse_iq(JabberStream *js, GoogleSession *session, xmlnode *sess, const char *iq_id)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
901 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
902 const char *type = xmlnode_get_attrib(sess, "type");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
903
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
904 if (!strcmp(type, "initiate")) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
905 google_session_handle_initiate(js, session, sess, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
906 } else if (!strcmp(type, "accept")) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
907 google_session_handle_accept(js, session, sess, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
908 } else if (!strcmp(type, "reject")) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
909 google_session_handle_reject(js, session, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
910 } else if (!strcmp(type, "terminate")) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
911 google_session_handle_terminate(js, session, sess);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
912 } else if (!strcmp(type, "candidates")) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
913 google_session_handle_candidates(js, session, sess, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
914 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
915 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
916
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
917 void
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
918 jabber_google_session_parse(JabberStream *js, const char *from,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
919 JabberIqType type, const char *iq_id,
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
920 xmlnode *session_node)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
921 {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
922 GoogleSession *session = NULL;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
923 GoogleSessionId id;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
924
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
925 xmlnode *desc_node;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
926
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
927 GList *iter = NULL;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
928
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
929 if (type != JABBER_IQ_SET)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
930 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
931
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
932 id.id = (gchar*)xmlnode_get_attrib(session_node, "id");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
933 if (!id.id)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
934 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
935
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
936 id.initiator = (gchar*)xmlnode_get_attrib(session_node, "initiator");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
937 if (!id.initiator)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
938 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
939
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
940 iter = purple_media_manager_get_media_by_account(
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
941 purple_media_manager_get(),
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
942 purple_connection_get_account(js->gc));
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
943 for (; iter; iter = g_list_delete_link(iter, iter)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
944 GoogleSession *gsession =
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
945 purple_media_get_prpl_data(iter->data);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
946 if (google_session_id_equal(&(gsession->id), &id)) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
947 session = gsession;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
948 break;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
949 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
950 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
951 if (iter != NULL) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
952 g_list_free(iter);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
953 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
954
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
955 if (session) {
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
956 google_session_parse_iq(js, session, session_node, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
957 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
958 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
959
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
960 /* If the session doesn't exist, this has to be an initiate message */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
961 if (strcmp(xmlnode_get_attrib(session_node, "type"), "initiate"))
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
962 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
963 desc_node = xmlnode_get_child(session_node, "description");
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
964 if (!desc_node)
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
965 return;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
966 session = g_new0(GoogleSession, 1);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
967 session->id.id = g_strdup(id.id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
968 session->id.initiator = g_strdup(id.initiator);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
969 session->state = UNINIT;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
970 session->js = js;
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
971 session->remote_jid = g_strdup(session->id.initiator);
30749
00eda6a032b5 jabber: Missed intialising session_data here.
Marcus Lundblad <malu@pidgin.im>
parents: 29915
diff changeset
972 session->session_data = g_new0(GoogleAVSessionData, 1);
29914
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
973
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
974 google_session_handle_initiate(js, session, session_node, iq_id);
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
975 }
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
976 #endif /* USE_VV */
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
977
a4ed5999f6d0 Added new files in sub directory google
Marcus Lundblad <malu@pidgin.im>
parents:
diff changeset
978

mercurial