jingle/send.c
changeset 107 a7f14a5e112c
parent 105 c31988e107b3
child 110 c0341c164405
equal deleted inserted replaced
106:2942c71f434a 107:a7f14a5e112c
    30 #include <jingle/jingle.h>
    30 #include <jingle/jingle.h>
    31 #include <jingle/sessions.h>
    31 #include <jingle/sessions.h>
    32 #include <jingle/send.h>
    32 #include <jingle/send.h>
    33 
    33 
    34 
    34 
    35 void jingle_send_session_terminate(JingleNode *jn, const gchar *reason)
    35 void jingle_send_session_terminate(JingleSession *js, const gchar *reason)
    36 {
    36 {
    37   LmMessage *r;
       
    38   LmMessageNode *err,*err2;
       
    39   JingleNode *reply = g_new0(JingleNode, 1);
       
    40   JingleAckHandle *ackhandle;
    37   JingleAckHandle *ackhandle;
    41 
    38 
    42   reply->action = JINGLE_SESSION_TERMINATE;
    39   LmMessage *r = lm_message_new_with_sub_type(js->to, LM_MESSAGE_TYPE_IQ,
    43   reply->sid = jn->sid;
    40                                               LM_MESSAGE_SUB_TYPE_SET);
    44 
    41   LmMessageNode *node = lm_message_get_node(r);
    45   r = lm_message_from_jinglenode(reply, lm_message_get_from(jn->message));
    42   lm_message_node_add_child(node, "jingle", NULL);
       
    43   node = lm_message_node_get_child(node, "jingle");
       
    44   lm_message_node_set_attributes(node, "xmlns", NS_JINGLE,
       
    45                                  "action", "session-terminate",
       
    46                                  "sid", js->sid,
       
    47                                  NULL);
       
    48   lm_message_node_add_child(node, "reason", NULL);
       
    49   node = lm_message_node_get_child(node, "reason");
       
    50   
    46   if (r == NULL) return;
    51   if (r == NULL) return;
    47 
    52 
    48   if (reason != NULL) { 
    53   if (reason != NULL) { 
    49     err2 = lm_message_node_get_child(r->node, "jingle");
    54     node = lm_message_node_get_child(node, "reason");
    50     // TODO check reason 
    55     lm_message_node_add_child(node, reason, NULL);
    51     err = lm_message_node_add_child(err2, "reason", NULL);
       
    52     lm_message_node_add_child(err, reason, NULL);
       
    53   }
    56   }
    54 
    57 
    55   ackhandle = g_new0(JingleAckHandle, 1);
    58   ackhandle = g_new0(JingleAckHandle, 1);
    56   ackhandle->callback = NULL;
    59   ackhandle->callback = NULL;
    57   ackhandle->user_data = NULL;
    60   ackhandle->user_data = NULL;
   120 
   123 
   121     session_add_content_from_jinglecontent(sess, cn, JINGLE_SESSION_STATE_ACTIVE);
   124     session_add_content_from_jinglecontent(sess, cn, JINGLE_SESSION_STATE_ACTIVE);
   122   }
   125   }
   123 
   126 
   124   if(g_slist_length(sess->content) == 0) {
   127   if(g_slist_length(sess->content) == 0) {
   125     jingle_send_session_terminate(jn, "unsupported-applications");
   128     jingle_send_session_terminate(sess, "unsupported-applications");
   126     session_delete(sess);
   129     session_delete(sess);
   127     return;
   130     return;
   128   }
   131   }
   129 
   132 
   130   mess = lm_message_from_jinglesession(sess, JINGLE_SESSION_ACCEPT);
   133   mess = lm_message_from_jinglesession(sess, JINGLE_SESSION_ACCEPT);
   131   scr_log_print(LPRINT_DEBUG, "%s", lm_message_node_to_string(mess->node));
   134  
   132   if (mess) {
   135   if (mess) {
   133     ackhandle = g_new0(JingleAckHandle, 1);
   136     ackhandle = g_new0(JingleAckHandle, 1);
   134     ackhandle->callback = jingle_handle_ack_iq_sa;
   137     ackhandle->callback = jingle_handle_ack_iq_sa;
   135     ackhandle->user_data = (gpointer*)sess;
   138     ackhandle->user_data = (gpointer*)sess;
   136     lm_connection_send_with_reply(lconnection, mess,
   139     lm_connection_send_with_reply(lconnection, mess,
   165   GSList *listentry;
   168   GSList *listentry;
   166   
   169   
   167   LmMessage *mess = lm_message_from_jinglesession(js, JINGLE_SESSION_INITIATE);
   170   LmMessage *mess = lm_message_from_jinglesession(js, JINGLE_SESSION_INITIATE);
   168   lm_message_node_set_attribute(lm_message_node_get_child(mess->node, "jingle"),
   171   lm_message_node_set_attribute(lm_message_node_get_child(mess->node, "jingle"),
   169                                 "initiator", js->from);
   172                                 "initiator", js->from);
   170 scr_log_print(LPRINT_DEBUG, "%s", lm_message_node_to_string(mess->node));
       
   171  
   173  
   172   if (mess) {
   174   if (mess) {
   173     ackhandle = g_new0(JingleAckHandle, 1);
   175     ackhandle = g_new0(JingleAckHandle, 1);
   174     ackhandle->callback = jingle_handle_ack_iq_si;
   176     ackhandle->callback = jingle_handle_ack_iq_si;
   175     ackhandle->user_data = (gpointer*)js;
   177     ackhandle->user_data = (gpointer*)js;