[farsight2/master] Add more sanity checks on ICE candidates
Olivier Crête
olivier.crete at collabora.co.uk
Tue Feb 10 05:31:15 PST 2009
---
transmitters/nice/fs-nice-stream-transmitter.c | 48 +++++++++++++++++++++++-
1 files changed, 47 insertions(+), 1 deletions(-)
diff --git a/transmitters/nice/fs-nice-stream-transmitter.c b/transmitters/nice/fs-nice-stream-transmitter.c
index 5733554..078587c 100644
--- a/transmitters/nice/fs-nice-stream-transmitter.c
+++ b/transmitters/nice/fs-nice-stream-transmitter.c
@@ -674,6 +674,51 @@ fs_nice_stream_transmitter_set_remote_candidates (
{
FsCandidate *candidate = item->data;
+ if (!candidate->ip)
+ {
+ g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
+ "Candidate MUST have an IP address");
+ return FALSE;
+ }
+
+ if (candidate->component_id == 0 ||
+ candidate->component_id > self->priv->transmitter->components)
+ {
+ g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
+ "Candidate MUST have a component id between 1 and %d, %d is invalid",
+ self->priv->transmitter->components, candidate->component_id);
+ return FALSE;
+ }
+
+ if (candidate->type == FS_CANDIDATE_TYPE_MULTICAST)
+ {
+ g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
+ "libnice transmitter does not accept multicast candidates");
+ return FALSE;
+ }
+
+
+ if (self->priv->compatibility_mode == NICE_COMPATIBILITY_DRAFT19)
+ {
+ if (candidate->type == FS_CANDIDATE_TYPE_HOST &&
+ (candidate->base_ip || candidate->base_port))
+ {
+ g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
+ "Must not include the base addr/port in host candidates");
+ return FALSE;
+ }
+
+ if ((candidate->type == FS_CANDIDATE_TYPE_SRFLX ||
+ candidate->type == FS_CANDIDATE_TYPE_PRFLX ||
+ candidate->type == FS_CANDIDATE_TYPE_RELAY ) &&
+ (!candidate->base_ip || !candidate->base_port))
+ {
+ g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
+ "Must include the base addr/port in server/peer reflexive and relay candidates");
+ return FALSE;
+ }
+ }
+
if (!candidate->username)
{
g_set_error (error, FS_ERROR, FS_ERROR_INVALID_ARGUMENTS,
@@ -688,7 +733,8 @@ fs_nice_stream_transmitter_set_remote_candidates (
return FALSE;
}
- if (self->priv->compatibility_mode == NICE_COMPATIBILITY_DRAFT19)
+ if (self->priv->compatibility_mode != NICE_COMPATIBILITY_GOOGLE &&
+ self->priv->compatibility_mode != NICE_COMPATIBILITY_MSN)
{
if (!username)
{
--
1.5.6.5
More information about the farsight-commits
mailing list