|
|
|
@ -18,7 +18,7 @@ use NGCP::Rtpclient::SRTP;
|
|
|
|
|
my ($NUM, $RUNTIME, $STREAMS, $PAYLOAD, $INTERVAL, $RTCP_INTERVAL, $STATS_INTERVAL)
|
|
|
|
|
= (1000, 30, 1, 160, 20, 5, 5);
|
|
|
|
|
my ($NODEL, $IP, $IPV6, $KEEPGOING, $REINVITES, $PROTOS, $DEST, $SUITES, $NOENC, $RTCPMUX, $BUNDLE, $LAZY,
|
|
|
|
|
$CHANGE_SSRC, $PORT_LATCHING, $RECORD);
|
|
|
|
|
$CHANGE_SSRC, $PORT_LATCHING, $RECORD, $DTMF);
|
|
|
|
|
GetOptions(
|
|
|
|
|
'no-delete' => \$NODEL,
|
|
|
|
|
'num-calls=i' => \$NUM,
|
|
|
|
@ -42,6 +42,7 @@ GetOptions(
|
|
|
|
|
'change-ssrc' => \$CHANGE_SSRC,
|
|
|
|
|
'port-latching' => \$PORT_LATCHING,
|
|
|
|
|
'record' => \$RECORD,
|
|
|
|
|
'dtmf' => \$DTMF,
|
|
|
|
|
) or die;
|
|
|
|
|
|
|
|
|
|
($IP || $IPV6) or die("at least one of --local-ip or --local-ipv6 must be given");
|
|
|
|
@ -314,9 +315,34 @@ sub rtp {
|
|
|
|
|
my $ssrc = $$ctx{ssrc} // ($$ctx{ssrc} = rand(2**32));
|
|
|
|
|
my $seq = $$ctx{rtp_seqnum};
|
|
|
|
|
defined($seq) or $seq = int(rand(0xfffe)) + 1;
|
|
|
|
|
my $hdr = pack("CCnNN", 0x80, 0x00, $seq, rand(2**32), $ssrc);
|
|
|
|
|
my $pack = $hdr . rand_str($PAYLOAD);
|
|
|
|
|
my ($hdr, $payload);
|
|
|
|
|
# don't do DTMF as first packet XXX should work
|
|
|
|
|
if ($$ctx{out_count} && ($$ctx{is_dtmf} || ($DTMF && rand() < 0.1))) {
|
|
|
|
|
# DTMF in progress or start it
|
|
|
|
|
if (!$$ctx{is_dtmf}) {
|
|
|
|
|
# start DTMF
|
|
|
|
|
$$ctx{is_dtmf} = 1;
|
|
|
|
|
}
|
|
|
|
|
# else: DTMF in progress
|
|
|
|
|
$hdr = pack("CCnNN", 0x80, 96, $seq, rand(2**32), $ssrc);
|
|
|
|
|
if (rand() < 0.2) {
|
|
|
|
|
# end DTMF
|
|
|
|
|
$$ctx{is_dtmf} = 0;
|
|
|
|
|
$payload = pack("CCN", rand(10), 0x80 | rand(50)+10, rand(2**16));
|
|
|
|
|
# XXX triple-send end packet
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
$payload = pack("CCN", rand(10), rand(50)+10, rand(2**16));
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else {
|
|
|
|
|
# random PCM
|
|
|
|
|
$hdr = pack("CCnNN", 0x80, 0, $seq, rand(2**32), $ssrc);
|
|
|
|
|
$payload = rand_str($PAYLOAD);
|
|
|
|
|
}
|
|
|
|
|
my $pack = $hdr . $payload;
|
|
|
|
|
$$ctx{rtp_seqnum} = (++$seq & 0xffff);
|
|
|
|
|
$$ctx{out_count}++;
|
|
|
|
|
return $pack;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
@ -636,11 +662,15 @@ SDP
|
|
|
|
|
my $cp = $p + 1;
|
|
|
|
|
$cp = $p if $$A{bundle} && $$A{want_rtcpmux} && $op eq 'offer';
|
|
|
|
|
|
|
|
|
|
$sdp .= "m=audio $p $$tr{name} 0 8 111";
|
|
|
|
|
$DTMF and $sdp .= ' 96';
|
|
|
|
|
$sdp .= "\n";
|
|
|
|
|
$sdp .= <<"SDP";
|
|
|
|
|
m=audio $p $$tr{name} 0 8 111
|
|
|
|
|
a=rtpmap:8 PCMA/8000
|
|
|
|
|
a=rtpmap:111 opus/48000/2
|
|
|
|
|
SDP
|
|
|
|
|
$DTMF and $sdp .= "a=rtpmap:96 telephone-event/8000\n";
|
|
|
|
|
|
|
|
|
|
if ($$A{want_rtcpmux} && $op eq 'offer') {
|
|
|
|
|
$sdp .= "a=rtcp-mux\n";
|
|
|
|
|
$sdp .= "a=rtcp:$cp\n";
|
|
|
|
|