summaryrefslogtreecommitdiff
path: root/transmitters
diff options
context:
space:
mode:
authorOlivier CrĂȘte <olivier.crete@collabora.co.uk>2011-02-10 19:58:38 +0000
committerOlivier CrĂȘte <olivier.crete@collabora.co.uk>2011-02-10 20:29:50 +0000
commit3bbcc8456ef905e20d043b35487015a88f262b38 (patch)
treed9b636561df7b708c899634a0b2606ef7371af6e /transmitters
parentafc31f00f87a35c83b1ba6623bb49e35225beca3 (diff)
downloadfarstream-3bbcc8456ef905e20d043b35487015a88f262b38.tar.gz
nicestream: Skip Nice errors if the component has never been ready
Diffstat (limited to 'transmitters')
-rw-r--r--transmitters/nice/fs-nice-stream-transmitter.c16
1 files changed, 16 insertions, 0 deletions
diff --git a/transmitters/nice/fs-nice-stream-transmitter.c b/transmitters/nice/fs-nice-stream-transmitter.c
index 9feca1c8..e5ae531d 100644
--- a/transmitters/nice/fs-nice-stream-transmitter.c
+++ b/transmitters/nice/fs-nice-stream-transmitter.c
@@ -100,6 +100,8 @@ struct _FsNiceStreamTransmitterPrivate
volatile gint associate_on_source;
+ gboolean *component_has_been_ready; /* only from NiceAgent main thread */
+
/* Everything below is protected by the mutex */
gboolean sending;
@@ -452,6 +454,8 @@ fs_nice_stream_transmitter_finalize (GObject *object)
g_free (self->priv->username);
g_free (self->priv->password);
+ g_free (self->priv->component_has_been_ready);
+
parent_class->finalize (object);
}
@@ -1320,6 +1324,9 @@ fs_nice_stream_transmitter_build (FsNiceStreamTransmitter *self,
FS_PARTICIPANT_DATA_UNLOCK (participant);
+ self->priv->component_has_been_ready = g_new0 (gboolean,
+ self->priv->transmitter->components);
+
self->priv->stream_id = nice_agent_add_stream (
self->priv->agent->agent,
self->priv->transmitter->components);
@@ -1477,6 +1484,15 @@ agent_state_changed (NiceAgent *agent,
if (stream_id != self->priv->stream_id)
return;
+ /* Ignore failed until we've connected, never time out because
+ * of the dribbling case, more candidates could come later
+ */
+ if (state == NICE_COMPONENT_STATE_FAILED &&
+ !self->priv->component_has_been_ready[component_id])
+ return;
+ else if (state == NICE_COMPONENT_STATE_READY)
+ self->priv->component_has_been_ready[component_id] = TRUE;
+
fs_state = nice_component_state_to_fs_stream_state (state);
data = g_slice_new (struct state_changed_signal_data);