Skip to content

Commit

Permalink
MT#55283 support i= e= p= u=
Browse files Browse the repository at this point in the history
Change-Id: I637d28ca01fb5caffeb2e523ea91a51da03a8a59
(cherry picked from commit 4449a05)
  • Loading branch information
rfuchs committed Mar 5, 2025
1 parent a409179 commit 89913e5
Show file tree
Hide file tree
Showing 5 changed files with 86 additions and 8 deletions.
15 changes: 9 additions & 6 deletions daemon/call.c
Original file line number Diff line number Diff line change
Expand Up @@ -2678,19 +2678,20 @@ 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;
ml->sdp_session_bandwidth.rr = flags->session_bandwidth.rr;
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
Expand Down Expand Up @@ -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,
Expand Down
60 changes: 58 additions & 2 deletions daemon/sdp.c
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand All @@ -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;
};
Expand Down Expand Up @@ -1359,11 +1363,32 @@ int sdp_parse(str *body, sdp_sessions_q *sessions, const sdp_ng_flags *flags) {
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;
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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)
Expand Down Expand Up @@ -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,
Expand All @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);

Expand Down
7 changes: 7 additions & 0 deletions include/call.h
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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;
Expand Down
4 changes: 4 additions & 0 deletions include/call_interfaces.h
Original file line number Diff line number Diff line change
Expand Up @@ -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];
Expand Down
8 changes: 8 additions & 0 deletions t/auto-daemon-tests.pl
Original file line number Diff line number Diff line change
Expand Up @@ -19010,6 +19010,7 @@ sub stun_succ {
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
Expand All @@ -19018,6 +19019,7 @@ sub stun_succ {
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
Expand Down Expand Up @@ -19052,6 +19054,7 @@ sub stun_succ {
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
Expand All @@ -19060,6 +19063,7 @@ sub stun_succ {
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
Expand Down Expand Up @@ -19162,6 +19166,7 @@ sub stun_succ {
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
Expand All @@ -19170,6 +19175,7 @@ sub stun_succ {
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
Expand Down Expand Up @@ -19223,6 +19229,7 @@ sub stun_succ {
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
Expand All @@ -19237,6 +19244,7 @@ sub stun_succ {
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
Expand Down

0 comments on commit 89913e5

Please sign in to comment.