|
|
|
@ -1778,6 +1778,18 @@ void sdp_attr_free(struct sdp_attr *c) { |
|
|
|
str_free_dup(&c->strs.value); |
|
|
|
g_free(c); |
|
|
|
} |
|
|
|
|
|
|
|
// Duplicate all OTHER attributes from the source (parsed SDP attributes list) into |
|
|
|
// the destination (string-format attribute list) |
|
|
|
static void sdp_attr_append_other(sdp_attr_q *dst, struct sdp_attributes *src) { |
|
|
|
__auto_type attrs = attr_list_get_by_id(src, ATTR_OTHER); |
|
|
|
for (__auto_type ll = attrs ? attrs->head : NULL; ll; ll = ll->next) { |
|
|
|
__auto_type attr = ll->data; |
|
|
|
struct sdp_attr *ac = sdp_attr_dup(attr); |
|
|
|
t_queue_push_tail(dst, ac); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
/* XXX split this function up */ |
|
|
|
int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_flags *flags) { |
|
|
|
struct sdp_session *session; |
|
|
|
@ -1856,20 +1868,7 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f |
|
|
|
cps->params.session_params.unauthenticated_srtp = attr->crypto.unauthenticated_srtp; |
|
|
|
} |
|
|
|
|
|
|
|
/* this is a block of attributes, which requires a carry from `sdp_media` to `call_media` |
|
|
|
* structure, and needs later processing in `sdp_create()`. A carry process is done |
|
|
|
* via the `stream_params` attributes object, which only serves this purpose. |
|
|
|
* Attributes are carried only as plain text. |
|
|
|
*/ |
|
|
|
{ |
|
|
|
/* ATTR_OTHER (unknown types) */ |
|
|
|
attrs = attr_list_get_by_id(&media->attributes, ATTR_OTHER); |
|
|
|
for (__auto_type ll = attrs ? attrs->head : NULL; ll; ll = ll->next) { |
|
|
|
attr = ll->data; |
|
|
|
struct sdp_attr *ac = sdp_attr_dup(attr); |
|
|
|
t_queue_push_tail(&sp->attributes, ac); |
|
|
|
} |
|
|
|
} |
|
|
|
sdp_attr_append_other(&sp->attributes, &media->attributes); |
|
|
|
|
|
|
|
/* a=sendrecv/sendonly/recvonly/inactive */ |
|
|
|
SP_SET(sp, SEND); |
|
|
|
|