static void jingle_handle_session_terminate(JingleSession *session, xmlnode *jingle) { jabber_iq_send(jingle_session_create_ack(session, jingle)); jingle_session_handle_action(session, jingle, JINGLE_SESSION_TERMINATE); /* display reason? */ g_object_unref(session); }
static void jingle_handle_content_accept(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); for (; content; content = xmlnode_get_next_twin(content)) { const gchar *name = xmlnode_get_attrib(content, "name"); const gchar *creator = xmlnode_get_attrib(content, "creator"); jingle_session_accept_content(session, name, creator); /* signal here */ } }
static void jingle_handle_transport_reject(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); for (; content; content = xmlnode_get_next_twin(content)) { const gchar *name = xmlnode_get_attrib(content, "name"); const gchar *creator = xmlnode_get_attrib(content, "creator"); JingleContent *content = jingle_session_find_content(session, name, creator); jingle_content_remove_pending_transport(content); } }
static void jingle_handle_session_initiate(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); for (; content; content = xmlnode_get_next_twin(content)) { JingleContent *parsed_content = jingle_content_parse(content); if (parsed_content == NULL) { purple_debug_error("jingle", "Error parsing content\n"); /* XXX: send error */ } else { jingle_session_add_content(session, parsed_content); jingle_content_handle_action(parsed_content, content, JINGLE_SESSION_INITIATE); } } jabber_iq_send(jingle_session_create_ack(session, jingle)); }
static void jingle_handle_content_add(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); for (; content; content = xmlnode_get_next_twin(content)) { JingleContent *pending_content = jingle_content_parse(content); if (pending_content == NULL) { purple_debug_error("jingle", "Error parsing \"content-add\" content.\n"); /* XXX: send error here */ } else { jingle_session_add_pending_content(session, pending_content); } } /* XXX: signal here */ }
static void jingle_handle_transport_info(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); for (; content; content = xmlnode_get_next_twin(content)) { const gchar *name = xmlnode_get_attrib(content, "name"); const gchar *creator = xmlnode_get_attrib(content, "creator"); JingleContent *parsed_content = jingle_session_find_content(session, name, creator); if (parsed_content == NULL) { purple_debug_error("jingle", "Error parsing content\n"); /* XXX: send error */ } else { jingle_content_handle_action(parsed_content, content, JINGLE_TRANSPORT_INFO); } } }
static void jingle_handle_content_modify(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); for (; content; content = xmlnode_get_next_twin(content)) { const gchar *name = xmlnode_get_attrib(content, "name"); const gchar *creator = xmlnode_get_attrib(content, "creator"); JingleContent *local_content = jingle_session_find_content(session, name, creator); if (local_content != NULL) { const gchar *senders = xmlnode_get_attrib(content, "senders"); gchar *local_senders = jingle_content_get_senders(local_content); if (strcmp(senders, local_senders)) jingle_content_modify(local_content, senders); g_free(local_senders); } else { purple_debug_error("jingle", "content_modify: unknown content\n"); /* XXX: send error */ } } }
static void jingle_handle_session_accept(JingleSession *session, xmlnode *jingle) { xmlnode *content = xmlnode_get_child(jingle, "content"); jabber_iq_send(jingle_session_create_ack(session, jingle)); jingle_session_accept_session(session); for (; content; content = xmlnode_get_next_twin(content)) { const gchar *name = xmlnode_get_attrib(content, "name"); const gchar *creator = xmlnode_get_attrib(content, "creator"); JingleContent *parsed_content = jingle_session_find_content(session, name, creator); if (parsed_content == NULL) { purple_debug_error("jingle", "Error parsing content\n"); jabber_iq_send(jingle_session_terminate_packet(session, "unsupported-applications")); } else { jingle_content_handle_action(parsed_content, content, JINGLE_SESSION_ACCEPT); } } }
static void jingle_handle_session_info(JingleSession *session, xmlnode *jingle) { jabber_iq_send(jingle_session_create_ack(session, jingle)); /* XXX: call signal */ }
static void jingle_handle_security_info(JingleSession *session, xmlnode *jingle) { jabber_iq_send(jingle_session_create_ack(session, jingle)); }