Net-QUIC
view release on metacpan or search on metacpan
t/25-new-token.t view on Meta::CPAN
use strict;
use warnings;
use FindBin ();
use Socket qw(inet_aton pack_sockaddr_in);
use Test2::V0;
use Time::HiRes qw(sleep);
use Net::QUIC::Endpoint;
my $server_local = pack_sockaddr_in(4470, inet_aton('127.0.0.1'));
my $client_a = pack_sockaddr_in(40200, inet_aton('127.0.0.1'));
my $client_b = pack_sockaddr_in(40201, inet_aton('127.0.0.1'));
my $client_wrong_ip = pack_sockaddr_in(40202, inet_aton('127.0.0.2'));
my $alpn = 'net-quic-new-token-test';
my $cert_file = "$FindBin::Bin/data/server-cert.pem";
my $key_file = "$FindBin::Bin/data/server-key.pem";
my $server = Net::QUIC::Endpoint->server(
alpn => $alpn,
certificate_file => $cert_file,
private_key_file => $key_file,
validate_address => 1,
);
my %client_for_local;
my @clients;
sub make_client {
my ($local, $token) = @_;
my %args = (
local => $local,
peer => $server_local,
alpn => $alpn,
server_name => 'localhost',
ca_file => $cert_file,
);
$args{address_token} = $token if defined $token;
my $client = Net::QUIC::Endpoint->client(%args);
$client_for_local{$local} = $client;
push @clients, $client;
return $client;
}
sub route_server_datagram {
my ($datagram) = @_;
my $client = $client_for_local{$datagram->peer};
return if !defined $client;
$client->receive_datagram(
$datagram->data,
$datagram->peer,
$datagram->local,
);
return 1;
}
sub pump_network {
my $progress = 0;
while (my $datagram = $server->next_datagram) {
++$progress;
route_server_datagram($datagram);
}
for my $client (@clients) {
while (my $datagram = $client->next_datagram) {
++$progress;
$server->receive_datagram(
$datagram->data,
$datagram->peer,
$datagram->local,
);
}
}
( run in 1.876 second using v1.01-cache-2.11-cpan-036bef1c656 )