equal
deleted
inserted
replaced
26 #include <mcabber/xmpp_defines.h> |
26 #include <mcabber/xmpp_defines.h> |
27 |
27 |
28 #include <jingle/jingle.h> |
28 #include <jingle/jingle.h> |
29 #include <jingle/sessions.h> |
29 #include <jingle/sessions.h> |
30 #include <jingle/send.h> |
30 #include <jingle/send.h> |
|
31 #include <jingle/general-handlers.h> |
31 |
32 |
32 extern LmMessageHandler* jingle_ack_iq_handler; |
33 extern LmMessageHandler* jingle_ack_iq_handler; |
33 |
34 |
34 void jingle_send_session_terminate(JingleNode *jn, const gchar *reason) |
35 void jingle_send_session_terminate(JingleNode *jn, const gchar *reason) |
35 { |
36 { |
36 LmMessage *r; |
37 LmMessage *r; |
37 LmMessageNode *err; |
38 LmMessageNode *err; |
38 JingleNode *reply = g_new0(JingleNode, 1); |
39 JingleNode *reply = g_new0(JingleNode, 1); |
|
40 ack_iq *elem; |
39 |
41 |
40 reply->action = JINGLE_SESSION_TERMINATE; |
42 reply->action = JINGLE_SESSION_TERMINATE; |
41 reply->sid = jn->sid; |
43 reply->sid = jn->sid; |
42 |
44 |
43 r = lm_message_from_jinglenode(reply, lm_message_get_from(jn->message)); |
45 r = lm_message_from_jinglenode(reply, lm_message_get_from(jn->message)); |
47 err = lm_message_node_add_child(r->node, "reason", NULL); |
49 err = lm_message_node_add_child(r->node, "reason", NULL); |
48 lm_message_node_add_child(err, reason, NULL); |
50 lm_message_node_add_child(err, reason, NULL); |
49 } |
51 } |
50 |
52 |
51 if (r) { |
53 if (r) { |
52 lm_connection_send(lconnection, r, NULL); |
54 elem->id = g_strdup(lm_message_get_id(r)); |
|
55 elem->callback = NULL; |
|
56 elem->udata = NULL; |
|
57 add_ack_wait(elem); |
|
58 |
|
59 lm_connection_send_with_reply(lconnection, r, jingle_ack_iq_handler, NULL); |
53 lm_message_unref(r); |
60 lm_message_unref(r); |
54 } |
61 } |
55 } |
62 } |
56 |
63 |
57 void jingle_send_session_accept(JingleNode *jn) |
64 void jingle_send_session_accept(JingleNode *jn) |
63 JingleAppFuncs *appfuncs; |
70 JingleAppFuncs *appfuncs; |
64 JingleTransportFuncs *transfuncs; |
71 JingleTransportFuncs *transfuncs; |
65 gconstpointer description, transport; |
72 gconstpointer description, transport; |
66 const gchar *xmlns; |
73 const gchar *xmlns; |
67 GError *err = NULL; |
74 GError *err = NULL; |
68 |
75 ack_iq *elem; |
|
76 |
69 accept.action = JINGLE_SESSION_ACCEPT; |
77 accept.action = JINGLE_SESSION_ACCEPT; |
70 accept.responder = g_strdup_printf("%s/%s", |
78 accept.responder = g_strdup_printf("%s/%s", |
71 lm_connection_get_jid(lconnection), |
79 lm_connection_get_jid(lconnection), |
72 settings_opt_get("resource")); |
80 settings_opt_get("resource")); |
73 accept.sid = jn->sid; |
81 accept.sid = jn->sid; |
82 appfuncs = jingle_get_appfuncs(xmlns); |
90 appfuncs = jingle_get_appfuncs(xmlns); |
83 if (appfuncs == NULL) continue; |
91 if (appfuncs == NULL) continue; |
84 |
92 |
85 xmlns = lm_message_node_get_attribute(cn->transport, "xmlns"); |
93 xmlns = lm_message_node_get_attribute(cn->transport, "xmlns"); |
86 transfuncs = jingle_get_transportfuncs(xmlns); |
94 transfuncs = jingle_get_transportfuncs(xmlns); |
87 if (appfuncs == NULL) continue; // negociate another transport ? |
95 if (appfuncs == NULL) continue; |
88 |
96 |
89 description = appfuncs->check(cn, &err); |
97 description = appfuncs->check(cn, &err); |
90 if (description == NULL || err != NULL) continue; |
98 if (description == NULL || err != NULL) continue; |
91 transport = transfuncs->check(cn, &err); |
99 transport = transfuncs->check(cn, &err); |
92 if (transport == NULL || err != NULL) continue; |
100 if (transport == NULL || err != NULL) continue; |
103 |
111 |
104 if (g_slist_length(accept.content) <= 0) return; |
112 if (g_slist_length(accept.content) <= 0) return; |
105 |
113 |
106 accept.message = lm_message_from_jinglenode(&accept, lm_message_get_from(jn->message)); |
114 accept.message = lm_message_from_jinglenode(&accept, lm_message_get_from(jn->message)); |
107 if (accept.message) { |
115 if (accept.message) { |
|
116 elem->id = g_strdup(lm_message_get_id(accept.message)); |
|
117 elem->callback = NULL; |
|
118 elem->udata = NULL; |
|
119 add_ack_wait(elem); |
108 lm_connection_send_with_reply(lconnection, accept.message, |
120 lm_connection_send_with_reply(lconnection, accept.message, |
109 jingle_ack_iq_handler, &err); |
121 jingle_ack_iq_handler, &err); |
110 lm_message_unref(accept.message); |
122 lm_message_unref(accept.message); |
111 } |
123 } |
112 } |
124 } |