Mercurial > pidgin
diff libpurple/media/backend-fs2.c @ 29182:a27e41f373db
Handle part of accepting a stream in the Fs2 media backend.
author | maiku@pidgin.im |
---|---|
date | Tue, 27 Oct 2009 00:13:39 +0000 |
parents | ec5ed142f551 |
children | 3bab2237724d |
line wrap: on
line diff
--- a/libpurple/media/backend-fs2.c Mon Oct 26 23:26:59 2009 +0000 +++ b/libpurple/media/backend-fs2.c Tue Oct 27 00:13:39 2009 +0000 @@ -625,6 +625,33 @@ return NULL; } +static GList * +_get_streams(PurpleMediaBackendFs2 *self, + const gchar *sess_id, const gchar *name) +{ + PurpleMediaBackendFs2Private *priv; + GList *streams, *ret = NULL; + + g_return_val_if_fail(PURPLE_IS_MEDIA_BACKEND_FS2(self), NULL); + + priv = PURPLE_MEDIA_BACKEND_FS2_GET_PRIVATE(self); + streams = priv->streams; + + for (; streams; streams = g_list_next(streams)) { + PurpleMediaBackendFs2Stream *stream = streams->data; + + if (sess_id != NULL && strcmp(stream->session->id, sess_id)) + continue; + else if (name != NULL && strcmp(stream->participant, name)) + continue; + else + ret = g_list_prepend(ret, stream); + } + + ret = g_list_reverse(ret); + return ret; +} + static PurpleMediaBackendFs2Session * _get_session_from_fs_stream(PurpleMediaBackendFs2 *self, FsStream *stream) { @@ -964,6 +991,33 @@ gchar *sid, gchar *name, gboolean local, PurpleMediaBackendFs2 *self) { + if (type == PURPLE_MEDIA_INFO_ACCEPT) { + GList *streams = _get_streams(self, sid, name); + + for (; streams; streams = + g_list_delete_link(streams, streams)) { + PurpleMediaBackendFs2Stream *stream = streams->data; + GError *err = NULL; + + g_object_set(G_OBJECT(stream->stream), "direction", + _session_type_to_fs_stream_direction( + stream->session->type), NULL); + + if (stream->remote_candidates == NULL) + continue; + + fs_stream_set_remote_candidates(stream->stream, + stream->remote_candidates, &err); + + if (err == NULL) + continue; + + purple_debug_error("backend-fs2", "Error adding " + "remote candidates: %s\n", + err->message); + g_error_free(err); + } + } } static gboolean