diff --git a/daemon/sdp.c b/daemon/sdp.c index a379ea00a..f8603fa6b 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -119,6 +119,7 @@ struct sdp_attribute { param; /* "PCMA/8000" */ enum { + ATTR_INVALID = -1, ATTR_OTHER = 0, ATTR_RTCP, ATTR_CANDIDATE, @@ -445,6 +446,8 @@ static int parse_attribute_candidate(struct sdp_attribute *output) { } static void parse_attribute(struct sdp_attribute *a) { + int ret; + a->name = a->line_value; str_chr_str(&a->value, &a->name, ':'); if (a->value.s) { @@ -468,18 +471,17 @@ static void parse_attribute(struct sdp_attribute *a) { a->key.len += 1 + a->value.len; } - /* XXX add error handling */ + ret = 0; switch (a->name.len) { case 4: if (!str_cmp(&a->name, "rtcp")) - parse_attribute_rtcp(a); + ret = parse_attribute_rtcp(a); else if (!str_cmp(&a->name, "ssrc")) - parse_attribute_ssrc(a); - ; + ret = parse_attribute_ssrc(a); break; case 6: if (!str_cmp(&a->name, "crypto")) - parse_attribute_crypto(a); + ret = parse_attribute_crypto(a); break; case 7: if (!str_cmp(&a->name, "ice-pwd")) @@ -491,7 +493,7 @@ static void parse_attribute(struct sdp_attribute *a) { break; case 9: if (!str_cmp(&a->name, "candidate")) - parse_attribute_candidate(a); + ret = parse_attribute_candidate(a); else if (!str_cmp(&a->name, "ice-ufrag")) a->attr = ATTR_ICE; break; @@ -508,6 +510,9 @@ static void parse_attribute(struct sdp_attribute *a) { a->attr = ATTR_ICE; break; } + + if (ret) + a->attr = ATTR_INVALID; } int sdp_parse(str *body, GQueue *sessions) {