From 250c23d8081145da3cc0423d483f061af088fd05 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Wed, 5 Jun 2013 13:27:41 -0400 Subject: [PATCH] parsing of the sdp ssrc attribute --- daemon/sdp.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/daemon/sdp.c b/daemon/sdp.c index 880217735..a379ea00a 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -101,6 +101,15 @@ struct attribute_crypto { mki_len; }; +struct attribute_ssrc { + str id_str; + str attr_str; + + u_int32_t id; + str attr; + str value; +}; + struct sdp_attribute { str full_line, /* including a= and \r\n */ line_value, /* without a= and without \r\n */ @@ -115,12 +124,14 @@ struct sdp_attribute { ATTR_CANDIDATE, ATTR_ICE, ATTR_CRYPTO, + ATTR_SSRC, } attr; union { struct attribute_rtcp rtcp; struct attribute_candidate candidate; struct attribute_crypto crypto; + struct attribute_ssrc ssrc; } u; }; @@ -264,6 +275,34 @@ static void attrs_init(struct sdp_attributes *a) { NULL, (GDestroyNotify) g_queue_free); } +static int parse_attribute_ssrc(struct sdp_attribute *output) { + char *start, *end; + struct attribute_ssrc *s; + + output->attr = ATTR_SSRC; + + start = output->value.s; + end = start + output->value.len; + + EXTRACT_TOKEN(u.ssrc.id_str); + EXTRACT_TOKEN(u.ssrc.attr_str); + + s = &output->u.ssrc; + + s->id = strtoul(s->id_str.s, NULL, 10); + if (!s->id) + return -1; + + s->attr = s->attr_str; + str_chr_str(&s->value, &s->attr, ':'); + if (s->value.s) { + s->attr.len = s->value.s - s->attr.s; + str_shift(&s->value, 1); + } + + return 0; +} + static int parse_attribute_crypto(struct sdp_attribute *output) { char *start, *end; struct attribute_crypto *c; @@ -434,6 +473,9 @@ static void parse_attribute(struct sdp_attribute *a) { case 4: if (!str_cmp(&a->name, "rtcp")) parse_attribute_rtcp(a); + else if (!str_cmp(&a->name, "ssrc")) + parse_attribute_ssrc(a); + ; break; case 6: if (!str_cmp(&a->name, "crypto"))