# HG changeset patch # User Mike Ruprecht # Date 1237264825 0 # Node ID 4f47eeaa1414d6f5694e3023530d2b02a705ec56 # Parent abcc94ace5eac78ce7bcd3076475356ef9013938 Add functions for more easily creating session-terminate packets. diff -r abcc94ace5ea -r 4f47eeaa1414 libpurple/protocols/jabber/jingle/rtp.c --- a/libpurple/protocols/jabber/jingle/rtp.c Tue Mar 17 02:48:43 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/rtp.c Tue Mar 17 04:40:25 2009 +0000 @@ -372,8 +372,8 @@ if ((type == PURPLE_MEDIA_STATE_CHANGED_REJECTED || type == PURPLE_MEDIA_STATE_CHANGED_HANGUP) && sid == NULL && name == NULL) { - jabber_iq_send(jingle_session_to_packet(session, - JINGLE_SESSION_TERMINATE)); + jabber_iq_send(jingle_session_terminate_packet( + session, "success")); g_object_unref(session); } } @@ -616,8 +616,8 @@ if (jingle_rtp_init_media(content) == FALSE) { /* XXX: send error */ - jabber_iq_send(jingle_session_to_packet(session, - JINGLE_SESSION_TERMINATE)); + jabber_iq_send(jingle_session_terminate_packet( + session, "general-error")); g_object_unref(session); break; } diff -r abcc94ace5ea -r 4f47eeaa1414 libpurple/protocols/jabber/jingle/session.c --- a/libpurple/protocols/jabber/jingle/session.c Tue Mar 17 02:48:43 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/session.c Tue Mar 17 04:40:25 2009 +0000 @@ -590,3 +590,38 @@ session->priv->state = TRUE; } +JabberIq * +jingle_session_terminate_packet(JingleSession *session, const gchar *reason) +{ + JabberIq *iq = jingle_session_to_packet(session, + JINGLE_SESSION_TERMINATE); + xmlnode *jingle = xmlnode_get_child(iq->node, "jingle"); + + if (reason != NULL) { + JabberIq *reason_node; + reason_node = xmlnode_new_child(jingle, "reason"); + xmlnode_new_child(reason_node, reason); + } + return iq; +} + +JabberIq * +jingle_session_redirect_packet(JingleSession *session, const gchar *sid) +{ + JabberIq *iq = jingle_session_terminate_packet(session, + "alternative-session"); + xmlnode *alt_session; + + if (sid == NULL) + return iq; + + alt_session = xmlnode_get_child(iq->node, + "jingle/reason/alternative-session"); + + if (alt_session != NULL) { + xmlnode *sid_node = xmlnode_new_child(alt_session, "sid"); + xmlnode_insert_data(sid_node, sid, -1); + } + return iq; +} + diff -r abcc94ace5ea -r 4f47eeaa1414 libpurple/protocols/jabber/jingle/session.h --- a/libpurple/protocols/jabber/jingle/session.h Tue Mar 17 02:48:43 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/session.h Tue Mar 17 04:40:25 2009 +0000 @@ -102,6 +102,8 @@ void jingle_session_remove_pending_content(JingleSession *session, const gchar *name, const gchar *creator); void jingle_session_accept_content(JingleSession *session, const gchar *name, const gchar *creator); void jingle_session_accept_session(JingleSession *session); +JabberIq *jingle_session_terminate_packet(JingleSession *session, const gchar *reason); +JabberIq *jingle_session_redirect_packet(JingleSession *session, const gchar *sid); #ifdef __cplusplus }