summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYouness Alaoui <youness.alaoui@collabora.co.uk>2014-07-17 23:46:44 -0400
committerOlivier CrĂȘte <olivier.crete@collabora.com>2015-01-27 16:38:38 -0500
commit5bd19ca4a6c4fa0df50f521eb860d97e95310641 (patch)
treee7f7de9dca87e8997283276a15b19e9dad8b1edf
parent7f02aac24c859aadf4a0a83991502c9bcc1ddaf8 (diff)
downloadfarstream-5bd19ca4a6c4fa0df50f521eb860d97e95310641.tar.gz
Add support for reliable nice transmitter and selection of ice-udp/ice-tcp
-rw-r--r--transmitters/nice/fs-nice-agent.c9
-rw-r--r--transmitters/nice/fs-nice-agent.h1
-rw-r--r--transmitters/nice/fs-nice-stream-transmitter.c73
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);