author | Dominik George <nik@naturalnet.de> |
Mon, 04 Nov 2013 20:45:18 +0100 | |
changeset 172 | d33526eba590 |
parent 161 | fa1d993d05b6 |
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 |
|
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
43 |
static gconstpointer newfrommessage(JingleContent *cn, GError **err); |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
44 |
static JingleHandleStatus handle(JingleAction action, gconstpointer data, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
45 |
LmMessageNode *node, GError **err); |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
46 |
static void tomessage(gconstpointer data, LmMessageNode *node); |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
47 |
static gconstpointer new(void); |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
48 |
static void send(session_content *sc, gconstpointer data, gchar *buf, gsize size); |
161
fa1d993d05b6
S5B: Use a GSocketListener to manage listener sockets.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
159
diff
changeset
|
49 |
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
|
50 |
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
|
51 |
static gchar *info(gconstpointer data); |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
52 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
53 |
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
|
54 |
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
|
55 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
56 |
static void jingle_ibb_init(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
57 |
static void jingle_ibb_uninit(void); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
58 |
|
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
|
59 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
60 |
static guint connect_hid = 0; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
61 |
static guint disconn_hid = 0; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
62 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
63 |
const gchar *deps[] = { "jingle", NULL }; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
64 |
|
84
cdff1771155d
commit without segfault it's better
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
81
diff
changeset
|
65 |
static JingleTransportFuncs funcs = { |
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
66 |
.newfrommessage = newfrommessage, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
67 |
.handle = handle, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
68 |
.tomessage = tomessage, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
69 |
.new = new, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
70 |
.send = send, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
71 |
.init = init, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
72 |
.end = end, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
73 |
.info = info |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
74 |
}; |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
75 |
|
141
8bc73e965a07
change the name of the structs module_info_t
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
133
diff
changeset
|
76 |
module_info_t info_jingle_ibb = { |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
77 |
.branch = MCABBER_BRANCH, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
78 |
.api = MCABBER_API_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
79 |
.version = PROJECT_VERSION, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
80 |
.description = "Jingle In Band Bytestream (XEP-0261)\n", |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
81 |
.requires = deps, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
82 |
.init = jingle_ibb_init, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
83 |
.uninit = jingle_ibb_uninit, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
84 |
.next = NULL, |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
85 |
}; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
86 |
|
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
|
87 |
/* 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
|
88 |
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
|
89 |
|
158
a068e5714120
JS5B: Start the handle function
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
157
diff
changeset
|
90 |
|
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
91 |
static gconstpointer newfrommessage(JingleContent *cn, GError **err) |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
92 |
{ |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
93 |
JingleIBB *ibb = NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
94 |
LmMessageNode *node = cn->transport; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
95 |
const gchar *blocksize; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
96 |
|
94
a49f78cada29
Fix bugs. Use directly the JingleSession to determine the recipient.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
89
diff
changeset
|
97 |
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
|
98 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
99 |
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
|
100 |
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
|
101 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
102 |
if (!ibb->sid || !blocksize) { |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
103 |
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
|
104 |
"an attribute of the transport element is missing"); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
105 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
106 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
107 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
108 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
109 |
ibb->blocksize = g_ascii_strtoll(blocksize, NULL, 10); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
110 |
|
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
111 |
// 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
|
112 |
if (ibb->blocksize > IBB_BLOCK_SIZE_MAX) |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
113 |
ibb->blocksize = IBB_BLOCK_SIZE_MAX; |
131
943c3f938cb4
JFT: add a command info
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
130
diff
changeset
|
114 |
|
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
115 |
// 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
|
116 |
if (ibb->blocksize < 0) { |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
117 |
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
|
118 |
"block-size is negative"); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
119 |
g_free(ibb->sid); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
120 |
g_free(ibb); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
121 |
return NULL; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
122 |
} |
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
|
123 |
|
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
|
124 |
g_hash_table_insert(JingleIBBs, ibb->sid, ibb); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
125 |
return (gconstpointer) ibb; |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
126 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
127 |
|
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
128 |
static JingleHandleStatus handle(JingleAction action, gconstpointer data, |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
129 |
LmMessageNode *node, GError **err) |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
130 |
{ |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
131 |
JingleIBB *jibb = (JingleIBB *)data; |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
132 |
const gchar *blocksizestr; |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
133 |
guint64 blocksize; |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
134 |
|
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
135 |
if (action == JINGLE_SESSION_ACCEPT) { |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
136 |
const gchar *xmlns = lm_message_node_get_attribute(node, "xmlns"); |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
137 |
if (!g_strcmp0(xmlns, NS_JINGLE_TRANSPORT_IBB)) { |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
138 |
/* If the responder wishes to use a smaller block-size, the responder can |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
139 |
* specify that in the session-accept by returning a different value for |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
140 |
* the 'block-size' attribute. */ |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
141 |
blocksizestr = lm_message_node_get_attribute(node, "block-size"); |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
142 |
blocksize = g_ascii_strtoll(blocksizestr, NULL, 10); |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
143 |
jibb->blocksize = (blocksize < jibb->blocksize) ? blocksize : jibb->blocksize; |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
144 |
return JINGLE_STATUS_HANDLED; |
157
8ec7ce3ecaac
S5B: Start the "new" function that create a new JingleS5B.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
156
diff
changeset
|
145 |
} |
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
146 |
} |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
147 |
return JINGLE_STATUS_NOT_HANDLED; |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
148 |
} |
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
149 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
150 |
LmHandlerResult jingle_ibb_handle_iq(LmMessageHandler *handler, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
151 |
LmConnection *connection, LmMessage *message, |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
152 |
gpointer user_data) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
153 |
{ |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
154 |
const gchar *data64; |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
155 |
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
|
156 |
gsize len; |
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
157 |
guchar *data; |
51
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
158 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
159 |
LmMessageSubType iqtype = lm_message_get_sub_type(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
160 |
if (iqtype != LM_MESSAGE_SUB_TYPE_SET) |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
161 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
162 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
163 |
LmMessageNode *root = lm_message_get_node(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
164 |
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
|
165 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
166 |
if (!dnode) // no <data> element found |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
167 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
168 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
169 |
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
|
170 |
NS_TRANSPORT_IBB)) |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
171 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
172 |
|
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
173 |
jibb2 = g_hash_table_lookup(JingleIBBs, |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
174 |
lm_message_node_get_attribute(dnode, "sid")); |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
175 |
if (jibb2 == NULL) |
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
176 |
return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
177 |
|
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
178 |
jingle_ack_iq(message); |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
179 |
|
120 | 180 |
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
|
181 |
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
|
182 |
|
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
183 |
data64 = lm_message_node_get_value(dnode); |
0a13062d0a11
IBB: get infos and message
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
50
diff
changeset
|
184 |
|
55
bc0281fee13d
IBB handle jingle when receiving data
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
54
diff
changeset
|
185 |
data = g_base64_decode(data64, &len); |
133
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
186 |
|
361d8577ebd1
Change the way IBB work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
131
diff
changeset
|
187 |
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
|
188 |
|
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
189 |
return LM_HANDLER_RESULT_REMOVE_MESSAGE; |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
190 |
} |
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
191 |
|
157
8ec7ce3ecaac
S5B: Start the "new" function that create a new JingleS5B.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
156
diff
changeset
|
192 |
static gchar *gen_ibb_sid(void) |
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
193 |
{ |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
194 |
gchar *sid; |
157
8ec7ce3ecaac
S5B: Start the "new" function that create a new JingleS5B.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
156
diff
changeset
|
195 |
gchar car[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; |
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
196 |
int i; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
197 |
sid = g_new0(gchar, 7); |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
198 |
for (i = 0; i < 6; i++) |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
199 |
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
|
200 |
|
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
201 |
sid[6] = '\0'; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
202 |
return sid; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
203 |
} |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
204 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
205 |
static gconstpointer new(void) |
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
206 |
{ |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
207 |
JingleIBB *ibb = g_new0(JingleIBB, 1); |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
208 |
ibb->blocksize = IBB_BLOCK_SIZE_MAX; |
157
8ec7ce3ecaac
S5B: Start the "new" function that create a new JingleS5B.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
156
diff
changeset
|
209 |
ibb->sid = gen_ibb_sid(); |
73
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
210 |
ibb->seq = 0; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
211 |
|
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
212 |
return ibb; |
6f061c11acfb
Add atrans to a new app
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
72
diff
changeset
|
213 |
} |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
214 |
|
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
215 |
int jingle_ibb_check_session(gconstpointer data, gconstpointer session) |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
216 |
{ |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
217 |
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
|
218 |
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
|
219 |
return 0; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
220 |
return 1; |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
221 |
} |
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
222 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
223 |
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
|
224 |
{ |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
225 |
JingleIBB *jibb = (JingleIBB*) data; |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
226 |
gchar *bsize = g_strdup_printf("%i", jibb->blocksize); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
227 |
|
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
228 |
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
|
229 |
return; |
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
230 |
|
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
231 |
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
|
232 |
|
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
233 |
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
|
234 |
"sid", jibb->sid, |
89
88bb2d0f9ff8
add an namespace to a jingle node
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
84
diff
changeset
|
235 |
"block-size", bsize, |
88bb2d0f9ff8
add an namespace to a jingle node
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
84
diff
changeset
|
236 |
NULL); |
81
8b6320ad470b
Add comments, change some function names...
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
73
diff
changeset
|
237 |
g_free(bsize); |
60
05184a1846d1
IBB: Create a Lm with a gconstpointer
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
58
diff
changeset
|
238 |
} |
54
1c1153f9f945
Handle for jingle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
51
diff
changeset
|
239 |
|
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
|
240 |
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
|
241 |
gpointer data) |
104 | 242 |
{ |
107 | 243 |
// TODO: check the sub type (error ??) |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
244 |
session_content *sc = (session_content *)data; |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
245 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
246 |
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
|
247 |
|
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
248 |
// 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
|
249 |
if (sess == NULL) |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
250 |
return; |
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
251 |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
252 |
SessionContent *sc2 = session_find_sessioncontent(sess, sc->name); |
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 |
JingleIBB *jibb = (JingleIBB *)sc2->transport; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
255 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
256 |
// We look if there is enough data staying |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
257 |
if (jibb->dataleft > jibb->blocksize) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
258 |
gchar *buf = g_memdup(jibb->buf, jibb->blocksize); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
259 |
jibb->dataleft-=jibb->blocksize; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
260 |
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
|
261 |
_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
|
262 |
g_free(buf); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
263 |
} else { // ask for more data |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
264 |
handle_trans_next(sc); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
265 |
} |
104 | 266 |
} |
267 |
||
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
268 |
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
|
269 |
gsize size, const gchar *sid, gint64 *seq) |
104 | 270 |
{ |
271 |
JingleAckHandle *ackhandle; |
|
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
272 |
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
|
273 |
LM_MESSAGE_SUB_TYPE_SET); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
274 |
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
|
275 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
276 |
gchar *base64 = g_base64_encode((const guchar *)buf, size); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
277 |
gchar *strseq = g_strdup_printf("%" G_GINT64_FORMAT, *seq); |
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 |
node = lm_message_node_add_child(node, "data", NULL); |
107 | 280 |
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
|
281 |
"sid", sid, |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
282 |
"seq", strseq, |
107 | 283 |
NULL); |
104 | 284 |
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
|
285 |
|
104 | 286 |
ackhandle = g_new0(JingleAckHandle, 1); |
287 |
ackhandle->callback = jingle_ibb_handle_ack_iq_send; |
|
107 | 288 |
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
|
289 |
|
104 | 290 |
lm_connection_send_with_reply(lconnection, r, |
291 |
jingle_new_ack_handler(ackhandle), NULL); |
|
292 |
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
|
293 |
|
104 | 294 |
// The next packet will be seq++ |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
295 |
++(*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
|
296 |
|
104 | 297 |
g_free(base64); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
298 |
g_free(strseq); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
299 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
300 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
301 |
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
|
302 |
gsize size) |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
303 |
{ |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
304 |
JingleIBB *jibb = (JingleIBB*)data; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
305 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
306 |
if (jibb->size_buf >= size + jibb->dataleft) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
307 |
g_memmove(jibb->buf + jibb->dataleft, buf, size); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
308 |
jibb->dataleft+=size; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
309 |
} else { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
310 |
jibb->size_buf = size + jibb->dataleft; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
311 |
jibb->buf = g_realloc(jibb->buf, jibb->size_buf); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
312 |
g_memmove(jibb->buf + jibb->dataleft, buf, size); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
313 |
jibb->dataleft = jibb->size_buf; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
314 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
315 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
316 |
// We need more data |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
317 |
if (jibb->dataleft < jibb->blocksize) { |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
318 |
handle_trans_next(sc); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
319 |
return; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
320 |
} |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
321 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
322 |
// It's enough |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
323 |
{ |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
324 |
JingleSession *sess = session_find_by_sid(sc->sid, sc->from); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
325 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
326 |
gchar *buffer = g_memdup(jibb->buf, jibb->blocksize); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
327 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
328 |
jibb->dataleft-=jibb->blocksize; |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
329 |
|
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
330 |
g_memmove(jibb->buf, jibb->buf+jibb->blocksize, jibb->dataleft); |
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
331 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
332 |
_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
|
333 |
&jibb->seq); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
334 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
335 |
g_free(buffer); |
122
8969dc3e2f14
JIBB: buffering
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
120
diff
changeset
|
336 |
} |
104 | 337 |
} |
338 |
||
161
fa1d993d05b6
S5B: Use a GSocketListener to manage listener sockets.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
159
diff
changeset
|
339 |
static void init(session_content *sc, gconstpointer data) |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
340 |
{ |
156
653fa009fea3
Rename ->check() to newfrommessage and call it only on session-initiate.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
148
diff
changeset
|
341 |
return; |
126
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
342 |
} |
059a6737f6a4
Error are better handle
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
124
diff
changeset
|
343 |
|
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
344 |
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
|
345 |
{ |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
346 |
JingleIBB *jibb = (JingleIBB*)data; |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
347 |
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
|
348 |
|
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
349 |
if (jibb->dataleft > 0) { |
124
7773e8147c29
JIBB: funcs are now static
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
123
diff
changeset
|
350 |
_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
|
351 |
&jibb->seq); |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
352 |
} |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
353 |
|
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
354 |
g_free(jibb->buf); |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
355 |
} |
58bd57666ef9
Add a end function to transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
122
diff
changeset
|
356 |
|
106
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
357 |
static void jingle_ibb_unregister_lm_handlers(void) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
358 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
359 |
if (lconnection) { |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
360 |
lm_connection_unregister_message_handler(lconnection, jingle_ibb_handler, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
361 |
LM_MESSAGE_TYPE_IQ); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
362 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
363 |
} |
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 |
static void jingle_ibb_register_lm_handlers(void) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
366 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
367 |
jingle_ibb_unregister_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
368 |
if (lconnection) { |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
369 |
lm_connection_register_message_handler(lconnection, jingle_ibb_handler, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
370 |
LM_MESSAGE_TYPE_IQ, |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
371 |
LM_HANDLER_PRIORITY_FIRST); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
372 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
373 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
374 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
375 |
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
|
376 |
gpointer ignore) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
377 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
378 |
jingle_ibb_register_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
379 |
return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
380 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
381 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
382 |
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
|
383 |
gpointer ignore) |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
384 |
{ |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
385 |
jingle_ibb_unregister_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
386 |
return HOOK_HANDLER_RESULT_ALLOW_MORE_HANDLERS; |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
387 |
} |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
388 |
|
128
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
389 |
static gchar *info(gconstpointer data) |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
390 |
{ |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
391 |
JingleIBB *jibb = (JingleIBB *)data; |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
392 |
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
|
393 |
return info; |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
394 |
} |
cded9f40039e
Give info when asking for events
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
127
diff
changeset
|
395 |
|
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 |
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
|
397 |
{ |
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
|
398 |
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
|
399 |
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
|
400 |
} |
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
|
401 |
|
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
402 |
static void jingle_ibb_init(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
403 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
404 |
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
|
405 |
|
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
406 |
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
|
407 |
G_PRIORITY_DEFAULT_IDLE, NULL); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
408 |
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
|
409 |
G_PRIORITY_DEFAULT_IDLE, NULL); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
410 |
jingle_ibb_register_lm_handlers(); |
2942c71f434a
transfer work
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
105
diff
changeset
|
411 |
|
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
|
412 |
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
|
413 |
JINGLE_TRANSPORT_STREAMING, |
148
cb40539b88b7
Fix compilation warnings. Add documentation in the code.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
141
diff
changeset
|
414 |
JINGLE_TRANSPORT_PRIO_LOW); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
415 |
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
|
416 |
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
|
417 |
} |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
418 |
|
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
419 |
static void jingle_ibb_uninit(void) |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
420 |
{ |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
421 |
lm_message_handler_invalidate(jingle_ibb_handler); |
159
1df5f5e3f1e7
Fix the segfault when quitting in IBB and various other bugs.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
158
diff
changeset
|
422 |
hk_del_handler(HOOK_POST_CONNECT, connect_hid); |
1df5f5e3f1e7
Fix the segfault when quitting in IBB and various other bugs.
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
158
diff
changeset
|
423 |
hk_del_handler(HOOK_PRE_DISCONNECT, disconn_hid); |
50
8b706187362b
handle data for ibb
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
49
diff
changeset
|
424 |
lm_message_handler_unref(jingle_ibb_handler); |
49
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
425 |
xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
426 |
jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB); |
8dddfbe488b6
Add ibb transport
Nicolas Cornu <nicolas.cornu@ensi-bourges.fr>
parents:
diff
changeset
|
427 |
} |