libpurple/protocols/jabber/jingle/rawudp.c

Sat, 12 Oct 2013 17:43:23 +0530

author
Ankit Vani <a@nevitus.org>
date
Sat, 12 Oct 2013 17:43:23 +0530
branch
soc.2013.gobjectification.plugins
changeset 36889
4dfe09057bed
parent 34935
686fa55b0deb
child 36951
6e23992964ed
permissions
-rw-r--r--

Register jingle types dynamically

26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
1 /**
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
2 * @file rawudp.c
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
3 *
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
4 * purple
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
5 *
28322
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 26980
diff changeset
6 * Purple is the legal property of its developers, whose names are too numerous
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 26980
diff changeset
7 * to list here. Please refer to the COPYRIGHT file distributed with this
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 26980
diff changeset
8 * source distribution.
ac8fec1d2234 Remove specific copyright lines from the XMPP prpl.
Paul Aurich <darkrain42@pidgin.im>
parents: 26980
diff changeset
9 *
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
10 * This program is free software; you can redistribute it and/or modify
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
11 * it under the terms of the GNU General Public License as published by
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
12 * the Free Software Foundation; either version 2 of the License, or
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
13 * (at your option) any later version.
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
14 *
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful,
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
18 * GNU General Public License for more details.
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
19 *
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
21 * along with this program; if not, write to the Free Software
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
22 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
23 */
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
24
26221
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26157
diff changeset
25 #include "internal.h"
bc5d5d3fe4de Make it compile in Windows with the equivalent of --disable-vv.
Michael Ruprecht <maiku@pidgin.im>
parents: 26157
diff changeset
26
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
27 #include "rawudp.h"
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
28 #include "jingle.h"
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
29 #include "debug.h"
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
30
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
31 #include <string.h>
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
32
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
33 struct _JingleRawUdpPrivate
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
34 {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
35 GList *local_candidates;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
36 GList *remote_candidates;
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
37 };
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
38
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
39 #define JINGLE_RAWUDP_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE((obj), JINGLE_TYPE_RAWUDP, JingleRawUdpPrivate))
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
40
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
41 static void jingle_rawudp_class_init (JingleRawUdpClass *klass);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
42 static void jingle_rawudp_init (JingleRawUdp *rawudp);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
43 static void jingle_rawudp_finalize (GObject *object);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
44 static void jingle_rawudp_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
45 static void jingle_rawudp_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
46 static JingleTransport *jingle_rawudp_parse_internal(PurpleXmlNode *rawudp);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
47 static PurpleXmlNode *jingle_rawudp_to_xml_internal(JingleTransport *transport, PurpleXmlNode *content, JingleActionType action);
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
48 static void jingle_rawudp_add_local_candidate(JingleTransport *transport, const gchar *id, guint generation, PurpleMediaCandidate *candidate);
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
49 static GList *jingle_rawudp_get_remote_candidates(JingleTransport *transport);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
50
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
51 static JingleTransportClass *parent_class = NULL;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
52
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
53 enum {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
54 PROP_0,
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
55 PROP_LOCAL_CANDIDATES,
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
56 PROP_REMOTE_CANDIDATES,
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
57 };
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
58
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
59 static JingleRawUdpCandidate *
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
60 jingle_rawudp_candidate_copy(JingleRawUdpCandidate *candidate)
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
61 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
62 JingleRawUdpCandidate *new_candidate = g_new0(JingleRawUdpCandidate, 1);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
63 new_candidate->generation = candidate->generation;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
64 new_candidate->component = candidate->component;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
65 new_candidate->id = g_strdup(candidate->id);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
66 new_candidate->ip = g_strdup(candidate->ip);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
67 new_candidate->port = candidate->port;
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
68
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
69 new_candidate->rem_known = candidate->rem_known;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
70 return new_candidate;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
71 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
72
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
73 static void
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
74 jingle_rawudp_candidate_free(JingleRawUdpCandidate *candidate)
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
75 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
76 g_free(candidate->id);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
77 g_free(candidate->ip);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
78 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
79
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
80 GType
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
81 jingle_rawudp_candidate_get_type()
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
82 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
83 static GType type = 0;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
84
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
85 if (type == 0) {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
86 type = g_boxed_type_register_static("JingleRawUdpCandidate",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
87 (GBoxedCopyFunc)jingle_rawudp_candidate_copy,
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
88 (GBoxedFreeFunc)jingle_rawudp_candidate_free);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
89 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
90 return type;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
91 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
92
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
93 JingleRawUdpCandidate *
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
94 jingle_rawudp_candidate_new(const gchar *id, guint generation, guint component, const gchar *ip, guint port)
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
95 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
96 JingleRawUdpCandidate *candidate = g_new0(JingleRawUdpCandidate, 1);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
97 candidate->generation = generation;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
98 candidate->component = component;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
99 candidate->id = g_strdup(id);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
100 candidate->ip = g_strdup(ip);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
101 candidate->port = port;
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
102
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
103 candidate->rem_known = FALSE;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
104 return candidate;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
105 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
106
36889
4dfe09057bed Register jingle types dynamically
Ankit Vani <a@nevitus.org>
parents: 34935
diff changeset
107 PURPLE_DEFINE_TYPE(JingleRawUdp, jingle_rawudp, JINGLE_TYPE_TRANSPORT);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
108
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
109 static void
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
110 jingle_rawudp_class_init (JingleRawUdpClass *klass)
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
111 {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
112 GObjectClass *gobject_class = (GObjectClass*)klass;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
113 parent_class = g_type_class_peek_parent(klass);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
114
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
115 gobject_class->finalize = jingle_rawudp_finalize;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
116 gobject_class->set_property = jingle_rawudp_set_property;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
117 gobject_class->get_property = jingle_rawudp_get_property;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
118 klass->parent_class.to_xml = jingle_rawudp_to_xml_internal;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
119 klass->parent_class.parse = jingle_rawudp_parse_internal;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
120 klass->parent_class.transport_type = JINGLE_TRANSPORT_RAWUDP;
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
121 klass->parent_class.add_local_candidate = jingle_rawudp_add_local_candidate;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
122 klass->parent_class.get_remote_candidates = jingle_rawudp_get_remote_candidates;
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
123
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
124 g_object_class_install_property(gobject_class, PROP_LOCAL_CANDIDATES,
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
125 g_param_spec_pointer("local-candidates",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
126 "Local candidates",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
127 "The local candidates for this transport.",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
128 G_PARAM_READABLE));
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
129
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
130 g_object_class_install_property(gobject_class, PROP_REMOTE_CANDIDATES,
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
131 g_param_spec_pointer("remote-candidates",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
132 "Remote candidates",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
133 "The remote candidates for this transport.",
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
134 G_PARAM_READABLE));
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
135
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
136 g_type_class_add_private(klass, sizeof(JingleRawUdpPrivate));
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
137 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
138
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
139 static void
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
140 jingle_rawudp_init (JingleRawUdp *rawudp)
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
141 {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
142 rawudp->priv = JINGLE_RAWUDP_GET_PRIVATE(rawudp);
26411
6b7c565cfa9a Fix a bunch of memsets.
Michael Ruprecht <maiku@pidgin.im>
parents: 26410
diff changeset
143 rawudp->priv->local_candidates = NULL;
6b7c565cfa9a Fix a bunch of memsets.
Michael Ruprecht <maiku@pidgin.im>
parents: 26410
diff changeset
144 rawudp->priv->remote_candidates = NULL;
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
145 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
146
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
147 static void
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
148 jingle_rawudp_finalize (GObject *rawudp)
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
149 {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
150 /* JingleRawUdpPrivate *priv = JINGLE_RAWUDP_GET_PRIVATE(rawudp); */
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
151 purple_debug_info("jingle","jingle_rawudp_finalize\n");
26410
5952dcb9ce6c Plug some memory leaks related to transports.
Michael Ruprecht <maiku@pidgin.im>
parents: 26408
diff changeset
152
5952dcb9ce6c Plug some memory leaks related to transports.
Michael Ruprecht <maiku@pidgin.im>
parents: 26408
diff changeset
153 G_OBJECT_CLASS(parent_class)->finalize(rawudp);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
154 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
155
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
156 static void
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
157 jingle_rawudp_set_property (GObject *object, guint prop_id, const GValue *value, GParamSpec *pspec)
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
158 {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
159 JingleRawUdp *rawudp;
32053
e11a51dcd2d8 jabber: Add a few extra g_return_if_fails to the Jingle code
Paul Aurich <darkrain42@pidgin.im>
parents: 31294
diff changeset
160
e11a51dcd2d8 jabber: Add a few extra g_return_if_fails to the Jingle code
Paul Aurich <darkrain42@pidgin.im>
parents: 31294
diff changeset
161 g_return_if_fail(object != NULL);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
162 g_return_if_fail(JINGLE_IS_RAWUDP(object));
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
163
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
164 rawudp = JINGLE_RAWUDP(object);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
165
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
166 switch (prop_id) {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
167 case PROP_LOCAL_CANDIDATES:
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
168 rawudp->priv->local_candidates =
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
169 g_value_get_pointer(value);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
170 break;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
171 case PROP_REMOTE_CANDIDATES:
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
172 rawudp->priv->remote_candidates =
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
173 g_value_get_pointer(value);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
174 break;
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 28322
diff changeset
175 default:
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
176 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
177 break;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
178 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
179 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
180
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
181 static void
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
182 jingle_rawudp_get_property (GObject *object, guint prop_id, GValue *value, GParamSpec *pspec)
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
183 {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
184 JingleRawUdp *rawudp;
32053
e11a51dcd2d8 jabber: Add a few extra g_return_if_fails to the Jingle code
Paul Aurich <darkrain42@pidgin.im>
parents: 31294
diff changeset
185
e11a51dcd2d8 jabber: Add a few extra g_return_if_fails to the Jingle code
Paul Aurich <darkrain42@pidgin.im>
parents: 31294
diff changeset
186 g_return_if_fail(object != NULL);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
187 g_return_if_fail(JINGLE_IS_RAWUDP(object));
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 28322
diff changeset
188
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
189 rawudp = JINGLE_RAWUDP(object);
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
190
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
191 switch (prop_id) {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
192 case PROP_LOCAL_CANDIDATES:
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
193 g_value_set_pointer(value, rawudp->priv->local_candidates);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
194 break;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
195 case PROP_REMOTE_CANDIDATES:
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
196 g_value_set_pointer(value, rawudp->priv->remote_candidates);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
197 break;
31294
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 28322
diff changeset
198 default:
73607ab89c6f Remove trailing whitespace
Richard Laager <rlaager@pidgin.im>
parents: 28322
diff changeset
199 G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
200 break;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
201 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
202 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
203
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
204 static void
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
205 jingle_rawudp_add_local_candidate(JingleTransport *transport, const gchar *id, guint generation, PurpleMediaCandidate *candidate)
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
206 {
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
207 JingleRawUdp *rawudp = JINGLE_RAWUDP(transport);
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
208 gchar *ip;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
209 JingleRawUdpCandidate *rawudp_candidate;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
210 GList *iter;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
211
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
212 ip = purple_media_candidate_get_ip(candidate);
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
213 rawudp_candidate = jingle_rawudp_candidate_new(id, generation,
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
214 purple_media_candidate_get_component_id(candidate),
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
215 ip, purple_media_candidate_get_port(candidate));
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
216 g_free(ip);
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
217
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
218 for (iter = rawudp->priv->local_candidates; iter; iter = g_list_next(iter)) {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
219 JingleRawUdpCandidate *c = iter->data;
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
220 if (!strcmp(c->id, id)) {
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
221 generation = c->generation + 1;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
222
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
223 g_boxed_free(JINGLE_TYPE_RAWUDP_CANDIDATE, c);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
224 rawudp->priv->local_candidates = g_list_delete_link(
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
225 rawudp->priv->local_candidates, iter);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
226
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
227 rawudp_candidate->generation = generation;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
228
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
229 rawudp->priv->local_candidates = g_list_append(
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
230 rawudp->priv->local_candidates, rawudp_candidate);
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
231 return;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
232 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
233 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
234
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
235 rawudp->priv->local_candidates = g_list_append(
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
236 rawudp->priv->local_candidates, rawudp_candidate);
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
237 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
238
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
239 static GList *
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
240 jingle_rawudp_get_remote_candidates(JingleTransport *transport)
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
241 {
33631
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
242 JingleRawUdp *rawudp = JINGLE_RAWUDP(transport);
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
243 GList *candidates = rawudp->priv->remote_candidates;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
244 GList *ret = NULL;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
245
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
246 for (; candidates; candidates = g_list_next(candidates)) {
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
247 JingleRawUdpCandidate *candidate = candidates->data;
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
248 ret = g_list_append(ret, purple_media_candidate_new("",
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
249 candidate->component,
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
250 PURPLE_MEDIA_CANDIDATE_TYPE_SRFLX,
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
251 PURPLE_MEDIA_NETWORK_PROTOCOL_UDP,
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
252 candidate->ip, candidate->port));
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
253 }
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
254
21775fb6957a Abstract candidate translation for JingleTransports.
Elliott Sales de Andrade <qulogic@pidgin.im>
parents: 32053
diff changeset
255 return ret;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
256 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
257
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
258 static JingleRawUdpCandidate *
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
259 jingle_rawudp_get_remote_candidate_by_id(JingleRawUdp *rawudp, gchar *id)
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
260 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
261 GList *iter = rawudp->priv->remote_candidates;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
262 for (; iter; iter = g_list_next(iter)) {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
263 JingleRawUdpCandidate *candidate = iter->data;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
264 if (!strcmp(candidate->id, id)) {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
265 return candidate;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
266 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
267 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
268 return NULL;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
269 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
270
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
271 static void
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
272 jingle_rawudp_add_remote_candidate(JingleRawUdp *rawudp, JingleRawUdpCandidate *candidate)
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
273 {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
274 JingleRawUdpPrivate *priv = JINGLE_RAWUDP_GET_PRIVATE(rawudp);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
275 JingleRawUdpCandidate *rawudp_candidate =
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
276 jingle_rawudp_get_remote_candidate_by_id(rawudp, candidate->id);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
277 if (rawudp_candidate != NULL) {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
278 priv->remote_candidates = g_list_remove(
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
279 priv->remote_candidates, rawudp_candidate);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
280 g_boxed_free(JINGLE_TYPE_RAWUDP_CANDIDATE, rawudp_candidate);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
281 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
282 priv->remote_candidates = g_list_append(priv->remote_candidates, candidate);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
283 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
284
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
285 static JingleTransport *
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
286 jingle_rawudp_parse_internal(PurpleXmlNode *rawudp)
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
287 {
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
288 JingleTransport *transport = parent_class->parse(rawudp);
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
289 JingleRawUdpPrivate *priv = JINGLE_RAWUDP_GET_PRIVATE(transport);
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
290 PurpleXmlNode *candidate = purple_xmlnode_get_child(rawudp, "candidate");
26157
5cb0c7e003c0 Silence warning.
Michael Ruprecht <maiku@pidgin.im>
parents: 26154
diff changeset
291 JingleRawUdpCandidate *rawudp_candidate = NULL;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
292
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
293 for (; candidate; candidate = purple_xmlnode_get_next_twin(candidate)) {
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
294 const gchar *id = purple_xmlnode_get_attrib(candidate, "id");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
295 const gchar *generation = purple_xmlnode_get_attrib(candidate, "generation");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
296 const gchar *component = purple_xmlnode_get_attrib(candidate, "component");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
297 const gchar *ip = purple_xmlnode_get_attrib(candidate, "ip");
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
298 const gchar *port = purple_xmlnode_get_attrib(candidate, "port");
26980
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
299
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
300 if (!id || !generation || !component || !ip || !port)
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
301 continue;
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
302
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
303 rawudp_candidate = jingle_rawudp_candidate_new(
26980
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
304 id,
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
305 atoi(generation),
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
306 atoi(component),
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
307 ip,
42d365c0076f Don't crash on malicious candidates missing attributes
Paul Aurich <darkrain42@pidgin.im>
parents: 26415
diff changeset
308 atoi(port));
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
309 rawudp_candidate->rem_known = TRUE;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
310 jingle_rawudp_add_remote_candidate(JINGLE_RAWUDP(transport), rawudp_candidate);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
311 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
312
26157
5cb0c7e003c0 Silence warning.
Michael Ruprecht <maiku@pidgin.im>
parents: 26154
diff changeset
313 if (rawudp_candidate != NULL &&
5cb0c7e003c0 Silence warning.
Michael Ruprecht <maiku@pidgin.im>
parents: 26154
diff changeset
314 g_list_length(priv->remote_candidates) == 1) {
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
315 /* manufacture rtcp candidate */
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
316 rawudp_candidate = g_boxed_copy(JINGLE_TYPE_RAWUDP_CANDIDATE, rawudp_candidate);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
317 rawudp_candidate->component = 2;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
318 rawudp_candidate->port = rawudp_candidate->port + 1;
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
319 rawudp_candidate->rem_known = TRUE;
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
320 jingle_rawudp_add_remote_candidate(JINGLE_RAWUDP(transport), rawudp_candidate);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
321 }
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
322
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
323 return transport;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
324 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
325
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
326 static PurpleXmlNode *
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
327 jingle_rawudp_to_xml_internal(JingleTransport *transport, PurpleXmlNode *content, JingleActionType action)
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
328 {
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
329 PurpleXmlNode *node = parent_class->to_xml(transport, content, action);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
330
26408
08a40e516004 Make Jingle Raw-Udp send candidates in session-accept packet.
Michael Ruprecht <maiku@pidgin.im>
parents: 26221
diff changeset
331 if (action == JINGLE_SESSION_INITIATE ||
08a40e516004 Make Jingle Raw-Udp send candidates in session-accept packet.
Michael Ruprecht <maiku@pidgin.im>
parents: 26221
diff changeset
332 action == JINGLE_TRANSPORT_INFO ||
08a40e516004 Make Jingle Raw-Udp send candidates in session-accept packet.
Michael Ruprecht <maiku@pidgin.im>
parents: 26221
diff changeset
333 action == JINGLE_SESSION_ACCEPT) {
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
334 JingleRawUdpPrivate *priv = JINGLE_RAWUDP_GET_PRIVATE(transport);
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
335 GList *iter = priv->local_candidates;
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
336
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
337 for (; iter; iter = g_list_next(iter)) {
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
338 JingleRawUdpCandidate *candidate = iter->data;
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
339 PurpleXmlNode *xmltransport;
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
340 gchar *generation, *component, *port;
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
341
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
342 if (candidate->rem_known == TRUE)
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
343 continue;
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
344 candidate->rem_known = TRUE;
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
345
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
346 xmltransport = purple_xmlnode_new_child(node, "candidate");
26415
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
347 generation = g_strdup_printf("%d", candidate->generation);
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
348 component = g_strdup_printf("%d", candidate->component);
8191f6b7e5e0 Make RawUdp candidates know if they have been sent to the remote client.
Michael Ruprecht <maiku@pidgin.im>
parents: 26411
diff changeset
349 port = g_strdup_printf("%d", candidate->port);
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
350
34935
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
351 purple_xmlnode_set_attrib(xmltransport, "generation", generation);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
352 purple_xmlnode_set_attrib(xmltransport, "component", component);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
353 purple_xmlnode_set_attrib(xmltransport, "id", candidate->id);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
354 purple_xmlnode_set_attrib(xmltransport, "ip", candidate->ip);
686fa55b0deb Replaced xmlnode with PurpleXmlNode, and xmlnode_* API with purple_xmlnode_* API
Ankit Vani <a@nevitus.org>
parents: 33631
diff changeset
355 purple_xmlnode_set_attrib(xmltransport, "port", port);
26154
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
356
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
357 g_free(port);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
358 g_free(generation);
78fa18d44718 Update Jingle raw-udp to latest spec version.
Michael Ruprecht <maiku@pidgin.im>
parents: 26147
diff changeset
359 }
26147
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
360 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
361
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
362 return node;
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
363 }
791ee9c9a75e Add files I missed committing before and remove a few unnecessary functions.
Michael Ruprecht <maiku@pidgin.im>
parents:
diff changeset
364

mercurial