# HG changeset patch # User Nicolas Cornu # Date 1279031436 -7200 # Node ID 8b706187362bd65bfb7f2e23d41ba45952173e0f # Parent 8dddfbe488b68289ed8efd83ba1af3cc4bcce936 handle data for ibb diff -r 8dddfbe488b6 -r 8b706187362b jingle-ibb/ibb.c --- 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 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); } diff -r 8dddfbe488b6 -r 8b706187362b jingle-ibb/ibb.h --- 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 */