Browse Source

handle unparseable attributes

git.mgm/mediaproxy-ng/github/master
Richard Fuchs 13 years ago
parent
commit
14bcbcfa73
1 changed files with 11 additions and 6 deletions
  1. +11
    -6
      daemon/sdp.c

+ 11
- 6
daemon/sdp.c View File

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


Loading…
Cancel
Save