author | Nicolas Cornu <nicolas.cornu@ensi-bourges.fr> |
Sun, 25 Jul 2010 02:03:58 +0200 | |
changeset 72 | 277778138b4b |
parent 68 | ae8b0d03887e |
child 73 | 6f061c11acfb |
permissions | -rw-r--r-- |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
1 |
/* |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
2 |
* filetransfer.c |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
3 |
* |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
4 |
* Copyrigth (C) 2010 Nicolas Cornu <nicolas.cornu@ensi-bourges.fr> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
5 |
* |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
6 |
* This program is free software; you can redistribute it and/or modify |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
7 |
* it under the terms of the GNU General Public License as published by |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
8 |
* the Free Software Foundation; either version 2 of the License, or (at |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
9 |
* your option) any later version. |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
10 |
* |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
11 |
* This program is distributed in the hope that it will be useful, but |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
12 |
* WITHOUT ANY WARRANTY; without even the implied warranty of |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
13 |
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
14 |
* General Public License for more details. |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
15 |
* |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
16 |
* You should have received a copy of the GNU General Public License |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
17 |
* along with this program; if not, write to the Free Software |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
18 |
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
19 |
* USA |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
20 |
*/ |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
21 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
22 |
#include "config.h" |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
23 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
24 |
#include <glib.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
25 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
26 |
#include <mcabber/modules.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
27 |
#include <mcabber/utils.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
28 |
#include <mcabber/xmpp_helper.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
29 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
30 |
#include <jingle/jingle.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
31 |
#include <jingle/check.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
32 |
#include <jingle/register.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
33 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
34 |
#include "ibb.h" |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
35 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
36 |
static LmMessageHandler* jingle_ibb_handler = NULL; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
37 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
38 |
gconstpointer jingle_ibb_check(JingleContent *cn, GError **err); |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
39 |
gboolean jingle_ibb_cmp(gconstpointer data1, gconstpointer data2); |
68
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
40 |
void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node); |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
41 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
42 |
static void jingle_ibb_init(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
43 |
static void jingle_ibb_uninit(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
44 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
45 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
46 |
const gchar *deps[] = { "jingle", NULL }; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
47 |
|
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
48 |
JingleTransportFuncs funcs = {jingle_ibb_check, jingle_ibb_handle, jingle_ibb_cmp}; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
49 |
|
58 | 50 |
module_info_t info_jingle_inbandbytestream = { |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
51 |
.branch = MCABBER_BRANCH, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
52 |
.api = MCABBER_API_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
53 |
.version = PROJECT_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
54 |
.description = "Jingle In Band Bytestream (XEP-0261)\n", |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
55 |
.requires = deps, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
56 |
.init = jingle_ibb_init, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
57 |
.uninit = jingle_ibb_uninit, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
58 |
.next = NULL, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
59 |
}; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
60 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
61 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
62 |
gconstpointer jingle_ibb_check(JingleContent *cn, GError **err) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
63 |
{ |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
64 |
JingleIBB *ibb = NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
65 |
LmMessageNode *node = cn->transport; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
66 |
const gchar *blocksize; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
67 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
68 |
blocksize = lm_message_node_get_attribute(node, "block-size"); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
69 |
ibb->sid = lm_message_node_get_attribute(node, "sid"); |
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
70 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
71 |
if (!ibb->sid || !blocksize) { |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
72 |
g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_MISSING, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
73 |
"an attribute of the transport element is missing"); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
74 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
75 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
76 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
77 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
78 |
ibb->blocksize = g_ascii_strtoll(blocksize, NULL, 10); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
79 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
80 |
// the size attribute is a xs:short an therefore can be negative. |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
81 |
if (ibb->blocksize < 0) { |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
82 |
g_set_error(err, JINGLE_CHECK_ERROR, JINGLE_CHECK_ERROR_BADVALUE, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
83 |
"block-size is negative"); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
84 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
85 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
86 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
87 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
88 |
return (gconstpointer) ibb; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
89 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
90 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
91 |
LmHandlerResult jingle_ibb_handle_iq(LmMessageHandler *handler, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
92 |
LmConnection *connection, LmMessage *message, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
93 |
gpointer user_data) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
94 |
{ |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
95 |
const gchar *data64; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
96 |
JingleIBB *ibb = g_new0(JingleIBB, 1); |
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
97 |
gsize len; |
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
98 |
guchar *data; |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
99 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
100 |
LmMessageSubType iqtype = lm_message_get_sub_type(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
101 |
if (iqtype != LM_MESSAGE_SUB_TYPE_SET) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
102 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
103 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
104 |
LmMessageNode *root = lm_message_get_node(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
105 |
LmMessageNode *dnode = lm_message_node_get_child(root, "data"); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
106 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
107 |
if (!dnode) // no <data> element found |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
108 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
109 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
110 |
if (g_strcmp0(lm_message_node_get_attribute(dnode, "xmlns"), |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
111 |
NS_TRANSPORT_IBB)) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
112 |
return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
113 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
114 |
jingle_ack_iq(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
115 |
|
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
116 |
ibb->sid = lm_message_node_get_attribute(dnode, "sid"); |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
117 |
ibb->seq = lm_message_node_get_attribute(dnode, "seq"); |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
118 |
|
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
119 |
data64 = lm_message_node_get_value(dnode); |
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
120 |
|
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
121 |
data = g_base64_decode(data64, &len); |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
122 |
|
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
123 |
handle_trans_data(NS_JINGLE_TRANSPORT_IBB, ibb, (const gchar *)data, (guint)len); |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
124 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
125 |
return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
126 |
} |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
127 |
|
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
128 |
|
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
129 |
gboolean jingle_ibb_cmp(gconstpointer data1, gconstpointer data2) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
130 |
{ |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
131 |
const JingleIBB *ibb1 = data1, *ibb2 = data2; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
132 |
if(g_strcmp0(ibb1->sid, ibb2->sid)) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
133 |
return FALSE; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
134 |
return TRUE; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
135 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
136 |
|
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
137 |
|
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
138 |
int jingle_ibb_check_session(gconstpointer data, gconstpointer session) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
139 |
{ |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
140 |
const JingleIBB *ibb1 = data, *ibb2 = session; |
72
277778138b4b
Handle for the app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
68
diff
changeset
|
141 |
if(!g_strcmp0(ibb1->sid, ibb2->sid) && ibb1->seq == ibb2->seq + 1) { |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
142 |
// TODO: change the seq in the session |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
143 |
return 0; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
144 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
145 |
return 1; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
146 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
147 |
|
68
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
148 |
void jingle_ibb_handle(JingleAction act, gconstpointer data, LmMessageNode *node) |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
149 |
{ |
68
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
150 |
if (act == JINGLE_SESSION_INITIATE) { |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
151 |
JingleIBB *jibb = (JingleIBB*) data; |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
152 |
gchar *bsize = g_strdup_printf("%i", jibb->blocksize); |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
153 |
if (lm_message_node_get_child(node, "transport") != NULL) |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
154 |
return; |
61
c7879aae9e1d
build a content
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
60
diff
changeset
|
155 |
|
68
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
156 |
LmMessageNode *node2 = lm_message_node_add_child(node, "transport", NULL); |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
157 |
lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_IBB, |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
158 |
"sid", jibb->sid, |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
159 |
"block-size", bsize); |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
160 |
g_free(bsize); |
ae8b0d03887e
Start the send_session_initiate function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
63
diff
changeset
|
161 |
} |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
162 |
} |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
163 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
164 |
static void jingle_ibb_init(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
165 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
166 |
jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL); |
63
b56853071a09
Add a new function that find the best transport method for an app.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
61
diff
changeset
|
167 |
jingle_register_transport(NS_JINGLE_TRANSPORT_IBB, &funcs, |
b56853071a09
Add a new function that find the best transport method for an app.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
61
diff
changeset
|
168 |
JINGLE_TRANSPORT_STREAMING, |
b56853071a09
Add a new function that find the best transport method for an app.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
61
diff
changeset
|
169 |
JINGLE_TRANSPORT_LOW); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
170 |
xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
171 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
172 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
173 |
static void jingle_ibb_uninit(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
174 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
175 |
lm_message_handler_invalidate(jingle_ibb_handler); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
176 |
lm_message_handler_unref(jingle_ibb_handler); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
177 |
xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
178 |
jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
179 |
} |