summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Ruprecht <maiku@pidgin.im>2009-10-26 22:14:25 +0000
committerMichael Ruprecht <maiku@pidgin.im>2009-10-26 22:14:25 +0000
commitb1668101b92a678e700d862497481a8a0c0330df (patch)
tree4928a77dd8f5b94760b5c2eebb2f55f3263ac790
parentd929737eda216b83cef90bf64344f5390aca2a9a (diff)
downloadpidgin-b1668101b92a678e700d862497481a8a0c0330df.tar.gz
Transfer setting Farsight 2's remote candidates to the Fs2 media backend.
-rw-r--r--libpurple/media/backend-fs2.c50
-rw-r--r--libpurple/media/media.c15
2 files changed, 51 insertions, 14 deletions
diff --git a/libpurple/media/backend-fs2.c b/libpurple/media/backend-fs2.c
index 48e1a25b1b..0df8933a1d 100644
--- a/libpurple/media/backend-fs2.c
+++ b/libpurple/media/backend-fs2.c
@@ -381,9 +381,10 @@ _session_type_from_fs(FsMediaType type, FsStreamDirection direction)
}
return result;
}
+#endif
static FsCandidate *
-purple_media_candidate_to_fs(PurpleMediaCandidate *candidate)
+_candidate_to_fs(PurpleMediaCandidate *candidate)
{
FsCandidate *fscandidate;
gchar *foundation;
@@ -432,7 +433,20 @@ purple_media_candidate_to_fs(PurpleMediaCandidate *candidate)
g_free(ip);
return fscandidate;
}
-#endif
+
+static GList *
+_candidate_list_to_fs(GList *candidates)
+{
+ GList *new_list = NULL;
+
+ for (; candidates; candidates = g_list_next(candidates)) {
+ new_list = g_list_prepend(new_list,
+ _candidate_to_fs(candidates->data));
+ }
+
+ new_list = g_list_reverse(new_list);
+ return new_list;
+}
static PurpleMediaCandidate *
purple_media_candidate_from_fs(FsCandidate *fscandidate)
@@ -1232,6 +1246,38 @@ purple_media_backend_fs2_add_remote_candidates(PurpleMediaBackend *self,
const gchar *sess_id, const gchar *participant,
GList *remote_candidates)
{
+ PurpleMediaBackendFs2Private *priv;
+ PurpleMediaBackendFs2Stream *stream;
+ GError *err = NULL;
+
+ g_return_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self));
+
+ priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self);
+ stream = _get_stream(PURPLE_MEDIA_BACKEND_FS2(self),
+ sess_id, participant);
+
+ if (stream == NULL) {
+ purple_debug_error("backend-fs2",
+ "purple_media_add_remote_candidates: "
+ "couldn't find stream %s %s.\n",
+ sess_id ? sess_id : "(null)",
+ participant ? participant : "(null)");
+ return;
+ }
+
+ stream->remote_candidates = g_list_concat(stream->remote_candidates,
+ _candidate_list_to_fs(remote_candidates));
+
+ if (purple_media_accepted(priv->media, sess_id, participant)) {
+ fs_stream_set_remote_candidates(stream->stream,
+ stream->remote_candidates, &err);
+
+ if (err) {
+ purple_debug_error("backend-fs2", "Error adding remote"
+ " candidates: %s\n", err->message);
+ g_error_free(err);
+ }
+ }
}
static GList *
diff --git a/libpurple/media/media.c b/libpurple/media/media.c
index e6700a2e0f..57d8320809 100644
--- a/libpurple/media/media.c
+++ b/libpurple/media/media.c
@@ -1531,7 +1531,6 @@ purple_media_add_remote_candidates(PurpleMedia *media, const gchar *sess_id,
{
#ifdef USE_VV
PurpleMediaStream *stream;
- GError *err = NULL;
g_return_if_fail(PURPLE_IS_MEDIA(media));
stream = purple_media_get_stream(media, sess_id, participant);
@@ -1549,17 +1548,9 @@ purple_media_add_remote_candidates(PurpleMedia *media, const gchar *sess_id,
purple_media_candidate_list_copy(remote_candidates));
if (stream->accepted == TRUE) {
- GList *candidates = purple_media_candidate_list_to_fs(
- stream->remote_candidates);
- fs_stream_set_remote_candidates(stream->stream,
- candidates, &err);
- fs_candidate_list_destroy(candidates);
-
- if (err) {
- purple_debug_error("media", "Error adding remote"
- " candidates: %s\n", err->message);
- g_error_free(err);
- }
+ purple_media_backend_add_remote_candidates(
+ media->priv->backend, sess_id, participant,
+ remote_candidates);
}
#endif
}