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 } |