diff --git a/perl/NGCP/Rtpengine/AutoTest.pm b/perl/NGCP/Rtpengine/AutoTest.pm index d7713bda9..4356d5f1f 100644 --- a/perl/NGCP/Rtpengine/AutoTest.pm +++ b/perl/NGCP/Rtpengine/AutoTest.pm @@ -237,11 +237,17 @@ sub rcv { } } if ($port == -1 && @matches) { - # this is actually wrong and uses the fake Unix domain socket address. - # translation should really be handled by the preloaded .so back to - # fake v4/v6 address. - $addr =~ /\]:(\d+)/s or die; - unshift(@matches, $1); + if (sockaddr_family($addr) == AF_INET) { + my @addr = unpack_sockaddr_in($addr) or die; + unshift(@matches, $addr[0], inet_ntoa($addr[1])); + } + elsif (sockaddr_family($addr) == AF_INET6) { + my @addr = unpack_sockaddr_in6($addr) or die; + unshift(@matches, $addr[0], inet_ntop(AF_INET6, $addr[1])); + } + else { + die; + } } return @matches; } diff --git a/t/auto-daemon-tests-evs.pl b/t/auto-daemon-tests-evs.pl index 3befcda80..73310be74 100755 --- a/t/auto-daemon-tests-evs.pl +++ b/t/auto-daemon-tests-evs.pl @@ -1635,7 +1635,7 @@ SDP $resp = rtpe_req('play media', 'media playback, HF only', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(126 | 0x80, -1, -1, -1, "\x01\xe2\xaa\xbf\x4b\xc3\xdc\x7d\x28\xb7\xbf\xdb\xf9\xb9\x8a\x33\xb3\x72\x32")); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(126 | 0x80, -1, -1, -1, "\x01\xe2\xaa\xbf\x4b\xc3\xdc\x7d\x28\xb7\xbf\xdb\xf9\xb9\x8a\x33\xb3\x72\x32")); rcv($sock_a, -1, rtpm(126, $seq + 1, $ts + 320 * 1, $ssrc, "\x01\xe1\xd9\xfe\x9e\x40\x00\x44\x38\x49\x41\xa5\x65\x15\xa2\x89\xa0\x5d\xc3")); rcv($sock_a, -1, rtpm(126, $seq + 2, $ts + 320 * 2, $ssrc, "\x01\xe1\x52\x19\x12\x54\x2a\xfb\x5a\x0f\x44\x8d\x72\xc8\xc6\x36\x13\x59\xc2")); rcv($sock_a, -1, rtpm(126, $seq + 3, $ts + 320 * 3, $ssrc, "\x01\xe1\x56\x91\xa2\x55\x55\x5b\xcf\x07\x36\x37\x26\xdd\x12\xb4\x7f\xc3\xc2")); @@ -1696,7 +1696,7 @@ SDP $resp = rtpe_req('play media', 'media playback, compact with zero padding', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(126 | 0x80, -1, -1, -1, "\xff\x01\xe2\xaa\xbf\x4b\xc3\xdc\x7d\x28\xb7\xbf\xdb\xf9\xb9\x8a\x33\xb3\x72\x32\x00")); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(126 | 0x80, -1, -1, -1, "\xff\x01\xe2\xaa\xbf\x4b\xc3\xdc\x7d\x28\xb7\xbf\xdb\xf9\xb9\x8a\x33\xb3\x72\x32\x00")); rcv($sock_a, -1, rtpm(126, $seq + 1, $ts + 320 * 1, $ssrc, "\xff\x01\xe1\xd9\xfe\x9e\x40\x00\x44\x38\x49\x41\xa5\x65\x15\xa2\x89\xa0\x5d\xc3\x00")); rcv($sock_a, -1, rtpm(126, $seq + 2, $ts + 320 * 2, $ssrc, "\xff\x01\xe1\x52\x19\x12\x54\x2a\xfb\x5a\x0f\x44\x8d\x72\xc8\xc6\x36\x13\x59\xc2\x00")); rcv($sock_a, -1, rtpm(126, $seq + 3, $ts + 320 * 3, $ssrc, "\xff\x01\xe1\x56\x91\xa2\x55\x55\x5b\xcf\x07\x36\x37\x26\xdd\x12\xb4\x7f\xc3\xc2\x00")); diff --git a/t/auto-daemon-tests-moh.pl b/t/auto-daemon-tests-moh.pl index 3435481e8..c3c4e581a 100644 --- a/t/auto-daemon-tests-moh.pl +++ b/t/auto-daemon-tests-moh.pl @@ -93,7 +93,7 @@ a=rtcp:PORT SDP # test received packets on the recepient side -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -228,7 +228,7 @@ a=rtcp:PORT SDP # test received packets on the recepient side -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -363,7 +363,7 @@ a=rtcp:PORT SDP # test received packets on the recepient side -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -498,7 +498,7 @@ a=rtcp:PORT SDP # test received packets on the recepient side -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -635,7 +635,7 @@ a=rtcp:PORT SDP # test received packets on the originator's side -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); diff --git a/t/auto-daemon-tests-player-cache.pl b/t/auto-daemon-tests-player-cache.pl index 1308f50b7..ff4e2ad4f 100755 --- a/t/auto-daemon-tests-player-cache.pl +++ b/t/auto-daemon-tests-player-cache.pl @@ -72,7 +72,7 @@ SDP $resp = rtpe_req('play media', 'media playback, opus', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(96 | 0x80, -1, -1, -1, "\x0c\x87\xfc\xe4\x56\x0a\xeb\x0d\x24\x7f\x78\xee\xce\xcb\x95\x2c\x61\x03\xfc\xf4\xdd\xe8\x08\x74\x04\x18\x8d\xb0\xb8\x2b\x3b\x99\x13\xb0\x1c\x9f\xed\x35\xd1\x8c\x92\xac\xc1\xde\xc4\x7a\x3e\x80")); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(96 | 0x80, -1, -1, -1, "\x0c\x87\xfc\xe4\x56\x0a\xeb\x0d\x24\x7f\x78\xee\xce\xcb\x95\x2c\x61\x03\xfc\xf4\xdd\xe8\x08\x74\x04\x18\x8d\xb0\xb8\x2b\x3b\x99\x13\xb0\x1c\x9f\xed\x35\xd1\x8c\x92\xac\xc1\xde\xc4\x7a\x3e\x80")); rcv($sock_a, -1, rtpm(96, $seq + 1, $ts + 960 * 1, $ssrc, "\x0c\x87\xff\xb6\xa5\x64\xf7\x07\x18\x5d\x50\x36\x1f\x82\x90\x9c\x83\xbd\x46\xc1\x43\xda\x5c\x18\x9e\x38\xcd\xd1\xf2\xcd\xc1\xaa\xf4\xe8\xe0")); rcv($sock_a, -1, rtpm(96, $seq + 2, $ts + 960 * 2, $ssrc, "\x0c\x88\x02\x73\x1d\x67\xea\xc9\xdd\x4f\x6c\x56\xb1\x30\x0a\x1d\x24\x12\x23\xa9\x6c\xe5\x96\x94\xe4\x59\xd4\xe0\x20")); rcv($sock_a, -1, rtpm(96, $seq + 3, $ts + 960 * 3, $ssrc, "\x0c\x88\x02\x70\xe2\xb8\x63\xcc\xbb\xa4\xab\x08\x28\xcf\xa7\x5d\x8d\x3e\xc2\x4d\x4d\x73\xc8\xba\xd8\xbd\xc8")); @@ -108,7 +108,7 @@ SDP $resp = rtpe_req('play media', 'media playback, offer only', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -165,7 +165,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side A', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -222,7 +222,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side A, repeat', { 'from-tag' => ft(), blob => $wav_file, 'repeat-times' => 2 }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -285,7 +285,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side B', { 'from-tag' => tt(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -296,7 +296,7 @@ is $resp->{duration}, 100, 'media duration'; $ts += 160 * 5; my $old_ts = $ts; -(undef, $ts) = rcv($sock_b, -1, rtpm(8 | 0x80, $seq + 5, -1, $ssrc, $pcma_1)); +(undef, undef, $ts) = rcv($sock_b, -1, rtpm(8 | 0x80, $seq + 5, -1, $ssrc, $pcma_1)); print("ts $ts old $old_ts\n"); SKIP: { skip 'random timestamp too close to margin', 2 if $old_ts < 500 or $old_ts > 4294966795; @@ -361,7 +361,7 @@ $resp = rtpe_req('play media', 'media playback, side A, select by label', { labe blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -419,7 +419,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side B, select by label', { label => 'meh', blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -496,7 +496,7 @@ my $srtp_ctx = { cs => $NGCP::Rtpclient::SRTP::crypto_suites{AES_CM_128_HMAC_SHA1_80}, key => 'DVM+BTeYX2UI1LaA9bgXrcBEDBxoItA9/39fSoRF', }; -(undef, $seq, $ts, $ssrc) = srtp_rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1), $srtp_ctx); +(undef, undef, $seq, $ts, $ssrc) = srtp_rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4), $srtp_ctx); @@ -665,7 +665,7 @@ $resp = rtpe_req('play media', 'media playback after delete', { 'from-tag' => tt blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); diff --git a/t/auto-daemon-tests.pl b/t/auto-daemon-tests.pl index 21fb5fbf1..186dc9fcb 100755 --- a/t/auto-daemon-tests.pl +++ b/t/auto-daemon-tests.pl @@ -15960,12 +15960,12 @@ SDP # send back RTP binding successes -snd($sock_a, $ret1[0], stun_succ($ret1[0], $ret1[1], 'bd5e845657ecb8d6dd8e1bc6')); -snd($sock_c, $ret2[0], stun_succ($ret2[0], $ret2[1], 'bd5e845657ecb8d6dd8e1bc6')); +snd($sock_a, $ret1[0], stun_succ($ret1[0], $ret1[2], 'bd5e845657ecb8d6dd8e1bc6')); +snd($sock_c, $ret2[0], stun_succ($ret2[0], $ret2[2], 'bd5e845657ecb8d6dd8e1bc6')); # send secondary RTCP binding success -snd($sock_d, $ret4[0], stun_succ($ret4[0], $ret4[1], 'bd5e845657ecb8d6dd8e1bc6')); +snd($sock_d, $ret4[0], stun_succ($ret4[0], $ret4[2], 'bd5e845657ecb8d6dd8e1bc6')); # now we should be getting DTLS @@ -21448,7 +21448,7 @@ SDP $resp = rtpe_req('play media', 'media playback, offer only', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21503,7 +21503,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side A', { 'from-tag' => ft(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21558,7 +21558,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side A, repeat', { 'from-tag' => ft(), blob => $wav_file, 'repeat-times' => 2 }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21618,7 +21618,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side B', { 'from-tag' => tt(), blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21629,7 +21629,7 @@ is $resp->{duration}, 100, 'media duration'; $ts += 160 * 5; my $old_ts = $ts; -(undef, $ts) = rcv($sock_b, -1, rtpm(8 | 0x80, $seq + 5, -1, $ssrc, $pcma_1)); +(undef, undef, $ts) = rcv($sock_b, -1, rtpm(8 | 0x80, $seq + 5, -1, $ssrc, $pcma_1)); print("ts $ts old $old_ts\n"); SKIP: { skip 'random timestamp too close to margin', 2 if $old_ts < 500 or $old_ts > 4294966795; @@ -21692,7 +21692,7 @@ $resp = rtpe_req('play media', 'media playback, side A, select by label', { labe blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21748,7 +21748,7 @@ SDP $resp = rtpe_req('play media', 'media playback, side B, select by label', { label => 'meh', blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); @@ -21823,7 +21823,7 @@ my $srtp_ctx = { cs => $NGCP::Rtpclient::SRTP::crypto_suites{AES_CM_128_HMAC_SHA1_80}, key => 'DVM+BTeYX2UI1LaA9bgXrcBEDBxoItA9/39fSoRF', }; -(undef, $seq, $ts, $ssrc) = srtp_rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1), $srtp_ctx); +(undef, undef, $seq, $ts, $ssrc) = srtp_rcv($sock_a, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3), $srtp_ctx); srtp_rcv($sock_a, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4), $srtp_ctx); @@ -23833,7 +23833,7 @@ $resp = rtpe_req('play media', 'media playback after delete', { 'from-tag' => tt blob => $wav_file }); is $resp->{duration}, 100, 'media duration'; -(undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); +(undef, undef, $seq, $ts, $ssrc) = rcv($sock_b, -1, rtpm(8 | 0x80, -1, -1, -1, $pcma_1)); rcv($sock_b, -1, rtpm(8, $seq + 1, $ts + 160 * 1, $ssrc, $pcma_2)); rcv($sock_b, -1, rtpm(8, $seq + 2, $ts + 160 * 2, $ssrc, $pcma_3)); rcv($sock_b, -1, rtpm(8, $seq + 3, $ts + 160 * 3, $ssrc, $pcma_4)); diff --git a/t/tests-preload.c b/t/tests-preload.c index ae5d18eee..6b058764f 100644 --- a/t/tests-preload.c +++ b/t/tests-preload.c @@ -580,6 +580,47 @@ int dup2(int oldfd, int newfd) { return ret; } +ssize_t recvfrom(int fd, void *buf, size_t len, int flags, struct sockaddr *addr, socklen_t *socklen) { + const char *err; + ssize_t (*real_recvfrom)(int, void *, size_t, int, struct sockaddr *, socklen_t *) + = dlsym(RTLD_NEXT, "recvfrom"); + err = "fd out of bounds"; + if (fd < 0 || fd >= MAX_SOCKETS) + goto do_recvfrom_warn; + socket_t *s = &real_sockets[fd]; + err = "fd not open"; + if (!s->open) + goto do_recvfrom_warn; + if (s->used_domain != AF_UNIX || s->wanted_domain == AF_UNIX) + goto do_recvfrom; + + struct sockaddr_un sun; + socklen_t sl = sizeof(sun); + ssize_t ret = real_recvfrom(fd, buf, len, flags, (struct sockaddr *) &sun, &sl); + + if (ret <= 0) + goto out; + + if (addr) { + struct sockaddr_storage sst; + socklen_t addrlen; + addr_translate_reverse(&sst, &addrlen, s->wanted_domain, &sun); + assert(addrlen <= *socklen); + memcpy(addr, &sst, addrlen); + *socklen = addrlen; + } + + goto out; + +out: + return ret; + +do_recvfrom_warn: + fprintf(stderr, "preload recvmsg(): %s (fd %i)\n", err, fd); +do_recvfrom: + return real_recvfrom(fd, buf, len, flags, addr, socklen); +} + ssize_t recvmsg(int fd, struct msghdr *msg, int flags) { const char *err; ssize_t (*real_recvmsg)(int, struct msghdr *, int) = dlsym(RTLD_NEXT, "recvmsg");