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 )