MT#60403 bandwidth: add support of CT for session level

Added support of the CT (conference total) bandwidth
attribute for the SDP session level. See RFC8866.

Will be required later for the SDP formatting in `sdp_create()`.

Change-Id: Ifc64f68d7acee8ce253882f4fa480bbf7ad7c0bd
rfuchs/test
Donat Zenichev 1 year ago
parent c64cc3918d
commit b170ded75d

@ -2672,6 +2672,8 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c
ml->sdp_session_rr = flags->session_rr;
if (flags->session_rs >= 0)
ml->sdp_session_rs = flags->session_rs;
if (flags->session_ct >= 0)
ml->sdp_session_ct = flags->session_ct;
}
// reset offer ipv4/ipv6/mixed media stats
@ -4235,7 +4237,7 @@ struct call_monologue *__monologue_create(call_t *call) {
ret->ssrc_hash = create_ssrc_hash_call();
ret->sdp_attr_print = sdp_insert_monologue_attributes;
/* explicitely set b=RR/b=RS to -1 so it's not considered as 0 inadvertently */
ret->sdp_session_as = ret->sdp_session_rr = ret->sdp_session_rs = -1;
ret->sdp_session_as = ret->sdp_session_rr = ret->sdp_session_rs = ret->sdp_session_ct = -1;
gettimeofday(&ret->started, NULL);

@ -104,7 +104,7 @@ struct sdp_session {
str session_name;
str session_timing; /* t= */
struct sdp_connection connection;
int as, rr, rs;
int as, rr, rs, ct;
struct sdp_attributes attributes;
sdp_media_q media_streams;
};
@ -1294,7 +1294,7 @@ new_session:
t_queue_push_tail(sessions, session);
media = NULL;
session->s.s = b;
session->as = session->rr = session->rs = -1;
session->as = session->rr = session->rs = session->ct = -1;
break;
@ -1372,6 +1372,10 @@ new_session:
else if (!memcmp(value, "RS:", 3)) {
*(media ? &media->rs : &session->rs) = strtol((value + 3), NULL, 10);
}
/* CT has only session level */
else if (!memcmp(value, "CT:", 3)) {
session->ct = strtol((value + 3), NULL, 10);
}
break;
case 'k':
@ -1842,6 +1846,7 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f
flags->session_as = session->as;
flags->session_rr = session->rr;
flags->session_rs = session->rs;
flags->session_ct = session->ct;
flags->session_timing = session->session_timing;
for (__auto_type k = session->media_streams.head; k; k = k->next) {
@ -3638,6 +3643,8 @@ static void sdp_out_add_bandwidth(GString *out, struct call_monologue *monologue
g_string_append_printf(out, "b=RR:%d\r\n", ms->monologue->sdp_session_rr);
if (ms->monologue->sdp_session_rs >= 0)
g_string_append_printf(out, "b=RS:%d\r\n", ms->monologue->sdp_session_rs);
if (ms->monologue->sdp_session_ct >= 0)
g_string_append_printf(out, "b=CT:%d\r\n", ms->monologue->sdp_session_ct);
}
}

@ -571,7 +571,7 @@ struct call_monologue {
GHashTable *media_ids;
struct media_player *player;
struct media_player *rec_player;
int sdp_session_as, sdp_session_rr, sdp_session_rs;
int sdp_session_as, sdp_session_rr, sdp_session_rs, sdp_session_ct;
str last_in_sdp;
sdp_sessions_q last_in_sdp_parsed; /* last parsed `sdp_session` */
sdp_streams_q last_in_sdp_streams; /* last parsed `stream_params` */

@ -66,7 +66,7 @@ struct sdp_ng_flags {
str session_sdp_name;
str session_timing; /* t= line */
int session_as, session_rr, session_rs; /* b= bandwidth per session level */
int session_as, session_rr, session_rs, session_ct; /* b= bandwidth per session level */
/* commands to manipulate attr lines in SDP */
struct sdp_manipulations * sdp_manipulations[__MT_MAX];

Loading…
Cancel
Save