jingle-ibb/ibb.c
changeset 50 8b706187362b
parent 49 8dddfbe488b6
child 51 0a13062d0a11
equal deleted inserted replaced
49:8dddfbe488b6 50:8b706187362b
    31 #include <jingle/check.h>
    31 #include <jingle/check.h>
    32 #include <jingle/register.h>
    32 #include <jingle/register.h>
    33 
    33 
    34 #include "ibb.h"
    34 #include "ibb.h"
    35 
    35 
       
    36 static LmMessageHandler* jingle_ibb_handler = NULL;
    36 
    37 
    37 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
    38 gconstpointer jingle_ibb_check(JingleContent *cn, GError **err);
    38 static void jingle_ibb_init(void);
    39 static void jingle_ibb_init(void);
    39 static void jingle_ibb_uninit(void);
    40 static void jingle_ibb_uninit(void);
    40 
    41 
    82   }
    83   }
    83 
    84 
    84   return (gconstpointer) ibb;
    85   return (gconstpointer) ibb;
    85 }
    86 }
    86 
    87 
       
    88 LmHandlerResult jingle_ibb_handle_iq(LmMessageHandler *handler,
       
    89                                  LmConnection *connection, LmMessage *message,
       
    90                                  gpointer user_data)
       
    91 {
       
    92   LmMessageSubType iqtype = lm_message_get_sub_type(message);
       
    93   if (iqtype != LM_MESSAGE_SUB_TYPE_SET)
       
    94     return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
       
    95 
       
    96   LmMessageNode *root = lm_message_get_node(message);
       
    97   LmMessageNode *dnode = lm_message_node_get_child(root, "data");
       
    98 
       
    99   if (!dnode) // no <data> element found
       
   100     return LM_HANDLER_RESULT_ALLOW_MORE_HANDLERS;
       
   101 
       
   102   if (g_strcmp0(lm_message_node_get_attribute(dnode, "xmlns"),
       
   103                 NS_TRANSPORT_IBB))
       
   104     return LM_HANDLER_RESULT_REMOVE_MESSAGE;
       
   105 
       
   106   jingle_ack_iq(message);
       
   107   
       
   108   return LM_HANDLER_RESULT_REMOVE_MESSAGE;
       
   109 }
       
   110 
    87 static void jingle_ibb_init(void)
   111 static void jingle_ibb_init(void)
    88 {
   112 {
       
   113   jingle_ibb_handler = lm_message_handler_new(jingle_ibb_handle_iq, NULL, NULL);
    89   jingle_register_transport(NS_JINGLE_TRANSPORT_IBB, &funcs, JINGLE_TRANS_IN_BAND, JINGLE_TRANS_TCP);
   114   jingle_register_transport(NS_JINGLE_TRANSPORT_IBB, &funcs, JINGLE_TRANS_IN_BAND, JINGLE_TRANS_TCP);
    90   xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB);
   115   xmpp_add_feature(NS_JINGLE_TRANSPORT_IBB);
    91 }
   116 }
    92 
   117 
    93 static void jingle_ibb_uninit(void)
   118 static void jingle_ibb_uninit(void)
    94 {
   119 {
       
   120   lm_message_handler_invalidate(jingle_ibb_handler);
       
   121   lm_message_handler_unref(jingle_ibb_handler);
    95   xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB);
   122   xmpp_del_feature(NS_JINGLE_TRANSPORT_IBB);
    96   jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB);
   123   jingle_unregister_transport(NS_JINGLE_TRANSPORT_IBB);
    97 }
   124 }