comparison libpurple/protocols/jabber/jingle/rtp.c @ 24992: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
24991:b0e6a64cbf2e 24992: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);