jingle/send.c
changeset 118 f3408f4fe61a
parent 110 c0341c164405
child 119 0b9a7b505079
equal deleted inserted replaced
117:bd54d1dba1ad 118:f3408f4fe61a
    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 }