MT#55283 fix up AMR tests

These tests are not run by default and have fallen into disrepair. Make
them pass again.

Change-Id: Idb243ac93c5de41cb7233afba74aadf953e0b186
pull/1918/head
Richard Fuchs 3 months ago
parent 605b497108
commit ab46127594

@ -14,8 +14,8 @@ autotest_start(qw(--config-file=none -t -1 -i 203.0.113.1 -i 2001:db8:4321::1
or die;
#my $amr_tests = $ENV{RTPENGINE_EXTENDED_TESTS};
my $amr_tests = 0;
my $amr_tests = $ENV{RTPENGINE_EXTENDED_TESTS};
#my $amr_tests = 0;
@ -85,7 +85,7 @@ Time::HiRes::usleep(20000); # 20 ms
snd($sock_a, $port_b, rtp(96, 2001, 4240, 0x5678, "\xf0\x1c\xe0\x92\x30\xf3\xf4\xff\x3d\x23\xdb\x6b\x59\x4f\xd5\x12\xad\xff\x5b\xf8\x88\x53\x85\x74\x19\x6d\x65\x63\x6e\x94\xbb\x5b\x9f\x7d\x97\x3c\x28\xe8"));
($ssrc) = rcv($sock_b, $port_a, rtpm(8, 2000, 4000, -1, "\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\xd5\x55\xd4\xd4\xd7\xd4\xd7\xd5\xd0\x52\x72\x64\x66\x66\x66\x66\x67\x67\x67\x65\x7a\x79\x7c\x72\x70\x77\x75\x4e\x43\x47\x5b\x5c\x5d\x55\x5d\x71\x7e\x7b\x79\x7e\x7c\x7d\x73\x70\x77\x4b\x4c\x45\xc1\xf0\xf1\xfd\xf8\xfa\xe5\xe7\xe6\xe6\xe1\xe6\xe0\xe0\xe1\xe0\xe3\xe2\xe2\xe2\xed\xec\xef\xec\xec\xec\xed\xe2\xe3\xe3\xe1\xe1\xe7\xe7\xe7\xe5\xe5\xfa\xfa\xfb\xfb\xfb\xff\xfc\xf2\xf3\xf1\xf6\xf7\xf4\xf5\xcb\xce\xcd\xc3\xc1\xc7\xd8\xd9\xdf\xdc\xd3\xd3\xd7\x54\x51\x53\x5c\x5c\x5f\x5e\x58\x5a\x44"));
snd($sock_a, $port_b, rtp(96, 2002, 4560, 0x5678, "\xf0\x1c\x41\x42\x00\xd9\xd7\x64\x3c\xb0\x51\xe7\x1f\x95\x56\x3b\x34\x76\x35\x73\x46\x32\x16\x72\x67\xc4\x54\x16\x02\x64\x30\x36\x34\x18\xba\x14\xce\xd8"));
rcv($sock_b, $port_a, rtpm(8, 2001, 4160, $ssrc, "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x74\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x53\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8"));
rcv($sock_b, $port_a, rtpm(8, 2001, 4160, $ssrc, "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x74\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x53\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8", "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x75\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x50\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8"));
snd($sock_a, $port_b, rtp(96, 2003, 4880, 0x5678, "\xf0\x1c\x41\x46\x30\xff\xf7\xfc\x31\x15\x57\x3b\x0a\x1e\x44\xcd\x5e\x0e\xa7\xe4\x3a\x1b\xb5\x7b\x38\x2a\x90\x13\x08\xf3\x5f\xaa\xba\x57\xb0\x30\xd3\xe8"));
rcv($sock_b, $port_a, rtpm(8, 2002, 4320, $ssrc, "\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xde\xde\xde\xde\xde\xde\xde\xdf\xdf\xdf\xdf\xdf\xdf\xdc\xdc\xdc\xdc\xdd\xdd\xdd\xdd\xd2\xd2\xd2\xd2\xd2\xd2\xd3\xd3\xd3\xd3\xd3\xd0\xd0\xd0\xd0\xd0\xd0\xd1\xd1\xd1\xd1\xd1\xd6\xd6\xd6\xd6\xd6\xd6\xd6\xd6\xd7\xd7\xd7\xd7\xd7\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54"));
# no snd, trigger DTX
@ -159,7 +159,7 @@ Time::HiRes::usleep(20000); # 20 ms
snd($sock_a, $port_b, rtp(96, 2001, 4240, 0x5678, "\xf0\x1c\xe0\x92\x30\xf3\xf4\xff\x3d\x23\xdb\x6b\x59\x4f\xd5\x12\xad\xff\x5b\xf8\x88\x53\x85\x74\x19\x6d\x65\x63\x6e\x94\xbb\x5b\x9f\x7d\x97\x3c\x28\xe8"));
($ssrc) = rcv($sock_b, $port_a, rtpm(8, 2000, 4000, -1, "\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\xd5\x55\xd4\xd4\xd7\xd4\xd7\xd5\xd0\x52\x72\x64\x66\x66\x66\x66\x67\x67\x67\x65\x7a\x79\x7c\x72\x70\x77\x75\x4e\x43\x47\x5b\x5c\x5d\x55\x5d\x71\x7e\x7b\x79\x7e\x7c\x7d\x73\x70\x77\x4b\x4c\x45\xc1\xf0\xf1\xfd\xf8\xfa\xe5\xe7\xe6\xe6\xe1\xe6\xe0\xe0\xe1\xe0\xe3\xe2\xe2\xe2\xed\xec\xef\xec\xec\xec\xed\xe2\xe3\xe3\xe1\xe1\xe7\xe7\xe7\xe5\xe5\xfa\xfa\xfb\xfb\xfb\xff\xfc\xf2\xf3\xf1\xf6\xf7\xf4\xf5\xcb\xce\xcd\xc3\xc1\xc7\xd8\xd9\xdf\xdc\xd3\xd3\xd7\x54\x51\x53\x5c\x5c\x5f\x5e\x58\x5a\x44"));
snd($sock_a, $port_b, rtp(96, 2002, 4560, 0x5678, "\xf0\x1c\x41\x42\x00\xd9\xd7\x64\x3c\xb0\x51\xe7\x1f\x95\x56\x3b\x34\x76\x35\x73\x46\x32\x16\x72\x67\xc4\x54\x16\x02\x64\x30\x36\x34\x18\xba\x14\xce\xd8"));
rcv($sock_b, $port_a, rtpm(8, 2001, 4160, $ssrc, "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x74\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x53\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8"));
rcv($sock_b, $port_a, rtpm(8, 2001, 4160, $ssrc, "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x74\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x53\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8", "\x47\x47\x40\x43\x4c\x4f\x48\x49\x4f\x4d\x42\x42\x42\x43\x41\x41\x41\x40\x40\x40\x43\x4d\x4f\x49\x48\x75\x75\x74\x77\x77\x76\x76\x76\x76\x76\x71\x71\x70\x70\x70\x70\x70\x73\x72\x73\x72\x72\x72\x72\x73\x70\x70\x71\x71\x71\x71\x76\x76\x76\x77\x77\x77\x74\x74\x74\x75\x75\x4a\x4b\x48\x48\x4b\x4b\x4b\x48\x48\x48\x49\x49\x49\x49\x4f\x4f\x4c\x4c\x4d\x43\x40\x41\x46\x47\x45\x5a\x5b\x58\x59\x5e\x5f\x5c\x5d\x52\x52\x53\x53\x53\x53\x53\x53\x53\x50\x50\x50\x50\x51\x51\x51\x56\x56\x57\x54\x54\xd5\xd5\xd4\xd7\xd7\xd6\xd1\xd0\xd0\xd3\xd2\xdd\xdd\xdc\xdf\xdf\xde\xde\xd9\xd9\xd9\xd9\xd9\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8\xd8"));
snd($sock_a, $port_b, rtp(96, 2003, 4880, 0x5678, "\xf0\x1c\x41\x46\x30\xff\xf7\xfc\x31\x15\x57\x3b\x0a\x1e\x44\xcd\x5e\x0e\xa7\xe4\x3a\x1b\xb5\x7b\x38\x2a\x90\x13\x08\xf3\x5f\xaa\xba\x57\xb0\x30\xd3\xe8"));
rcv($sock_b, $port_a, rtpm(8, 2002, 4320, $ssrc, "\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xd9\xde\xde\xde\xde\xde\xde\xde\xdf\xdf\xdf\xdf\xdf\xdf\xdc\xdc\xdc\xdc\xdd\xdd\xdd\xdd\xd2\xd2\xd2\xd2\xd2\xd2\xd3\xd3\xd3\xd3\xd3\xd0\xd0\xd0\xd0\xd0\xd0\xd1\xd1\xd1\xd1\xd1\xd6\xd6\xd6\xd6\xd6\xd6\xd6\xd6\xd7\xd7\xd7\xd7\xd7\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd4\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54\x54"));
# no snd, trigger DTX
@ -170,7 +170,7 @@ rcv($sock_b, $port_a, rtpm(8, 2005, 4800, $ssrc, "\x55\x55\x55\x55\xd5\x55\x55\x
snd($sock_a, $port_b, rtp(96, 2004, 5200, 0x5678, "\xf0\x1c\x41\x46\x30\xff\xf7\xfc\x31\x15\x57\x3b\x0a\x1e\x44\xcd\x5e\x0e\xa7\xe4\x3a\x1b\xb5\x7b\x38\x2a\x90\x13\x08\xf3\x5f\xaa\xba\x57\xb0\x30\xd3\xe8"));
rcv($sock_b, $port_a, rtpm(8, 2006, 4960, $ssrc, "\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"));
snd($sock_a, $port_b, rtp(96, 2005, 5520, 0x5678, "\xf0\x1c\x41\x46\x30\xff\xf7\xfc\x31\x15\x57\x3b\x0a\x1e\x44\xcd\x5e\x0e\xa7\xe4\x3a\x1b\xb5\x7b\x38\x2a\x90\x13\x08\xf3\x5f\xaa\xba\x57\xb0\x30\xd3\xe8"));
rcv($sock_b, $port_a, rtpm(8, 2007, 5120, $ssrc, "\xd5\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\x55\xd5\xd5\x55\xd5\x55\x55\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\xd5\xd5\xd5\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\xd5\xd5\x55\x55"));
rcv($sock_b, $port_a, rtpm(8, 2007, 5120, $ssrc, "\xd5\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\x55\xd5\xd5\x55\xd5\x55\x55\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\xd5\xd5\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\xd5\xd5\xd5\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\xd5\xd5\xd5\x55\x55", "\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\xd5\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\xd5\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\xd5\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55\x55"));
@ -214,7 +214,7 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.10
s=tester
t=0 0
m=audio PORT RTP/AVP 9 97 108 8 101 96
m=audio PORT RTP/AVP 9 97 108 8 96 101
c=IN IP4 203.0.113.1
a=rtpmap:9 G722/8000
a=rtpmap:97 AMR-WB/16000
@ -222,10 +222,10 @@ a=fmtp:97 mode-set=0,1,2;mode-change-period=2;mode-change-capability=2
a=rtpmap:108 AMR/8000
a=fmtp:108 mode-set=7
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/16000
a=fmtp:101 0-15
a=rtpmap:96 telephone-event/8000
a=fmtp:96 0-15
a=rtpmap:101 telephone-event/16000
a=fmtp:101 0-15
a=sendrecv
a=rtcp:PORT
a=ptime:20
@ -252,11 +252,11 @@ s=tester
t=0 0
m=audio PORT RTP/AVP 111 101
c=IN IP4 203.0.113.1
a=silenceSupp:off - - - -
a=rtpmap:111 AMR-WB/16000
a=fmtp:111 mode-set=0,1,2; mode-change-period=2; mode-change-capability=2
a=rtpmap:101 telephone-event/16000
a=fmtp:101 0-15
a=silenceSupp:off - - - -
a=sendrecv
a=rtcp:PORT
a=ptime:20
@ -290,7 +290,7 @@ rcv($sock_b, $port_a, rtpm(96, 8, 960, $ssrc, "\x01\x87\x02\x80"));
Time::HiRes::usleep(10000); # 10 ms
# audio
snd($sock_a, $port_b, rtp(111, 9, 2560, 0x5678, "\xf0\x44\x0c\x00\x0a\x07\x41\x71\xa0\xf8\xc1\x54\x3c\x00\x00\x00\x00\x20"));
rcv($sock_b, $port_a, rtpm(9, 9, 1600, $ssrc, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
rcv($sock_b, $port_a, rtpm(9, 9, 1600, $ssrc, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7", "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xfb\xda\x7b\xb6\xb8\x9f\xf0\x34\xdd\x78\xbb\x9f\xfb\xf8\x38\x76\xfb\xb8\xfa\xde\xfa\x7a\x7a\xfa\xba\x7a\xde\xf7\xf8\xfa\x74\xf8\xf7\xde\xb3\xba\x7a\x5e\x78\xb5\x78\xf8\xfa\xb7\x5e\xf8\xb7\xf8\x78\x77\xfa\x9e\xf7\x78\xf2\x9c\x78\xb8\x7a\xfa\x7a\xde\xf4\xf4\xb5\xfa\x7a\x5c\xf7\x78\xb7\xb8\xfa\x5b\xf8\x78\xf7\xf3\xf8\x9e\xde\x73\x5e\xb5\xb8\xef\x5f\xdf\xf4\xdf\xb8\x7b\x74\x78\xbb\x9f\xf8\x5f\x78\xb3\xf8\x76\xdf\x9f\xf8\x7b\xf8\xf8\xf1\xb6\xdf\xdf\x78\x78\xfa\xb5\xb1\xf8\x5c\x7b\x7b\x9f\xb8\xf5\xf3\xdf\x78\xf8\xf8\xf8\x7a\xfa\x9e\xba\x75\x78\xba\xf8\x78\x7a\xde\xb7\xde\xf1\xfa\xfa\xf8\xf8\xf8\x5e\xf4"));
# reverse flow
snd($sock_b, $port_a, rtp(9, 100, 7000, 0x9876, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
@ -330,20 +330,20 @@ Time::HiRes::usleep(9000);
# more audio
snd($sock_b, $port_a, rtp(9, 108, 7960, 0x9876, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(111, 108, 8920, $ssrc, "\xf1\x50\x42\x86\xbe\xb7\x49\xe3\x7c\x53\x43\x18\x47\xe1\x6c\x71\xa2\xf6\x76\x20\xcd\x3f\x1f\x7a\x9e\x17\x06\xdc\x72\xf4\xf4\x5f\x7a"));
rcv($sock_a, $port_b, rtpm(111, 108, 8920, $ssrc, "\xf1\x50\x42\x86\xbe\xb7\x49\xe3\x7c\x53\x43\x18\x47\xe1\x6c\x71\xa2\xf6\x76\x20\xcd\x3f\x1f\x7a\x9e\x17\x06\xdc\x72\xf4\xf4\x5f\x7a", "\xf1\x50\x48\x7c\x22\x20\x80\x00\xcd\x74\xa2\x2d\x11\x43\x52\x01\xbe\x17\x02\x01\x6b\x25\x5a\x46\x03\x06\x35\x43\x00\x32\xf5\x5d\x12"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(9, 109, 8120, 0x9876, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(111, 109, 9240, $ssrc, "\xf1\x58\x43\x82\x36\x15\x27\x26\xb5\x6a\xfb\x25\xc1\x21\x4c\x69\xe5\x76\x06\x4a\xe0\x6e\x9a\xbe\x9c\x87\x52\x8c\xf7\x67\xe5\xa7\xf6"));
rcv($sock_a, $port_b, rtpm(111, 109, 9240, $ssrc, "\xf1\x58\x43\x82\x36\x15\x27\x26\xb5\x6a\xfb\x25\xc1\x21\x4c\x69\xe5\x76\x06\x4a\xe0\x6e\x9a\xbe\x9c\x87\x52\x8c\xf7\x67\xe5\xa7\xf6", "\xf1\x50\x11\x80\x0c\xcd\x33\xc8\x58\x5f\xca\xe0\x34\xf9\xb6\xc4\x1e\x80\x80\x11\x90\x01\x83\x02\x08\x81\x01\x05\x98\x80\x01\x09\x16"));
# more DTMF
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 110, 8280, 0x9876, "\x01\x07\x00\xa0"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(101, 110, 9560, $ssrc, "\x01\x07\x01\x40"));
rcv($sock_a, $port_b, rtpm(111, 110, 9560, $ssrc, "\xf1\x51\x41\x51\x59\x4c\x14\xe2\x95\x09\x0a\x1a\x05\x2c\xdc\xc9\xa2\x63\x71\x29\xdc\xc2\x6d\xff\xb2\x41\x77\xdd\xb4\x67\x5f\xd7\xb4"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 111, 8280, 0x9876, "\x01\x07\x01\x40"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(101, 111, 9560, $ssrc, "\x01\x07\x02\x80"));
rcv($sock_a, $port_b, rtpm(111, 111, 9880, $ssrc, "\xf1\x58\x43\x02\x1c\x1c\x85\x3a\x34\x8a\x7b\x93\xa1\x16\xac\xe1\xa4\x76\x66\x00\xed\x7f\x9f\xce\x9e\x87\x96\xec\xfa\x65\xec\xe7\x7a"));
@ -383,16 +383,16 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.10
s=tester
t=0 0
m=audio PORT RTP/AVP 96 8 101 97
m=audio PORT RTP/AVP 96 8 97 101
c=IN IP4 203.0.113.1
a=silenceSupp:off - - - -
a=rtpmap:96 AMR-WB/16000
a=fmtp:96 mode-set=0,1,2;mode-change-period=2;mode-change-capability=2
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=rtpmap:97 telephone-event/16000
a=fmtp:97 0-15
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=silenceSupp:off - - - -
a=sendrecv
a=rtcp:PORT
a=rtcp-mux
@ -417,10 +417,9 @@ v=0
o=- 1545997027 1 IN IP4 198.51.100.10
s=tester
t=0 0
m=audio PORT RTP/AVP 9 8 101
m=audio PORT RTP/AVP 9 101
c=IN IP4 203.0.113.1
a=rtpmap:9 G722/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-16
a=sendrecv
@ -500,32 +499,32 @@ Time::HiRes::usleep(9000);
# some audio
snd($sock_b, $port_a, rtp(96, 9, 2880, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 9, 1920, $ssrc, "\xb8\xf8\xfa\x9e\xf4\xfa\xf7\xfa\xf7\xf8\xde\xf7\xb8\x7a\xba\xf7\x9b\xec\xfb\xb8\xfa\x78\xf8\xdc\x75\x9e\xb3\xf8\xde\xf8\xf5\xfa\x5e\xf3\xb8\xdf\xb8\xf5\xde\x78\xf5\xf5\xf8\xb3\xdf\xb6\xdf\xdf\xfb\x78\xbb\xfa\xba\xf8\xf8\x7a\xde\xfa\xba\xb5\x75\xf8\xf5\xdc\xfa\xf8\xb8\x78\xba\xfa\xfa\x5e\xf4\xba\x77\xfa\xfa\xba\xf7\xdb\x74\xb7\xf8\x78\xde\xb4\xf5\xf3\x5e\xba\x59\xf3\xfb\xdc\xb8\xf5\x71\xdc\xf8\xfb\xb8\xdf\xf5\xf8\xb5\x76\x9c\xdf\xf4\xdc\x3b\xb8\xf8\xd9\xfa\xf8\xf3\x5f\x7b\xb8\xfa\xfa\xdc\xb5\x78\xf5\xfa\xfa\x78\xba\xde\xfa\xb8\xf8\x77\xf8\xb8\x5e\x7a\xb7\xfa\xf7\x7a\x74\xba\xde\xf4\xdb\xb3\x73\xfb\x74\x9c\xf8\x5f\xb8\xfa\xf8\x78\xfa"));
rcv($sock_a, $port_b, rtpm(9, 9, 1920, $ssrc, "\xb8\xf8\xfa\x9e\xf4\xfa\xf7\xfa\xf7\xf8\xde\xf7\xb8\x7a\xba\xf7\x9b\xec\xfb\xb8\xfa\x78\xf8\xdc\x75\x9e\xb3\xf8\xde\xf8\xf5\xfa\x5e\xf3\xb8\xdf\xb8\xf5\xde\x78\xf5\xf5\xf8\xb3\xdf\xb6\xdf\xdf\xfb\x78\xbb\xfa\xba\xf8\xf8\x7a\xde\xfa\xba\xb5\x75\xf8\xf5\xdc\xfa\xf8\xb8\x78\xba\xfa\xfa\x5e\xf4\xba\x77\xfa\xfa\xba\xf7\xdb\x74\xb7\xf8\x78\xde\xb4\xf5\xf3\x5e\xba\x59\xf3\xfb\xdc\xb8\xf5\x71\xdc\xf8\xfb\xb8\xdf\xf5\xf8\xb5\x76\x9c\xdf\xf4\xdc\x3b\xb8\xf8\xd9\xfa\xf8\xf3\x5f\x7b\xb8\xfa\xfa\xdc\xb5\x78\xf5\xfa\xfa\x78\xba\xde\xfa\xb8\xf8\x77\xf8\xb8\x5e\x7a\xb7\xfa\xf7\x7a\x74\xba\xde\xf4\xdb\xb3\x73\xfb\x74\x9c\xf8\x5f\xb8\xfa\xf8\x78\xfa", "\xb8\xf8\xfa\x9e\xf4\xfa\xf7\xfa\xf7\xf8\xde\x77\xba\xba\x7a\xba\x9e\xb7\x77\x5e\x72\x7a\xba\xde\xba\x7a\xfa\xfa\x7a\x7a\x9e\xf7\xfa\xba\xfa\x7a\x1e\xb4\xf7\xde\xf2\x7a\xfa\x5b\xf2\x9e\xf5\xb5\x75\x78\x7a\xde\xb5\xfa\xfa\x7a\x5e\xb3\xde\xf3\x7a\x9c\xfa\xf8\x75\xfa\xb5\x75\x78\xba\xf8\xf8\x5e\xb5\xf8\xf8\x7a\xf8\xf5\x9c\x78\x78\xf7\xb8\xba\x5e\x74\xf7\xba\x7a\xde\xf4\xba\x7a\x5e\xf4\xf2\x99\x78\xf8\xb3\x5c\x5e\xf3\x9f\xf8\xf8\xf3\x5c\xfb\xf8\xdf\xf5\x78\xb3\xdf\xf8\xb8\x5f\x78\xb8\xb5\xfa\xf8\xde\xf5\x7a\xf8\x7a\xb8\xf5\x9e\xf8\x78\xf5\xf8\x5e\xb8\xb8\xf4\xfa\xfa\x7a\x5e\xb7\x9b\xf1\x75\x78\xb5\x7a\xfa\x97\xf6\xf8\x78\xf4\xf8\xf6\xd8"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 10, 3200, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 10, 2080, $ssrc, "\x9c\x7a\xb5\xf5\xf5\x7a\xf5\xf8\x78\x9c\xba\xf5\x78\xf8\xfa\x7a\xba\xf4\x7a\x9b\xf1\xf3\x7b\xda\xf8\xfb\xbb\x78\xba\xf3\x5f\x9c\x78\xf5\xf4\xf8\xf6\xdc\x9c\xdc\x78\xf5\xf5\xb0\xf8\xfb\xdc\x5a\xb6\x7b\xb8\xf4\xb4\xfb\x5a\xf6\x5d\xf8\xb6\xb8\x74\x5a\xb4\xd8\x79\x74\xb9\xf4\xdd\xf9\x79\xdf\xf6\xfb\xf6\x5f\xfb\xbb\x9f\x7b\xf6\xfb\xfb\xdf\x5f\xb8\xfb\xf3\xb8\x7b\xdc\xf8\x78\x9e\xf5\xb5\x74\x9f\xf8\x7b\xfa\x7a\xde\xb3\xdc\xfa\x75\xb6\x7b\xda\xf6\xfb\xdf\x7b\x9f\xf3\xfb\xf8\x5c\xb6\xf6\xdf\xdf\xb8\xf6\xfb\xfb\xfb\x7a\x9c\xfa\xfa\xb8\xf5\x75\xb3\xfb\xdc\x1f\xb3\xfb\xdf\xf6\x7b\xbb\xdc\x75\xfb\xfb\x7a\xb8\xf8\x9e\xf5\x7a\xf5\x7a\xfa\xf8\x9c"));
rcv($sock_a, $port_b, rtpm(9, 10, 2080, $ssrc, "\x9c\x7a\xb5\xf5\xf5\x7a\xf5\xf8\x78\x9c\xba\xf5\x78\xf8\xfa\x7a\xba\xf4\x7a\x9b\xf1\xf3\x7b\xda\xf8\xfb\xbb\x78\xba\xf3\x5f\x9c\x78\xf5\xf4\xf8\xf6\xdc\x9c\xdc\x78\xf5\xf5\xb0\xf8\xfb\xdc\x5a\xb6\x7b\xb8\xf4\xb4\xfb\x5a\xf6\x5d\xf8\xb6\xb8\x74\x5a\xb4\xd8\x79\x74\xb9\xf4\xdd\xf9\x79\xdf\xf6\xfb\xf6\x5f\xfb\xbb\x9f\x7b\xf6\xfb\xfb\xdf\x5f\xb8\xfb\xf3\xb8\x7b\xdc\xf8\x78\x9e\xf5\xb5\x74\x9f\xf8\x7b\xfa\x7a\xde\xb3\xdc\xfa\x75\xb6\x7b\xda\xf6\xfb\xdf\x7b\x9f\xf3\xfb\xf8\x5c\xb6\xf6\xdf\xdf\xb8\xf6\xfb\xfb\xfb\x7a\x9c\xfa\xfa\xb8\xf5\x75\xb3\xfb\xdc\x1f\xb3\xfb\xdf\xf6\x7b\xbb\xdc\x75\xfb\xfb\x7a\xb8\xf8\x9e\xf5\x7a\xf5\x7a\xfa\xf8\x9c", "\xbb\x5f\xf6\xf8\xf8\x72\xdf\x9c\xdf\xf6\xfb\x9f\x74\xb6\xdf\xdf\x76\x7b\xdc\xbb\xb4\xf8\xdf\x76\x38\x9f\xf8\xf8\xf5\xf8\xf5\x75\xb8\xfb\xde\xfa\xf5\xf3\x7b\x9f\x7b\xdf\xb8\xf5\xb3\x78\x7b\xbb\xda\x78\xf6\xf6\xdf\xf8\x76\x9a\xfb\x7b\xf6\xb6\xdc\xf8\x7b\xfb\xdc\xb8\xf1\xf8\x5f\xf8\xb8\x78\xb5\xb6\xfb\x5a\x7b\xf8\x78\xb5\xb4\xf6\xd8\xdf\x78\x76\xf6\xb8\xfb\xdf\x7b\x5f\xb8\xb3\x7b\xfb\xf8\xf8\x7b\x9e\x78\x75\xf5\xb4\xb8\x7b\xdc\x7a\xfa\x78\x78\xb8\xf5\xb8\x78\xfa\xde\xfa\xf2\xf8\x78\x5e\xf5\xba\xb5\xf8\xf8\x7a\x1c\xf7\xba\xf5\xba\x7a\xfa\xdb\x78\xf4\xf5\x75\xf8\xba\x95\x78\xf5\xb5\xf3\x7b\x5c\xd8\xbb\xf8\xf4\xb2\x7b\xfb\xd8\xdf\x7b\xf8"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 11, 3520, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 11, 2240, $ssrc, "\xdc\xfa\xf5\x78\xf8\xba\xfa\xba\x77\x9b\xf3\xf8\xf3\x78\xfa\x9e\xfa\xf5\x5e\xb5\xf5\x71\xbb\xfb\x7b\xd6\xb2\x5f\xfb\xb9\x76\xdf\xdf\x74\xbb\xdf\xf8\x78\x9f\xf8\x76\xbb\x5f\xb8\xf8\x78\x7a\xde\xf1\x78\x9e\xf8\xfa\xb5\xde\x75\x75\xfa\xf5\xf8\x75\x9f\xb3\xda\xf4\x36\xdd\x79\x9f\xf4\xf8\xfb\xf8\x7b\x78\xfb\xbb\xde\xb5\xf8\x7a\x75\xf8\xf8\xde\xb5\xf8\xf3\xfb\x5c\x5e\xf5\xb6\xdf\xb2\xfb\xf8\xdc\xdc\x7b\xf8\xf5\xb6\x9f\xf6\xdc\x78\xf8\xb8\xf5\xfa\xf8\x9e\x5e\xfa\xb5\xf5\xf8\x3a\xba\xfa\xde\x7a\xba\x74\x78\xfa\xba\xfa\xde\xf2\x5c\xf5\x78\xf8\xb8\xba\xde\x34\xf7\xf8\xfa\xba\x5e\xb2\xde\x73\x5e\xf5\xf5\xf8\xf3\xbb\x7b\x5c\xb8\xfa\x5e\xf5\xf5"));
rcv($sock_a, $port_b, rtpm(9, 11, 2240, $ssrc, "\xdc\xfa\xf5\x78\xf8\xba\xfa\xba\x77\x9b\xf3\xf8\xf3\x78\xfa\x9e\xfa\xf5\x5e\xb5\xf5\x71\xbb\xfb\x7b\xd6\xb2\x5f\xfb\xb9\x76\xdf\xdf\x74\xbb\xdf\xf8\x78\x9f\xf8\x76\xbb\x5f\xb8\xf8\x78\x7a\xde\xf1\x78\x9e\xf8\xfa\xb5\xde\x75\x75\xfa\xf5\xf8\x75\x9f\xb3\xda\xf4\x36\xdd\x79\x9f\xf4\xf8\xfb\xf8\x7b\x78\xfb\xbb\xde\xb5\xf8\x7a\x75\xf8\xf8\xde\xb5\xf8\xf3\xfb\x5c\x5e\xf5\xb6\xdf\xb2\xfb\xf8\xdc\xdc\x7b\xf8\xf5\xb6\x9f\xf6\xdc\x78\xf8\xb8\xf5\xfa\xf8\x9e\x5e\xfa\xb5\xf5\xf8\x3a\xba\xfa\xde\x7a\xba\x74\x78\xfa\xba\xfa\xde\xf2\x5c\xf5\x78\xf8\xb8\xba\xde\x34\xf7\xf8\xfa\xba\x5e\xb2\xde\x73\x5e\xf5\xf5\xf8\xf3\xbb\x7b\x5c\xb8\xfa\x5e\xf5\xf5", "\xf2\xf4\xf9\x9f\x9d\xfb\xdc\x76\xf6\xf3\xdd\x5d\xb9\x9d\x7b\xfb\xf8\xf6\x1f\xf6\x9f\xbb\xfb\xdf\x78\x76\xbb\xf8\xfb\xde\xfa\xfa\xfa\xfa\x7a\x5e\xb8\xb8\xf4\x75\xf3\xf8\x5e\x78\x9e\xb5\xf5\xf3\xf6\x5a\x7b\xf8\xfb\xb8\xb6\x76\x98\x7b\x1f\xf8\xf6\xbb\xf8\xf8\xf8\x5e\xf8\xf5\x75\xf6\xdf\xbb\x78\xfa\xb8\xde\xf8\xf5\x75\x73\xf8\xb8\x9f\xfa\xdc\x38\xb3\x74\xdc\xf8\xf8\x9e\x78\xf3\x78\xfb\xfb\x3a\xd9\xf8\xb5\xf6\xfb\xbb\xfa\x59\x7a\xf8\xb3\xfb\xf8\x78\xde\x5e\xb8\xf5\xf8\xf3\xf8\xf8\x5c\x9e\x75\xf5\xb6\xb8\xf8\xfb\xdc\x5e\x75\x75\xf6\xbb\xbb\xde\xde\xf5\xf8\x35\xf5\xf6\x9f\xdf\xb6\x5f\x78\xf8\xf8\xf8\x7a\x9e\x75\xfa\xb8\x78\xf8\xf5\xfa\xdc"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 12, 3840, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 12, 2400, $ssrc, "\xf8\xf8\xf8\xf5\x7a\xdc\xb5\xb5\x71\xfb\x9f\x78\xf2\x7b\x9a\xf6\xbb\x7b\x5c\xf8\xf4\x78\xb6\xdc\xf8\xdc\xf8\x78\x9e\xf1\x76\xbb\xdc\xf8\xf8\x7a\xde\xf8\xba\xf5\x75\xb8\x78\x9e\xfa\x78\xf8\xba\xf8\x73\xdc\xb5\x7a\xde\xf5\xf8\xf3\xfa\xde\xb5\x78\xdc\xb3\xfb\x7b\xf8\x9e\xde\xfa\xf8\x35\xf3\xf8\xfa\x9c\xba\xfa\x5e\xf3\x78\x5e\xb8\xb8\xf5\x5e\xf8\x75\x75\xb8\xfa\xba\x7a\xde\x78\xb5\xf5\xf1\x7b\xde\xf8\xf8\xba\xfa\xf8\xde\x78\xf8\xb7\xf5\xf5\x5e\x9e\xb8\x5c\x75\xf3\xf3\xdc\xda\xb6\xfb\x78\xdc\xb4\xf6\x5f\xf8\x9f\xf6\xdf\x76\x7b\x9f\xf8\x9e\xf1\xf8\xdf\x36\xf6\xfb\x9a\xf8\xf8\xf6\xf6\x38\xdf\xfb\x9f\xbb\xf8\xf5\x32\xfb\xdf\xdf\x9f\xf8\xf8"));
rcv($sock_a, $port_b, rtpm(9, 12, 2400, $ssrc, "\xf8\xf8\xf8\xf5\x7a\xdc\xb5\xb5\x71\xfb\x9f\x78\xf2\x7b\x9a\xf6\xbb\x7b\x5c\xf8\xf4\x78\xb6\xdc\xf8\xdc\xf8\x78\x9e\xf1\x76\xbb\xdc\xf8\xf8\x7a\xde\xf8\xba\xf5\x75\xb8\x78\x9e\xfa\x78\xf8\xba\xf8\x73\xdc\xb5\x7a\xde\xf5\xf8\xf3\xfa\xde\xb5\x78\xdc\xb3\xfb\x7b\xf8\x9e\xde\xfa\xf8\x35\xf3\xf8\xfa\x9c\xba\xfa\x5e\xf3\x78\x5e\xb8\xb8\xf5\x5e\xf8\x75\x75\xb8\xfa\xba\x7a\xde\x78\xb5\xf5\xf1\x7b\xde\xf8\xf8\xba\xfa\xf8\xde\x78\xf8\xb7\xf5\xf5\x5e\x9e\xb8\x5c\x75\xf3\xf3\xdc\xda\xb6\xfb\x78\xdc\xb4\xf6\x5f\xf8\x9f\xf6\xdf\x76\x7b\x9f\xf8\x9e\xf1\xf8\xdf\x36\xf6\xfb\x9a\xf8\xf8\xf6\xf6\x38\xdf\xfb\x9f\xbb\xf8\xf5\x32\xfb\xdf\xdf\x9f\xf8\xf8", "\x78\x77\xba\x9e\x77\xf3\x9c\x78\xfa\xf5\xde\x75\x35\xf8\xba\xfa\xb5\x5e\xf8\x7a\xfa\xb8\x78\xf4\x5e\xf4\xf8\xb8\xf7\x5c\xf8\xba\x7a\xf7\xde\xf4\x77\xfa\xba\xfa\x77\xdb\xb5\xb8\xf5\xf8\xf8\x78\x5c\xfa\xb7\xfa\xf7\xde\xb0\x5e\xf8\xfa\x1e\xf5\xb5\xb5\x78\xf5\xfa\xd9\x78\xf5\xf8\xb5\x75\xf8\xdc\xba\xfa\xfa\xde\x71\x7a\x9e\xfa\xf8\xf8\xf8\xf8\xb8\xf7\xde\xf8\xb7\x7a\x7a\xb7\xfa\x9e\xf7\xfa\x7a\xd8\xf2\xba\x75\xfa\x9c\xfa\x5e\xb8\xf1\xf3\x78\xfa\x9c\x59\xfa\x73\xb6\xf8\xf6\x5f\x5a\xb8\xf6\xb8\xf8\xf0\xf9\x1c\xdf\xf8\xfb\xfb\xf6\xb6\xdc\xdf\xf8\x5f\x78\x75\xb2\x9f\xf8\xb8\x5f\xfb\xdf\x75\x74\xf8\xb6\x9f\x7b\xdf\x78\x78\xba\xb5\xf5\xf5\xfb"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 13, 4160, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 13, 2560, $ssrc, "\x78\x78\x75\xf8\x9e\xde\xb3\xfa\x78\x5e\xf8\xf8\xf8\xf8\xba\xfa\x5e\x72\xde\xb8\xf8\xf5\xf8\xde\x75\x9e\xf8\x75\xb8\xf8\xf7\xba\x5e\xf7\xfa\xfa\x7a\xde\xba\xf7\xfa\x9e\x74\xb4\x74\x7a\x7a\x9b\xba\x74\xf5\xf8\x75\xf3\xdc\xf8\xf8\xde\xb5\xf8\x73\xdf\xb5\x7b\xde\xf8\xde\xf5\xba\xf8\x78\xb8\xfa\xde\xf8\x78\xb7\x7a\xb7\xfa\x5e\xba\xfa\xfa\x5b\xba\x74\xf4\xf5\xf8\xfa\xfa\x9e\x74\xba\x7a\x74\xf4\xba\xfa\xfa\xdb\x74\xf5\xf8\xf8\xf5\xb8\xde\xf8\x77\xde\xba\x7a\x9e\xba\xf2\x5e\x5e\xb4\xf5\xf5\xde\xb5\x75\xf5\xf8\xfa\x78\x9c\xf5\x5c\xf8\xb5\xf5\xf3\xfb\x7b\x5c\xba\xde\xb8\xf5\x78\xb3\xfb\x78\xdc\x9e\x78\xb8\x71\xba\x75\x5c\xf8\xde\xf8\xf3\xdf"));
rcv($sock_a, $port_b, rtpm(9, 13, 2560, $ssrc, "\x78\x78\x75\xf8\x9e\xde\xb3\xfa\x78\x5e\xf8\xf8\xf8\xf8\xba\xfa\x5e\x72\xde\xb8\xf8\xf5\xf8\xde\x75\x9e\xf8\x75\xb8\xf8\xf7\xba\x5e\xf7\xfa\xfa\x7a\xde\xba\xf7\xfa\x9e\x74\xb4\x74\x7a\x7a\x9b\xba\x74\xf5\xf8\x75\xf3\xdc\xf8\xf8\xde\xb5\xf8\x73\xdf\xb5\x7b\xde\xf8\xde\xf5\xba\xf8\x78\xb8\xfa\xde\xf8\x78\xb7\x7a\xb7\xfa\x5e\xba\xfa\xfa\x5b\xba\x74\xf4\xf5\xf8\xfa\xfa\x9e\x74\xba\x7a\x74\xf4\xba\xfa\xfa\xdb\x74\xf5\xf8\xf8\xf5\xb8\xde\xf8\x77\xde\xba\x7a\x9e\xba\xf2\x5e\x5e\xb4\xf5\xf5\xde\xb5\x75\xf5\xf8\xfa\x78\x9c\xf5\x5c\xf8\xb5\xf5\xf3\xfb\x7b\x5c\xba\xde\xb8\xf5\x78\xb3\xfb\x78\xdc\x9e\x78\xb8\x71\xba\x75\x5c\xf8\xde\xf8\xf3\xdf", "\x76\x5f\xfb\xfa\xde\xb8\xf8\xf3\xdf\x78\x75\xf8\xb5\xdf\xb8\x78\xb5\x6f\xdf\xb6\x5a\xf6\xb9\x7b\xfb\xdd\x7b\xf8\xdc\xf8\xf2\xbb\x58\xb6\xf9\xdf\x78\x74\xbb\x5a\xb6\xfb\xfb\xb8\x38\xb6\x5a\xfb\xf8\xfb\xf6\x5f\xb4\x78\xdc\xf8\xf8\x78\xf8\xf1\xf6\xf8\xf8\x9c\x5a\xb8\xf6\xf8\xfb\x5f\xb6\xdc\xfb\xdf\xf1\xf4\x78\xf8\xb6\xdc\x58\xbb\xf8\xf2\x9f\xfb\xfb\x5f\xf6\xdf\x5f\xb4\xf6\xbb\xda\xf6\xf6\xdf\x7b\x78\xbb\xdc\xb4\xf8\xbb\x78\xfb\x5f\xf8\xb5\x7b\xba\xfa\xd5\xdc\x78\xb0\x76\xdc\xb6\xf8\x78\xdc\xdc\xf4\xf4\xf4\xf6\xfb\xda\x5f\xdf\xb4\xf4\xb3\xf3\x9d\x5b\xdf\xbb\x79\xb3\xf5\xdf\xf7\xfb\x5f\xdd\xb7\xf7\xfb\x77\xb9\x79\xdb\xb5\xf9\x5f\xf5\xb7"));
Time::HiRes::usleep(9000);
snd($sock_b, $port_a, rtp(96, 14, 4480, 0x6543, "\xf1\x70\xcc\x2c\xb0\xbe\x3c\x2b\x21\x51\x80\x0c\x35\xf1\xf0\xef\xf5\x4c\x56\xe1\xad\x13\x8f\x83\x6a\xad\x1f\x1a\xec\x90\x25\x17\x36"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(9, 14, 2720, $ssrc, "\xfa\xdc\xf5\x7a\xfa\xba\xf8\xb8\x75\xdc\xf8\xf8\xf3\x7a\xf8\xfa\x9c\xb5\x7a\x9e\xf1\xf5\x75\xdf\x75\x9f\xb8\xf5\x9f\xf5\x36\xfb\xdf\xf8\xb8\xfa\xde\x78\xde\xf5\x78\xb5\xf5\xb8\xf8\x78\x7a\x5c\xb8\xf5\xfa\xf8\xfa\x7a\x7a\xde\xb2\xde\xb5\xf5\x75\x7a\xfa\x9e\xfa\x78\xfa\xfa\x9e\xf4\x77\xde\xb7\xf8\xf5\xf5\xf5\xfa\xfa\xde\x38\xb8\xfa\xf7\xde\xb7\xf8\x7a\xde\xf7\xfa\xb7\xb5\x78\xf8\xdc\x77\xf8\xb7\xf8\xfa\x77\xd9\x7a\xfa\xba\xb7\xf5\xf3\xd7\x5a\xf6\xb8\xdf\xf8\xad\xf9\x5a\x5a\xb6\xbb\x79\xf3\xf7\xdf\xdd\xdf\xfb\xfb\xb6\x76\xdd\xbb\xdd\x79\x9f\xb6\x76\x79\xb9\xf9\x7b\xd8\xfb\xf3\xb6\x5d\xfb\xf9\x5f\xbb\x74\xb4\x7b\x5d\xfb\xdf\xfb\xfb\xf8"));
rcv($sock_a, $port_b, rtpm(9, 14, 2720, $ssrc, "\xfa\xdc\xf5\x7a\xfa\xba\xf8\xb8\x75\xdc\xf8\xf8\xf3\x7a\xf8\xfa\x9c\xb5\x7a\x9e\xf1\xf5\x75\xdf\x75\x9f\xb8\xf5\x9f\xf5\x36\xfb\xdf\xf8\xb8\xfa\xde\x78\xde\xf5\x78\xb5\xf5\xb8\xf8\x78\x7a\x5c\xb8\xf5\xfa\xf8\xfa\x7a\x7a\xde\xb2\xde\xb5\xf5\x75\x7a\xfa\x9e\xfa\x78\xfa\xfa\x9e\xf4\x77\xde\xb7\xf8\xf5\xf5\xf5\xfa\xfa\xde\x38\xb8\xfa\xf7\xde\xb7\xf8\x7a\xde\xf7\xfa\xb7\xb5\x78\xf8\xdc\x77\xf8\xb7\xf8\xfa\x77\xd9\x7a\xfa\xba\xb7\xf5\xf3\xd7\x5a\xf6\xb8\xdf\xf8\xad\xf9\x5a\x5a\xb6\xbb\x79\xf3\xf7\xdf\xdd\xdf\xfb\xfb\xb6\x76\xdd\xbb\xdd\x79\x9f\xb6\x76\x79\xb9\xf9\x7b\xd8\xfb\xf3\xb6\x5d\xfb\xf9\x5f\xbb\x74\xb4\x7b\x5d\xfb\xdf\xfb\xfb\xf8", "\x5f\x9f\xf5\x79\xdf\xdd\xf5\xf9\x73\xbb\xf9\xf9\x9f\xfb\x5f\x73\xbb\xf5\x79\xbb\xfb\xdf\xf6\xdf\x75\xfb\xb7\x5f\x9f\xf6\x5f\xb6\x73\xf7\xfb\xb9\xdf\x5f\x9f\x75\x77\xfb\xf7\xb9\xf7\xdf\xf7\xdd\xf9\x75\xf9\xf7\x9f\xf5\xf9\xfb\xf9\xfb\xbb\xfb\x79\xfb\xbb\x9a\xf6\x76\xdf\xf3\xbb\x7b\xdf\xfb\xb9\x7b\xfb\xf9\xf8\xfb\xb8\xdf\x74\xfb\xbb\xf8\xda\xb8\xf6\xf8\x74\xdc\xf6\x9f\xb6\xfb\xfb\xf8\x36\xbb\xfb\xfb\x9e\x7a\xfa\x7a\xde\xf5\x73\x9c\xf3\xdc\x7b\xfb\xfb\x5f\x9e\xb3\xf8\xfb\x1c\xf5\xf8\xfb\xde\xb5\xf5\xf6\x7b\xf8\x74\x9a\xf6\xdc\xb6\xf6\x38\xf8\xb8\x5f\x76\xbb\xdf\xf6\xf8\x7b\xf4\xfb\x5f\x9f\xb8\xf8\x78\x71\xfb\x78\xd9\xb6\xdc\xf8\x70\xdc"));
Time::HiRes::usleep(9000);
# more DTMF
snd($sock_b, $port_a, rtp(97, 15, 4800, 0x6543, "\x02\x07\x01\x40"));
Time::HiRes::usleep(9000);
rcv($sock_a, $port_b, rtpm(101, 15, 2880, $ssrc, "\x02\x07\x00\xa0"));
rcv($sock_a, $port_b, rtpm(9, 15, 2880, $ssrc, "\x7b\xf8\xb8\xdc\xb5\x78\xf6\xfb\x76\xdc\xbb\xba\x7a\x7a\xdc\xb3\xfb\xf8\x5e\xb8\xf5\xf5\xf5\x7b\x5e\x9c\xf1\x78\xdf\xb6\x74\xbb\xdf\xf8\xf8\xfa\xde\x73\xdf\xf6\x78\xb8\xf8\xba\xf8\xde\x75\xde\xb3\x76\xfb\xfb\xdf\xb8\xde\xf5\x71\xf8\xf8\xf6\x38\xda\xb8\xbb\xf6\xf8\xfb\x34\xdf\xdc\x74\xb8\xbb\xf8\xf5\x78\xfa\x7a\xba\xde\x78\xf8\xb8\x75\x7a\xfa\xfa\x5e\xf7\x9e\xf7\xf5\xf3\xb8\xf8\x5e\x75\xba\x9e\xf8\xf3\xf5\x5f\xf8\xf8\xfa\xfa\xba\xfa\xdc\x3a\xf8\xde\xfa\x9e\xb2\xfa\xfa\x1e\xf7\xf5\xfa\x9e\xb2\xf8\x78\x5e\x78\xf5\xfa\xb8\xfa\xfa\xde\x77\x7a\xba\xfa\xfa\xf7\xde\xf4\xf7\x1b\xb1\xb5\x78\xde\xfa\xf8\xfa\x75\xba\xf8\x5c\xf8\xfa\xde\x70\xfa"));
Time::HiRes::usleep(9000);
# reverse flow
@ -566,20 +565,20 @@ Time::HiRes::usleep(9000);
# more audio
snd($sock_a, $port_b, rtp(9, 108, 7960, 0x9876, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
Time::HiRes::usleep(9000);
rcv($sock_b, $port_a, rtpm(96, 108, 8920, $ssrc, "\xf1\x50\x42\x86\xbe\xb7\x49\xe3\x7c\x53\x43\x18\x47\xe1\x6c\x71\xa2\xf6\x76\x20\xcd\x3f\x1f\x7a\x9e\x17\x06\xdc\x72\xf4\xf4\x5f\x7a"));
rcv($sock_b, $port_a, rtpm(96, 108, 8920, $ssrc, "\xf1\x50\x42\x86\xbe\xb7\x49\xe3\x7c\x53\x43\x18\x47\xe1\x6c\x71\xa2\xf6\x76\x20\xcd\x3f\x1f\x7a\x9e\x17\x06\xdc\x72\xf4\xf4\x5f\x7a", "\xf1\x50\x48\x7c\x22\x20\x80\x00\xcd\x74\xa2\x2d\x11\x43\x52\x01\xbe\x17\x02\x01\x6b\x25\x5a\x46\x03\x06\x35\x43\x00\x32\xf5\x5d\x12"));
Time::HiRes::usleep(9000);
snd($sock_a, $port_b, rtp(9, 109, 8120, 0x9876, "\xfb\xb8\xde\xde\x71\xb6\xfb\xdf\xf6\xf8\x9a\xfb\xf4\xf4\x78\xf6\x9f\x5f\xb8\xbb\xfb\x78\xf8\xfa\xfa\xb8\xfa\xfa\xf8\x7a\x5e\xb4\xb8\xfa\xb7\x5e\xec\x78\xf8\xba\xde\x78\xba\xde\x78\x73\xde\xb8\xf5\xb5\x7a\xde\xf1\x70\xf6\xdf\xdf\x9f\xfb\xb8\x74\xf6\x76\xdf\xdc\xb8\xdc\x9f\x70\x74\x76\xdf\xdf\x9f\xb8\xfb\x78\x74\xf6\xfb\xdc\xb2\xdc\xdc\x5f\xf4\xf2\xfb\xdd\xb9\xf8\xfb\x9f\xdc\x7b\xb6\xfb\xf8\xf8\x9e\xfa\x78\xdc\xf5\xb8\x75\xb5\xfa\x5c\xf5\xf5\x9f\xf8\xf5\xf5\x76\x9c\x70\x96\xdf\xf9\x76\xf6\xb9\x73\x9b\x7b\xdf\xfb\xf4\xf4\xf7\x9d\xdd\x59\xf7\x77\xb5\xf9\xf9\xb9\xfb\xd9\x77\xf5\xf9\xf7\xb9\xf7\xdd\xdf\xf7\xb9\xf7\x9d\x5f\xf7\xf9\xf9\xf7"));
Time::HiRes::usleep(9000);
rcv($sock_b, $port_a, rtpm(96, 109, 9240, $ssrc, "\xf1\x58\x43\x82\x36\x15\x27\x26\xb5\x6a\xfb\x25\xc1\x21\x4c\x69\xe5\x76\x06\x4a\xe0\x6e\x9a\xbe\x9c\x87\x52\x8c\xf7\x67\xe5\xa7\xf6"));
rcv($sock_b, $port_a, rtpm(96, 109, 9240, $ssrc, "\xf1\x58\x43\x82\x36\x15\x27\x26\xb5\x6a\xfb\x25\xc1\x21\x4c\x69\xe5\x76\x06\x4a\xe0\x6e\x9a\xbe\x9c\x87\x52\x8c\xf7\x67\xe5\xa7\xf6", "\xf1\x50\x11\x80\x0c\xcd\x33\xc8\x58\x5f\xca\xe0\x34\xf9\xb6\xc4\x1e\x80\x80\x11\x90\x01\x83\x02\x08\x81\x01\x05\x98\x80\x01\x09\x16"));
# more DTMF
Time::HiRes::usleep(9000);
snd($sock_a, $port_b, rtp(101, 110, 8280, 0x9876, "\x01\x07\x00\xa0"));
Time::HiRes::usleep(9000);
rcv($sock_b, $port_a, rtpm(97, 110, 9560, $ssrc, "\x01\x07\x01\x40"));
rcv($sock_b, $port_a, rtpm(96, 110, 9560, $ssrc, "\xf1\x51\x41\x51\x59\x4c\x14\xe2\x95\x09\x0a\x1a\x05\x2c\xdc\xc9\xa2\x63\x71\x29\xdc\xc2\x6d\xff\xb2\x41\x77\xdd\xb4\x67\x5f\xd7\xb4"));
Time::HiRes::usleep(9000);
snd($sock_a, $port_b, rtp(101, 111, 8280, 0x9876, "\x01\x07\x01\x40"));
Time::HiRes::usleep(9000);
rcv($sock_b, $port_a, rtpm(97, 111, 9560, $ssrc, "\x01\x07\x02\x80"));
rcv($sock_b, $port_a, rtpm(96, 111, 9880, $ssrc, "\xf1\x58\x43\x02\x1c\x1c\x85\x3a\x34\x8a\x7b\x93\xa1\x16\xac\xe1\xa4\x76\x66\x00\xed\x7f\x9f\xce\x9e\x87\x96\xec\xfa\x65\xec\xe7\x7a"));
@ -782,4 +781,5 @@ rtpe_req('delete', 'G.711 DTX ptime change', { 'from-tag' => ft() });
#done_testing;NGCP::Rtpengine::AutoTest::terminate('f00');exit;
done_testing();

Loading…
Cancel
Save