author | Nicolas Cornu <nicolas.cornu@ensi-bourges.fr> |
Mon, 16 Aug 2010 18:33:33 +0200 | |
changeset 133 | 361d8577ebd1 |
parent 131 | 943c3f938cb4 |
child 141 | 8bc73e965a07 |
permissions | -rw-r--r-- |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
1 |
/* |
114
813867884159
add the start of socks5
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
110
diff
changeset
|
2 |
* ibb.c |
49
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> |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
25 |
#include <string.h> |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
26 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
27 |
#include <mcabber/xmpp.h> |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
28 |
#include <mcabber/modules.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
29 |
#include <mcabber/utils.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
30 |
#include <mcabber/xmpp_helper.h> |
105
c31988e107b3
ibb handle new data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
104
diff
changeset
|
31 |
#include <mcabber/logprint.h> |
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
32 |
#include <mcabber/hooks.h> |
49
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 <jingle/jingle.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
35 |
#include <jingle/check.h> |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
36 |
#include <jingle/register.h> |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
37 |
#include <jingle/sessions.h> |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
38 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
39 |
#include "ibb.h" |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
40 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
41 |
static LmMessageHandler* jingle_ibb_handler = NULL; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
42 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
43 |
static gconstpointer check(JingleContent *cn, GError **err); |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
44 |
static void tomessage(gconstpointer data, LmMessageNode *node); |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
45 |
static gconstpointer new(void); |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
46 |
static void send(session_content *sc, gconstpointer data, gchar *buf, gsize size); |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
47 |
static void init(session_content *sc, gconstpointer data); |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
48 |
static void end(session_content *sc, gconstpointer data); |
128
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
49 |
static gchar *info(gconstpointer data); |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
50 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
51 |
static void _send_internal(session_content *sc, const gchar *to, gchar *buf, |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
52 |
gsize size, const gchar *sid, gint64 *seq); |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
53 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
54 |
static void jingle_ibb_init(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
55 |
static void jingle_ibb_uninit(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
56 |
|
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
57 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
58 |
static guint connect_hid = 0; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
59 |
static guint disconn_hid = 0; |
49
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 |
const gchar *deps[] = { "jingle", NULL }; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
62 |
|
84
cdff1771155d
commit without segfault it's better
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
81
diff
changeset
|
63 |
static JingleTransportFuncs funcs = { |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
64 |
.check = check, |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
65 |
.tomessage = tomessage, |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
66 |
.new = new, |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
67 |
.send = send, |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
68 |
.init = init, |
128
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
69 |
.end = end, |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
70 |
.info = info |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
71 |
}; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
72 |
|
58 | 73 |
module_info_t info_jingle_inbandbytestream = { |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
74 |
.branch = MCABBER_BRANCH, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
75 |
.api = MCABBER_API_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
76 |
.version = PROJECT_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
77 |
.description = "Jingle In Band Bytestream (XEP-0261)\n", |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
78 |
.requires = deps, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
79 |
.init = jingle_ibb_init, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
80 |
.uninit = jingle_ibb_uninit, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
81 |
.next = NULL, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
82 |
}; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
83 |
|
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
84 |
/* Hash-Table of all emited JingleIBB struct */ |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
85 |
static GHashTable *JingleIBBs = NULL; |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
86 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
87 |
static gconstpointer check(JingleContent *cn, GError **err) |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
88 |
{ |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
89 |
JingleIBB *ibb = NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
90 |
LmMessageNode *node = cn->transport; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
91 |
const gchar *blocksize; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
92 |
|
94
a49f78cada29
Fix bugs. Use directly the JingleSession to determine the recipient.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
89
diff
changeset
|
93 |
ibb = g_new0(JingleIBB, 1); |
a49f78cada29
Fix bugs. Use directly the JingleSession to determine the recipient.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
89
diff
changeset
|
94 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
95 |
blocksize = lm_message_node_get_attribute(node, "block-size"); |
119
0b9a7b505079
create the session when receiving a session-initiate
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
118
diff
changeset
|
96 |
ibb->sid = g_strdup(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
|
97 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
98 |
if (!ibb->sid || !blocksize) { |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
99 |
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
|
100 |
"an attribute of the transport element is missing"); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
101 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
102 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
103 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
104 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
105 |
ibb->blocksize = g_ascii_strtoll(blocksize, NULL, 10); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
106 |
|
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
107 |
// If block size is too big, we change it |
131
943c3f938cb4
JFT: add a command info
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
130
diff
changeset
|
108 |
if (ibb->blocksize > IBB_BLOCK_SIZE_MAX) |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
109 |
ibb->blocksize = IBB_BLOCK_SIZE_MAX; |
131
943c3f938cb4
JFT: add a command info
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
130
diff
changeset
|
110 |
|
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
111 |
// the blocksize attribute is a xs:short an therefore can be negative. |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
112 |
if (ibb->blocksize < 0) { |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
113 |
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
|
114 |
"block-size is negative"); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
115 |
g_free(ibb->sid); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
116 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
117 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
118 |
} |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
119 |
|
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
120 |
g_hash_table_insert(JingleIBBs, ibb->sid, ibb); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
121 |
return (gconstpointer) ibb; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
122 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
123 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
124 |
LmHandlerResult jingle_ibb_handle_iq(LmMessageHandler *handler, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
125 |
LmConnection *connection, LmMessage *message, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
126 |
gpointer user_data) |
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 |
const gchar *data64; |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
129 |
JingleIBB *jibb = g_new0(JingleIBB, 1), *jibb2; |
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
130 |
gsize len; |
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
131 |
guchar *data; |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
132 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
133 |
LmMessageSubType iqtype = lm_message_get_sub_type(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
134 |
if (iqtype != LM_MESSAGE_SUB_TYPE_SET) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
135 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
136 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
137 |
LmMessageNode *root = lm_message_get_node(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
138 |
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
|
139 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
140 |
if (!dnode) // no <data> element found |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
141 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
142 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
143 |
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
|
144 |
NS_TRANSPORT_IBB)) |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
145 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
146 |
|
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
147 |
jibb2 = g_hash_table_lookup(JingleIBBs, |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
148 |
lm_message_node_get_attribute(dnode, "sid")); |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
149 |
if (jibb2 == NULL) |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
150 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
151 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
152 |
jingle_ack_iq(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
153 |
|
120 | 154 |
jibb->sid = g_strdup(lm_message_node_get_attribute(dnode, "sid")); |
105
c31988e107b3
ibb handle new data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
104
diff
changeset
|
155 |
jibb->seq = g_ascii_strtoll(lm_message_node_get_attribute(dnode, "seq"), NULL, 10); |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
156 |
|
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
157 |
data64 = lm_message_node_get_value(dnode); |
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
158 |
|
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
159 |
data = g_base64_decode(data64, &len); |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
160 |
|
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
161 |
handle_trans_data(jibb2, (const gchar *)data, (guint)len); |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
162 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
163 |
return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
164 |
} |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
165 |
|
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
166 |
static gchar *new_ibb_sid(void) |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
167 |
{ |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
168 |
gchar *sid; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
169 |
gchar car[] = "azertyuiopqsdfghjklmwxcvbn1234567890AZERTYUIOPQSDFGHJKLMWXCVBN"; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
170 |
int i; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
171 |
sid = g_new0(gchar, 7); |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
172 |
for (i = 0; i < 6; i++) |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
173 |
sid[i] = car[g_random_int_range(0, sizeof(car)/sizeof(car[0]))]; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
174 |
|
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
175 |
sid[6] = '\0'; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
176 |
|
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
177 |
return sid; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
178 |
} |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
179 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
180 |
static gconstpointer new(void) |
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
181 |
{ |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
182 |
JingleIBB *ibb = g_new0(JingleIBB, 1); |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
183 |
ibb->blocksize = IBB_BLOCK_SIZE_MAX; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
184 |
ibb->sid = new_ibb_sid(); |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
185 |
ibb->seq = 0; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
186 |
|
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
187 |
return ibb; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
188 |
} |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
189 |
|
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
190 |
int jingle_ibb_check_session(gconstpointer data, gconstpointer session) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
191 |
{ |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
192 |
const JingleIBB *ibb1 = data, *ibb2 = session; |
110
c0341c164405
JFT: compute the md5 when receiving
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
107
diff
changeset
|
193 |
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
|
194 |
return 0; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
195 |
return 1; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
196 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
197 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
198 |
static void tomessage(gconstpointer data, LmMessageNode *node) |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
199 |
{ |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
200 |
JingleIBB *jibb = (JingleIBB*) data; |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
201 |
gchar *bsize = g_strdup_printf("%i", jibb->blocksize); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
202 |
|
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
203 |
if (lm_message_node_get_child(node, "transport") != NULL) |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
204 |
return; |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
205 |
|
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
206 |
LmMessageNode *node2 = lm_message_node_add_child(node, "transport", NULL); |
89
88bb2d0f9ff8
add an namespace to a jingle node
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
84
diff
changeset
|
207 |
|
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
208 |
lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE_TRANSPORT_IBB, |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
209 |
"sid", jibb->sid, |
89
88bb2d0f9ff8
add an namespace to a jingle node
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
84
diff
changeset
|
210 |
"block-size", bsize, |
88bb2d0f9ff8
add an namespace to a jingle node
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
84
diff
changeset
|
211 |
NULL); |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
212 |
g_free(bsize); |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
213 |
} |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
214 |
|
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
215 |
static void jingle_ibb_handle_ack_iq_send(JingleAckType type, LmMessage *mess, |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
216 |
gpointer data) |
104 | 217 |
{ |
107 | 218 |
// TODO: check the sub type (error ??) |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
219 |
session_content *sc = (session_content *)data; |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
220 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
221 |
JingleSession *sess = session_find_by_sid(sc->sid, sc->from); |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
222 |
|
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
223 |
// If there is no more session, maybe it's finish |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
224 |
if (sess == NULL) |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
225 |
return; |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
226 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
227 |
SessionContent *sc2 = session_find_sessioncontent(sess, sc->name); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
228 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
229 |
JingleIBB *jibb = (JingleIBB *)sc2->transport; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
230 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
231 |
// We look if there is enough data staying |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
232 |
if (jibb->dataleft > jibb->blocksize) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
233 |
gchar *buf = g_memdup(jibb->buf, jibb->blocksize); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
234 |
jibb->dataleft-=jibb->blocksize; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
235 |
g_memmove(jibb->buf, jibb->buf+jibb->blocksize, jibb->dataleft); |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
236 |
_send_internal(sc, sess->to, buf, jibb->blocksize, jibb->sid, &jibb->seq); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
237 |
g_free(buf); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
238 |
} else { // ask for more data |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
239 |
handle_trans_next(sc); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
240 |
} |
104 | 241 |
} |
242 |
||
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
243 |
static void _send_internal(session_content *sc, const gchar *to, gchar *buf, |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
244 |
gsize size, const gchar *sid, gint64 *seq) |
104 | 245 |
{ |
246 |
JingleAckHandle *ackhandle; |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
247 |
LmMessage *r = lm_message_new_with_sub_type(to, LM_MESSAGE_TYPE_IQ, |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
248 |
LM_MESSAGE_SUB_TYPE_SET); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
249 |
LmMessageNode *node = lm_message_get_node(r); |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
250 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
251 |
gchar *base64 = g_base64_encode((const guchar *)buf, size); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
252 |
gchar *strseq = g_strdup_printf("%" G_GINT64_FORMAT, *seq); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
253 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
254 |
node = lm_message_node_add_child(node, "data", NULL); |
107 | 255 |
lm_message_node_set_attributes(node, "xmlns", NS_TRANSPORT_IBB, |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
256 |
"sid", sid, |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
257 |
"seq", strseq, |
107 | 258 |
NULL); |
104 | 259 |
lm_message_node_set_value(node, base64); |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
260 |
|
104 | 261 |
ackhandle = g_new0(JingleAckHandle, 1); |
262 |
ackhandle->callback = jingle_ibb_handle_ack_iq_send; |
|
107 | 263 |
ackhandle->user_data = (gpointer)sc; |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
264 |
|
104 | 265 |
lm_connection_send_with_reply(lconnection, r, |
266 |
jingle_new_ack_handler(ackhandle), NULL); |
|
267 |
lm_message_unref(r); |
|
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
268 |
|
104 | 269 |
// The next packet will be seq++ |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
270 |
++(*seq); |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
271 |
|
104 | 272 |
g_free(base64); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
273 |
g_free(strseq); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
274 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
275 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
276 |
static void send(session_content *sc, gconstpointer data, gchar *buf, |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
277 |
gsize size) |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
278 |
{ |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
279 |
JingleIBB *jibb = (JingleIBB*)data; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
280 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
281 |
if (jibb->size_buf >= size + jibb->dataleft) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
282 |
g_memmove(jibb->buf + jibb->dataleft, buf, size); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
283 |
jibb->dataleft+=size; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
284 |
} else { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
285 |
jibb->size_buf = size + jibb->dataleft; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
286 |
jibb->buf = g_realloc(jibb->buf, jibb->size_buf); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
287 |
g_memmove(jibb->buf + jibb->dataleft, buf, size); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
288 |
jibb->dataleft = jibb->size_buf; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
289 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
290 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
291 |
// We need more data |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
292 |
if (jibb->dataleft < jibb->blocksize) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
293 |
handle_trans_next(sc); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
294 |
return; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
295 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
296 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
297 |
// It's enough |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
298 |
{ |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
299 |
JingleSession *sess = session_find_by_sid(sc->sid, sc->from); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
300 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
301 |
gchar *buffer = g_memdup(jibb->buf, jibb->blocksize); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
302 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
303 |
jibb->dataleft-=jibb->blocksize; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
304 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
305 |
g_memmove(jibb->buf, jibb->buf+jibb->blocksize, jibb->dataleft); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
306 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
307 |
_send_internal(sc, sess->to, buffer, jibb->blocksize, jibb->sid, |
123
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
308 |
&jibb->seq); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
309 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
310 |
g_free(buffer); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
311 |
} |
104 | 312 |
} |
313 |
||
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
314 |
static void init(session_content *sc, gconstpointer data) |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
315 |
{ |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
316 |
JingleIBB *jibb = (JingleIBB*)data; |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
317 |
JingleSession *sess = session_find_by_sid(sc->sid, sc->from); |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
318 |
SessionContent *sc2 = session_find_sessioncontent(sess, sc->name); |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
319 |
JingleIBB *jibb2 = (JingleIBB*)sc2->transport; |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
320 |
|
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
321 |
jibb2->blocksize = (jibb->blocksize < jibb2->blocksize)?jibb->blocksize:jibb2->blocksize; |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
322 |
} |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
323 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
324 |
static void end(session_content *sc, gconstpointer data) |
123
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
325 |
{ |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
326 |
JingleIBB *jibb = (JingleIBB*)data; |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
327 |
JingleSession *sess = session_find_by_sid(sc->sid, sc->from); |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
328 |
|
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
329 |
if (jibb->dataleft > 0) { |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
330 |
_send_internal(sc, sess->to, jibb->buf, jibb->dataleft, jibb->sid, |
123
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
331 |
&jibb->seq); |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
332 |
} |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
333 |
|
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
334 |
g_free(jibb->buf); |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
335 |
} |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
336 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
337 |
static void jingle_ibb_unregister_lm_handlers(void) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
338 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
339 |
if (lconnection) { |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
340 |
lm_connection_unregister_message_handler(lconnection, jingle_ibb_handler, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
341 |
LM_MESSAGE_TYPE_IQ); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
342 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
343 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
344 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
345 |
static void jingle_ibb_register_lm_handlers(void) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
346 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
347 |
jingle_ibb_unregister_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
348 |
if (lconnection) { |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
349 |
lm_connection_register_message_handler(lconnection, jingle_ibb_handler, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
350 |
LM_MESSAGE_TYPE_IQ, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
351 |
LM_HANDLER_PRIORITY_FIRST); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
352 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
353 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
354 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
355 |
static guint jingle_ibb_connect_hh(const gchar *hname, hk_arg_t *args, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
356 |
gpointer ignore) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
357 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
358 |
jingle_ibb_register_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
359 |
return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
360 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
361 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
362 |
static guint jingle_ibb_disconn_hh(const gchar *hname, hk_arg_t *args, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
363 |
gpointer ignore) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
364 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
365 |
jingle_ibb_unregister_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
366 |
return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
367 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
368 |
|
128
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
369 |
static gchar *info(gconstpointer data) |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
370 |
{ |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
371 |
JingleIBB *jibb = (JingleIBB *)data; |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
372 |
gchar *info = g_strdup_printf("IBB %i", jibb->blocksize); |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
373 |
return info; |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
374 |
} |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
375 |
|
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
376 |
static void free_ibb(gpointer data) |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
377 |
{ |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
378 |
JingleIBB *jibb = (JingleIBB *)data; |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
379 |
g_free(jibb); |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
380 |
} |
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
381 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
382 |
static void jingle_ibb_init(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
383 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
384 |
jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL); |
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
385 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
386 |
connect_hid = hk_add_handler(jingle_ibb_connect_hh, HOOK_POST_CONNECT, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
387 |
G_PRIORITY_DEFAULT_IDLE, NULL); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
388 |
disconn_hid = hk_add_handler(jingle_ibb_disconn_hh, HOOK_PRE_DISCONNECT, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
389 |
G_PRIORITY_DEFAULT_IDLE, NULL); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
390 |
jingle_ibb_register_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
391 |
|
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
|
392 |
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
|
393 |
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
|
394 |
JINGLE_TRANSPORT_LOW); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
395 |
xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB); |
130
da01e4b2d7fa
Fix jingle_ibb_handle_ack_iq_send, keep the JingleIBB in a hash table.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
128
diff
changeset
|
396 |
JingleIBBs = g_hash_table_new_full(g_str_hash, g_str_equal, NULL, free_ibb); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
397 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
398 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
399 |
static void jingle_ibb_uninit(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
400 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
401 |
lm_message_handler_invalidate(jingle_ibb_handler); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
402 |
lm_message_handler_unref(jingle_ibb_handler); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
403 |
xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
404 |
jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
405 |
} |