add new `full rtcp attribute` flag

closes #668

Change-Id: I1ee13d4121d0aa6dff46470327a6caba9b631d7d
changes/42/25442/1
Richard Fuchs 6 years ago
parent 19da0e05e8
commit c61d7f129e

@ -1195,6 +1195,11 @@ Optionally included keys are:
Omit the `a=rtcp` line from the outgoing SDP.
- `full rtcp attribute`
Include the full version of the `a=rtcp` line (complete with network address) instead of
the short version with just the port number.
- `loop protect`
Inserts a custom attribute (`a=rtpengine:...`) into the outgoing SDP to prevent *rtpengine*

@ -619,6 +619,8 @@ static void call_ng_flags_flags(struct sdp_ng_flags *out, str *s, void *dummy) {
out->record_call = 1;
else if (!str_cmp(s, "no-rtcp-attribute"))
out->no_rtcp_attr = 1;
else if (!str_cmp(s, "full-rtcp-attribute"))
out->full_rtcp_attr = 1;
else if (!str_cmp(s, "loop-protect"))
out->loop_protect = 1;
else if (!str_cmp(s, "always-transcode"))

@ -1965,6 +1965,20 @@ static void insert_crypto(struct call_media *media, struct sdp_chopper *chop, st
for (GList *l = media->sdes_out.head; l; l = l->next)
insert_crypto1(media, chop, l->data, flags);
}
static void insert_rtcp_attr(struct sdp_chopper *chop, struct packet_stream *ps,
const struct sdp_ng_flags *flags)
{
if (flags->no_rtcp_attr)
return;
chopper_append_printf(chop, "a=rtcp:%u", ps->selected_sfd->socket.local.port);
if (flags->full_rtcp_attr) {
char buf[64];
int len;
call_stream_address46(buf, ps, SAF_NG, &len, NULL, 0);
chopper_append_printf(chop, " IN %.*s", len, buf);
}
chopper_append_c(chop, "\r\n");
}
/* called with call->master_lock held in W */
@ -2100,28 +2114,14 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu
|| (flags->opmode == OP_OFFER
&& flags->rtcp_mux_require)))
{
if (!flags->no_rtcp_attr) {
chopper_append_c(chop, "a=rtcp:");
chopper_append_printf(chop, "%u", ps->selected_sfd->socket.local.port);
chopper_append_c(chop, "\r\na=rtcp-mux\r\n");
}
else
chopper_append_c(chop, "a=rtcp-mux\r\n");
insert_rtcp_attr(chop, ps, flags);
chopper_append_c(chop, "a=rtcp-mux\r\n");
ps_rtcp = NULL;
}
else if (ps_rtcp && !flags->ice_force_relay) {
if (!flags->no_rtcp_attr) {
chopper_append_c(chop, "a=rtcp:");
chopper_append_printf(chop, "%u", ps_rtcp->selected_sfd->socket.local.port);
if (!MEDIA_ISSET(call_media, RTCP_MUX))
chopper_append_c(chop, "\r\n");
else
chopper_append_c(chop, "\r\na=rtcp-mux\r\n");
}
else {
if (MEDIA_ISSET(call_media, RTCP_MUX))
chopper_append_c(chop, "a=rtcp-mux\r\n");
}
insert_rtcp_attr(chop, ps_rtcp, flags);
if (MEDIA_ISSET(call_media, RTCP_MUX))
chopper_append_c(chop, "a=rtcp-mux\r\n");
}
}
else

@ -53,6 +53,7 @@ struct sdp_ng_flags {
rtcp_mux_accept:1,
rtcp_mux_reject:1,
no_rtcp_attr:1,
full_rtcp_attr:1,
generate_mid:1,
strict_source:1,
media_handover:1,

@ -22,6 +22,7 @@ GetOptions(
'trust-address' => \$options{'trust address'},
'sip-source-address' => \$options{'sip source address'},
'no-rtcp-attribute' => \$options{'no rtcp attribute'},
'full-rtcp-attribute' => \$options{'full rtcp attribute'},
'symmetric' => \$options{'symmetric'},
'asymmetric' => \$options{'asymmetric'},
'replace-origin' => \$options{'replace-origin'},
@ -75,7 +76,7 @@ for my $x (split(/,/, 'from-tag,to-tag,call-id,transport protocol,media address,
for my $x (split(/,/, 'TOS,delete-delay')) {
defined($options{$x}) and $packet{$x} = $options{$x};
}
for my $x (split(/,/, 'trust address,symmetric,asymmetric,force,strict source,media handover,sip source address,reset,port latching,no rtcp attribute,loop protect,record call,always transcode,all,pad crypto,generate mid,fragment')) {
for my $x (split(/,/, 'trust address,symmetric,asymmetric,force,strict source,media handover,sip source address,reset,port latching,no rtcp attribute,full rtcp attribute,loop protect,record call,always transcode,all,pad crypto,generate mid,fragment')) {
defined($options{$x}) and push(@{$packet{flags}}, $x);
}
for my $x (split(/,/, 'origin,session connection')) {

Loading…
Cancel
Save