Mercurial > pidgin
comparison libpurple/protocols/jabber/jingle/rtp.c @ 26124:f10034e0321b
Get rid of the medias variable in JabberStream.
author | Mike Ruprecht <maiku@soc.pidgin.im> |
---|---|
date | Wed, 25 Feb 2009 03:48:34 +0000 |
parents | 36c7efb85220 |
children | 4f47eeaa1414 |
comparison
equal
deleted
inserted
replaced
26123:75a02ffb0139 | 26124:f10034e0321b |
---|---|
174 | 174 |
175 static PurpleMedia * | 175 static PurpleMedia * |
176 jingle_rtp_get_media(JingleSession *session) | 176 jingle_rtp_get_media(JingleSession *session) |
177 { | 177 { |
178 JabberStream *js = jingle_session_get_js(session); | 178 JabberStream *js = jingle_session_get_js(session); |
179 gchar *sid = jingle_session_get_sid(session); | 179 PurpleMedia *media = NULL; |
180 | 180 GList *iter = purple_media_manager_get_media_by_connection( |
181 PurpleMedia *media = (PurpleMedia *) (js->medias) ? | 181 purple_media_manager_get(), js->gc); |
182 g_hash_table_lookup(js->medias, sid) : NULL; | 182 |
183 g_free(sid); | 183 for (; iter; iter = g_list_delete_link(iter, iter)) { |
184 JingleSession *media_session = | |
185 purple_media_get_prpl_data(iter->data); | |
186 if (media_session == session) { | |
187 media = iter->data; | |
188 break; | |
189 } | |
190 } | |
191 if (iter != NULL) | |
192 g_list_free(iter); | |
184 | 193 |
185 return media; | 194 return media; |
186 } | 195 } |
187 | 196 |
188 static JingleTransport * | 197 static JingleTransport * |
303 { | 312 { |
304 JingleSession *session = data; | 313 JingleSession *session = data; |
305 | 314 |
306 if (!strcmp(xmlnode_get_attrib(packet, "type"), "error") || | 315 if (!strcmp(xmlnode_get_attrib(packet, "type"), "error") || |
307 xmlnode_get_child(packet, "error")) { | 316 xmlnode_get_child(packet, "error")) { |
308 gchar *sid = jingle_session_get_sid(session); | |
309 purple_media_end(jingle_rtp_get_media(session), NULL, NULL); | 317 purple_media_end(jingle_rtp_get_media(session), NULL, NULL); |
310 g_hash_table_remove(jingle_session_get_js( | |
311 session)->medias, sid); | |
312 g_free(sid); | |
313 g_object_unref(session); | 318 g_object_unref(session); |
314 return; | 319 return; |
315 } | 320 } |
316 | 321 |
317 jabber_iq_send(jingle_session_to_packet(session, | 322 jabber_iq_send(jingle_session_to_packet(session, |
365 purple_debug_info("jingle-rtp", "state-changed: type %d id: %s name: %s\n", type, sid, name); | 370 purple_debug_info("jingle-rtp", "state-changed: type %d id: %s name: %s\n", type, sid, name); |
366 | 371 |
367 if ((type == PURPLE_MEDIA_STATE_CHANGED_REJECTED || | 372 if ((type == PURPLE_MEDIA_STATE_CHANGED_REJECTED || |
368 type == PURPLE_MEDIA_STATE_CHANGED_HANGUP) && | 373 type == PURPLE_MEDIA_STATE_CHANGED_HANGUP) && |
369 sid == NULL && name == NULL) { | 374 sid == NULL && name == NULL) { |
370 gchar *sid = jingle_session_get_sid(session); | |
371 jabber_iq_send(jingle_session_to_packet(session, | 375 jabber_iq_send(jingle_session_to_packet(session, |
372 JINGLE_SESSION_TERMINATE)); | 376 JINGLE_SESSION_TERMINATE)); |
373 g_hash_table_remove(jingle_session_get_js(session)->medias, sid); | |
374 g_free(sid); | |
375 g_object_unref(session); | 377 g_object_unref(session); |
376 } | 378 } |
377 } | 379 } |
378 | 380 |
379 static PurpleMedia * | 381 static PurpleMedia * |
380 jingle_rtp_create_media(JingleContent *content) | 382 jingle_rtp_create_media(JingleContent *content) |
381 { | 383 { |
382 JingleSession *session = jingle_content_get_session(content); | 384 JingleSession *session = jingle_content_get_session(content); |
383 JabberStream *js = jingle_session_get_js(session); | 385 JabberStream *js = jingle_session_get_js(session); |
384 gchar *remote_jid = jingle_session_get_remote_jid(session); | 386 gchar *remote_jid = jingle_session_get_remote_jid(session); |
385 gchar *sid = jingle_session_get_sid(session); | |
386 | 387 |
387 PurpleMedia *media = purple_media_manager_create_media(purple_media_manager_get(), | 388 PurpleMedia *media = purple_media_manager_create_media(purple_media_manager_get(), |
388 js->gc, "fsrtpconference", remote_jid, | 389 js->gc, "fsrtpconference", remote_jid, |
389 jingle_session_is_initiator(session)); | 390 jingle_session_is_initiator(session)); |
390 g_free(remote_jid); | 391 g_free(remote_jid); |
392 if (!media) { | 393 if (!media) { |
393 purple_debug_error("jingle-rtp", "Couldn't create media session\n"); | 394 purple_debug_error("jingle-rtp", "Couldn't create media session\n"); |
394 return NULL; | 395 return NULL; |
395 } | 396 } |
396 | 397 |
397 /* insert it into the hash table */ | 398 purple_media_set_prpl_data(media, session); |
398 if (!js->medias) { | |
399 purple_debug_info("jingle-rtp", "Creating hash table for media\n"); | |
400 js->medias = g_hash_table_new(g_str_hash, g_str_equal); | |
401 } | |
402 purple_debug_info("jingle-rtp", "inserting media with sid: %s into table\n", sid); | |
403 g_hash_table_insert(js->medias, sid, media); | |
404 | 399 |
405 /* connect callbacks */ | 400 /* connect callbacks */ |
406 g_signal_connect(G_OBJECT(media), "accepted", | 401 g_signal_connect(G_OBJECT(media), "accepted", |
407 G_CALLBACK(jingle_rtp_accepted_cb), session); | 402 G_CALLBACK(jingle_rtp_accepted_cb), session); |
408 g_signal_connect(G_OBJECT(media), "codecs-changed", | 403 g_signal_connect(G_OBJECT(media), "codecs-changed", |
644 case JINGLE_SESSION_TERMINATE: { | 639 case JINGLE_SESSION_TERMINATE: { |
645 JingleSession *session = jingle_content_get_session(content); | 640 JingleSession *session = jingle_content_get_session(content); |
646 PurpleMedia *media = jingle_rtp_get_media(session); | 641 PurpleMedia *media = jingle_rtp_get_media(session); |
647 | 642 |
648 if (media != NULL) { | 643 if (media != NULL) { |
649 gchar *sid = jingle_session_get_sid(session); | |
650 purple_media_end(media, NULL, NULL); | 644 purple_media_end(media, NULL, NULL); |
651 g_hash_table_remove(jingle_session_get_js( | |
652 session)->medias, sid); | |
653 g_free(sid); | |
654 } | 645 } |
655 | 646 |
656 g_object_unref(session); | 647 g_object_unref(session); |
657 break; | 648 break; |
658 } | 649 } |