Mercurial > pidgin.yaz
comparison libpurple/protocols/jabber/jingle/rtp.c @ 26068:d881fc5d907f
Remove PurpleMedias from JabberStream's list when a media session ends.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Sun, 04 Jan 2009 12:13:12 +0000 |
parents | b0e6a64cbf2e |
children | 7d2e06b29f88 |
comparison
equal
deleted
inserted
replaced
26067:b0e6a64cbf2e | 26068:d881fc5d907f |
---|---|
262 return NULL; | 262 return NULL; |
263 } | 263 } |
264 } | 264 } |
265 | 265 |
266 static void | 266 static void |
267 jingle_rtp_reject_cb(PurpleMedia *media, JingleSession *session) | 267 jingle_rtp_hangup_cb(PurpleMedia *media, JingleSession *session) |
268 { | 268 { |
269 gchar *sid = jingle_session_get_sid(session); | |
269 jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); | 270 jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); |
270 g_object_unref(session); | 271 g_hash_table_remove(jingle_session_get_js(session)->medias, sid); |
271 } | 272 g_free(sid); |
272 | |
273 static void | |
274 jingle_rtp_hangup_cb(PurpleMedia *media, JingleSession *session) | |
275 { | |
276 jabber_iq_send(jingle_session_to_packet(session, JINGLE_SESSION_TERMINATE)); | |
277 g_object_unref(session); | 273 g_object_unref(session); |
278 } | 274 } |
279 | 275 |
280 static void | 276 static void |
281 jingle_rtp_new_candidate_cb(PurpleMedia *media, gchar *sid, gchar *name, FsCandidate *candidate, JingleSession *session) | 277 jingle_rtp_new_candidate_cb(PurpleMedia *media, gchar *sid, gchar *name, FsCandidate *candidate, JingleSession *session) |
359 purple_debug_info("jingle-rtp", "inserting media with sid: %s into table\n", sid); | 355 purple_debug_info("jingle-rtp", "inserting media with sid: %s into table\n", sid); |
360 g_hash_table_insert(js->medias, sid, media); | 356 g_hash_table_insert(js->medias, sid, media); |
361 | 357 |
362 /* connect callbacks */ | 358 /* connect callbacks */ |
363 g_signal_connect(G_OBJECT(media), "reject", | 359 g_signal_connect(G_OBJECT(media), "reject", |
364 G_CALLBACK(jingle_rtp_reject_cb), session); | 360 G_CALLBACK(jingle_rtp_hangup_cb), session); |
365 g_signal_connect(G_OBJECT(media), "hangup", | 361 g_signal_connect(G_OBJECT(media), "hangup", |
366 G_CALLBACK(jingle_rtp_hangup_cb), session); | 362 G_CALLBACK(jingle_rtp_hangup_cb), session); |
367 g_signal_connect(G_OBJECT(media), "new-candidate", | 363 g_signal_connect(G_OBJECT(media), "new-candidate", |
368 G_CALLBACK(jingle_rtp_new_candidate_cb), session); | 364 G_CALLBACK(jingle_rtp_new_candidate_cb), session); |
369 g_signal_connect(G_OBJECT(media), "candidates-prepared", | 365 g_signal_connect(G_OBJECT(media), "candidates-prepared", |
600 g_object_unref(session); | 596 g_object_unref(session); |
601 break; | 597 break; |
602 } | 598 } |
603 case JINGLE_SESSION_TERMINATE: { | 599 case JINGLE_SESSION_TERMINATE: { |
604 JingleSession *session = jingle_content_get_session(content); | 600 JingleSession *session = jingle_content_get_session(content); |
605 purple_media_got_hangup(jingle_rtp_get_media(session)); | 601 PurpleMedia *media = jingle_rtp_get_media(session); |
602 | |
603 if (media != NULL) { | |
604 gchar *sid = jingle_session_get_sid(session); | |
605 purple_media_got_hangup(media); | |
606 g_hash_table_remove(jingle_session_get_js( | |
607 session)->medias, sid); | |
608 g_free(sid); | |
609 } | |
610 | |
606 g_object_unref(session); | 611 g_object_unref(session); |
607 break; | 612 break; |
608 } | 613 } |
609 case JINGLE_TRANSPORT_INFO: { | 614 case JINGLE_TRANSPORT_INFO: { |
610 JingleSession *session = jingle_content_get_session(content); | 615 JingleSession *session = jingle_content_get_session(content); |