comparison libpurple/protocols/jabber/jingle/rtp.c @ 26206: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
26205:75a02ffb0139 26206: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 }