diff options
author | Youness Alaoui <youness.alaoui@collabora.co.uk> | 2014-07-17 23:46:44 -0400 |
---|---|---|
committer | Olivier CrĂȘte <olivier.crete@collabora.com> | 2015-01-27 16:38:38 -0500 |
commit | 5bd19ca4a6c4fa0df50f521eb860d97e95310641 (patch) | |
tree | e7f7de9dca87e8997283276a15b19e9dad8b1edf /transmitters | |
parent | 7f02aac24c859aadf4a0a83991502c9bcc1ddaf8 (diff) | |
download | farstream-5bd19ca4a6c4fa0df50f521eb860d97e95310641.tar.gz |
Add support for reliable nice transmitter and selection of ice-udp/ice-tcp
Diffstat (limited to 'transmitters')
-rw-r--r-- | transmitters/nice/fs-nice-agent.c | 9 | ||||
-rw-r--r-- | transmitters/nice/fs-nice-agent.h | 1 | ||||
-rw-r--r-- | transmitters/nice/fs-nice-stream-transmitter.c | 73 |
3 files changed, 80 insertions, 3 deletions
diff --git a/transmitters/nice/fs-nice-agent.c b/transmitters/nice/fs-nice-agent.c index c1babbc3..d95126dc 100644 --- a/transmitters/nice/fs-nice-agent.c +++ b/transmitters/nice/fs-nice-agent.c @@ -389,6 +389,7 @@ fs_nice_agent_init_agent (FsNiceAgent *self, GError **error) FsNiceAgent * fs_nice_agent_new (guint compatibility_mode, GList *preferred_local_candidates, + gboolean reliable, GError **error) { FsNiceAgent *self = NULL; @@ -398,8 +399,12 @@ fs_nice_agent_new (guint compatibility_mode, "preferred-local-candidates", preferred_local_candidates, NULL); - self->agent = nice_agent_new (self->priv->main_context, - self->priv->compatibility_mode); + if (reliable) + self->agent = nice_agent_new_reliable (self->priv->main_context, + self->priv->compatibility_mode); + else + self->agent = nice_agent_new (self->priv->main_context, + self->priv->compatibility_mode); if (self->agent == NULL) { diff --git a/transmitters/nice/fs-nice-agent.h b/transmitters/nice/fs-nice-agent.h index 37db75d4..f7d9f2e3 100644 --- a/transmitters/nice/fs-nice-agent.h +++ b/transmitters/nice/fs-nice-agent.h @@ -85,6 +85,7 @@ GType fs_nice_agent_get_type (void); FsNiceAgent *fs_nice_agent_new (guint compatibility_mode, GList *preferred_local_candidates, + gboolean reliable, GError **error); void fs_nice_agent_add_idle (FsNiceAgent *agent, GSourceFunc func, diff --git a/transmitters/nice/fs-nice-stream-transmitter.c b/transmitters/nice/fs-nice-stream-transmitter.c index 791d17ac..df752d39 100644 --- a/transmitters/nice/fs-nice-stream-transmitter.c +++ b/transmitters/nice/fs-nice-stream-transmitter.c @@ -68,6 +68,9 @@ enum PROP_RELAY_INFO, PROP_MIN_PORT, PROP_MAX_PORT, + PROP_ICE_TCP, + PROP_ICE_UDP, + PROP_RELIABLE, PROP_DEBUG }; @@ -86,6 +89,9 @@ struct _FsNiceStreamTransmitterPrivate guint stun_port; gboolean controlling_mode; + gboolean ice_udp; + gboolean ice_tcp; + gboolean reliable; guint compatibility_mode; @@ -271,6 +277,30 @@ fs_nice_stream_transmitter_class_init (FsNiceStreamTransmitterClass *klass) TRUE, G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_ICE_UDP, + g_param_spec_boolean ( + "ice-udp", + "ICE UDP", + "Whether the agent gathers UDP candidates", + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_ICE_TCP, + g_param_spec_boolean ( + "ice-tcp", + "ICE TCP", + "Whether the agent gathers TCP candidates", + TRUE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT | G_PARAM_STATIC_STRINGS)); + + g_object_class_install_property (gobject_class, PROP_RELIABLE, + g_param_spec_boolean ( + "reliable", + "reliable mode", + "Whether the agent is reliable", + FALSE, + G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY | G_PARAM_STATIC_STRINGS)); + g_object_class_install_property (gobject_class, PROP_STREAM_ID, g_param_spec_uint ( "stream-id", @@ -399,6 +429,9 @@ fs_nice_stream_transmitter_init (FsNiceStreamTransmitter *self) g_mutex_init (&self->priv->mutex); self->priv->controlling_mode = TRUE; + self->priv->ice_udp = TRUE; + self->priv->ice_tcp = TRUE; + self->priv->reliable = TRUE; } static void @@ -539,6 +572,27 @@ fs_nice_stream_transmitter_get_property (GObject *object, else g_value_set_boolean (value, self->priv->controlling_mode); break; + case PROP_ICE_UDP: + if (self->priv->agent) + g_object_get_property (G_OBJECT (self->priv->agent->agent), + g_param_spec_get_name (pspec), value); + else + g_value_set_boolean (value, self->priv->ice_udp); + break; + case PROP_ICE_TCP: + if (self->priv->agent) + g_object_get_property (G_OBJECT (self->priv->agent->agent), + g_param_spec_get_name (pspec), value); + else + g_value_set_boolean (value, self->priv->ice_tcp); + break; + case PROP_RELIABLE: + if (self->priv->agent) + g_object_get_property (G_OBJECT (self->priv->agent->agent), + g_param_spec_get_name (pspec), value); + else + g_value_set_boolean (value, self->priv->reliable); + break; case PROP_STREAM_ID: FS_NICE_STREAM_TRANSMITTER_LOCK (self); g_value_set_uint (value, self->priv->stream_id); @@ -590,6 +644,21 @@ fs_nice_stream_transmitter_set_property (GObject *object, g_object_set_property (G_OBJECT (self->priv->agent->agent), g_param_spec_get_name (pspec), value); break; + case PROP_ICE_UDP: + self->priv->ice_udp = g_value_get_boolean (value); + if (self->priv->transmitter && self->priv->agent) + g_object_set_property (G_OBJECT (self->priv->agent->agent), + g_param_spec_get_name (pspec), value); + break; + case PROP_ICE_TCP: + self->priv->ice_tcp = g_value_get_boolean (value); + if (self->priv->transmitter && self->priv->agent) + g_object_set_property (G_OBJECT (self->priv->agent->agent), + g_param_spec_get_name (pspec), value); + break; + case PROP_RELIABLE: + self->priv->reliable = g_value_get_boolean (value); + break; case PROP_COMPATIBILITY_MODE: self->priv->compatibility_mode = g_value_get_uint (value); break; @@ -1341,7 +1410,7 @@ fs_nice_stream_transmitter_build (FsNiceStreamTransmitter *self, if (item == NULL) { agent = fs_nice_agent_new (self->priv->compatibility_mode, - self->priv->preferred_local_candidates, + self->priv->preferred_local_candidates, self->priv->reliable, error); if (!agent) @@ -1355,6 +1424,8 @@ fs_nice_stream_transmitter_build (FsNiceStreamTransmitter *self, g_object_set (agent->agent, "controlling-mode", self->priv->controlling_mode, + "ice-udp", self->priv->ice_udp, + "ice-tcp", self->priv->ice_tcp, NULL); agents = g_list_prepend (agents, agent); |