From 018e35cba8e3268457bfc81728f822f35cc170e1 Mon Sep 17 00:00:00 2001 From: Richard Fuchs Date: Tue, 2 Jan 2018 10:57:38 -0500 Subject: [PATCH] TT#27200 add option to omit a=rtcp attribute closes #428 Change-Id: Ie186291b7b0107d67488facbfea42cd4915556b4 --- README.md | 4 ++++ daemon/call_interfaces.c | 2 ++ daemon/call_interfaces.h | 1 + daemon/sdp.c | 28 +++++++++++++++++++--------- utils/rtpengine-ng-client | 3 ++- 5 files changed, 28 insertions(+), 10 deletions(-) diff --git a/README.md b/README.md index 134ad934f..bc9790e50 100644 --- a/README.md +++ b/README.md @@ -977,6 +977,10 @@ Optionally included keys are: Identical to setting `record call` to `on` (see below). + - `no rtcp attribute` + + Omit the `a=rtcp` line from the outgoing SDP. + * `replace` diff --git a/daemon/call_interfaces.c b/daemon/call_interfaces.c index 277e9b969..4814d38c5 100644 --- a/daemon/call_interfaces.c +++ b/daemon/call_interfaces.c @@ -562,6 +562,8 @@ static void call_ng_process_flags(struct sdp_ng_flags *out, bencode_item_t *inpu out->port_latching = 1; else if (!bencode_strcmp(it, "record-call")) out->record_call = 1; + else if (!bencode_strcmp(it, "no-rtcp-attribute")) + out->no_rtcp_attr = 1; else ilog(LOG_WARN, "Unknown flag encountered: '"BENCODE_FORMAT"'", BENCODE_FMT(it)); diff --git a/daemon/call_interfaces.h b/daemon/call_interfaces.h index c87af22d1..f414b489a 100644 --- a/daemon/call_interfaces.h +++ b/daemon/call_interfaces.h @@ -47,6 +47,7 @@ struct sdp_ng_flags { rtcp_mux_demux:1, rtcp_mux_accept:1, rtcp_mux_reject:1, + no_rtcp_attr:1, strict_source:1, media_handover:1, dtls_passive:1, diff --git a/daemon/sdp.c b/daemon/sdp.c index 54e6ac9ee..4583f0a8d 100644 --- a/daemon/sdp.c +++ b/daemon/sdp.c @@ -1991,18 +1991,28 @@ int sdp_replace(struct sdp_chopper *chop, GQueue *sessions, struct call_monologu || (flags->opmode == OP_OFFER && flags->rtcp_mux_require))) { - 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"); + 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"); ps_rtcp = NULL; } else if (ps_rtcp && !flags->ice_force_relay) { - 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"); + 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"); + } } } else diff --git a/utils/rtpengine-ng-client b/utils/rtpengine-ng-client index 8d80a91c4..b99dd6025 100755 --- a/utils/rtpengine-ng-client +++ b/utils/rtpengine-ng-client @@ -21,6 +21,7 @@ GetOptions( 'protocol=s' => \$options{'transport protocol'}, 'trust-address' => \$options{'trust address'}, 'sip-source-address' => \$options{'sip source address'}, + 'no-rtcp-attribute' => \$options{'no rtcp attribute'}, 'symmetric' => \$options{'symmetric'}, 'asymmetric' => \$options{'asymmetric'}, 'replace-origin' => \$options{'replace-origin'}, @@ -55,7 +56,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')) { +for my $x (split(/,/, 'trust address,symmetric,asymmetric,force,strict source,media handover,sip source address,reset,port latching,no rtcp attribute')) { defined($options{$x}) and push(@{$packet{flags}}, $x); } for my $x (split(/,/, 'origin,session connection')) {