42 |
42 |
43 #include "filetransfer.h" |
43 #include "filetransfer.h" |
44 |
44 |
45 |
45 |
46 gconstpointer jingle_ft_check(JingleContent *cn, GError **err); |
46 gconstpointer jingle_ft_check(JingleContent *cn, GError **err); |
47 void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node); |
47 void jingle_ft_tomessage(gconstpointer data, LmMessageNode *node); |
48 gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len); |
48 gboolean jingle_ft_handle_data(gconstpointer data, const gchar *data2, guint len); |
49 static gboolean is_md5_hash(const gchar *hash); |
49 static gboolean is_md5_hash(const gchar *hash); |
50 static void jingle_ft_init(void); |
50 static void jingle_ft_init(void); |
51 static void jingle_ft_uninit(void); |
51 static void jingle_ft_uninit(void); |
52 |
52 |
53 const gchar *deps[] = { "jingle", NULL }; |
53 const gchar *deps[] = { "jingle", NULL }; |
54 |
54 |
55 JingleAppFuncs funcs = { |
55 JingleAppFuncs funcs = { |
56 jingle_ft_check, |
56 jingle_ft_check, |
57 jingle_ft_handle, |
57 jingle_ft_tomessage, |
58 jingle_ft_handle_data |
58 jingle_ft_handle_data |
59 }; |
59 }; |
60 |
60 |
61 module_info_t info_jingle_filetransfer = { |
61 module_info_t info_jingle_filetransfer = { |
62 .branch = MCABBER_BRANCH, |
62 .branch = MCABBER_BRANCH, |
261 } |
261 } |
262 |
262 |
263 free_arg_lst(args); |
263 free_arg_lst(args); |
264 } |
264 } |
265 |
265 |
266 void jingle_ft_handle(JingleAction act, gconstpointer data, LmMessageNode *node) |
266 void jingle_ft_tomessage(gconstpointer data, LmMessageNode *node) |
267 { |
267 { |
268 if (act == JINGLE_SESSION_INITIATE) { |
268 JingleFT *jft = (JingleFT*) data; |
269 JingleFT *jft = (JingleFT*) data; |
269 if (lm_message_node_get_child(node, "description") != NULL) |
270 if (lm_message_node_get_child(node, "description") != NULL) |
270 return; |
271 return; |
271 |
272 |
272 LmMessageNode *node2 = lm_message_node_add_child(node, "description", NULL); |
273 LmMessageNode *node2 = lm_message_node_add_child(node, "description", NULL); |
273 lm_message_node_set_attribute(node2, "xmlns", NS_JINGLE_APP_FT); |
274 lm_message_node_set_attribute(node2, "xmlns", NS_JINGLE_APP_FT); |
274 if (jft->type == JINGLE_FT_OFFER) |
275 if (jft->type == JINGLE_FT_OFFER) |
275 node2 = lm_message_node_add_child(node2, "offer", NULL); |
276 node2 = lm_message_node_add_child(node2, "offer", NULL); |
276 else |
277 else |
277 node2 = lm_message_node_add_child(node2, "request", NULL); |
278 node2 = lm_message_node_add_child(node2, "request", NULL); |
278 |
279 |
279 node2 = lm_message_node_add_child(node2, "file", NULL); |
280 node2 = lm_message_node_add_child(node2, "file", NULL); |
280 |
281 |
281 lm_message_node_set_attributes(node2, "xmlns", NS_SI_FT, "name", jft->name, |
282 lm_message_node_set_attributes(node2, "xmlns", NS_SI_FT, "name", jft->name, |
282 "size", jft->size, NULL); |
283 "size", jft->size, NULL); |
283 if (jft->hash != NULL) |
284 if (jft->hash != NULL) |
284 lm_message_node_set_attribute(node2, "hash", jft->hash); |
285 lm_message_node_set_attribute(node2, "hash", jft->hash); |
285 |
286 |
286 if (jft->desc != NULL) |
287 if (jft->desc != NULL) |
287 lm_message_node_add_child(node2, "desc", jft->desc); |
288 lm_message_node_add_child(node2, "desc", jft->desc); |
288 |
289 |
289 //if (jft->data != 0) |
290 //if (jft->data != 0) |
|
291 |
|
292 } |
|
293 } |
290 } |
294 |
291 |
295 static void jingle_ft_init(void) |
292 static void jingle_ft_init(void) |
296 { |
293 { |
297 jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING); |
294 jingle_register_app(NS_JINGLE_APP_FT, &funcs, JINGLE_TRANSPORT_STREAMING); |