MT#55283 support i= e= p= u=

Change-Id: I637d28ca01fb5caffeb2e523ea91a51da03a8a59
coverity_scan
Richard Fuchs 9 months ago
parent cabd5e4676
commit 4449a05642

@ -2714,9 +2714,7 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c
{
ml->sdp_session_name = call_str_cpy(&flags->session_sdp_name);
}
/* sdp session timing */
if (flags->session_timing.len)
ml->sdp_session_timing = call_str_cpy(&flags->session_timing);
ml->sdp_session_timing = call_str_cpy(&flags->session_timing);
/* sdp bandwidth per session level
* 0 value is supported (e.g. b=RR:0 and b=RS:0), to be able to disable rtcp */
ml->sdp_session_bandwidth.as = flags->session_bandwidth.as;
@ -2724,9 +2722,12 @@ static void __call_monologue_init_from_flags(struct call_monologue *ml, struct c
ml->sdp_session_bandwidth.rs = flags->session_bandwidth.rs;
ml->sdp_session_bandwidth.ct = flags->session_bandwidth.ct;
ml->sdp_session_bandwidth.tias = flags->session_bandwidth.tias;
/* sdp session group */
if (flags->session_group.len)
ml->sdp_session_group = call_str_cpy(&flags->session_group);
ml->sdp_session_group = call_str_cpy(&flags->session_group);
ml->sdp_session_uri = call_str_cpy(&flags->session_uri);
ml->sdp_session_email = call_str_cpy(&flags->session_email);
ml->sdp_session_phone = call_str_cpy(&flags->session_phone);
ml->sdp_session_information = call_str_cpy(&flags->session_information);
}
// reset offer ipv4/ipv6/mixed media stats
@ -2950,6 +2951,8 @@ static void __media_init_from_flags(struct call_media *other_media, struct call_
/* bandwidth */
other_media->sdp_media_bandwidth = sp->media_session_bandiwdth;
other_media->sdp_information = call_str_cpy(&sp->sdp_information);
}
unsigned int proto_num_ports(unsigned int sp_ports, struct call_media *media, sdp_ng_flags *flags,

@ -107,6 +107,10 @@ struct sdp_session {
struct session_bandwidth bandwidth;
struct sdp_attributes attributes;
sdp_media_q media_streams;
str information; // i= line
str uri; // u= line
str email; // e= line
str phone; // p= line
};
struct sdp_media {
@ -127,6 +131,8 @@ struct sdp_media {
str_slice_q format_list; /* list of slice-alloc'd str objects */
enum media_type media_type_id;
int media_sdp_id;
str information; // i= line
};
struct attribute_rtcp {
@ -1357,11 +1363,32 @@ new_session:
session->session_timing = value;
break;
case 'k':
case 'i':
*(media ? &media->information : &session->information) = value;
break;
case 'u':
errstr = "u= line found within media section";
if (media)
goto error;
session->uri = value;
break;
case 'e':
errstr = "e= line found within media section";
if (media)
goto error;
session->email = value;
break;
case 'p':
errstr = "p= line found within media section";
if (media)
goto error;
session->phone = value;
break;
case 'k':
case 'r':
case 'z':
break;
@ -1812,6 +1839,10 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f
flags->session_sdp_name = session->session_name;
flags->session_bandwidth = session->bandwidth;
flags->session_timing = session->session_timing;
flags->session_information = session->information;
flags->session_uri = session->uri;
flags->session_email = session->email;
flags->session_phone = session->phone;
attr = attr_get_by_id(&session->attributes, ATTR_GROUP);
if (attr)
@ -1855,6 +1886,8 @@ int sdp_streams(const sdp_sessions_q *sessions, sdp_streams_q *streams, sdp_ng_f
/* b= (bandwidth), is parsed in sdp_parse() */
sp->media_session_bandiwdth = media->bandwidth;
sp->sdp_information = media->information;
// a=ptime
attr = attr_get_by_id(&media->attributes, ATTR_PTIME);
if (attr && attr->strs.value.s)
@ -2634,6 +2667,20 @@ static struct packet_stream *print_rtcp(GString *s, struct call_media *media, pa
return ps_rtcp;
}
static void sdp_out_print_line(GString *out, char letter, const str *value) {
if (!value->len)
return;
g_string_append_c(out, letter);
g_string_append_c(out, '=');
g_string_append_len(out, value->s, value->len);
g_string_append(out, "\r\n");
}
static void sdp_out_print_information(GString *out, const str *s) {
sdp_out_print_line(out, 'i', s);
}
/* TODO: rework an appending of parameters in terms of sdp attribute manipulations */
static void print_sdp_media_section(GString *s, struct call_media *media,
const endpoint_t *address, struct call_media *copy_media,
@ -2650,6 +2697,8 @@ static void print_sdp_media_section(GString *s, struct call_media *media,
return;
}
sdp_out_print_information(s, &media->sdp_information);
/* add actual media connection
* print zeroed address for the non accepted media, see RFC 3264 */
sdp_out_add_media_connection(s, media, rtp_ps, (inactive_media ? NULL : &address->address), flags);
@ -3000,6 +3049,7 @@ static void sdp_out_original_media_attributes(GString *out, struct call_media *m
const endpoint_t *address, struct call_media *source_media,
struct packet_stream *rtp_ps, sdp_ng_flags *flags)
{
sdp_out_print_information(out, &source_media->sdp_information);
sdp_out_add_media_connection(out, media, rtp_ps, &address->address, flags);
sdp_out_add_media_bandwidth(out, source_media, flags);
sdp_insert_all_attributes(out, source_media, flags);
@ -3112,6 +3162,14 @@ int sdp_create(str *out, struct call_monologue *monologue, sdp_ng_flags *flags)
/* don't set connection on the session level
* but instead per media, below */
if (source_ml) {
sdp_out_print_information(s, &source_ml->sdp_session_information);
sdp_out_print_line(s, 'u', &source_ml->sdp_session_uri);
sdp_out_print_line(s, 'e', &source_ml->sdp_session_email);
sdp_out_print_line(s, 'p', &source_ml->sdp_session_phone);
}
/* add bandwidth control per session level */
sdp_out_add_session_bandwidth(s, source_ml, flags);

@ -380,6 +380,7 @@ struct stream_params {
str tls_id;
int media_sdp_id;
struct session_bandwidth media_session_bandiwdth;
str sdp_information;
};
struct endpoint_map {
@ -546,6 +547,8 @@ struct call_media {
/* bandwidth */
struct session_bandwidth sdp_media_bandwidth;
str sdp_information;
#ifdef WITH_TRANSCODING
encoder_callback_t encoder_callback;
#endif
@ -610,6 +613,10 @@ struct call_monologue {
str sdp_session_name;
str sdp_session_timing;
str sdp_session_group; /* a=group: e.g. BUNDLE */
str sdp_session_information;
str sdp_session_uri;
str sdp_session_phone;
str sdp_session_email;
struct ssrc_hash *ssrc_hash;
str metadata;
struct janus_session *janus_session;

@ -77,6 +77,10 @@ struct sdp_ng_flags {
str session_timing; /* t= line */
struct session_bandwidth session_bandwidth;
str session_group; /* a=group: e.g. BUNDLE */
str session_information; // i= line
str session_uri; // u= line
str session_email; // e= line
str session_phone; // p= line
/* commands to manipulate attr lines in SDP */
struct sdp_manipulations * sdp_manipulations[__MT_MAX];

@ -20054,6 +20054,7 @@ offer('plain SDP, no ICE', { ICE => 'remove' }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
i=foobar
t=0 0
m=audio 2000 RTP/AVP 0
c=IN IP4 198.51.100.1
@ -20062,6 +20063,7 @@ a=sendrecv
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
i=foobar
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
@ -20096,6 +20098,7 @@ offer('plain SDP, ICE default', { ICE => 'default' }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
e=yikes\@example.com
t=0 0
m=audio 2000 RTP/AVP 0
c=IN IP4 198.51.100.1
@ -20104,6 +20107,7 @@ a=sendrecv
v=0
o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
e=yikes\@example.com
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
@ -20206,6 +20210,7 @@ answer('plain SDP, no ICE option given', { ICE => 'optional' }, <<SDP);
v=0
o=- 1545997027 1 IN IP4 198.51.100.3
s=tester
u=http://example.com
t=0 0
m=audio 2002 RTP/AVP 0
c=IN IP4 198.51.100.3
@ -20214,6 +20219,7 @@ a=sendrecv
v=0
o=- 1545997027 1 IN IP4 198.51.100.3
s=tester
u=http://example.com
t=0 0
m=audio PORT RTP/AVP 0
c=IN IP4 203.0.113.1
@ -20267,6 +20273,7 @@ o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio 2000 RTP/AVP 0
i=test test
c=IN IP4 198.51.100.1
a=sendrecv
a=ice-ufrag:asbsdfds
@ -20281,6 +20288,7 @@ o=- 1545997027 1 IN IP4 198.51.100.1
s=tester
t=0 0
m=audio PORT RTP/AVP 0
i=test test
c=IN IP4 198.51.100.1
a=sendrecv
a=ice-ufrag:asbsdfds

Loading…
Cancel
Save