# HG changeset patch # User maiku@pidgin.im # Date 1256578778 0 # Node ID 74e75fc3481e71af0ae5c9519558b4d1ae7cb41e # Parent cc978a1a4bd1e4dbefea2747e2a307f531e9b772 Move Farsight 2's new-active-candidate-pair into the Fs2 media backend. diff -r cc978a1a4bd1 -r 74e75fc3481e libpurple/media/backend-fs2.c --- a/libpurple/media/backend-fs2.c Fri Oct 23 23:12:57 2009 +0000 +++ b/libpurple/media/backend-fs2.c Mon Oct 26 17:39:38 2009 +0000 @@ -574,9 +574,10 @@ FsStream *stream; FsCandidate *local_candidate; FsCandidate *remote_candidate; -#if 0 - PurpleMediaSession *session; -#endif + FsParticipant *participant; + PurpleMediaBackendFs2Session *session; + PurpleMediaCandidate *lcandidate, *rcandidate; + gchar *name; value = gst_structure_get_value(msg->structure, "stream"); stream = g_value_get_object(value); @@ -586,11 +587,21 @@ value = gst_structure_get_value(msg->structure, "remote-candidate"); remote_candidate = g_value_get_boxed(value); -#if 0 - session = purple_media_session_from_fs_stream(media, stream); - _candidate_pair_established_cb(stream, local_candidate, - remote_candidate, session); -#endif + + g_object_get(stream, "participant", &participant, NULL); + g_object_get(participant, "cname", &name, NULL); + g_object_unref(participant); + + session = _get_session_from_fs_stream(self, stream); + + lcandidate = purple_media_candidate_from_fs(local_candidate); + rcandidate = purple_media_candidate_from_fs(remote_candidate); + + g_signal_emit_by_name(self, "active-candidate-pair", + session->id, name, lcandidate, rcandidate); + + g_object_unref(lcandidate); + g_object_unref(rcandidate); } else if (gst_structure_has_name(msg->structure, "farsight-recv-codecs-changed")) { const GValue *value; diff -r cc978a1a4bd1 -r 74e75fc3481e libpurple/media/media.c --- a/libpurple/media/media.c Fri Oct 23 23:12:57 2009 +0000 +++ b/libpurple/media/media.c Mon Oct 26 17:39:38 2009 +0000 @@ -143,9 +143,12 @@ PurpleMediaCandidate *candidate, PurpleMedia *media); static void purple_media_candidates_prepared_cb(FsStream *stream, PurpleMediaSession *session); -static void purple_media_candidate_pair_established_cb(FsStream *stream, - FsCandidate *native_candidate, FsCandidate *remote_candidate, - PurpleMediaSession *session); +static void purple_media_candidate_pair_established_cb( + PurpleMediaBackend *backend, + const gchar *sess_id, const gchar *name, + PurpleMediaCandidate *local_candidate, + PurpleMediaCandidate *remote_candidate, + PurpleMedia *media); static void purple_media_codecs_changed_cb(PurpleMediaBackend *backend, const gchar *sess_id, PurpleMedia *media); static gboolean media_bus_call(GstBus *bus, @@ -442,6 +445,11 @@ "media", media, NULL); g_signal_connect(media->priv->backend, + "active-candidate-pair", + G_CALLBACK( + purple_media_candidate_pair_established_cb), + media); + g_signal_connect(media->priv->backend, "codecs-changed", G_CALLBACK( purple_media_codecs_changed_cb), @@ -1072,13 +1080,6 @@ FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); purple_media_candidates_prepared_cb(stream, session); - } else if (gst_structure_has_name(msg->structure, - "farsight-new-active-candidate-pair")) { - FsStream *stream = g_value_get_object(gst_structure_get_value(msg->structure, "stream")); - FsCandidate *local_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "local-candidate")); - FsCandidate *remote_candidate = g_value_get_boxed(gst_structure_get_value(msg->structure, "remote-candidate")); - PurpleMediaSession *session = purple_media_session_from_fs_stream(media, stream); - purple_media_candidate_pair_established_cb(stream, local_candidate, remote_candidate, session); } break; } @@ -1297,60 +1298,62 @@ /* callback called when a pair of transport candidates (local and remote) * has been established */ static void -purple_media_candidate_pair_established_cb(FsStream *fsstream, - FsCandidate *native_candidate, - FsCandidate *remote_candidate, - PurpleMediaSession *session) +purple_media_candidate_pair_established_cb(PurpleMediaBackend *backend, + const gchar *sess_id, const gchar *name, + PurpleMediaCandidate *local_candidate, + PurpleMediaCandidate *remote_candidate, + PurpleMedia *media) { - gchar *name; - FsParticipant *participant; PurpleMediaStream *stream; GList *iter; - - g_return_if_fail(FS_IS_STREAM(fsstream)); - g_return_if_fail(session != NULL); + guint id; - g_object_get(fsstream, "participant", &participant, NULL); - g_object_get(participant, "cname", &name, NULL); - g_object_unref(participant); + g_return_if_fail(PURPLE_IS_MEDIA(media)); - stream = purple_media_get_stream(session->media, session->id, name); + stream = purple_media_get_stream(media, sess_id, name); + id = purple_media_candidate_get_component_id(local_candidate); iter = stream->active_local_candidates; for(; iter; iter = g_list_next(iter)) { FsCandidate *c = iter->data; - if (native_candidate->component_id == c->component_id) { + if (id == c->component_id) { fs_candidate_destroy(c); stream->active_local_candidates = g_list_delete_link(iter, iter); stream->active_local_candidates = g_list_prepend( stream->active_local_candidates, - fs_candidate_copy(native_candidate)); + purple_media_candidate_to_fs( + local_candidate)); break; } } if (iter == NULL) stream->active_local_candidates = g_list_prepend( stream->active_local_candidates, - fs_candidate_copy(native_candidate)); + purple_media_candidate_to_fs( + local_candidate)); + + id = purple_media_candidate_get_component_id(local_candidate); iter = stream->active_remote_candidates; for(; iter; iter = g_list_next(iter)) { FsCandidate *c = iter->data; - if (native_candidate->component_id == c->component_id) { + if (id == c->component_id) { fs_candidate_destroy(c); stream->active_remote_candidates = g_list_delete_link(iter, iter); stream->active_remote_candidates = g_list_prepend( stream->active_remote_candidates, - fs_candidate_copy(remote_candidate)); + purple_media_candidate_to_fs( + remote_candidate)); break; } } if (iter == NULL) stream->active_remote_candidates = g_list_prepend( stream->active_remote_candidates, - fs_candidate_copy(remote_candidate)); + purple_media_candidate_to_fs( + remote_candidate)); purple_debug_info("media", "candidate pair established\n"); }