33 |
33 |
34 |
34 |
35 void jingle_send_session_terminate(JingleSession *js, const gchar *reason) |
35 void jingle_send_session_terminate(JingleSession *js, const gchar *reason) |
36 { |
36 { |
37 JingleAckHandle *ackhandle; |
37 JingleAckHandle *ackhandle; |
38 |
38 LmMessageNode *node2; |
39 LmMessage *r = lm_message_new_with_sub_type(js->to, LM_MESSAGE_TYPE_IQ, |
39 LmMessage *r = lm_message_new_with_sub_type(js->to, LM_MESSAGE_TYPE_IQ, |
40 LM_MESSAGE_SUB_TYPE_SET); |
40 LM_MESSAGE_SUB_TYPE_SET); |
41 LmMessageNode *node = lm_message_get_node(r); |
41 LmMessageNode *node = lm_message_get_node(r); |
42 lm_message_node_add_child(node, "jingle", NULL); |
42 node2 = lm_message_node_add_child(node, "jingle", NULL); |
43 node = lm_message_node_get_child(node, "jingle"); |
43 lm_message_node_set_attributes(node2, "xmlns", NS_JINGLE, |
44 lm_message_node_set_attributes(node, "xmlns", NS_JINGLE, |
|
45 "action", "session-terminate", |
44 "action", "session-terminate", |
46 "sid", js->sid, |
45 "sid", js->sid, |
47 NULL); |
46 NULL); |
48 if (r == NULL) return; |
47 if (r == NULL) return; |
49 |
48 |
50 if (reason != NULL) { |
49 if (reason != NULL) { |
51 lm_message_node_add_child(node, "reason", NULL); |
50 node = lm_message_node_add_child(node2, "reason", NULL); |
52 node = lm_message_node_get_child(node, "reason"); |
|
53 lm_message_node_add_child(node, reason, NULL); |
51 lm_message_node_add_child(node, reason, NULL); |
54 } |
52 } |
55 |
53 |
56 ackhandle = g_new0(JingleAckHandle, 1); |
54 ackhandle = g_new0(JingleAckHandle, 1); |
57 ackhandle->callback = NULL; |
55 ackhandle->callback = NULL; |
60 lm_connection_send_with_reply(lconnection, r, |
58 lm_connection_send_with_reply(lconnection, r, |
61 jingle_new_ack_handler(ackhandle), NULL); |
59 jingle_new_ack_handler(ackhandle), NULL); |
62 lm_message_unref(r); |
60 lm_message_unref(r); |
63 } |
61 } |
64 |
62 |
65 static void jingle_handle_ack_iq_sa(LmMessage *mess, gpointer *data) |
63 static void jingle_handle_ack_iq_sa(LmMessage *mess, gpointer data) |
66 { |
64 { |
67 LmMessageNode *node; |
65 LmMessageNode *node; |
68 const gchar *type, *cause; |
66 const gchar *type, *cause; |
69 GSList *child = NULL; |
67 GSList *child = NULL; |
70 JingleSession *sess = (JingleSession*)data; |
68 JingleSession *sess = (JingleSession*)data; |
131 mess = lm_message_from_jinglesession(sess, JINGLE_SESSION_ACCEPT); |
129 mess = lm_message_from_jinglesession(sess, JINGLE_SESSION_ACCEPT); |
132 |
130 |
133 if (mess) { |
131 if (mess) { |
134 ackhandle = g_new0(JingleAckHandle, 1); |
132 ackhandle = g_new0(JingleAckHandle, 1); |
135 ackhandle->callback = jingle_handle_ack_iq_sa; |
133 ackhandle->callback = jingle_handle_ack_iq_sa; |
136 ackhandle->user_data = (gpointer*)sess; |
134 ackhandle->user_data = (gpointer)sess; |
137 lm_connection_send_with_reply(lconnection, mess, |
135 lm_connection_send_with_reply(lconnection, mess, |
138 jingle_new_ack_handler(ackhandle), NULL); |
136 jingle_new_ack_handler(ackhandle), NULL); |
139 lm_message_unref(mess); |
137 lm_message_unref(mess); |
140 } |
138 } |
141 } |
139 } |
142 |
140 |
143 static void jingle_handle_ack_iq_si(LmMessage *mess, gpointer *data) |
141 static void jingle_handle_ack_iq_si(LmMessage *mess, gpointer data) |
144 { |
142 { |
145 LmMessageNode *node; |
143 LmMessageNode *node; |
146 const gchar *type, *cause; |
144 const gchar *type, *cause; |
147 JingleSession *sess = (JingleSession*)data; |
145 JingleSession *sess = (JingleSession*)data; |
148 |
146 |
170 "initiator", js->from); |
168 "initiator", js->from); |
171 |
169 |
172 if (mess) { |
170 if (mess) { |
173 ackhandle = g_new0(JingleAckHandle, 1); |
171 ackhandle = g_new0(JingleAckHandle, 1); |
174 ackhandle->callback = jingle_handle_ack_iq_si; |
172 ackhandle->callback = jingle_handle_ack_iq_si; |
175 ackhandle->user_data = (gpointer*)js; |
173 ackhandle->user_data = (gpointer)js; |
176 lm_connection_send_with_reply(lconnection, mess, |
174 lm_connection_send_with_reply(lconnection, mess, |
177 jingle_new_ack_handler(ackhandle), NULL); |
175 jingle_new_ack_handler(ackhandle), NULL); |
178 lm_message_unref(mess); |
176 lm_message_unref(mess); |
179 } |
177 } |
180 } |
178 } |