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

Change-Id: I637d28ca01fb5caffeb2e523ea91a51da03a8a59
(cherry picked from commit 4449a05642)
(cherry picked from commit 89913e5979)
mr13.1.1
Richard Fuchs 9 months ago
parent 651481fa77
commit 3bdec196ff

@ -2678,9 +2678,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;
@ -2688,9 +2686,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
@ -2916,6 +2917,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,

@ -106,6 +106,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 {
@ -126,7 +130,7 @@ 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
unsigned int legacy_osrtp:1;
};
@ -1359,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;
@ -1822,6 +1847,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)
@ -1865,6 +1894,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)
@ -2644,6 +2675,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,
@ -2660,6 +2705,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);
@ -2989,6 +3036,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);
@ -3101,6 +3149,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);

@ -374,6 +374,7 @@ struct stream_params {
str tls_id;
int media_sdp_id;
struct session_bandwidth media_session_bandiwdth;
str sdp_information;
};
struct endpoint_map {
@ -537,6 +538,8 @@ struct call_media {
/* bandwidth */
struct session_bandwidth sdp_media_bandwidth;
str sdp_information;
#ifdef WITH_TRANSCODING
encoder_callback_t encoder_callback;
#endif
@ -600,6 +603,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;

@ -75,6 +75,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];

@ -19010,6 +19010,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
@ -19018,6 +19019,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
@ -19052,6 +19054,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
@ -19060,6 +19063,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
@ -19162,6 +19166,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
@ -19170,6 +19175,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
@ -19223,6 +19229,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
@ -19237,6 +19244,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