|
|
@ -6,6 +6,7 @@ use NGCP::Rtpengine::Test; |
|
|
use NGCP::Rtpclient::SRTP; |
|
|
use NGCP::Rtpclient::SRTP; |
|
|
use NGCP::Rtpengine::AutoTest; |
|
|
use NGCP::Rtpengine::AutoTest; |
|
|
use Test::More; |
|
|
use Test::More; |
|
|
|
|
|
use Test2::Tools::Compare qw(); |
|
|
use NGCP::Rtpclient::ICE; |
|
|
use NGCP::Rtpclient::ICE; |
|
|
use POSIX; |
|
|
use POSIX; |
|
|
|
|
|
|
|
|
@ -82,6 +83,586 @@ sub stun_succ { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
new_call; |
|
|
|
|
|
|
|
|
|
|
|
offer('unsolicited to-tag', { }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 3000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
answer('unsolicited to-tag', { }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 4000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
my $old_tt = tt(); |
|
|
|
|
|
new_tt; |
|
|
|
|
|
|
|
|
|
|
|
answer('unsolicited to-tag', { }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 4000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
$resp = rtpe_req('query', 'unsolicited to-tag w/ via-branch', { }); |
|
|
|
|
|
Test2::Tools::Compare::like($resp, { |
|
|
|
|
|
'result' => 'ok', |
|
|
|
|
|
'last redis update' => '0', |
|
|
|
|
|
'SSRC' => {}, |
|
|
|
|
|
'last signal' => qr//, |
|
|
|
|
|
'tags' => { |
|
|
|
|
|
ft() => { |
|
|
|
|
|
'tag' => ft(), |
|
|
|
|
|
'subscriptions' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'type' => 'offer/answer', |
|
|
|
|
|
'tag' => tt() |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'medias' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'index' => '1', |
|
|
|
|
|
'streams' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3000' |
|
|
|
|
|
}, |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '3000', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr// |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3001' |
|
|
|
|
|
}, |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTCP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3001' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'local port' => qr/^\d*$/ |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'protocol' => 'RTP/AVP', |
|
|
|
|
|
'type' => 'audio', |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'initialized', |
|
|
|
|
|
'send', |
|
|
|
|
|
'recv' |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'VSC' => [], |
|
|
|
|
|
'subscribers' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'tag' => tt(), |
|
|
|
|
|
'type' => 'offer/answer' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'created' => qr// |
|
|
|
|
|
}, |
|
|
|
|
|
tt() => { |
|
|
|
|
|
'tag' => tt(), |
|
|
|
|
|
'medias' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'streams' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'port' => '4000', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '4000', |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1' |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '4001', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTCP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'port' => '4001', |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4' |
|
|
|
|
|
}, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'protocol' => 'RTP/AVP', |
|
|
|
|
|
'index' => '1', |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'initialized', |
|
|
|
|
|
'send', |
|
|
|
|
|
'recv', |
|
|
|
|
|
'ICE controlling' |
|
|
|
|
|
], |
|
|
|
|
|
'type' => 'audio' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'created' => qr//, |
|
|
|
|
|
'tag-aliases' => [ |
|
|
|
|
|
$old_tt, |
|
|
|
|
|
], |
|
|
|
|
|
'VSC' => [], |
|
|
|
|
|
'subscriptions' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'type' => 'offer/answer', |
|
|
|
|
|
'tag' => ft() |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'subscribers' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'tag' => ft(), |
|
|
|
|
|
'type' => 'offer/answer' |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
'totals' => { |
|
|
|
|
|
'RTCP' => { |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'RTP' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
'created_us' => qr//, |
|
|
|
|
|
'created' => qr// |
|
|
|
|
|
}, "query result matches"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
new_call; |
|
|
|
|
|
|
|
|
|
|
|
offer('unsolicited to-tag w/ via-branch', { 'via-branch' => 'foobar' }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 3000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
answer('unsolicited to-tag w/ via-branch', { 'via-branch' => 'foobar' }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 4000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
$old_tt = tt(); |
|
|
|
|
|
new_tt; |
|
|
|
|
|
|
|
|
|
|
|
answer('unsolicited to-tag w/ via-branch', { 'via-branch' => 'foobar' }, <<SDP); |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
c=IN IP4 198.51.100.1 |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio 4000 RTP/AVP 0 |
|
|
|
|
|
----------------------------------- |
|
|
|
|
|
v=0 |
|
|
|
|
|
o=- 1545997027 1 IN IP4 198.51.100.23 |
|
|
|
|
|
s=tester |
|
|
|
|
|
t=0 0 |
|
|
|
|
|
m=audio PORT RTP/AVP 0 |
|
|
|
|
|
c=IN IP4 203.0.113.1 |
|
|
|
|
|
a=rtpmap:0 PCMU/8000 |
|
|
|
|
|
a=sendrecv |
|
|
|
|
|
a=rtcp:PORT |
|
|
|
|
|
SDP |
|
|
|
|
|
|
|
|
|
|
|
$resp = rtpe_req('query', 'unsolicited to-tag w/ via-branch', { }); |
|
|
|
|
|
Test2::Tools::Compare::like($resp, { |
|
|
|
|
|
'result' => 'ok', |
|
|
|
|
|
'last redis update' => '0', |
|
|
|
|
|
'SSRC' => {}, |
|
|
|
|
|
'last signal' => qr//, |
|
|
|
|
|
'tags' => { |
|
|
|
|
|
ft() => { |
|
|
|
|
|
'tag' => ft(), |
|
|
|
|
|
'subscriptions' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'type' => 'offer/answer', |
|
|
|
|
|
'tag' => tt() |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'medias' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'index' => '1', |
|
|
|
|
|
'streams' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3000' |
|
|
|
|
|
}, |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '3000', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr// |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3001' |
|
|
|
|
|
}, |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTCP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'port' => '3001' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'local port' => qr/^\d*$/ |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'protocol' => 'RTP/AVP', |
|
|
|
|
|
'type' => 'audio', |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'initialized', |
|
|
|
|
|
'send', |
|
|
|
|
|
'recv' |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'VSC' => [], |
|
|
|
|
|
'subscribers' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'tag' => tt(), |
|
|
|
|
|
'type' => 'offer/answer' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'created' => qr// |
|
|
|
|
|
}, |
|
|
|
|
|
tt() => { |
|
|
|
|
|
'tag' => tt(), |
|
|
|
|
|
'medias' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'streams' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'port' => '4000', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '4000', |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1' |
|
|
|
|
|
}, |
|
|
|
|
|
{ |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'local address' => '203.0.113.1', |
|
|
|
|
|
'last kernel packet' => '0', |
|
|
|
|
|
'stats' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'last packet' => qr//, |
|
|
|
|
|
'endpoint' => { |
|
|
|
|
|
'port' => '4001', |
|
|
|
|
|
'family' => 'IPv4', |
|
|
|
|
|
'address' => '198.51.100.1' |
|
|
|
|
|
}, |
|
|
|
|
|
'local port' => qr/^\d*$/, |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'RTCP', |
|
|
|
|
|
'filled' |
|
|
|
|
|
], |
|
|
|
|
|
'ingress SSRCs' => [], |
|
|
|
|
|
'advertised endpoint' => { |
|
|
|
|
|
'port' => '4001', |
|
|
|
|
|
'address' => '198.51.100.1', |
|
|
|
|
|
'family' => 'IPv4' |
|
|
|
|
|
}, |
|
|
|
|
|
'egress SSRCs' => [], |
|
|
|
|
|
'last user packet' => qr//, |
|
|
|
|
|
'stats_out' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'errors' => '0' |
|
|
|
|
|
} |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'protocol' => 'RTP/AVP', |
|
|
|
|
|
'index' => '1', |
|
|
|
|
|
'flags' => [ |
|
|
|
|
|
'initialized', |
|
|
|
|
|
'send', |
|
|
|
|
|
'recv', |
|
|
|
|
|
'ICE controlling' |
|
|
|
|
|
], |
|
|
|
|
|
'type' => 'audio' |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'created' => qr//, |
|
|
|
|
|
'tag-aliases' => [ |
|
|
|
|
|
$old_tt, |
|
|
|
|
|
], |
|
|
|
|
|
'VSC' => [], |
|
|
|
|
|
'subscriptions' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'type' => 'offer/answer', |
|
|
|
|
|
'tag' => ft() |
|
|
|
|
|
} |
|
|
|
|
|
], |
|
|
|
|
|
'subscribers' => [ |
|
|
|
|
|
{ |
|
|
|
|
|
'tag' => ft(), |
|
|
|
|
|
'type' => 'offer/answer' |
|
|
|
|
|
} |
|
|
|
|
|
] |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
'totals' => { |
|
|
|
|
|
'RTCP' => { |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0', |
|
|
|
|
|
'bytes' => '0' |
|
|
|
|
|
}, |
|
|
|
|
|
'RTP' => { |
|
|
|
|
|
'bytes' => '0', |
|
|
|
|
|
'errors' => '0', |
|
|
|
|
|
'packets' => '0' |
|
|
|
|
|
} |
|
|
|
|
|
}, |
|
|
|
|
|
'created_us' => qr//, |
|
|
|
|
|
'created' => qr// |
|
|
|
|
|
}, "query result matches"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($ENV{RTPENGINE_MOS_TESTS}) { |
|
|
if ($ENV{RTPENGINE_MOS_TESTS}) { |
|
|
|
|
|
|
|
|
($sock_a, $sock_ax, $sock_b, $sock_bx) = new_call([qw(198.51.100.23 3000)], [qw(198.51.100.23 3001)], |
|
|
($sock_a, $sock_ax, $sock_b, $sock_bx) = new_call([qw(198.51.100.23 3000)], [qw(198.51.100.23 3001)], |
|
|
|