# HG changeset patch # User Mike Ruprecht # Date 1231316897 0 # Node ID 2d76bee4a98cb08d8e0785dd6f84e4d1eb203871 # Parent 9a8876493f3fe105fca7b1300320c724b00e495d Wait to send media until both sides have accepted. diff -r 9a8876493f3f -r 2d76bee4a98c libpurple/media.c --- a/libpurple/media.c Wed Jan 07 05:23:58 2009 +0000 +++ b/libpurple/media.c Wed Jan 07 08:28:17 2009 +0000 @@ -822,6 +822,21 @@ return media->priv->pipeline; } +static void +purple_media_set_remote_candidates(PurpleMediaStream *stream) +{ + GError *err = NULL; + + fs_stream_set_remote_candidates(stream->stream, + stream->remote_candidates, &err); + + if (err) { + purple_debug_error("media", "Error adding remote" + " candidates: %s\n", err->message); + g_error_free(err); + } +} + void purple_media_error(PurpleMedia *media, const gchar *error, ...) { @@ -854,6 +869,7 @@ purple_media_accept(PurpleMedia *media) { GList *sessions; + GList *streams; g_signal_emit(media, purple_media_signals[ACCEPTED], 0); @@ -865,6 +881,12 @@ purple_media_emit_ready(media, session, NULL); } + + streams = media->priv->streams; + + for (; streams; streams = g_list_next(streams)) { + purple_media_set_remote_candidates(streams->data); + } } void @@ -910,6 +932,7 @@ purple_media_got_accept(PurpleMedia *media) { GList *sessions; + GList *streams; g_signal_emit(media, purple_media_signals[GOT_ACCEPT], 0); @@ -919,6 +942,12 @@ PurpleMediaSession *session = sessions->data; session->accepted = TRUE; } + + streams = media->priv->streams; + + for (; streams; streams = g_list_next(streams)) { + purple_media_set_remote_candidates(streams->data); + } } GList* @@ -1435,16 +1464,11 @@ const gchar *name, GList *remote_candidates) { PurpleMediaStream *stream = purple_media_get_stream(media, sess_id, name); - GError *err = NULL; stream->remote_candidates = g_list_concat(stream->remote_candidates, fs_candidate_list_copy(remote_candidates)); - fs_stream_set_remote_candidates(stream->stream, stream->remote_candidates, &err); - - if (err) { - purple_debug_error("media", "Error adding remote candidates: %s\n", - err->message); - g_error_free(err); + if (stream->session->accepted == TRUE) { + purple_media_set_remote_candidates(stream); } }