handle data for ibb
authorNicolas Cornu <nicolas.cornu@ensi-bourges.fr>
Tue, 13 Jul 2010 16:30:36 +0200
changeset 50 8b706187362b
parent 49 8dddfbe488b6
child 51 0a13062d0a11
handle data for ibb
jingle-ibb/ibb.c
jingle-ibb/ibb.h
--- a/jingle-ibb/ibb.c	Tue Jul 13 12:56:45 2010 +0200
+++ b/jingle-ibb/ibb.c	Tue Jul 13 16:30:36 2010 +0200
@@ -33,6 +33,7 @@
 
 #include "ibb.h"
 
+static LmMessageHandler* jingle_ibb_handler = NULL;
 
 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
 static void jingle_ibb_init(void);
@@ -84,14 +85,40 @@
   return (gconstpointer) ibb;
 }
 
+LmHandlerResult jingle_ibb_handle_iq(LmMessageHandler *handler,
+                                 LmConnection *connection, LmMessage *message,
+                                 gpointer user_data)
+{
+  LmMessageSubType iqtype = lm_message_get_sub_type(message);
+  if (iqtype != LM_MESSAGE_SUB_TYPE_SET)
+    return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+
+  LmMessageNode *root = lm_message_get_node(message);
+  LmMessageNode *dnode = lm_message_node_get_child(root, "data");
+
+  if (!dnode) // no <data> element found
+    return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
+
+  if (g_strcmp0(lm_message_node_get_attribute(dnode, "xmlns"),
+                NS_TRANSPORT_IBB))
+    return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+
+  jingle_ack_iq(message);
+  
+  return LM_HANDLER_RESULT_REMOVE_MESSAGE;
+}
+
 static void jingle_ibb_init(void)
 {
+  jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
   jingle_register_transport(NS_JINGLE_TRANSPORT_IBB, &funcs, JINGLE_TRANS_IN_BAND, JINGLE_TRANS_TCP);
   xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB);
 }
 
 static void jingle_ibb_uninit(void)
 {
+  lm_message_handler_invalidate(jingle_ibb_handler);
+  lm_message_handler_unref(jingle_ibb_handler);
   xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB);
   jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB);
 }
--- a/jingle-ibb/ibb.h	Tue Jul 13 12:56:45 2010 +0200
+++ b/jingle-ibb/ibb.h	Tue Jul 13 16:30:36 2010 +0200
@@ -2,6 +2,7 @@
 #define __JINGLEIBB_H__ 1
 
 #define NS_JINGLE_TRANSPORT_IBB "urn:xmpp:jingle:transports:ibb:1"
+#define NS_TRANSPORT_IBB "http://jabber.org/protocol/ibb"
 
 typedef struct {
   /* Size of the blocks */