/** * @file sdp/util.c SDP utility functions * * Copyright (C) 2010 Creytiv.com */ #include #include #include #include #include #include /** * Decode RTP Header Extension SDP attribute value * * @param ext Extension-map object * @param val SDP attribute value * * @return 0 for success, otherwise errorcode */ int sdp_extmap_decode(struct sdp_extmap *ext, const char *val) { struct pl id, dir; if (!ext || !val) return EINVAL; if (re_regex(val, strlen(val), "[0-9]+[/]*[a-z]* [^ ]+[ ]*[^ ]*", &id, NULL, &dir, &ext->name, NULL, &ext->attrs)) return EBADMSG; ext->dir_set = false; ext->dir = SDP_SENDRECV; if (pl_isset(&dir)) { ext->dir_set = true; if (!pl_strcmp(&dir, "sendonly")) ext->dir = SDP_SENDONLY; else if (!pl_strcmp(&dir, "sendrecv")) ext->dir = SDP_SENDRECV; else if (!pl_strcmp(&dir, "recvonly")) ext->dir = SDP_RECVONLY; else if (!pl_strcmp(&dir, "inactive")) ext->dir = SDP_INACTIVE; else ext->dir_set = false; } ext->id = pl_u32(&id); return 0; }