MT#56465 Carry `sdp_origin` via flags to ml init func

In order to be able to set `sdp_origin` related things
while initiating a monologue from flags (so in
`__call_monologue_init_from_flags()` ), duplicate `sdp_origin`
from `sdp_session` while doing streams parsing in `sdp_streams()`.

Change-Id: I17a4400a41623d336590010e9dfc5389460b27be
pull/1826/head
Donat Zenichev 1 year ago
parent 0c048071f6
commit 7123b59bb4

@ -2638,6 +2638,19 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, sdp_ng_f
ml->sdp_attributes = flags->session_attributes;
t_queue_init(&flags->session_attributes);
/* consume sdp session origin parts (name, version etc.) */
{
if (!ml->sdp_username && flags->session_sdp_orig.username.len)
ml->sdp_username = call_strdup_len(call, flags->session_sdp_orig.username.s,
flags->session_sdp_orig.username.len);
if (!ml->sdp_session_id && flags->session_sdp_orig.session_id.len)
ml->sdp_session_id = str_to_ui(&flags->session_sdp_orig.session_id, 0);
ml->sdp_version = flags->session_sdp_orig.version_num;
if (ml->sdp_version == ULLONG_MAX)
ml->sdp_version = (unsigned int)ssl_random();
}
// reset offer ipv4/ipv6/mixed media stats
if (flags->opmode == OP_OFFER) {
statistics_update_ip46_inc_dec(call, CMC_DECREMENT);

@ -71,23 +71,6 @@ enum attr_id {
// make sure g_int_hash can be used
static_assert(sizeof(gint) == sizeof(enum attr_id), "sizeof enum attr_id wrong");
struct network_address {
str network_type;
str address_type;
str address;
sockaddr_t parsed;
};
struct sdp_origin {
str username;
str session_id;
str version_str;
struct network_address address;
unsigned long long version_num;
size_t version_output_pos;
unsigned int parsed:1;
};
struct sdp_connection {
str s;
struct network_address address;
@ -1806,6 +1789,7 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f
session = l->data;
sdp_attr_append_other(&flags->session_attributes, &session->attributes);
flags->session_sdp_orig = session->origin;
for (__auto_type k = session->media_streams.head; k; k = k->next) {
media = k->data;

@ -68,7 +68,10 @@ struct sdp_ng_flags {
str_q sdes_order; /* the order, in which crypto suites are being added to the SDP */
str_q sdes_offerer_pref; /* preferred crypto suites to be selected for the offerer */
str dtls_fingerprint;
/* keep session level attributes for internal proper parsing */
sdp_attr_q session_attributes; // top-level (not part of an m= section) SDP session attributes
struct sdp_origin session_sdp_orig;
/* commands to manipulate attr lines in SDP */
struct sdp_manipulations * sdp_manipulations[__MT_MAX];

@ -44,6 +44,22 @@ struct sdp_attr {
enum sdp_attr_type type;
};
struct network_address {
str network_type;
str address_type;
str address;
sockaddr_t parsed;
};
struct sdp_origin {
str username;
str session_id;
str version_str;
struct network_address address;
unsigned long long version_num;
size_t version_output_pos;
unsigned int parsed:1;
};
extern const str rtpe_instance_id;

Loading…
Cancel
Save