From 82d20b5aa245dd2ec07f86be25c1ca160d9de6ab Mon Sep 17 00:00:00 2001
From: Richard Fuchs <rfuchs@sipwise.com>
Date: Thu, 26 Jan 2023 11:44:24 -0500
Subject: [PATCH] MT#56469 refactor ng-client flags options

Use a single list to track which flags are allowed and possible.

Change-Id: I51c50b118ae3100aa6083e1782b9aa53efd6f614
---
 utils/rtpengine-ng-client | 86 ++++++++++++++++++++++-----------------
 1 file changed, 48 insertions(+), 38 deletions(-)

diff --git a/utils/rtpengine-ng-client b/utils/rtpengine-ng-client
index 013138fcd..976d0a611 100755
--- a/utils/rtpengine-ng-client
+++ b/utils/rtpengine-ng-client
@@ -11,7 +11,46 @@ use NGCP::Rtpengine;
 
 my %options = ('proxy-address' => 'localhost', 'proxy-port' => 2223);
 
-GetOptions(
+my @flags = qw(
+	trust-address
+	symmetric
+	asymmetric
+	unidirectional
+	force
+	strict-source
+	media-handover
+	sip-source-address
+	reset
+	port-latching
+	no-rtcp-attribute
+	full-rtcp-attribute
+	loop-protect
+	record-call
+	always-transcode
+	SIPREC
+	pad-crypto
+	generate-mid
+	fragment
+	original-sendrecv
+	symmetric-codecs
+	asymmetric-codecs
+	inject-DTMF
+	detect-DTMF
+	generate-RTCP
+	single-codec
+	no-codec-renegotiation
+	pierce-NAT
+	SIP-source-address
+	allow-transcoding
+	trickle-ICE
+	reject-ICE
+	egress
+	no-jitter-buffer
+	passthrough
+	no-passthrough
+);
+
+my %getopt = (
 	'json'				=> \$options{'json'},
 	'proxy-address=s'		=> \$options{'proxy-address'},
 	'proxy-port=s'			=> \$options{'proxy-port'},
@@ -20,13 +59,6 @@ GetOptions(
 	'call-id=s'			=> \$options{'call-id'},
 	'via-branch=s'			=> \$options{'via-branch'},
 	'protocol=s'			=> \$options{'transport protocol'},
-	'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'},
-	'unidirectional'		=> \$options{'unidirectional'},
 	'replace-origin'		=> \$options{'replace-origin'},
 	'replace-session-connection'	=> \$options{'replace-session connection'},
 	'replace-sdp-version'		=> \$options{'replace-sdp version'},
@@ -43,16 +75,9 @@ GetOptions(
 	'rtcp-mux=s@'			=> \$options{'rtcp-mux'},
 	'address-family=s'		=> \$options{'address family'},
 	'direction=s'			=> \$options{'direction'},
-	'force'				=> \$options{'force'},
 	'v|verbose'			=> \$options{'verbose'},
-	'strict-source'			=> \$options{'strict source'},
-	'media-handover'		=> \$options{'media handover'},
 	'TOS=i'				=> \$options{'TOS'},
 	'delete-delay=i'		=> \$options{'delete-delay'},
-	'reset'				=> \$options{'reset'},
-	'port-latching'			=> \$options{'port latching'},
-	'loop-protect'			=> \$options{'loop protect'},
-	'record-call'			=> \$options{'record call'},
 	'media-address=s'		=> \$options{'media address'},
 	'codec-strip=s@'		=> \$options{'codec-strip'},
 	'codec-offer=s@'		=> \$options{'codec-offer'},
@@ -68,17 +93,9 @@ GetOptions(
 	'flags=s@'			=> \$options{'flags'},
 	'supports=s@'			=> \$options{'supports'},
 	'xmlrpc-callback=s'		=> \$options{'xmlrpc-callback'},
-	'always-transcode'		=> \$options{'always transcode'},
 	'metadata=s'			=> \$options{'metadata'},
 	'all=s'				=> \$options{'all'},
-	'siprec'			=> \$options{'SIPREC'},
-	'SIPREC'			=> \$options{'SIPREC'},
-	'egress'			=> \$options{'egress'},
 	'address=s'			=> \$options{'address'},
-	'pad-crypto'			=> \$options{'pad crypto'},
-	'generate-mid'			=> \$options{'generate mid'},
-	'fragment'			=> \$options{'fragment'},
-	'original-sendrecv'		=> \$options{'original sendrecv'},
 	'file=s'			=> \$options{'file'},
 	'blob=s'			=> \$options{'blob'},
 	'blob-file=s'			=> \$options{'blob-file'},
@@ -87,22 +104,9 @@ GetOptions(
 	'code=s'			=> \$options{'code'},
 	'OSRTP=s@'			=> \$options{'OSRTP'},
 	'received-from=s@'		=> \$options{'received-from'},
-	'SIP-source-address'		=> \$options{'SIP-source-address'},
-	'symmetric-codecs'		=> \$options{'symmetric codecs'},
-	'asymmetric-codecs'		=> \$options{'asymmetric codecs'},
-	'inject-DTMF'			=> \$options{'inject DTMF'},
-	'detect-DTMF'			=> \$options{'detect DTMF'},
 	'DTLS-fingerprint=s'		=> \$options{'DTLS-fingerprint'},
 	'ICE-lite=s'			=> \$options{'ICE-lite'},
-	'no-jitter-buffer'  		=> \$options{'no jitter buffer'},
-	'generate-RTCP'			=> \$options{'generate RTCP'},
-	'single-codec'			=> \$options{'single codec'},
-	'allow-transcoding'		=> \$options{'allow transcoding'},
-	'no-codec-renegotiation'	=> \$options{'no codec renegotiation'},
 	'media-echo=s'			=> \$options{'media echo'},
-	'pierce-NAT'			=> \$options{'pierce NAT'},
-	'trickle-ICE'			=> \$options{'trickle ICE'},
-	'reject-ICE'			=> \$options{'reject ICE'},
 	'label=s'			=> \$options{'label'},
 	'set-label=s'			=> \$options{'set-label'},
 	'from-label=s'			=> \$options{'from-label'},
@@ -121,7 +125,13 @@ GetOptions(
 	'trigger-end-digits=i'		=> \$options{'trigger-end-digits'},
 	'trigger-end-time=i'		=> \$options{'trigger-end-time'},
 	'DTMF-delay=i'			=> \$options{'DTMF-delay'},
-) or die;
+);
+
+for my $flag (@flags) {
+	$getopt{$flag} = \$options{$flag};
+}
+
+GetOptions(%getopt) or die;
 
 my $cmd = shift(@ARGV) or die;
 
@@ -140,7 +150,7 @@ for my $x (split(/,/, 'from-tag,to-tag,call-id,transport protocol,media address,
 for my $x (split(/,/, 'TOS,delete-delay,delay-buffer,volume,trigger-end-time,trigger-end-digits,DTMF-delay,ptime,db-id')) {
 	defined($options{$x}) and $packet{$x} = $options{$x};
 }
-for my $x (split(/,/, 'trust address,symmetric,asymmetric,unidirectional,force,strict source,media handover,sip source address,reset,port latching,no rtcp attribute,full rtcp attribute,loop protect,record call,always transcode,SIPREC,pad crypto,generate mid,fragment,original sendrecv,symmetric codecs,asymmetric codecs,inject DTMF,detect DTMF,generate RTCP,single codec,no codec renegotiation,pierce NAT,SIP-source-address,allow transcoding,trickle ICE,reject ICE,egress')) {
+for my $x (@flags) {
 	defined($options{$x}) and push(@{$packet{flags}}, $x);
 }
 for my $x (split(/,/, 'origin,session connection,sdp version,username,session-name,zero-address,force increment sdp version')) {