# HG changeset patch # User Mike Ruprecht # Date 1231071192 0 # Node ID d881fc5d907f880fda60e99b2dd3be86ef6087c7 # Parent b0e6a64cbf2e6a126d7a1c3826b4643fe31289a1 Remove PurpleMedias from JabberStream's list when a media session ends. diff -r b0e6a64cbf2e -r d881fc5d907f libpurple/protocols/jabber/jingle/rtp.c --- a/libpurple/protocols/jabber/jingle/rtp.c Sun Jan 04 11:12:47 2009 +0000 +++ b/libpurple/protocols/jabber/jingle/rtp.c Sun Jan 04 12:13:12 2009 +0000 @@ -264,16 +264,12 @@ } static void -jingle_rtp_reject_cb(PurpleMedia *media, JingleSession *session) -{ - jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); - g_object_unref(session); -} - -static void jingle_rtp_hangup_cb(PurpleMedia *media, JingleSession *session) { + gchar *sid = jingle_session_get_sid(session); jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); + g_hash_table_remove(jingle_session_get_js(session)->medias, sid); + g_free(sid); g_object_unref(session); } @@ -361,7 +357,7 @@ /* connect callbacks */ g_signal_connect(G_OBJECT(media), "reject", - G_CALLBACK(jingle_rtp_reject_cb), session); + G_CALLBACK(jingle_rtp_hangup_cb), session); g_signal_connect(G_OBJECT(media), "hangup", G_CALLBACK(jingle_rtp_hangup_cb), session); g_signal_connect(G_OBJECT(media), "new-candidate", @@ -602,7 +598,16 @@ } case JINGLE_SESSION_TERMINATE: { JingleSession *session = jingle_content_get_session(content); - purple_media_got_hangup(jingle_rtp_get_media(session)); + PurpleMedia *media = jingle_rtp_get_media(session); + + if (media != NULL) { + gchar *sid = jingle_session_get_sid(session); + purple_media_got_hangup(media); + g_hash_table_remove(jingle_session_get_js( + session)->medias, sid); + g_free(sid); + } + g_object_unref(session); break; }