GithubHelp home page GithubHelp logo

netty-incubator-codec-http3's Introduction

netty-incubator-codec-http3's People

Contributors

abezhovets avatar aradchykov avatar dependabot[bot] avatar jorsol avatar kachayev avatar netty-project-bot avatar normanmaurer avatar saltedreed avatar simonatan avatar valerauko avatar yawkat avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

netty-incubator-codec-http3's Issues

Examples?

I'd love to see some examples of how to use this!

`QuicException: STREAM_RESET` in `exceptionCaught()`

If the client sends RESET_STREAM, then the STREAM_RESET will reach exceptionCaught() as a QuicException.
Is this an error or valid behavior? Is it correct that STREAM_RESET reaches the custom logic handler?

Code to reproduce:

ResetStreamTest

package io.netty.incubator.codec.http3;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.logging.ByteBufFormat;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.incubator.codec.quic.QuicStreamChannel;
import io.netty.util.NetUtil;
import lombok.extern.log4j.Log4j2;
import org.junit.Test;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

@Log4j2
public class ResetStreamTest extends BaseTest {

    @Test
    public void testUpload() throws Exception {

        QuicSslContext context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .initialMaxStreamsBidirectional(100)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .build();

        Channel channel = new Bootstrap()
                .group(GROUP)
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_REUSEADDR, true)
                .handler(codec)
                .bind(new InetSocketAddress(0))
                .sync().channel();

        QuicChannel quicChannel = QuicChannel.newBootstrap(channel)
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000)
                .remoteAddress(new InetSocketAddress(NetUtil.LOCALHOST4, PORT))
                .handler(new ChannelInitializer<>() {
                    @Override
                    protected void initChannel(Channel ch) {
                        ch.pipeline().addLast(new Http3ClientConnectionHandler());
                    }
                })
                .connect()
                .sync().get();

        QuicStreamChannel streamChannel = Http3.newRequestStream(quicChannel, new ChannelInitializer<>() {
            @Override
            protected void initChannel(Channel ch) {
                ch.pipeline()
                        .addLast(new LoggingHandler(LogLevel.DEBUG, ByteBufFormat.SIMPLE))
                        .addLast(new Http3RequestStreamInboundHandler() {

                            @Override
                            protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                                log.info("channelRead {}, {}", frame, isLast);
                            }

                            @Override
                            protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                                log.info("channelRead {}, {}", frame, isLast);
                            }
                        });
            }
        }).sync().getNow();

        streamChannel.shutdownOutput(Http3ErrorCode.H3_INTERNAL_ERROR.code);

        TimeUnit.SECONDS.sleep(1);
    }
}

BaseTest

package io.netty.incubator.codec.http3;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.incubator.codec.quic.InsecureQuicTokenHandler;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public abstract class BaseTest {

    protected static final int PORT = 9999;
    protected static final NioEventLoopGroup GROUP = new NioEventLoopGroup(1);

    protected final Logger log = LoggerFactory.getLogger(this.getClass());

    @Before
    public void setUp() throws Exception {
        SelfSignedCertificate cert = new SelfSignedCertificate();
        QuicSslContext sslContext = QuicSslContextBuilder.forServer(cert.key(), null, cert.cert())
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();

        ChannelHandler codec = Http3.newQuicServerCodecBuilder()
                .sslContext(sslContext)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .initialMaxStreamDataBidirectionalRemote(1000000)
                .initialMaxStreamsBidirectional(100)
                .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
                .handler(new Http3ServerConnectionHandler(new Http3RequestStreamInboundHandler() {

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }
                }))
                .build();

        Bootstrap bs = new Bootstrap();
        Channel serverChannel = bs.group(GROUP)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(PORT)).sync().channel();
    }

    @After
    public void cleanUp() {
        GROUP.shutdownGracefully();
    }
}

Stacktrace

[nioEventLoopGroup-2-1] WARN channel.DefaultChannelPipeline: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.incubator.codec.quic.QuicException: STREAM_RESET
	at io.netty.incubator.codec.quic.Quiche.newException(Quiche.java:645) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.Quiche.throwIfError(Quiche.java:669) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.streamRecv(QuicheQuicChannel.java:765) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:860) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.beginRead(QuicheQuicStreamChannel.java:602) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.http3.Http3FrameCodec.read(Http3FrameCodec.java:625) ~[netty-incubator-codec-http3-0.0.8.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.http3.Http3FrameTypeDuplexValidationHandler.read(Http3FrameTypeDuplexValidationHandler.java:85) ~[netty-incubator-codec-http3-0.0.8.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:46) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:287) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:51) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1400) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:230) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:216) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:474) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$1.onUnhandledInboundMessage(QuicheQuicChannel.java:360) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$TailContext.channelRead(DefaultChannelPipeline.java:1296) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.http3.Http3ConnectionHandler.channelRead(Http3ConnectionHandler.java:172) ~[netty-incubator-codec-http3-0.0.8.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1298) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1237) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:777) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:83) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:140) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:131) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.67.Final.jar:4.1.67.Final]
	at java.lang.Thread.run(Thread.java:832) [?:?]

QuicException: STREAM_STOPPED

When I started to put some client load on my application, I noticed that there appeared a number of same exceptions in logs, can you advise please?

io.netty.incubator.codec.quic.QuicException: STREAM_STOPPED
	at io.netty.incubator.codec.quic.Quiche.newException(Quiche.java:749)
	at io.netty.incubator.codec.quic.QuicheQuicChannel.handleWritableStreams(QuicheQuicChannel.java:912)
	at io.netty.incubator.codec.quic.QuicheQuicChannel.access$2800(QuicheQuicChannel.java:72)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1494)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1444)
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:864)
	at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:274)
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:127)
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:143)
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:134)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.epoll.EpollDatagramChannel.processPacket(EpollDatagramChannel.java:662)
	at io.netty.channel.epoll.EpollDatagramChannel.recvmsg(EpollDatagramChannel.java:697)
	at io.netty.channel.epoll.EpollDatagramChannel.access$300(EpollDatagramChannel.java:56)
	at io.netty.channel.epoll.EpollDatagramChannel$EpollDatagramChannelUnsafe.epollInReady(EpollDatagramChannel.java:536)
	at io.netty.channel.epoll.EpollEventLoop.processReady(EpollEventLoop.java:509)
	at io.netty.channel.epoll.EpollEventLoop.run(EpollEventLoop.java:407)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:833)

Experimental WebTransport support

WebTransport is a protocol framework which is built on top of HTTP/3, similar to WebSocket which is built on top of HTTP/1.1.

Currently I cannot find one WebTransport Server written in Java, I hope netty gives it a try.

See:
Experimenting with WebTransport
https://web.dev/webtransport/

WebTransport over HTTP/3 (draft)
https://datatracker.ietf.org/doc/html/draft-ietf-webtrans-http3/

Sample WebTransport Client
https://googlechrome.github.io/samples/webtransport/client.html

unsupported message type: DefaultHttp3DataFrame

Hi,
I'm running a sample Http3 server code and sometimes get the following exception:

Caused by: java.lang.UnsupportedOperationException: unsupported message type: DefaultHttp3DataFrame
  at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.write(QuicheQuicStreamChannel.java:682)
  at io.netty.channel.DefaultChannelPipeline$HeadContext.write(DefaultChannelPipeline.java:1367)
  at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:877)
  at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:863)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856)
  at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:865)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856)
  at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:865)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:968)
  at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:856)
  at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:865)
  at io.netty.channel.AbstractChannelHandlerContext$WriteTask.run(AbstractChannelHandlerContext.java:1245)
  at io.netty.util.concurrent.AbstractEventExecutor.runTask(AbstractEventExecutor.java:173)
  at io.netty.util.concurrent.AbstractEventExecutor.safeExecute(AbstractEventExecutor.java:166)
  at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:470)
  at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:566)
  at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
  at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
  at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)

when writing DefaultHttp3DataFrame to ChannelHandlerContext
Can you advise please?

Interoperability with netty-codec-http2 and netty-codec-http

I'm looking at updating some code that uses codec-http to possibly use codec-http2's types instead, and going through the pro's and con's of translating requests into codec-http's types (existing code does not change) versus updating everything to want, for example, an Http2Headers and let HTTP 1.x requests by handled using HTTP2 idioms...

...and I run across this project, which looks like it started from a copy/paste of codec-http2, and think...am I going to be facing this again for HTTP3?

So, in general, this issue is a request to pay attention to interoperability and doing http3 support in a way that code that depends on codec-http2 can transparently use codec-http3 without modifications until it bumps up against something that is truly different in http3. That looks a little more doable between http2 and http3 (common interface for Headers, etc.) than the much older codec-http. Those of us who have built frameworks that are a layer on top of Netty will be profoundly grateful.

Frame type unexpected on server channelRead

I got a Frame type unexpected exception when I tried to change the example code to let the server and client to communicate repeatedly。

The code is as bellow. I have marked the modified code with "// modified".

Http3ClientExample :
`/*

  • Copyright 2020 The Netty Project
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at:
  • https://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License.
    */
    package io.netty.incubator.codec.http3.example;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.incubator.codec.http3.*;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.incubator.codec.quic.QuicStreamChannel;
import io.netty.util.CharsetUtil;
import io.netty.util.NetUtil;
import io.netty.util.ReferenceCountUtil;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public final class Http3ClientExample {
private Http3ClientExample() { }

public static void main(String... args) throws Exception {
    NioEventLoopGroup group = new NioEventLoopGroup(1);

    try {
        QuicSslContext context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .build();

        Bootstrap bs = new Bootstrap();
        Channel channel = bs.group(group)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(0).sync().channel();

        QuicChannel quicChannel = QuicChannel.newBootstrap(channel)
                .handler(new Http3ClientConnectionHandler())
                .remoteAddress(new InetSocketAddress(NetUtil.LOCALHOST4, Http3ServerExample.PORT))
                .connect()
                .get();

        QuicStreamChannel streamChannel = Http3.newRequestStream(quicChannel,
                new Http3RequestStreamInboundHandler() {
                    @Override
                    protected void channelRead(ChannelHandlerContext ctx,
                                               Http3HeadersFrame frame, boolean isLast) {
                        releaseFrameAndCloseIfLast(ctx, frame, isLast);
                    }

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx,
                                               Http3DataFrame frame, boolean isLast) {
                        System.err.print(frame.content().toString(CharsetUtil.US_ASCII));
                        // modified
                        DefaultHttp3DataFrame dataFrame = new DefaultHttp3DataFrame(
                                Unpooled.wrappedBuffer("i am client again".getBytes(CharsetUtil.US_ASCII)));
                        ctx.writeAndFlush(dataFrame);
                        releaseFrameAndCloseIfLast(ctx, frame, isLast);
                    }

                    private void releaseFrameAndCloseIfLast(ChannelHandlerContext ctx,
                                                            Http3RequestStreamFrame frame, boolean isLast) {
                        ReferenceCountUtil.release(frame);
                        if (isLast) {
                            ctx.close();
                        }
                    }
                }).sync().getNow();

        // Write the Header frame and send the FIN to mark the end of the request.
        // After this its not possible anymore to write any more data.
        Http3HeadersFrame frame = new DefaultHttp3HeadersFrame();
        frame.headers().method("GET").path("/")
                .authority(NetUtil.LOCALHOST4.getHostAddress() + ":" + Http3ServerExample.PORT)
                .scheme("https");
        // modified
        DefaultHttp3DataFrame dataFrame = new DefaultHttp3DataFrame(
                Unpooled.wrappedBuffer("i am client".getBytes(CharsetUtil.US_ASCII)));
        streamChannel.writeAndFlush(frame);
        streamChannel.write(dataFrame);//.addListener(QuicStreamChannel.SHUTDOWN_OUTPUT).sync();

        // Wait for the stream channel and quic channel to be closed (this will happen after we received the FIN).
        // After this is done we will close the underlying datagram channel.
        streamChannel.closeFuture().sync();

        // After we received the response lets also close the underlying QUIC channel and datagram channel.
        quicChannel.close().sync();
        channel.close().sync();
    } finally {
        group.shutdownGracefully();
    }
}

}
`

Http3ServerExample:
`/*

  • Copyright 2020 The Netty Project
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at:
  • https://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License.
    */
    package io.netty.incubator.codec.http3.example;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.incubator.codec.http3.DefaultHttp3DataFrame;
import io.netty.incubator.codec.http3.DefaultHttp3HeadersFrame;
import io.netty.incubator.codec.http3.Http3;
import io.netty.incubator.codec.http3.Http3DataFrame;
import io.netty.incubator.codec.http3.Http3HeadersFrame;
import io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler;
import io.netty.incubator.codec.http3.Http3ServerConnectionHandler;
import io.netty.incubator.codec.quic.InsecureQuicTokenHandler;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.incubator.codec.quic.QuicStreamChannel;
import io.netty.util.CharsetUtil;
import io.netty.util.ReferenceCountUtil;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public final class Http3ServerExample {
private static final byte[] CONTENT = "Hello World!\r\n".getBytes(CharsetUtil.US_ASCII);
static final int PORT = 9999;

private Http3ServerExample() { }

public static void main(String... args) throws Exception {
    int port;
    // Allow to pass in the port so we can also use it to run h3spec against
    if (args.length == 1) {
        port = Integer.parseInt(args[0]);
    } else {
        port = PORT;
    }
    NioEventLoopGroup group = new NioEventLoopGroup(1);
    SelfSignedCertificate cert = new SelfSignedCertificate();
    QuicSslContext sslContext = QuicSslContextBuilder.forServer(cert.key(), null, cert.cert())
            .applicationProtocols(Http3.supportedApplicationProtocols()).build();
    ChannelHandler codec = Http3.newQuicServerCodecBuilder()
            .sslContext(sslContext)
            .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
            .initialMaxData(10000000)
            .initialMaxStreamDataBidirectionalLocal(1000000)
            .initialMaxStreamDataBidirectionalRemote(1000000)
            .initialMaxStreamsBidirectional(100)
            .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
            .handler(new ChannelInitializer<QuicChannel>() {
                @Override
                protected void initChannel(QuicChannel ch) {
                    // Called for each connection
                    ch.pipeline().addLast(new Http3ServerConnectionHandler(
                            new ChannelInitializer<QuicStreamChannel>() {
                                // Called for each request-stream,
                                @Override
                                protected void initChannel(QuicStreamChannel ch) {
                                    ch.pipeline().addLast(new Http3RequestStreamInboundHandler() {

                                        @Override
                                        protected void channelRead(ChannelHandlerContext ctx,
                                                                   Http3HeadersFrame frame, boolean isLast) {

// modified
// if (isLast) {
// writeResponse(ctx);
// }
ReferenceCountUtil.release(frame);
}

                                        @Override
                                        protected void channelRead(ChannelHandlerContext ctx,
                                                                   Http3DataFrame frame, boolean isLast) {
                                            System.err.println(frame.content().toString(CharsetUtil.US_ASCII));
                                            // modified
                                            //if (isLast) {
                                               writeResponse(ctx);
                                            //}
                                            ReferenceCountUtil.release(frame);
                                        }

                                        private void writeResponse(ChannelHandlerContext ctx) {
                                            Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
                                            headersFrame.headers().status("404");
                                            headersFrame.headers().add("server", "netty");
                                            headersFrame.headers().addInt("content-length", CONTENT.length);
                                            ctx.write(headersFrame);
                                            ctx.writeAndFlush(new DefaultHttp3DataFrame(Unpooled.wrappedBuffer(CONTENT)));//.addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
                                        }
                                    });
                                }
                            }));
                }
            }).build();
    try {
        Bootstrap bs = new Bootstrap();
        Channel channel = bs.group(group)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(port)).sync().channel();
        channel.closeFuture().sync();
    } finally {
        group.shutdownGracefully();
    }
}

}
`

The exception:
io.netty.incubator.codec.http3.Http3Exception: Frame type unexpected
at io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:249)
at io.netty.incubator.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected(Http3FrameValidationUtils.java:92)
at io.netty.incubator.codec.http3.Http3RequestStreamEncodeStateValidator.write(Http3RequestStreamEncodeStateValidator.java:44)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.write(Http3RequestStreamValidationHandler.java:83)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.write(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeDuplexValidationHandler.write(Http3FrameTypeDuplexValidationHandler.java:38)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:764)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:790)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:758)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:808)
at io.netty.incubator.codec.http3.example.Http3ServerExample$1$1$1.writeResponse(Http3ServerExample.java:109)
at io.netty.incubator.codec.http3.example.Http3ServerExample$1$1$1.channelRead(Http3ServerExample.java:98)
at io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler.channelRead(Http3RequestStreamInboundHandler.java:63)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:120)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeInboundValidationHandler.channelRead(Http3FrameTypeInboundValidationHandler.java:37)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:45)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:748)

Not all mandatory pseudo-headers included.

When I am with Http3FrameToHttpObjectCodec,The request header does not contain authority,The server side can expose this error:
image

Is authority required in HTTP3.0? It seems impossible to set authority in FullHttpRequest, except when specified in the path。

I recommend changing such code in HttpConversionUtil:
image

Client remote connections fail to Cloudflare (on Windows x64)

qlog

�{"qlog_version":"0.3","qlog_format":"JSON-SEQ","title":"testTitle","description":"test id=4daa99b8d91a40905c8e17805f9ba0f636de3791","trace":{"vantage_point":{"type":"client"},"title":"testTitle","description":"test id=4daa99b8d91a40905c8e17805f9ba0f636de3791","configuration":{"time_offset":0.0}}}
�{"time":0.0,"name":"transport:parameters_set","data":{"owner":"local","tls_cipher":"None","disable_active_migration":false,"max_idle_timeout":5000,"max_udp_payload_size":65527,"ack_delay_exponent":3,"max_ack_delay":25,"active_connection_id_limit":2,"initial_max_data":10000000,"initial_max_stream_data_bidi_local":1000000,"initial_max_stream_data_bidi_remote":1000000,"initial_max_stream_data_uni":1000000,"initial_max_streams_bidi":100,"initial_max_streams_uni":100}}
�{"time":0.5261,"name":"transport:packet_sent","data":{"header":{"packet_type":"initial","packet_number":0,"version":"1","scil":20,"dcil":16,"scid":"4daa99b8d91a40905c8e17805f9ba0f636de3791","dcid":"ae7a95cc31400e7f45e73de419708b65"},"raw":{"length":316,"payload_length":253},"send_at_time":0.5261,"frames":[{"frame_type":"crypto","offset":0,"length":249}]}}
�{"time":0.5261,"name":"recovery:metrics_updated","data":{"smoothed_rtt":333.0,"rtt_variance":166.5,"congestion_window":12000,"bytes_in_flight":316,"ssthresh":18446744073709551615}}
�{"time":7.5481,"name":"transport:packet_received","data":{"header":{"packet_type":"initial","packet_number":0,"version":"1","scil":20,"dcil":20,"scid":"019c09f8632ac8a9139e80f8a22ade62d89d9b78","dcid":"4daa99b8d91a40905c8e17805f9ba0f636de3791"},"raw":{"length":1200,"payload_length":23},"frames":[{"frame_type":"ack","ack_delay":0.068,"acked_ranges":[[0,0]]}]}}
�{"time":7.5481,"name":"recovery:metrics_updated","data":{"min_rtt":7.022,"smoothed_rtt":7.022,"latest_rtt":7.022,"rtt_variance":3.511,"bytes_in_flight":0}}
�{"time":8.7484,"name":"transport:packet_received","data":{"header":{"packet_type":"initial","packet_number":1,"version":"1","scil":20,"dcil":20,"scid":"019c09f8632ac8a9139e80f8a22ade62d89d9b78","dcid":"4daa99b8d91a40905c8e17805f9ba0f636de3791"},"raw":{"length":1200,"payload_length":22},"frames":[{"frame_type":"connection_close","error_space":"transport_error","error_code":296,"reason":""}]}}

Reproduce with this on Windows x64:

import io.netty.bootstrap.Bootstrap
import io.netty.channel.ChannelHandlerContext
import io.netty.channel.nio.NioEventLoopGroup
import io.netty.channel.socket.nio.NioDatagramChannel
import io.netty.handler.ssl.util.InsecureTrustManagerFactory
import io.netty.incubator.codec.http3.*
import io.netty.incubator.codec.quic.*
import io.netty.util.ReferenceCountUtil
import java.net.InetSocketAddress
import java.util.concurrent.TimeUnit

object JS5ProxyServer {

    @JvmStatic
    fun main(args: Array<String>) {
        val hostName = "areos.io"
        val js5Port = 443

        val group = NioEventLoopGroup(1)

        try {
            val context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(*Http3.supportedApplicationProtocols())
                .build()
            val codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .initialMaxStreamsBidirectional(100)
                .initialMaxStreamsUnidirectional(100)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .initialMaxStreamDataBidirectionalRemote(1000000)
                .initialMaxStreamDataUnidirectional(1000000)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .build()

            val bs = Bootstrap()
            val channel = bs.group(group)
                .channel(NioDatagramChannel::class.java)
                .handler(codec)
                .bind(0)
                .sync()
                .channel()

            val quicChannel = QuicChannel.newBootstrap(channel)
                .handler(Http3ClientConnectionHandler())
                .remoteAddress(InetSocketAddress(hostName, js5Port))
                .option(
                    QuicChannelOption.QLOG,
                    QLogConfiguration("quiclog.txt", "testTitle", "test")
                )
                .connect()
                .get()

            val streamChannel = Http3.newRequestStream(quicChannel,
                object : Http3RequestStreamInboundHandler() {
                    override fun channelRead(ctx: ChannelHandlerContext, frame: Http3HeadersFrame) {
                        println("header frame: $frame")

                        ReferenceCountUtil.release(frame)
                    }

                    override fun channelRead(ctx: ChannelHandlerContext, frame: Http3DataFrame) {
                        println("data frame: $frame")

                        ReferenceCountUtil.release(frame)
                    }

                    override fun channelInputClosed(ctx: ChannelHandlerContext) {
                        println("channel input closed")

                        ctx.close()
                    }
                }).sync().now

            streamChannel
                .pipeline()
                .addLast(
                    Http3FrameToHttpObjectCodec(false, false)
                )

            val headers = DefaultHttp3Headers(false)
                .method("GET")
                .path("/flat-cache/0-0.dat")
                .authority("$hostName:$js5Port")
                .scheme("https")
            val headersFrame = DefaultHttp3HeadersFrame(headers)
            streamChannel.writeAndFlush(headersFrame)
                .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT).sync()

            // Wait for the stream channel and quic channel to be closed (this will happen after we received the FIN).
            // After this is done we will close the underlying datagram channel.
            streamChannel.closeFuture().sync()

            // After we received the response lets also close the underlying QUIC channel and datagram channel.
            quicChannel.close().sync()
            channel.close().sync()
        } finally {
            group.shutdownGracefully()
        }
    }

}

Leak in testrun

2021-05-25T06:54:34.8808318Z 06:54:34.869 [main] ERROR io.netty.util.ResourceLeakDetector - LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.
2021-05-25T06:54:34.8810353Z Recent access records: 
2021-05-25T06:54:34.8811026Z #1:
2021-05-25T06:54:34.8812905Z 	io.netty.buffer.AbstractPooledDerivedByteBuf.deallocate(AbstractPooledDerivedByteBuf.java:86)
2021-05-25T06:54:34.8816304Z 	io.netty.buffer.AbstractReferenceCountedByteBuf.handleRelease(AbstractReferenceCountedByteBuf.java:110)
2021-05-25T06:54:34.8819800Z 	io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:100)
2021-05-25T06:54:34.8822447Z 	io.netty.buffer.WrappedByteBuf.release(WrappedByteBuf.java:1037)
2021-05-25T06:54:34.8824617Z 	io.netty.buffer.SimpleLeakAwareByteBuf.release(SimpleLeakAwareByteBuf.java:102)
2021-05-25T06:54:34.8827212Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.release(AdvancedLeakAwareByteBuf.java:941)
2021-05-25T06:54:34.8829967Z 	io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:285)
2021-05-25T06:54:34.8832782Z 	io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:91)
2021-05-25T06:54:34.8851669Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-05-25T06:54:34.8863366Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-05-25T06:54:34.8867071Z 	io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2021-05-25T06:54:34.8883538Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
2021-05-25T06:54:34.8886862Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-05-25T06:54:34.8890649Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-05-25T06:54:34.8894022Z 	io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
2021-05-25T06:54:34.8896817Z 	io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:343)
2021-05-25T06:54:34.8900280Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:386)
2021-05-25T06:54:34.8940750Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.8948178Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:34.8966023Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:34.8976321Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.8986346Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:34.9032366Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:34.9041076Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:34.9048257Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:34.9054676Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:34.9064757Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:34.9097244Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:34.9107925Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:34.9115447Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:34.9122876Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:34.9130108Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9136403Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:34.9185348Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:34.9187513Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:34.9190045Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:34.9192059Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9193590Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9195307Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9197130Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9198793Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9200350Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9201829Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:34.9203159Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:34.9204574Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9206067Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9207810Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9209628Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9269196Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9270772Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9272351Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9274578Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:34.9277456Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:34.9280540Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:34.9283296Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:34.9286664Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:34.9290311Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:34.9293112Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:34.9295492Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:34.9296928Z #2:
2021-05-25T06:54:34.9298803Z 	io.netty.buffer.AbstractPooledDerivedByteBuf.deallocate(AbstractPooledDerivedByteBuf.java:86)
2021-05-25T06:54:34.9302305Z 	io.netty.buffer.AbstractReferenceCountedByteBuf.handleRelease(AbstractReferenceCountedByteBuf.java:110)
2021-05-25T06:54:34.9306177Z 	io.netty.buffer.AbstractReferenceCountedByteBuf.release(AbstractReferenceCountedByteBuf.java:100)
2021-05-25T06:54:34.9308736Z 	io.netty.buffer.WrappedByteBuf.release(WrappedByteBuf.java:1037)
2021-05-25T06:54:34.9310853Z 	io.netty.buffer.SimpleLeakAwareByteBuf.release(SimpleLeakAwareByteBuf.java:102)
2021-05-25T06:54:34.9313394Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.release(AdvancedLeakAwareByteBuf.java:941)
2021-05-25T06:54:34.9315963Z 	io.netty.handler.codec.ByteToMessageDecoder$1.cumulate(ByteToMessageDecoder.java:105)
2021-05-25T06:54:34.9318711Z 	io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:274)
2021-05-25T06:54:34.9321539Z 	io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:91)
2021-05-25T06:54:34.9324821Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-05-25T06:54:34.9328625Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-05-25T06:54:34.9332338Z 	io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2021-05-25T06:54:34.9335408Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
2021-05-25T06:54:34.9338554Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-05-25T06:54:34.9383814Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-05-25T06:54:34.9393016Z 	io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
2021-05-25T06:54:34.9395841Z 	io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:343)
2021-05-25T06:54:34.9399339Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:386)
2021-05-25T06:54:34.9403726Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9406633Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:34.9407911Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:34.9411831Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9466871Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:34.9469039Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:34.9471706Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:34.9473750Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:34.9475625Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:34.9478079Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:34.9480806Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:34.9483856Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:34.9486576Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:34.9489194Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:34.9491246Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9493127Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:34.9495112Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:34.9497277Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:34.9499829Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:34.9501836Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9505886Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9511102Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9515027Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9516736Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9520880Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9525426Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:34.9526830Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:34.9528239Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9529757Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9531476Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9533300Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9534929Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9536467Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9538033Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9540137Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:34.9543514Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:34.9548787Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:34.9551639Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:34.9554955Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:34.9558563Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:34.9561373Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:34.9563786Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:34.9565224Z #3:
2021-05-25T06:54:34.9567107Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.readRetainedSlice(AdvancedLeakAwareByteBuf.java:106)
2021-05-25T06:54:34.9570818Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:384)
2021-05-25T06:54:34.9575193Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9578105Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:34.9579361Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:34.9625634Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9629964Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:34.9632144Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:34.9634718Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:34.9636766Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:34.9638546Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:34.9640834Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:34.9670368Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:34.9673965Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:34.9676722Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:34.9679151Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:34.9681181Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9682927Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:34.9684771Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:34.9687035Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:34.9689578Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:34.9691587Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9693093Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9694844Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9696649Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9698338Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9699776Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9701142Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:34.9702719Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:34.9704116Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9705606Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9707326Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9709209Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9710706Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9712139Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9713574Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9715538Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:34.9718188Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:34.9721280Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:34.9724029Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:34.9727432Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:34.9731097Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:34.9733901Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:34.9736292Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:34.9737717Z #4:
2021-05-25T06:54:34.9738581Z 	Hint: Caller of readOutbound() will handle the message from this point.
2021-05-25T06:54:34.9741011Z 	io.netty.channel.embedded.EmbeddedChannel.readOutbound(EmbeddedChannel.java:323)
2021-05-25T06:54:34.9744557Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:381)
2021-05-25T06:54:34.9748952Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9751843Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:34.9753104Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:34.9757014Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:34.9761308Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:34.9763449Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:34.9766031Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:34.9768070Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:34.9769792Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:34.9772284Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:34.9775041Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:34.9777816Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:34.9780551Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:34.9823497Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:34.9863393Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9865396Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:34.9867411Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:34.9869541Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:34.9872074Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:34.9874060Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9875584Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9877309Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9879128Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9913696Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9948158Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9949557Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:34.9950794Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:34.9952128Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:34.9953526Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:34.9955146Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:34.9956821Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:34.9958614Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:34.9960142Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:34.9961712Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:34.9963805Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:34.9966676Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:34.9969770Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:34.9972673Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:34.9976032Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:34.9979680Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:34.9982643Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:34.9985016Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:34.9986474Z #5:
2021-05-25T06:54:34.9987757Z 	io.netty.util.ReferenceCountUtil.release(ReferenceCountUtil.java:88)
2021-05-25T06:54:34.9989865Z 	io.netty.util.ReferenceCountUtil.safeRelease(ReferenceCountUtil.java:113)
2021-05-25T06:54:34.9992117Z 	io.netty.channel.ChannelOutboundBuffer.remove(ChannelOutboundBuffer.java:271)
2021-05-25T06:54:34.9994469Z 	io.netty.channel.embedded.EmbeddedChannel.doWrite(EmbeddedChannel.java:749)
2021-05-25T06:54:34.9996613Z 	io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:953)
2021-05-25T06:54:34.9998533Z 	io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:917)
2021-05-25T06:54:35.0000690Z 	io.netty.channel.embedded.EmbeddedChannel$EmbeddedUnsafe$1.flush(EmbeddedChannel.java:845)
2021-05-25T06:54:35.0003348Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel$1.flush(EmbeddedQuicStreamChannel.java:278)
2021-05-25T06:54:35.0006077Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
2021-05-25T06:54:35.0008961Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
2021-05-25T06:54:35.0044651Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
2021-05-25T06:54:35.0047930Z 	io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
2021-05-25T06:54:35.0050679Z 	io.netty.incubator.codec.http3.Http3FrameCodec.flush(Http3FrameCodec.java:537)
2021-05-25T06:54:35.0099718Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
2021-05-25T06:54:35.0104931Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
2021-05-25T06:54:35.0108145Z 	io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
2021-05-25T06:54:35.0110835Z 	io.netty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:967)
2021-05-25T06:54:35.0112938Z 	io.netty.channel.AbstractChannel.flush(AbstractChannel.java:254)
2021-05-25T06:54:35.0115557Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel.flush(EmbeddedQuicStreamChannel.java:87)
2021-05-25T06:54:35.0118962Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel.flush(EmbeddedQuicStreamChannel.java:44)
2021-05-25T06:54:35.0122055Z 	io.netty.channel.embedded.EmbeddedChannel.flushOutbound0(EmbeddedChannel.java:474)
2021-05-25T06:54:35.0124780Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:413)
2021-05-25T06:54:35.0128267Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.0132647Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0135550Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.0136831Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.0140753Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0153492Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.0160609Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.0165243Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.0167415Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.0169166Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.0171590Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.0174354Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.0177138Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.0179851Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.0182785Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.0192055Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0194970Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.0197310Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.0202755Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.0205308Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.0207483Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0208985Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0210721Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0212544Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0214179Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0215766Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0217223Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.0218564Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.0219972Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0221512Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0228579Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0234644Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0239927Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0244562Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0246230Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0248337Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.0251213Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.0254282Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.0257102Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.0260456Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.0272844Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.0281789Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.0284182Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.0285633Z #6:
2021-05-25T06:54:35.0287313Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.retain(AdvancedLeakAwareByteBuf.java:36)
2021-05-25T06:54:35.0289416Z 	io.netty.util.ReferenceCountUtil.retain(ReferenceCountUtil.java:40)
2021-05-25T06:54:35.0291442Z 	io.netty.channel.embedded.EmbeddedChannel.doWrite(EmbeddedChannel.java:747)
2021-05-25T06:54:35.0293681Z 	io.netty.channel.AbstractChannel$AbstractUnsafe.flush0(AbstractChannel.java:953)
2021-05-25T06:54:35.0295597Z 	io.netty.channel.AbstractChannel$AbstractUnsafe.flush(AbstractChannel.java:917)
2021-05-25T06:54:35.0297769Z 	io.netty.channel.embedded.EmbeddedChannel$EmbeddedUnsafe$1.flush(EmbeddedChannel.java:845)
2021-05-25T06:54:35.0300421Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel$1.flush(EmbeddedQuicStreamChannel.java:278)
2021-05-25T06:54:35.0303678Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.flush(DefaultChannelPipeline.java:1372)
2021-05-25T06:54:35.0315852Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
2021-05-25T06:54:35.0325684Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
2021-05-25T06:54:35.0329473Z 	io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
2021-05-25T06:54:35.0332620Z 	io.netty.incubator.codec.http3.Http3FrameCodec.flush(Http3FrameCodec.java:537)
2021-05-25T06:54:35.0341824Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush0(AbstractChannelHandlerContext.java:750)
2021-05-25T06:54:35.0350517Z 	io.netty.channel.AbstractChannelHandlerContext.invokeFlush(AbstractChannelHandlerContext.java:742)
2021-05-25T06:54:35.0355117Z 	io.netty.channel.AbstractChannelHandlerContext.flush(AbstractChannelHandlerContext.java:728)
2021-05-25T06:54:35.0357982Z 	io.netty.channel.DefaultChannelPipeline.flush(DefaultChannelPipeline.java:967)
2021-05-25T06:54:35.0360097Z 	io.netty.channel.AbstractChannel.flush(AbstractChannel.java:254)
2021-05-25T06:54:35.0362707Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel.flush(EmbeddedQuicStreamChannel.java:87)
2021-05-25T06:54:35.0366139Z 	io.netty.incubator.codec.http3.EmbeddedQuicStreamChannel.flush(EmbeddedQuicStreamChannel.java:44)
2021-05-25T06:54:35.0369244Z 	io.netty.channel.embedded.EmbeddedChannel.flushOutbound0(EmbeddedChannel.java:474)
2021-05-25T06:54:35.0372150Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:413)
2021-05-25T06:54:35.0375647Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.0380016Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0383515Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.0391872Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.0400917Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0405158Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.0407309Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.0409882Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.0411902Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.0413643Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.0416065Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.0418821Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.0421612Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.0432072Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.0439959Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.0442051Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0443930Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.0446164Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.0455498Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.0458841Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.0460878Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0462366Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0463984Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0465912Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0467556Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0469126Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0470611Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.0471947Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.0473367Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0474872Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0476612Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0478445Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0480069Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0481702Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0483264Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0485353Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.0488212Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.0491300Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.0494074Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.0497390Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.0501134Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.0514175Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.0521457Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.0522912Z #7:
2021-05-25T06:54:35.0524738Z 	Hint: 'DefaultChannelPipeline$HeadContext#0' will handle the message from this point.
2021-05-25T06:54:35.0526664Z 	io.netty.channel.DefaultChannelPipeline.touch(DefaultChannelPipeline.java:116)
2021-05-25T06:54:35.0529378Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:786)
2021-05-25T06:54:35.0532391Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.0535636Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:441)
2021-05-25T06:54:35.0538919Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.0541867Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.0558704Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.0562727Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.0566312Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.0569346Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.0572349Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.0575076Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.0577195Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.0579536Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.0583526Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.0599349Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0602278Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.0603554Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.0607444Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0611647Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.0613798Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.0616401Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.0618473Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.0620203Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.0623068Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.0634857Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.0641096Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.0643827Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.0646416Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.0648474Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0650350Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.0652347Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.0654507Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.0657078Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.0659109Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0660609Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0662545Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0670658Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0676965Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0679212Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0680682Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.0682021Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.0683448Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0684978Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0686722Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0688543Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0690176Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0691725Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0693278Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0695378Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.0698246Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.0701331Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.0712945Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.0717947Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.0721620Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.0724467Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.0726843Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.0728311Z #8:
2021-05-25T06:54:35.0729968Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
2021-05-25T06:54:35.0733221Z 	io.netty.incubator.codec.http3.Http3CodecUtils.writeVariableLengthInteger(Http3CodecUtils.java:134)
2021-05-25T06:54:35.0736718Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:438)
2021-05-25T06:54:35.0740035Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.0743486Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.0755999Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.0761614Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.0765334Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.0769077Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.0772655Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.0775961Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.0786409Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.0789739Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.0793213Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.0797628Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0800508Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.0801789Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.0805752Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.0809958Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.0812093Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.0814675Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.0816726Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.0818458Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.0820915Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.0824311Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.0837227Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.0840398Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.0843004Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.0845051Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0846947Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.0848940Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.0851195Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.0853723Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.0855761Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0857315Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0859063Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0860871Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0862818Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0871845Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0877130Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.0878485Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.0879927Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.0881436Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.0883199Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.0885118Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.0886745Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.0888292Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.0889858Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.0891975Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.0894835Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.0897926Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.0900684Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.0911716Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.0919462Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.0922281Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.0924687Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.0926119Z #9:
2021-05-25T06:54:35.0982476Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
2021-05-25T06:54:35.0985787Z 	io.netty.incubator.codec.http3.Http3CodecUtils.writeVariableLengthInteger(Http3CodecUtils.java:134)
2021-05-25T06:54:35.0989268Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:433)
2021-05-25T06:54:35.0992553Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.0995494Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.0998442Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.1001886Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.1005543Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.1008576Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.1011631Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.1014350Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.1016471Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.1018725Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.1059768Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.1064588Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1067531Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.1068807Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.1072728Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1076965Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.1079144Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.1081720Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.1083764Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.1085512Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.1087924Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.1090804Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.1093595Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.1096344Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.1098960Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.1101622Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1103714Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.1105713Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.1107874Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.1110408Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.1112446Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1113958Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1115731Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1117538Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1119181Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1120758Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1122252Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.1123585Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.1125008Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1126736Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1128471Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1130290Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1131919Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1133485Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1135048Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1137163Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.1140023Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.1143230Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.1146020Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.1149366Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.1153175Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.1155978Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.1158379Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.1159829Z #10:
2021-05-25T06:54:35.1161490Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
2021-05-25T06:54:35.1164450Z 	io.netty.incubator.codec.http3.QpackEncoder.encodePrefixedInteger(QpackEncoder.java:115)
2021-05-25T06:54:35.1167396Z 	io.netty.incubator.codec.http3.QpackEncoder.encodeHeaders(QpackEncoder.java:47)
2021-05-25T06:54:35.1170194Z 	io.netty.incubator.codec.http3.Http3FrameCodec.lambda$writePushPromiseFrame$3(Http3FrameCodec.java:453)
2021-05-25T06:54:35.1173247Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:428)
2021-05-25T06:54:35.1176564Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.1179492Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.1182663Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.1186069Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.1189284Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.1192331Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.1195326Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.1198045Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.1200138Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.1259900Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.1263631Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.1268026Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1270902Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.1272199Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.1276102Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1280292Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.1282463Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.1285047Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.1287089Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.1288817Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.1291269Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.1294018Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.1296810Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.1299508Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.1302772Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.1304864Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1306747Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.1308955Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.1311089Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.1313655Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.1315680Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1317217Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1318942Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1320785Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1322408Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1323995Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1325474Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.1326827Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.1328267Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1329779Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1331615Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1333430Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1335064Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1336609Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1338179Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1340265Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.1343277Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.1346369Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.1349162Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.1352496Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.1356199Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.1359050Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.1361451Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.1362881Z #11:
2021-05-25T06:54:35.1364579Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
2021-05-25T06:54:35.1367549Z 	io.netty.incubator.codec.http3.QpackEncoder.encodePrefixedInteger(QpackEncoder.java:115)
2021-05-25T06:54:35.1370503Z 	io.netty.incubator.codec.http3.QpackEncoder.encodeHeaders(QpackEncoder.java:43)
2021-05-25T06:54:35.1373300Z 	io.netty.incubator.codec.http3.Http3FrameCodec.lambda$writePushPromiseFrame$3(Http3FrameCodec.java:453)
2021-05-25T06:54:35.1376314Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:428)
2021-05-25T06:54:35.1379647Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.1382657Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.1385610Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.1389058Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.1392240Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.1395274Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.1398296Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.1401090Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.1405169Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.1407428Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.1410874Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.1415554Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1418452Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.1419715Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.1423753Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1427977Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.1430133Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.1432718Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.1434916Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.1436641Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.1439075Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.1441839Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.1444636Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.1447397Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.1449991Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.1452227Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1454122Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.1456133Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.1458302Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.1460853Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.1462929Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1464466Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1466208Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1468044Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1469695Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1471272Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1472751Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.1474082Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.1475505Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1477024Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1478770Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1480575Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1482228Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1483881Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1485469Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1487563Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.1490448Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.1493640Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.1496411Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.1499747Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.1503464Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.1506982Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.1509375Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.1510842Z #12:
2021-05-25T06:54:35.1512486Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeByte(AdvancedLeakAwareByteBuf.java:544)
2021-05-25T06:54:35.1515773Z 	io.netty.incubator.codec.http3.Http3CodecUtils.writeVariableLengthInteger(Http3CodecUtils.java:134)
2021-05-25T06:54:35.1519571Z 	io.netty.incubator.codec.http3.Http3CodecUtils.writeVariableLengthInteger(Http3CodecUtils.java:121)
2021-05-25T06:54:35.1522927Z 	io.netty.incubator.codec.http3.Http3FrameCodec.lambda$writePushPromiseFrame$3(Http3FrameCodec.java:452)
2021-05-25T06:54:35.1526075Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:428)
2021-05-25T06:54:35.1529381Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.1532340Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.1535291Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.1538731Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.1541921Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.1545029Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.1548039Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.1550772Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.1552904Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.1555164Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.1558612Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.1562967Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1565861Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.1567118Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.1571014Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1575200Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.1577359Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.1579938Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.1581974Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.1583775Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.1586210Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.1588990Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.1591755Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.1594483Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.1597179Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.1599229Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1601098Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.1603103Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.1606783Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.1609379Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.1611411Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1612922Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1614676Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1616505Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1618154Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1619722Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1621350Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.1622833Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.1624262Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1625784Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1627546Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1629370Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1631016Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1632566Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1634138Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1636249Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.1639125Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.1642353Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.1645121Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.1648457Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.1652111Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.1654962Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.1657371Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.1658849Z Created at:
2021-05-25T06:54:35.1660635Z 	io.netty.buffer.PooledByteBufAllocator.newDirectBuffer(PooledByteBufAllocator.java:402)
2021-05-25T06:54:35.1663549Z 	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
2021-05-25T06:54:35.1666426Z 	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:173)
2021-05-25T06:54:35.1669435Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writeDynamicFrame(Http3FrameCodec.java:422)
2021-05-25T06:54:35.1672750Z 	io.netty.incubator.codec.http3.Http3FrameCodec.writePushPromiseFrame(Http3FrameCodec.java:450)
2021-05-25T06:54:35.1675792Z 	io.netty.incubator.codec.http3.Http3FrameCodec.write(Http3FrameCodec.java:359)
2021-05-25T06:54:35.1678556Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
2021-05-25T06:54:35.1681722Z 	io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
2021-05-25T06:54:35.1684712Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
2021-05-25T06:54:35.1687620Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
2021-05-25T06:54:35.1690428Z 	io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:697)
2021-05-25T06:54:35.1693274Z 	io.netty.channel.DefaultChannelPipeline.write(DefaultChannelPipeline.java:1010)
2021-05-25T06:54:35.1695371Z 	io.netty.channel.AbstractChannel.write(AbstractChannel.java:296)
2021-05-25T06:54:35.1697631Z 	io.netty.channel.embedded.EmbeddedChannel.writeOutbound(EmbeddedChannel.java:410)
2021-05-25T06:54:35.1701081Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testFrameEncodedAndDecoded(Http3FrameCodecTest.java:380)
2021-05-25T06:54:35.1705551Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.lambda$testMultipleHttp3PushPromiseFrameWithInvalidHeaders$1(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1711357Z 	org.junit.Assert.assertThrows(Assert.java:1001)
2021-05-25T06:54:35.1712659Z 	org.junit.Assert.assertThrows(Assert.java:981)
2021-05-25T06:54:35.1716567Z 	io.netty.incubator.codec.http3.Http3FrameCodecTest.testMultipleHttp3PushPromiseFrameWithInvalidHeaders(Http3FrameCodecTest.java:206)
2021-05-25T06:54:35.1720805Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-05-25T06:54:35.1723265Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-05-25T06:54:35.1725833Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-05-25T06:54:35.1727885Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-05-25T06:54:35.1729592Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-05-25T06:54:35.1732032Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-05-25T06:54:35.1734766Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-05-25T06:54:35.1737581Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-05-25T06:54:35.1740298Z 	org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
2021-05-25T06:54:35.1743049Z 	org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
2021-05-25T06:54:35.1745141Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1747024Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-05-25T06:54:35.1749027Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-05-25T06:54:35.1751163Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-05-25T06:54:35.1753714Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-05-25T06:54:35.1755734Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1757267Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1758976Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1760827Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1762452Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1764042Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1765495Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-05-25T06:54:35.1766849Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-05-25T06:54:35.1768259Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-05-25T06:54:35.1769773Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-05-25T06:54:35.1771516Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-05-25T06:54:35.1773333Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-05-25T06:54:35.1774968Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-05-25T06:54:35.1776503Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-05-25T06:54:35.1778073Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-05-25T06:54:35.1780257Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-05-25T06:54:35.1783238Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-05-25T06:54:35.1786340Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-05-25T06:54:35.1789130Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-05-25T06:54:35.1792474Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-05-25T06:54:35.1796133Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-05-25T06:54:35.1798975Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-05-25T06:54:35.1801379Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-05-25T06:54:35.1803100Z : 5 leak records were discarded because they were duplicates
2021-05-25T06:54:35.1805597Z [INFO] Tests run: 90, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.766 s - in io.netty.incubator.codec.http3.Http3FrameCodecTest
2021-05-25T06:54:35.1809212Z [INFO] Running io.netty.incubator.codec.http3.Http3ServerConnectionHandlerTest
2021-05-25T06:54:35.1812592Z [INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - in io.netty.incubator.codec.http3.Http3ServerConnectionHandlerTest
2021-05-25T06:54:35.1815739Z [INFO] Running io.netty.incubator.codec.http3.Http3RequestStreamInboundHandlerTest
2021-05-25T06:54:35.1819254Z [INFO] Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0 s - in io.netty.incubator.codec.http3.Http3RequestStreamInboundHandlerTest
2021-05-25T06:54:35.1822911Z [INFO] Running io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest
2021-05-25T06:54:35.1826955Z [INFO] Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s - in io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest
2021-05-25T06:54:35.1829980Z [INFO] Running io.netty.incubator.codec.http3.QpackStaticTableTest
2021-05-25T06:54:35.1832545Z [INFO] Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s - in io.netty.incubator.codec.http3.QpackStaticTableTest
2021-05-25T06:54:35.4327739Z [INFO] 
2021-05-25T06:54:35.4328432Z [INFO] Results:
2021-05-25T06:54:35.4329074Z [INFO] 
2021-05-25T06:54:35.4329820Z [INFO] Tests run: 294, Failures: 0, Errors: 0, Skipped: 0
2021-05-25T06:54:35.4330577Z [INFO] 

why my code throws exception?

Http3HeadersFrame frame = new DefaultHttp3HeadersFrame();
            frame.headers().method("GET").path("/")
                    .authority(NetUtil.LOCALHOST4.getHostAddress() + ":" + 4431)
                    .scheme("https");
            ByteBuf byteBuf= Unpooled.copiedBuffer(new byte[0]);
            //Http3DataFrame dataFrame=new DefaultHttp3DataFrame(byteBuf);
            for (int i=1;i<=2;i++) {
                streamChannel.writeAndFlush(frame);
             //   streamChannel.writeAndFlush(dataFrame);
            }

I want to send more than one http request with single quic stream channel ,why it always throw exception blow?

io.netty.incubator.codec.http3.Http3Exception: Frame type unexpected
	at io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:249)
	at io.netty.incubator.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected(Http3FrameValidationUtils.java:92)

why a single stream channel can not send mutil request??
what's wrong with my code?

Http3ServerExample and Http3ClientExample error

/*

  • Copyright 2020 The Netty Project
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at:
  • https://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License.
    */
    package io.netty.incubator.codec.http3.example;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInitializer;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.incubator.codec.http3.DefaultHttp3DataFrame;
import io.netty.incubator.codec.http3.DefaultHttp3HeadersFrame;
import io.netty.incubator.codec.http3.Http3;
import io.netty.incubator.codec.http3.Http3DataFrame;
import io.netty.incubator.codec.http3.Http3HeadersFrame;
import io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler;
import io.netty.incubator.codec.http3.Http3ServerConnectionHandler;
import io.netty.incubator.codec.quic.InsecureQuicTokenHandler;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.incubator.codec.quic.QuicStreamChannel;
import io.netty.util.CharsetUtil;
import io.netty.util.ReferenceCountUtil;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public final class Http3ServerExample {
private static final byte[] CONTENT = "Hello World!\r\n".getBytes(CharsetUtil.US_ASCII);
static final int PORT = 9999;

private Http3ServerExample() { }

public static void main(String... args) throws Exception {
    int port;
    // Allow to pass in the port so we can also use it to run h3spec against
    if (args.length == 1) {
        port = Integer.parseInt(args[0]);
    } else {
        port = PORT;
    }
    NioEventLoopGroup group = new NioEventLoopGroup(1);
    SelfSignedCertificate cert = new SelfSignedCertificate();
    QuicSslContext sslContext = QuicSslContextBuilder.forServer(cert.key(), null, cert.cert())
            .applicationProtocols(Http3.supportedApplicationProtocols()).build();
    ChannelHandler codec = Http3.newQuicServerCodecBuilder()
            .sslContext(sslContext)
            .maxIdleTimeout(5000, TimeUnit.HOURS)
            .initialMaxData(10000000)
            .initialMaxStreamDataBidirectionalLocal(1000000)
            .initialMaxStreamDataBidirectionalRemote(1000000)
            .initialMaxStreamsBidirectional(100)
            .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
            .handler(new ChannelInitializer<QuicChannel>() {
                @Override
                protected void initChannel(QuicChannel ch) {
                    // Called for each connection
                    ch.pipeline().addLast(new Http3ServerConnectionHandler(
                            new ChannelInitializer<QuicStreamChannel>() {
                                // Called for each request-stream,
                                @Override
                                protected void initChannel(QuicStreamChannel ch) {
                                    ch.pipeline().addLast(new Http3RequestStreamInboundHandler() {

                                        @Override
                                        protected void channelRead(ChannelHandlerContext ctx,
                                                                   Http3HeadersFrame frame, boolean isLast) {
                                            if (isLast) {
                                                writeResponse(ctx);
                                            }
                                            ReferenceCountUtil.release(frame);
                                        }

                                        @Override
                                        protected void channelRead(ChannelHandlerContext ctx,
                                                                   Http3DataFrame frame, boolean isLast) {
                                            if (isLast) {
                                                writeResponse(ctx);
                                            }
                                            ReferenceCountUtil.release(frame);
                                        }

                                        private void writeResponse(ChannelHandlerContext ctx) {
                                            for(int i = 0; i<1000; i++) {
                                                String sendmessage = "Hello World "+i+"!\r\n";
                                                byte[] CONTENTTest = sendmessage.getBytes(CharsetUtil.US_ASCII);
                                                if(i == 0) {
                                                    Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
                                                    headersFrame.headers().status("200");
                                                    headersFrame.headers().add("server", "netty");
                                                    headersFrame.headers().addInt("content-length", CONTENTTest.length);
                                                    ctx.write(headersFrame);
                                                }
                                                ctx.writeAndFlush(new DefaultHttp3DataFrame(
                                                                Unpooled.wrappedBuffer(CONTENTTest)));
                                                        //.addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
                                            }
                                        }
                                    });
                                }
                            }));
                }
            }).build();
    try {
        Bootstrap bs = new Bootstrap();
        Channel channel = bs.group(group)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(port)).sync().channel();
        channel.closeFuture().sync();
    } finally {
        group.shutdownGracefully();
    }
}

}

============================================

/*

  • Copyright 2020 The Netty Project
  • The Netty Project licenses this file to you under the Apache License,
  • version 2.0 (the "License"); you may not use this file except in compliance
  • with the License. You may obtain a copy of the License at:
  • https://www.apache.org/licenses/LICENSE-2.0
  • Unless required by applicable law or agreed to in writing, software
  • distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
  • WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
  • License for the specific language governing permissions and limitations
  • under the License.
    */
    package io.netty.incubator.codec.http3.example;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.incubator.codec.http3.DefaultHttp3HeadersFrame;
import io.netty.incubator.codec.http3.Http3;
import io.netty.incubator.codec.http3.Http3ClientConnectionHandler;
import io.netty.incubator.codec.http3.Http3DataFrame;
import io.netty.incubator.codec.http3.Http3HeadersFrame;
import io.netty.incubator.codec.http3.Http3RequestStreamFrame;
import io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.incubator.codec.quic.QuicStreamChannel;
import io.netty.util.CharsetUtil;
import io.netty.util.NetUtil;
import io.netty.util.ReferenceCountUtil;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public final class Http3ClientExample {
private Http3ClientExample() { }

public static void main(String... args) throws Exception {
    NioEventLoopGroup group = new NioEventLoopGroup(1);

    try {
        QuicSslContext context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .maxIdleTimeout(5000, TimeUnit.HOURS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .build();

        Bootstrap bs = new Bootstrap();
        Channel channel = bs.group(group)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(0).sync().channel();

        QuicChannel quicChannel = QuicChannel.newBootstrap(channel)
                .handler(new Http3ClientConnectionHandler())
                .remoteAddress(new InetSocketAddress(NetUtil.LOCALHOST4, Http3ServerExample.PORT))
                .connect()
                .get();

        QuicStreamChannel streamChannel = Http3.newRequestStream(quicChannel,
                new Http3RequestStreamInboundHandler() {
                    @Override
                    protected void channelRead(ChannelHandlerContext ctx,
                                               Http3HeadersFrame frame, boolean isLast) {
                        releaseFrameAndCloseIfLast(ctx, frame, isLast);
                    }

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx,
                                               Http3DataFrame frame, boolean isLast) {
                        System.err.print(frame.content().toString(CharsetUtil.US_ASCII));
                        releaseFrameAndCloseIfLast(ctx, frame, isLast);
                    }

                    private void releaseFrameAndCloseIfLast(ChannelHandlerContext ctx,
                                                            Http3RequestStreamFrame frame, boolean isLast) {
                        ReferenceCountUtil.release(frame);
                        if (isLast) {
                            ctx.close();
                        }
                    }
                }).sync().getNow();

        // Write the Header frame and send the FIN to mark the end of the request.
        // After this its not possible anymore to write any more data.
        Http3HeadersFrame frame = new DefaultHttp3HeadersFrame();
        frame.headers().method("GET").path("/")
                .authority(NetUtil.LOCALHOST4.getHostAddress() + ":" + Http3ServerExample.PORT)
                .scheme("https");
        streamChannel.writeAndFlush(frame)
                .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT).sync();

        // Wait for the stream channel and quic channel to be closed (this will happen after we received the FIN).
        // After this is done we will close the underlying datagram channel.
        streamChannel.closeFuture().sync();

        // After we received the response lets also close the underlying QUIC channel and datagram channel.
        quicChannel.closeFuture().sync();
        channel.closeFuture().sync();
    } finally {
        group.shutdownGracefully();
    }
}

}

===============================================

io.netty.incubator.codec.http3.Http3Exception: Expected content-length 16 != 34.
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.verifyContentLength(Http3RequestStreamValidationUtils.java:152)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead(Http3RequestStreamValidationUtils.java:97)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:111)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeInboundValidationHandler.channelRead(Http3FrameTypeInboundValidationHandler.java:37)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:45)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
14:07:05.765 [nioEventLoopGroup-2-1] ERROR io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler - Caught Http3Exception on channel [id: 0x44242522, QuicStreamAddress{streamId=0}]
io.netty.incubator.codec.http3.Http3Exception: Expected content-length 16 != 34.
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.verifyContentLength(Http3RequestStreamValidationUtils.java:152)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead(Http3RequestStreamValidationUtils.java:97)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:111)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeInboundValidationHandler.channelRead(Http3FrameTypeInboundValidationHandler.java:37)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:45)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
14:07:05.765 [nioEventLoopGroup-2-1] ERROR io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler - Caught Http3Exception on channel [id: 0x44242522, QuicStreamAddress{streamId=0}]
io.netty.incubator.codec.http3.Http3Exception: Expected content-length 16 != 34.
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.verifyContentLength(Http3RequestStreamValidationUtils.java:152)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead(Http3RequestStreamValidationUtils.java:97)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:111)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeInboundValidationHandler.channelRead(Http3FrameTypeInboundValidationHandler.java:37)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:45)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
14:07:05.765 [nioEventLoopGroup-2-1] ERROR io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler - Caught Http3Exception on channel [id: 0x44242522, QuicStreamAddress{streamId=0}]
io.netty.incubator.codec.http3.Http3Exception: Expected content-length 16 != 34.
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.verifyContentLength(Http3RequestStreamValidationUtils.java:152)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead(Http3RequestStreamValidationUtils.java:97)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:111)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.channelRead(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeInboundValidationHandler.channelRead(Http3FrameTypeInboundValidationHandler.java:37)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.ChannelInboundHandlerAdapter.channelRead(ChannelInboundHandlerAdapter.java:93)
at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:45)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324)
at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:311)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:432)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)
14:07:05.765 [nioEventLoopGroup-2-1] ERROR io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler - Caught Http3Exception on channel [id: 0x44242522, QuicStreamAddress{streamId=0}]
io.netty.incubator.codec.http3.Http3Exception: Expected content-length 16 != 34.

how to use Http3HeadersFrame ?

if
private void writeResponse(ChannelHandlerContext ctx) {
for(int i = 0; i<1000; i++) {
String sendmessage = "Hello World "+i+"!\r\n";
byte[] CONTENTTest = sendmessage.getBytes(CharsetUtil.US_ASCII);
// if(i == 0) {
// Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
// headersFrame.headers().status("200");
// headersFrame.headers().add("server", "netty");
// headersFrame.headers().addInt("content-length", CONTENTTest.length);
// ctx.write(headersFrame);
// }

                                                Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
                                                headersFrame.headers().status("200");
                                                headersFrame.headers().add("server", "netty");
                                                headersFrame.headers().addInt("content-length", CONTENTTest.length);
                                                ctx.write(headersFrame);

                                                ctx.writeAndFlush(new DefaultHttp3DataFrame(
                                                                Unpooled.wrappedBuffer(CONTENTTest)));
                                                        //.addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
                                            }
                                        }

got error

io.netty.incubator.codec.http3.Http3Exception: Frame type unexpected
at io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:249)
at io.netty.incubator.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected(Http3FrameValidationUtils.java:92)
at io.netty.incubator.codec.http3.Http3RequestStreamEncodeStateValidator.write(Http3RequestStreamEncodeStateValidator.java:44)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite(AbstractChannelHandlerContext.java:709)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:792)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:702)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.write(Http3RequestStreamValidationHandler.java:83)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.write(Http3RequestStreamValidationHandler.java:34)
at io.netty.incubator.codec.http3.Http3FrameTypeDuplexValidationHandler.write(Http3FrameTypeDuplexValidationHandler.java:38)
at io.netty.channel.AbstractChannelHandlerContext.invokeWrite0(AbstractChannelHandlerContext.java:717)
at io.netty.channel.AbstractChannelHandlerContext.invokeWriteAndFlush(AbstractChannelHandlerContext.java:764)
at io.netty.channel.AbstractChannelHandlerContext.write(AbstractChannelHandlerContext.java:790)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:758)
at io.netty.channel.AbstractChannelHandlerContext.writeAndFlush(AbstractChannelHandlerContext.java:808)
at io.netty.incubator.codec.http3.example.Http3ServerExample$1$1$1.writeResponse(Http3ServerExample.java:118)
at io.netty.incubator.codec.http3.example.Http3ServerExample$1$1$1.channelRead(Http3ServerExample.java:95)
at io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler.notifyLast(Http3RequestStreamInboundHandler.java:90)
at io.netty.incubator.codec.http3.Http3RequestStreamInboundHandler.userEventTriggered(Http3RequestStreamInboundHandler.java:71)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324)
at io.netty.incubator.codec.http3.Http3RequestStreamValidationHandler.userEventTriggered(Http3RequestStreamValidationHandler.java:131)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324)
at io.netty.channel.ChannelInboundHandlerAdapter.userEventTriggered(ChannelInboundHandlerAdapter.java:117)
at io.netty.handler.codec.ByteToMessageDecoder.userEventTriggered(ByteToMessageDecoder.java:365)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
at io.netty.channel.AbstractChannelHandlerContext.fireUserEventTriggered(AbstractChannelHandlerContext.java:324)
at io.netty.channel.DefaultChannelPipeline$HeadContext.userEventTriggered(DefaultChannelPipeline.java:1428)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:346)
at io.netty.channel.AbstractChannelHandlerContext.invokeUserEventTriggered(AbstractChannelHandlerContext.java:332)
at io.netty.channel.DefaultChannelPipeline.fireUserEventTriggered(DefaultChannelPipeline.java:913)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.closeOnRead(QuicheQuicStreamChannel.java:794)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:911)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)

io.netty.incubator.codec.http3.Http3HeadersValidationException: Pseudo-header(s) included in trailers.
at io.netty.incubator.codec.http3.Http3HeadersSink.finish(Http3HeadersSink.java:63)
at io.netty.incubator.codec.http3.Http3FrameCodec.decodeHeaders(Http3FrameCodec.java:393)
at io.netty.incubator.codec.http3.Http3FrameCodec.decodeFrame(Http3FrameCodec.java:243)
at io.netty.incubator.codec.http3.Http3FrameCodec.decode(Http3FrameCodec.java:192)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:446)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.readable(QuicheQuicStreamChannel.java:419)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1377)
at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1314)
at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:856)
at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:87)
at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123)
at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:144)
at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:135)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:722)
at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:658)
at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:584)
at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:496)
at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:986)
at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
at java.lang.Thread.run(Thread.java:745)

QPACK_ATTRIBUTES_KEY value isn't set after connect

If open stream via Http3.newRequestStream after connection, the statement qpack attributes != null invalid.
Starting from 0.0.5.Final, before this worked fine.

Code to reproduce:

OpenStreamTest

package io.netty.incubator.codec.http3;

import com.adguard.vpn.endpoint.httpspeed.BaseTest;
import io.netty.bootstrap.Bootstrap;
import io.netty.channel.*;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.logging.ByteBufFormat;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.util.NetUtil;
import io.netty.util.concurrent.Future;
import io.netty.util.concurrent.GenericFutureListener;
import io.netty.util.concurrent.Promise;
import lombok.extern.log4j.Log4j2;
import org.junit.Test;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

@Log4j2
public class OpenStreamTest extends BaseTest {

    @Test
    public void testOpenSteam() throws Exception {

        QuicSslContext context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .initialMaxStreamsBidirectional(100)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .build();

        Channel channel = new Bootstrap()
                .group(GROUP)
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_REUSEADDR, true)
                .handler(codec)
                .bind(new InetSocketAddress(0))
                .sync().channel();

        Promise<Channel> streamChannelPromise = channel.eventLoop().newPromise();

        Future<QuicChannel> channelFuture = QuicChannel.newBootstrap(channel)
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000)
                .remoteAddress(new InetSocketAddress(NetUtil.LOCALHOST4, PORT))
                .handler(new ChannelInitializer<>() {
                    @Override
                    protected void initChannel(Channel ch) {
                        ch.pipeline().addLast(new Http3ClientConnectionHandler());
                    }
                })
                .connect();

        channelFuture.addListener((GenericFutureListener<Future<QuicChannel>>) connectFuture -> {
            if (connectFuture.isSuccess()) {
                // TODO wait channel active?
                Channel streamChannel = Http3.newRequestStream(connectFuture.get(), new ChannelInitializer<>() {
                    @Override
                    protected void initChannel(Channel ch) {
                        ch.pipeline()
                                .addLast(new LoggingHandler(LogLevel.INFO, ByteBufFormat.SIMPLE))
                                .addLast(new Http3RequestStreamInboundHandler() {

                                    @Override
                                    protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                                        log.info("channelRead {}, {}", frame, isLast);
                                    }

                                    @Override
                                    protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                                        log.info("channelRead {}, {}", frame, isLast);
                                    }
                                });
                    }
                }).sync().getNow();

                streamChannelPromise.setSuccess(streamChannel);
            } else {
                streamChannelPromise.setFailure(connectFuture.cause());
            }
        });

        streamChannelPromise.await();
    }
}

BaseTest

package io.netty.incubator.codec.http3;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.incubator.codec.quic.InsecureQuicTokenHandler;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public abstract class BaseTest {

    protected static final int PORT = 9999;
    protected static final NioEventLoopGroup GROUP = new NioEventLoopGroup(1);

    protected final Logger log = LoggerFactory.getLogger(this.getClass());

    @Before
    public void setUp() throws Exception {
        SelfSignedCertificate cert = new SelfSignedCertificate();
        QuicSslContext sslContext = QuicSslContextBuilder.forServer(cert.key(), null, cert.cert())
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();

        ChannelHandler codec = Http3.newQuicServerCodecBuilder()
                .sslContext(sslContext)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .initialMaxStreamDataBidirectionalRemote(1000000)
                .initialMaxStreamsBidirectional(100)
                .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
                .handler(new Http3ServerConnectionHandler(new Http3RequestStreamInboundHandler() {

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }
                }))
                .build();

        Bootstrap bs = new Bootstrap();
        Channel serverChannel = bs.group(GROUP)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(PORT)).sync().channel();
    }

    @After
    public void cleanUp() {
        GROUP.shutdownGracefully();
    }
}

Error stacktrace

[nioEventLoopGroup-2-1] WARN channel.ChannelInitializer: Failed to initialize a channel. Closing: [id: 0x57028249, QuicStreamAddress{streamId=0}]
io.netty.channel.ChannelPipelineException: io.netty.incubator.codec.http3.Http3FrameCodec.handlerAdded() has thrown an exception; removed.
	at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:624) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:223) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:381) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.addLast(DefaultChannelPipeline.java:370) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.http3.Http3RequestStreamInitializer.initChannel(Http3RequestStreamInitializer.java:42) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.Http3RequestStreamInitializer.initChannel(Http3RequestStreamInitializer.java:27) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRegistered(DefaultChannelPipeline.java:1382) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered(AbstractChannelHandlerContext.java:166) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered(AbstractChannelHandlerContext.java:152) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRegistered(DefaultChannelPipeline.java:815) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:473) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectStream(QuicheQuicChannel.java:1092) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.createStream(QuicheQuicChannel.java:384) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicChannel.createStream(QuicChannel.java:179) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.http3.Http3.newRequestStream(Http3.java:101) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.OpenStreamTest.lambda$testOpenSteam$0(OpenStreamTest.java:66) ~[test-classes/:?]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:96) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicChannelBootstrap.lambda$null$0(QuicChannelBootstrap.java:214) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.handlePendingChannelActive(QuicheQuicChannel.java:1384) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1209) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:777) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:83) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:140) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:131) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at java.lang.Thread.run(Thread.java:832) [?:?]
Caused by: java.lang.AssertionError
	at io.netty.incubator.codec.http3.Http3FrameCodec.handlerAdded(Http3FrameCodec.java:95) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	... 63 more
[nioEventLoopGroup-2-1] WARN channel.ChannelInitializer: Failed to initialize a channel. Closing: [id: 0x57028249, QuicStreamAddress{streamId=0}]
java.lang.AssertionError: null
	at io.netty.incubator.codec.http3.Http3ConnectionHandler.newRequestStreamValidationHandler(Http3ConnectionHandler.java:123) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.Http3RequestStreamInitializer.initChannel(Http3RequestStreamInitializer.java:46) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.Http3RequestStreamInitializer.initChannel(Http3RequestStreamInitializer.java:27) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.ChannelInitializer.initChannel(ChannelInitializer.java:129) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.ChannelInitializer.handlerAdded(ChannelInitializer.java:112) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.callHandlerAdded(AbstractChannelHandlerContext.java:938) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAdded0(DefaultChannelPipeline.java:609) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.access$100(DefaultChannelPipeline.java:46) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$PendingHandlerAddedTask.execute(DefaultChannelPipeline.java:1463) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.callHandlerAddedForAllHandlers(DefaultChannelPipeline.java:1115) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.invokeHandlerAddedIfNeeded(DefaultChannelPipeline.java:650) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRegistered(DefaultChannelPipeline.java:1382) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered(AbstractChannelHandlerContext.java:166) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRegistered(AbstractChannelHandlerContext.java:152) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRegistered(DefaultChannelPipeline.java:815) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:473) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectStream(QuicheQuicChannel.java:1092) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.createStream(QuicheQuicChannel.java:384) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicChannel.createStream(QuicChannel.java:179) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.http3.Http3.newRequestStream(Http3.java:101) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.OpenStreamTest.lambda$testOpenSteam$0(OpenStreamTest.java:66) ~[test-classes/:?]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:552) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess(DefaultPromise.java:96) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicChannelBootstrap.lambda$null$0(QuicChannelBootstrap.java:214) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:578) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:571) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:550) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:491) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setValue0(DefaultPromise.java:616) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.setSuccess0(DefaultPromise.java:605) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.DefaultPromise.trySuccess(DefaultPromise.java:104) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPromise.trySuccess(DefaultChannelPromise.java:84) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.handlePendingChannelActive(QuicheQuicChannel.java:1384) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1209) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:777) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:83) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:140) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:131) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at java.lang.Thread.run(Thread.java:832) [?:?]

The FIN message may precede the write

When I was using the case client, I added Http3FrameToHttpObjectCodec and HttpObjectAggregator
image
If FullHttpRequest messages are sent in this way, the server may fail to receive the messages,
And there were no errors,I added a listener to the write method of Http3FrameToHttpObjectCodec:
image
I received a stack of errors like this:
image
Of course, this is a high probability, not a certainty。

I suggest that the wirte method of Http3FrameToHttpObjectCodec be modified:
image

Is the HTTP3 server intentionally sending 4294967295 as the value for SETTINGS_MAX_FIELD_SECTION_SIZE in its SETTINGS frame?

Consider a HTTP3 server created as in the example https://github.com/netty/netty-incubator-codec-http3/blob/main/src/test/java/io/netty/incubator/codec/http3/example/Http3ServerExample.java.

Such a server generates a SETTINGS frame for its peer client whenever the client connects to the server. There are a few parameters that are sent by the server to the client in those settings. One of them is the SETTINGS_MAX_FIELD_SECTION_SIZE whose value as noted in the RFC 9114[1] by default is unlimited.

When using the server as shown in the example, I see that the server sends a settings frame with this parameter's value set to 4294967295, which is very "precise" value and thus raised my curiosity. Looking at the code here https://github.com/netty/netty-incubator-codec-http3/blob/main/src/main/java/io/netty/incubator/codec/http3/Http3CodecUtils.java#L35 it looks like this value is defaulted to 0xffffffffL (which translates to 4294967295). Was that default value really meant to be 4294967295? If it was intentional then that's fine. But the choice of this value made me curious whether this was more a oversight and whether this default value here was meant to be -1 (to represent "no specific value") and in such cases don't send this SETTINGS_MAX_FIELD_SECTION_SIZE in the SETTINGS frame (which doesn't allow negative values for the parameters).

[1] https://www.rfc-editor.org/rfc/rfc9114.html#SETTINGS_MAX_FIELD_SECTION_SIZE

QPack: Incorrect mapping of relative indices to absolute indices in field line representations

Relative dynamic table entry indices in field line representations are mapped to absolute indices values according to the following statement from RFC 9204 Section 3.2.5 "Relative Indexing":

In a field line representation, a relative index of 0 refers to the entry with absolute index equal to Base - 1.

The usages of QpackDecoderDynamicTable::getEntryRelativeEncodedField in QpackDecoder need to be fixed to use the correct index mapping, eg calculate absolute index with base - idx - 1 instead of base - idx.

Same issue needs to be fixed on the QpackEncoder side, when encoding indexed field lines, and literal field lines with name reference.

HTTP/3 codec dependency giving an error in Gradle

I'm currently working on implementing HTTP3 server using the Gradle version 7.3 on a Ubuntu 20.04 VM. But QUIC codec (0.0.20.Final) and HTTP/3 codec (0.0.11.Final) dependencies produce the following error.

Could not find netty-incubator-codec-native-quic-0.0.25.Final-${os.detected.name}-${os.detected.arch}.jar (io.netty.incubator:netty-incubator-codec-native-quic:0.0.25.Final).

Possible solution:
 - Declare repository providing the artifact, see the documentation at https://docs.gradle.org/current/userguide/declaring_repositories.html

Following are the dependencies I used

implementation 'io.netty.incubator:netty-incubator-codec-quic:0.0.20.Final:linux-x86_64'
implementation 'io.netty.incubator:netty-incubator-codec-http3:0.0.11.Final'

`Frame type unexpected` on server channelRead

If send headers frame and data frame, then for some reason data frame is read first on the server(or it's an incorrect conversion), which leads to state error.
Starting from 0.0.5.Final, before this worked fine.

Code to reproduce:

UploadTest

package io.netty.incubator.codec.http3;

import io.netty.bootstrap.Bootstrap;
import io.netty.buffer.Unpooled;
import io.netty.channel.*;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.codec.http.HttpMethod;
import io.netty.handler.codec.http.HttpScheme;
import io.netty.handler.logging.ByteBufFormat;
import io.netty.handler.logging.LogLevel;
import io.netty.handler.logging.LoggingHandler;
import io.netty.handler.ssl.util.InsecureTrustManagerFactory;
import io.netty.incubator.codec.quic.QuicChannel;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import io.netty.util.NetUtil;
import lombok.extern.log4j.Log4j2;
import org.junit.Test;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

@Log4j2
public class UploadTest extends BaseTest {

    @Test
    public void testUpload() throws Exception {

        QuicSslContext context = QuicSslContextBuilder.forClient()
                .trustManager(InsecureTrustManagerFactory.INSTANCE)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicClientCodecBuilder()
                .sslContext(context)
                .initialMaxStreamsBidirectional(100)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .build();

        Channel channel = new Bootstrap()
                .group(GROUP)
                .channel(NioDatagramChannel.class)
                .option(ChannelOption.SO_REUSEADDR, true)
                .handler(codec)
                .bind(new InetSocketAddress(0))
                .sync().channel();

        QuicChannel quicChannel = QuicChannel.newBootstrap(channel)
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 10_000)
                .remoteAddress(new InetSocketAddress(NetUtil.LOCALHOST4, PORT))
                .handler(new ChannelInitializer<>() {
                    @Override
                    protected void initChannel(Channel ch) {
                        ch.pipeline().addLast(new Http3ClientConnectionHandler());
                    }
                })
                .connect()
                .sync().get();

        Channel streamChannel = Http3.newRequestStream(quicChannel, new ChannelInitializer<>() {
            @Override
            protected void initChannel(Channel ch) {
                ch.pipeline()
                        .addLast(new LoggingHandler(LogLevel.DEBUG, ByteBufFormat.SIMPLE))
                        .addLast(new Http3RequestStreamInboundHandler() {

                            @Override
                            protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                                log.info("channelRead {}, {}", frame, isLast);
                            }

                            @Override
                            protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                                log.info("channelRead {}, {}", frame, isLast);
                            }
                        });
            }
        }).sync().getNow();

        Http3HeadersFrame headersFrame = createPostRequest(NetUtil.LOCALHOST4.getHostAddress(), PORT);
        streamChannel.writeAndFlush(headersFrame);

        Http3DataFrame data = createData(1_000_000);
        streamChannel.writeAndFlush(data);

        TimeUnit.SECONDS.sleep(5);
    }

    private static Http3HeadersFrame createPostRequest(String host, int port) {
        Http3Headers httpHeaders = new DefaultHttp3Headers();
        httpHeaders.method(HttpMethod.POST.name());
        httpHeaders.scheme(HttpScheme.HTTPS.name());
        httpHeaders.authority(host + ":" + port);
        return new DefaultHttp3HeadersFrame(httpHeaders);
    }

    private static Http3DataFrame createData(int chuckSizeBytes) {
        return new DefaultHttp3DataFrame(Unpooled.copiedBuffer(new byte[chuckSizeBytes]));
    }
}

BaseTest

package io.netty.incubator.codec.http3;

import io.netty.bootstrap.Bootstrap;
import io.netty.channel.Channel;
import io.netty.channel.ChannelHandler;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.nio.NioDatagramChannel;
import io.netty.handler.ssl.util.SelfSignedCertificate;
import io.netty.incubator.codec.quic.InsecureQuicTokenHandler;
import io.netty.incubator.codec.quic.QuicSslContext;
import io.netty.incubator.codec.quic.QuicSslContextBuilder;
import org.junit.After;
import org.junit.Before;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;

public abstract class BaseTest {

    protected static final int PORT = 9999;
    protected static final NioEventLoopGroup GROUP = new NioEventLoopGroup(1);

    protected final Logger log = LoggerFactory.getLogger(this.getClass());

    @Before
    public void setUp() throws Exception {
        SelfSignedCertificate cert = new SelfSignedCertificate();
        QuicSslContext sslContext = QuicSslContextBuilder.forServer(cert.key(), null, cert.cert())
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();

        ChannelHandler codec = Http3.newQuicServerCodecBuilder()
                .sslContext(sslContext)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .initialMaxStreamDataBidirectionalRemote(1000000)
                .initialMaxStreamsBidirectional(100)
                .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
                .handler(new Http3ServerConnectionHandler(new Http3RequestStreamInboundHandler() {

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }

                    @Override
                    protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame, boolean isLast) throws Exception {
                        log.info("channelRead {}, {}", frame, isLast);
                    }
                }))
                .build();

        Bootstrap bs = new Bootstrap();
        Channel serverChannel = bs.group(GROUP)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(PORT)).sync().channel();
    }

    @After
    public void cleanUp() {
        GROUP.shutdownGracefully();
    }
}

Error stacktrace

[nioEventLoopGroup-2-1] WARN channel.DefaultChannelPipeline: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.incubator.codec.http3.Http3Exception: Frame type unexpected
	at io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:249) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected(Http3FrameValidationUtils.java:92) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.incubator.codec.http3.Http3RequestStreamDecodeStateValidator.channelRead(Http3RequestStreamDecodeStateValidator.java:41) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:324) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:296) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:111) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.beginRead(QuicheQuicStreamChannel.java:602) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.http3.Http3FrameCodec.read(Http3FrameCodec.java:631) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.http3.Http3FrameTypeDuplexValidationHandler.read(Http3FrameTypeDuplexValidationHandler.java:85) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:46) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:287) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:51) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1400) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:230) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:216) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:474) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$1.onUnhandledInboundMessage(QuicheQuicChannel.java:360) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.DefaultChannelPipeline$TailContext.channelRead(DefaultChannelPipeline.java:1296) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.http3.Http3ConnectionHandler.channelRead(Http3ConnectionHandler.java:171) ~[netty-incubator-codec-http3-0.0.7.Final.jar:?]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) ~[netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1298) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1237) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:777) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.lambda$handlerAdded$0(QuicheQuicCodec.java:83) ~[netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:123) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:140) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:131) [netty-incubator-codec-quic-0.0.17.Final-osx-x86_64.jar:0.0.17.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:719) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:655) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:581) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30) [netty-all-4.1.65.Final.jar:4.1.65.Final]
	at java.lang.Thread.run(Thread.java:832) [?:?]

QpackEncoder.streamCancellation() throws a NullPointerException

I have a nginx http3 server listening localhost 8443 port. When I run http3 client example code, it throws a NullPoiterException.
I tried quiche's example http client, that works fine.
The following information may be helpful.

Environment:
os: macos ventura 13.3
cpu: arm64 m2
java: "11.0.18" 2023-01-17 LTS

My Example Code
I copied from here and converted it to kotlin.

val group = NioEventLoopGroup(1)

    try {
        val context = QuicSslContextBuilder.forClient()
            .trustManager(InsecureTrustManagerFactory.INSTANCE)
            .applicationProtocols(*Http3.supportedApplicationProtocols())
            .build()
        val codec = Http3.newQuicClientCodecBuilder()
            .sslContext(context)
            .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
            .initialMaxData(10000000)
            .initialMaxStreamDataBidirectionalLocal(1000000)
            .build()

        val bs = Bootstrap()
        val channel = bs.group(group)
            .channel(NioDatagramChannel::class.java)
                .handler(codec)
                .bind(0).sync().channel()

        val quicChannel = QuicChannel.newBootstrap(channel)
            .handler(Http3ClientConnectionHandler())
            .remoteAddress(InetSocketAddress(NetUtil.LOCALHOST4, 8443))
            .connect()
            .get()

        val streamChannel = Http3.newRequestStream(quicChannel, object: Http3RequestStreamInboundHandler() {

            override fun channelRead(ctx: ChannelHandlerContext, frame: Http3HeadersFrame) {
                ReferenceCountUtil.release(frame)
            }

            override fun channelRead(ctx: ChannelHandlerContext, frame: Http3DataFrame) {
                System.err.print(frame.content().toString(CharsetUtil.US_ASCII));
                ReferenceCountUtil.release(frame);
            }

            override fun channelInputClosed(ctx: ChannelHandlerContext) {
                ctx.close()
            }
        }).sync().getNow()

        // Write the Header frame and send the FIN to mark the end of the request.
        // After this its not possible anymore to write any more data.
        val frame = DefaultHttp3HeadersFrame()
        frame.headers().method("GET").path("/")
            .authority(/*NetUtil.LOCALHOST4.getHostAddress() + */"localhost:" + 8443)
            .scheme("https")
        streamChannel.writeAndFlush(frame)
            .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT).sync()

        // Wait for the stream channel and quic channel to be closed (this will happen after we received the FIN).
        // After this is done we will close the underlying datagram channel.
        streamChannel.closeFuture().sync()

        // After we received the response lets also close the underlying QUIC channel and datagram channel.
        quicChannel.close().sync()
        channel.close().sync()
    } finally {
        group.shutdownGracefully()
    }

StackTrace

io.netty.channel.DefaultChannelPipeline onUnhandledInboundException
Warn: An exceptionCaught() event was fired, and it reached at the tail of the pipeline. It usually means the last handler in the pipeline did not handle the exception.
io.netty.handler.codec.DecoderException: java.lang.NullPointerException
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:499)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.handler.codec.ByteToMessageDecoder.handlerRemoved(ByteToMessageDecoder.java:266)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:536)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
	at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:290)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:908)
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.beginRead(QuicheQuicStreamChannel.java:603)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362)
	at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:835)
	at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:814)
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004)
	at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:46)
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:287)
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:51)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1400)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:258)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:238)
	at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895)
	at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:475)
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:89)
	at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:83)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$2.onUnhandledInboundMessage(QuicheQuicChannel.java:452)
	at io.netty.channel.DefaultChannelPipeline$TailContext.channelRead(DefaultChannelPipeline.java:1296)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.incubator.codec.http3.Http3ConnectionHandler.channelRead(Http3ConnectionHandler.java:172)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:444)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.recvStream(QuicheQuicChannel.java:1569)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.processReceived(QuicheQuicChannel.java:1502)
	at io.netty.incubator.codec.quic.QuicheQuicChannel$QuicChannelUnsafe.connectionRecv(QuicheQuicChannel.java:1444)
	at io.netty.incubator.codec.quic.QuicheQuicChannel.recv(QuicheQuicChannel.java:864)
	at io.netty.incubator.codec.quic.QuicheQuicCodec$QuicCodecHeaderProcessor.process(QuicheQuicCodec.java:274)
	at io.netty.incubator.codec.quic.QuicHeaderParser.parse(QuicHeaderParser.java:127)
	at io.netty.incubator.codec.quic.QuicheQuicCodec.handleQuicPacket(QuicheQuicCodec.java:143)
	at io.netty.incubator.codec.quic.QuicheQuicCodec.channelRead(QuicheQuicCodec.java:134)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:442)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:412)
	at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:440)
	at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:420)
	at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
	at io.netty.channel.nio.AbstractNioMessageChannel$NioMessageUnsafe.read(AbstractNioMessageChannel.java:97)
	at io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:788)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:724)
	at io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:650)
	at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:562)
	at io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:997)
	at io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74)
	at io.netty.util.concurrent.FastThreadLocalRunnable.run(FastThreadLocalRunnable.java:30)
	at java.base/java.lang.Thread.run(Thread.java:834)
Caused by: java.lang.NullPointerException
	at io.netty.incubator.codec.http3.QpackEncoder.streamCancellation(QpackEncoder.java:156)
	at io.netty.incubator.codec.http3.QpackDecoderHandler.decode(QpackDecoderHandler.java:84)
	at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:529)
	at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:468)
	... 69 more

Gradle Dependency

dependencies {
//    api project(':netty-quic')
    api('io.netty:netty-all:4.1.90.Final')
//    api 'io.netty.incubator:netty-incubator-codec-native-quic:0.0.51.Final:osx-aarch_64'
    api 'io.netty.incubator:netty-incubator-codec-http3:0.0.21.Final'
    api 'com.google.code.gson:gson:2.10.1'
    testImplementation platform('org.junit:junit-bom:5.9.1')
    testImplementation 'org.junit.jupiter:junit-jupiter'
    implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8"
}

nginx server config

server {
    listen       8443 ssl http2;
    listen       8443 quic reuseport;
    server_name  localhost;

#   http2 on;

    ssl_certificate     /etc/ca/server/server-cert.pem;
    ssl_certificate_key /etc/ca/server/server-key.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers  on;

    ssl_protocols   TLSv1.3;
    add_header Alt-Svc 'h3=":8443"; ma=2592000,h3-29=":8443"; ma=2592000,h3-Q050=":8443"; ma=2592000,h3-Q046=":8443"; ma=2592000,h3-Q043=":8443"; ma=2592000,quic=":8443"; ma=2592000; v="46,43"';
        
    location / {
        root   html;
        index  index.html index.htm;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   html;
    }
}

quiche's http3 example client screenshot
image

Thank you very much

TLS Encrypted Client Hello (ECH)

Netty supports 'Server Name Indication' (SNI), however presently has no support for 'Encrypted Client Hello' (ECH). ECH replaces the older 'Encrypted SNI' (ESNI) standard which only encrypted the SNI header.

Discussed here: https://en.wikipedia.org/wiki/Server_Name_Indication#Encrypted_Client_Hello

Steps involved;

  1. Browser fetches 'HTTPS' dns record with 'ech' public key property - for good example, see: https://datatracker.ietf.org/doc/html/draft-ietf-dnsop-svcb-https-08#section-11.3.3
  2. Browser uses this public key to encrypt the 'Client Hello' when connecting to the server - more detail discussed here: https://tlswg.org/draft-ietf-tls-esni/draft-ietf-tls-esni.html#section-3.2
  3. Server determines which key to decrypt this 'Client Hello' with using a 'config_id' (uint8, limiting a server to a max of 256 different certificates it can serve) - for more information see: https://tlswg.org/draft-ietf-tls-esni/draft-ietf-tls-esni.html#section-4.1
  4. Netty presently uses 'io.netty.handler.ssl.SniHandler' to determine which certificate to serve based off the SNI entry. For ECH, this now changes to needing a new EchHandler capable of mapping a 'config_id' to the relevant certificate.

Unknowns - how does the browser determine the appropriate 'config_id' value to put in the ECH payload?

QPack: Max table capacity value should be used to encode required insert count value

According to the required insert count encoding algorithm described in RFC-9204 "4.5.1.1. Required Insert Count" the max table capacity value should be used to encode maxEntries value:

Here MaxEntries is the maximum number of entries that the dynamic table can have.
The smallest entry has empty name and value strings and has the size of 32.
Hence, MaxEntries is calculated as:
   MaxEntries = floor( MaxTableCapacity / 32 )

MaxTableCapacity is the QPACK_MAX_TABLE_CAPACITY HTTP/3 setting value sent by the decoder:

To bound the memory requirements of the decoder, the decoder limits the maximum value the encoder
is permitted to set for the dynamic table capacity.
In HTTP/3, this limit is determined by the value of SETTINGS_QPACK_MAX_TABLE_CAPACITY
 sent by the decoder;

The implementations of QPack's encoder and decoder are using the current capacity value instead:

  • QpackEncoderDynamicTable.java:241:
    return reqInsertCount == 0 ? 0 : reqInsertCount % toIntExact(2 * floorDiv(capacity, 32)) + 1;

  • QPackDecoder.java:165:
    maxEntries = floorDiv(capacity, 32);

Leak in test

2021-04-29T22:21:49.4155153Z [INFO] Running io.netty.incubator.codec.http3.QpackStreamHandlerTest
2021-04-29T22:21:49.4320341Z [INFO] Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.006 s - in io.netty.incubator.codec.http3.QpackStreamHandlerTest
2021-04-29T22:21:49.4323147Z [INFO] Running io.netty.incubator.codec.http3.Http3FrameTypeValidationHandlerTest
2021-04-29T22:21:49.4465478Z [INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 s - in io.netty.incubator.codec.http3.Http3FrameTypeValidationHandlerTest
2021-04-29T22:21:49.4475600Z [INFO] Running io.netty.incubator.codec.http3.Http3ControlStreamInboundHandlerTest
2021-04-29T22:21:49.5960486Z [INFO] Tests run: 60, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.142 s - in io.netty.incubator.codec.http3.Http3ControlStreamInboundHandlerTest
2021-04-29T22:21:49.6001510Z [INFO] Running io.netty.incubator.codec.http3.Http3PushStreamValidationHandlerTest
2021-04-29T22:21:49.6145139Z [INFO] Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.007 s - in io.netty.incubator.codec.http3.Http3PushStreamValidationHandlerTest
2021-04-29T22:21:49.6148380Z [INFO] Running io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest
2021-04-29T22:21:49.6575473Z 22:21:49.653 [main] ERROR io.netty.util.ResourceLeakDetector - LEAK: ByteBuf.release() was not called before it's garbage-collected. See https://netty.io/wiki/reference-counted-objects.html for more information.
2021-04-29T22:21:49.6577366Z Recent access records: 
2021-04-29T22:21:49.6578035Z #1:
2021-04-29T22:21:49.6579763Z 	io.netty.buffer.AdvancedLeakAwareByteBuf.writeCharSequence(AdvancedLeakAwareByteBuf.java:892)
2021-04-29T22:21:49.6582591Z 	io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:247)
2021-04-29T22:21:49.6586753Z 	io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:231)
2021-04-29T22:21:49.6590654Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandler.initPushStream(Http3UnidirectionalStreamInboundHandler.java:133)
2021-04-29T22:21:49.6596194Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandler.decode(Http3UnidirectionalStreamInboundHandler.java:83)
2021-04-29T22:21:49.6600580Z 	io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508)
2021-04-29T22:21:49.6603870Z 	io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447)
2021-04-29T22:21:49.6623111Z 	io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
2021-04-29T22:21:49.6626113Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-04-29T22:21:49.6629474Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-04-29T22:21:49.6633173Z 	io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2021-04-29T22:21:49.6635954Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
2021-04-29T22:21:49.6638762Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-04-29T22:21:49.6642109Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-04-29T22:21:49.6687196Z 	io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
2021-04-29T22:21:49.6689724Z 	io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:343)
2021-04-29T22:21:49.6693911Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest.testPushStream(Http3UnidirectionalStreamInboundHandlerTest.java:109)
2021-04-29T22:21:49.6697642Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-04-29T22:21:49.6699754Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-04-29T22:21:49.6702061Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-04-29T22:21:49.6703908Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-04-29T22:21:49.6705480Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-04-29T22:21:49.6730383Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-04-29T22:21:49.6732899Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-04-29T22:21:49.6744036Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-04-29T22:21:49.6757844Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-04-29T22:21:49.6774384Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-04-29T22:21:49.6806961Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-04-29T22:21:49.6815115Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-04-29T22:21:49.6817435Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-04-29T22:21:49.6827171Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-04-29T22:21:49.6828800Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-04-29T22:21:49.6836441Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-04-29T22:21:49.6855716Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-04-29T22:21:49.6863262Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-04-29T22:21:49.6885453Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-04-29T22:21:49.6888150Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-04-29T22:21:49.6905238Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-04-29T22:21:49.6906728Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-04-29T22:21:49.6908440Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-04-29T22:21:49.6910252Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-04-29T22:21:49.6912056Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-04-29T22:21:49.6971425Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-04-29T22:21:49.6973603Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-04-29T22:21:49.6975462Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-04-29T22:21:49.6977680Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-04-29T22:21:49.6980680Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-04-29T22:21:49.6998869Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-04-29T22:21:49.7002405Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-04-29T22:21:49.7005809Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-04-29T22:21:49.7013548Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-04-29T22:21:49.7016345Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-04-29T22:21:49.7018725Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-04-29T22:21:49.7020227Z Created at:
2021-04-29T22:21:49.7022098Z 	io.netty.buffer.UnpooledByteBufAllocator.newDirectBuffer(UnpooledByteBufAllocator.java:96)
2021-04-29T22:21:49.7024946Z 	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:187)
2021-04-29T22:21:49.7080411Z 	io.netty.buffer.AbstractByteBufAllocator.directBuffer(AbstractByteBufAllocator.java:173)
2021-04-29T22:21:49.7107141Z 	io.netty.buffer.AbstractByteBufAllocator.buffer(AbstractByteBufAllocator.java:107)
2021-04-29T22:21:49.7109831Z 	io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:246)
2021-04-29T22:21:49.7112846Z 	io.netty.incubator.codec.http3.Http3CodecUtils.connectionError(Http3CodecUtils.java:231)
2021-04-29T22:21:49.7116906Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandler.initPushStream(Http3UnidirectionalStreamInboundHandler.java:133)
2021-04-29T22:21:49.7121839Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandler.decode(Http3UnidirectionalStreamInboundHandler.java:83)
2021-04-29T22:21:49.7126243Z 	io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:508)
2021-04-29T22:21:49.7129615Z 	io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:447)
2021-04-29T22:21:49.7132619Z 	io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
2021-04-29T22:21:49.7163387Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-04-29T22:21:49.7166975Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-04-29T22:21:49.7304774Z 	io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
2021-04-29T22:21:49.7307698Z 	io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
2021-04-29T22:21:49.7310525Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
2021-04-29T22:21:49.7325883Z 	io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
2021-04-29T22:21:49.7328942Z 	io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
2021-04-29T22:21:49.7331463Z 	io.netty.channel.embedded.EmbeddedChannel.writeInbound(EmbeddedChannel.java:343)
2021-04-29T22:21:49.7336483Z 	io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest.testPushStream(Http3UnidirectionalStreamInboundHandlerTest.java:109)
2021-04-29T22:21:49.7340173Z 	sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
2021-04-29T22:21:49.7359812Z 	sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
2021-04-29T22:21:49.7362471Z 	sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
2021-04-29T22:21:49.7364376Z 	java.lang.reflect.Method.invoke(Method.java:498)
2021-04-29T22:21:49.7365947Z 	org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
2021-04-29T22:21:49.7368124Z 	org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
2021-04-29T22:21:49.7370653Z 	org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
2021-04-29T22:21:49.7373173Z 	org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
2021-04-29T22:21:49.7375144Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-04-29T22:21:49.7376845Z 	org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
2021-04-29T22:21:49.7378642Z 	org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
2021-04-29T22:21:49.7381069Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
2021-04-29T22:21:49.7490259Z 	org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
2021-04-29T22:21:49.7493228Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-04-29T22:21:49.7494672Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-04-29T22:21:49.7502158Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-04-29T22:21:49.7504204Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-04-29T22:21:49.7510179Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-04-29T22:21:49.7512529Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-04-29T22:21:49.7518723Z 	org.junit.runners.Suite.runChild(Suite.java:128)
2021-04-29T22:21:49.7520832Z 	org.junit.runners.Suite.runChild(Suite.java:27)
2021-04-29T22:21:49.7522283Z 	org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
2021-04-29T22:21:49.7604836Z 	org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
2021-04-29T22:21:49.7606482Z 	org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
2021-04-29T22:21:49.7608152Z 	org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
2021-04-29T22:21:49.7609649Z 	org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
2021-04-29T22:21:49.7611064Z 	org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
2021-04-29T22:21:49.7613018Z 	org.junit.runners.ParentRunner.run(ParentRunner.java:413)
2021-04-29T22:21:49.7616448Z 	org.apache.maven.surefire.junit4.JUnit4Provider.execute(JUnit4Provider.java:365)
2021-04-29T22:21:49.7619355Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeWithRerun(JUnit4Provider.java:273)
2021-04-29T22:21:49.7622149Z 	org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:238)
2021-04-29T22:21:49.7624648Z 	org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:159)
2021-04-29T22:21:49.7628825Z 	org.apache.maven.surefire.booter.ForkedBooter.invokeProviderInSameClassLoader(ForkedBooter.java:384)
2021-04-29T22:21:49.7632180Z 	org.apache.maven.surefire.booter.ForkedBooter.runSuitesInProcess(ForkedBooter.java:345)
2021-04-29T22:21:49.7634734Z 	org.apache.maven.surefire.booter.ForkedBooter.execute(ForkedBooter.java:126)
2021-04-29T22:21:49.7638949Z 	org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:418)
2021-04-29T22:21:49.7642781Z [INFO] Tests run: 18, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.143 s - in io.netty.incubator.codec.http3.Http3UnidirectionalStreamInboundHandlerTest
2021-04-29T22:21:49.7645607Z [INFO] Running io.netty.incubator.codec.http3.HttpConversionUtilTest
2021-04-29T22:21:49.7869987Z [INFO] Tests run: 16, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 s - in io.netty.incubator.codec.http3.HttpConversionUtilTest

UnsatisfiedLinkError: 'void io.netty.incubator.codec.quic.Quiche.quiche_enable_debug_logging(io.netty.incubator.codec.quic.QuicheLogger)'

Cloning this repo and running the following trivial build command leads to an java.lang.UnsatisfiedLinkError:

mvn clean package -DskipTests=true -DskipH3Spec=true
mvn exec:java -Dexec.mainClass=io.netty.incubator.codec.http3.Http3SpecTestServer -Dexec.classpathScope=test

I just wanted to launch the HTTP3 test server to try a simple request against it, but these above command fails with:

19:08:45.512 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
19:08:45.512 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
19:08:45.516 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true
19:08:45.516 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true
19:08:45.516 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@5fb22723
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numHeapArenas: 16
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numDirectArenas: 16
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.pageSize: 8192
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxOrder: 9
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.chunkSize: 4194304
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.smallCacheSize: 256
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.normalCacheSize: 64
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimInterval: 8192
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.useCacheForAllThreads: false
19:08:45.521 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
19:08:45.524 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.allocator.type: pooled
19:08:45.524 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.threadLocalDirectBufferSize: 0
19:08:45.524 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.maxThreadLocalCharBufferSize: 16384
19:08:45.639 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.workdir: /var/folders/2q/5z26jhn97cbdxq34t7wn_pm40000gn/T (io.netty.tmpdir)
19:08:45.639 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.deleteLibAfterLoading: true
19:08:45.639 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.tryPatchShadedId: true
19:08:45.639 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.detectNativeLibraryDuplicates: true
19:08:48.681 [io.netty.incubator.codec.http3.Http3SpecTestServer.main()] DEBUG io.netty.util.internal.NativeLibraryLoader - Successfully loaded the library /var/folders/2q/5z26jhn97cbdxq34t7wn_pm40000gn/T/libnetty_quiche_osx_aarch_646912086582190356232.dylib
[WARNING] 
java.lang.UnsatisfiedLinkError: failed to load the required native library
    at io.netty.incubator.codec.quic.Quic.ensureAvailability (Quic.java:78)
    at io.netty.incubator.codec.quic.QuicheQuicSslContext.<init> (QuicheQuicSslContext.java:74)
    at io.netty.incubator.codec.quic.QuicSslContextBuilder.build (QuicSslContextBuilder.java:350)
    at io.netty.incubator.codec.http3.Http3SpecTestServer.main (Http3SpecTestServer.java:55)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:829)
Caused by: java.lang.UnsatisfiedLinkError: 'void io.netty.incubator.codec.quic.Quiche.quiche_enable_debug_logging(io.netty.incubator.codec.quic.QuicheLogger)'
    at io.netty.incubator.codec.quic.Quiche.quiche_enable_debug_logging (Native Method)
    at io.netty.incubator.codec.quic.Quiche.<clinit> (Quiche.java:62)
    at io.netty.incubator.codec.quic.Quic.<clinit> (Quic.java:43)
    at io.netty.incubator.codec.quic.QuicheQuicSslContext.<init> (QuicheQuicSslContext.java:74)
    at io.netty.incubator.codec.quic.QuicSslContextBuilder.build (QuicSslContextBuilder.java:350)
    at io.netty.incubator.codec.http3.Http3SpecTestServer.main (Http3SpecTestServer.java:55)
    at org.codehaus.mojo.exec.ExecJavaMojo$1.run (ExecJavaMojo.java:254)
    at java.lang.Thread.run (Thread.java:829)

I'm on a M1 macOS system. Did I miss some build step or is this a genuine issue?

Http3.newQuicClientCodecBuilder().build () takes a long time

The execution time is up to 40 milliseconds :

ChannelHandler codec = Http3.newQuicClientCodecBuilder()
.sslContext(context)
.maxIdleTimeout(5000 * 5000, TimeUnit.MILLISECONDS)
.initialMaxData(10000000)
.initialMaxStreamDataBidirectionalLocal(1000000)
.build();

Application close with err=200

After updating to the latest version, the example stopped working - Http3ServerExample and canary as client

13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]

Reason meaning

126:Error decoding headers on stream 0: Error calculating Base.

Is problem of canary, quiche or something else?

Server code based on
https://github.com/netty/netty-incubator-codec-http3/blob/ea2fb1c699e88db45db93e6915ff4829cf93305f/src/test/java/io/netty/incubator/codec/http3/example/Http3ServerExample.java

Server

public final class Http3ServerExample {
    private static final byte[] CONTENT = "Hello World!\r\n".getBytes(CharsetUtil.US_ASCII);
    static final int PORT = 9999;

    private Http3ServerExample() { }

    public static void main(String... args) throws Exception {
        int port;
        // Allow to pass in the port so we can also use it to run h3spec against
        if (args.length == 1) {
            port = Integer.parseInt(args[0]);
        } else {
            port = PORT;
        }
        NioEventLoopGroup group = new NioEventLoopGroup(1);
        File cert = new File("/tmp/server.pem");
        File key = new File("/tmp/key.pem");
        QuicSslContext sslContext = QuicSslContextBuilder.forServer(key, null, cert)
                .applicationProtocols(Http3.supportedApplicationProtocols()).build();
        ChannelHandler codec = Http3.newQuicServerCodecBuilder()
                .sslContext(sslContext)
                .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
                .initialMaxData(10000000)
                .initialMaxStreamDataBidirectionalLocal(1000000)
                .initialMaxStreamDataBidirectionalRemote(1000000)
                .initialMaxStreamsBidirectional(100)
                .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
                .handler(new ChannelInitializer<QuicChannel>() {
                    @Override
                    protected void initChannel(QuicChannel ch) {
                        // Called for each connection
                        Http3ServerPushStreamManager pushStreamManager = new Http3ServerPushStreamManager(ch);
                        ch.pipeline().addLast(new Http3ServerConnectionHandler(
                                new ChannelInitializer<QuicStreamChannel>() {
                                    // Called for each request-stream,
                                    @Override
                                    protected void initChannel(QuicStreamChannel ch) {
                                        ch.pipeline().addLast(new Http3RequestStreamInboundHandler() {

                                            @Override
                                            protected void channelRead(ChannelHandlerContext ctx,
                                                                       Http3HeadersFrame frame, boolean isLast) {
                                                if (isLast) {
                                                    writeResponse(ctx);
                                                }
                                                ReferenceCountUtil.release(frame);
                                            }

                                            @Override
                                            protected void channelRead(ChannelHandlerContext ctx,
                                                                       Http3DataFrame frame, boolean isLast) {
                                                if (isLast) {
                                                    writeResponse(ctx);
                                                }
                                                ReferenceCountUtil.release(frame);
                                            }

                                            private void writeResponse(ChannelHandlerContext ctx) {
                                                Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
                                                headersFrame.headers().status("404");
                                                headersFrame.headers().add("server", "netty");
                                                headersFrame.headers().addInt("content-length", CONTENT.length);
                                                ctx.write(headersFrame);
                                                ctx.writeAndFlush(new DefaultHttp3DataFrame(
                                                        Unpooled.wrappedBuffer(CONTENT)))
                                                        .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
                                            }
                                        });
                                    }
                                }, pushStreamManager.controlStreamListener(), null, null, false));
                    }
                }).build();
        try {
            Bootstrap bs = new Bootstrap();
            Channel channel = bs.group(group)
                    .channel(NioDatagramChannel.class)
                    .handler(codec)
                    .bind(new InetSocketAddress("127.0.0.1", port)).sync().channel();
            channel.closeFuture().sync();
        } finally {
            group.shutdownGracefully();
        }
    }
}

Test client - canary with command line

/Applications/Google\ Chrome\ Canary.app/Contents/MacOS/Google\ Chrome\ Canary \
 --enable-quic \
 --quic-version=h3-29 \
 --origin-to-force-quic-on=localhost:9999 \
 --host-resolver-rules='MAP localhost:9999 127.0.0.1:9999' \
 --ignore-certificate-errors-spki-list=7pB3RsApGvbs+eozIrEa1i94dU7aWimske5uBzao7QU= \
 https://localhost:9999

For self signed cert
--ignore-certificate-errors-spki-list=
value can be obtained by

openssl x509 -pubkey -noout -in /tmp/server.pem | 
                  openssl rsa -pubin -outform der |
                  openssl dgst -sha256 -binary | base64
Full log

13:20:32.141 [main] DEBUG io.netty.util.internal.logging.InternalLoggerFactory - Using SLF4J as the default logging framework
13:20:32.148 [main] DEBUG io.netty.channel.MultithreadEventLoopGroup - -Dio.netty.eventLoopThreads: 24
13:20:32.174 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.initialSize: 1024
13:20:32.174 [main] DEBUG io.netty.util.internal.InternalThreadLocalMap - -Dio.netty.threadLocalMap.stringBuilder.maxSize: 4096
13:20:32.185 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.noKeySetOptimization: false
13:20:32.185 [main] DEBUG io.netty.channel.nio.NioEventLoop - -Dio.netty.selectorAutoRebuildThreshold: 512
13:20:32.211 [main] DEBUG io.netty.util.internal.PlatformDependent0 - -Dio.netty.noUnsafe: false
13:20:32.211 [main] DEBUG io.netty.util.internal.PlatformDependent0 - Java version: 14
13:20:32.214 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.theUnsafe: available
13:20:32.214 [main] DEBUG io.netty.util.internal.PlatformDependent0 - sun.misc.Unsafe.copyMemory: available
13:20:32.215 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Buffer.address: available
13:20:32.215 [main] DEBUG io.netty.util.internal.PlatformDependent0 - direct buffer constructor: unavailable: Reflective setAccessible(true) disabled
13:20:32.216 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.Bits.unaligned: available, true
13:20:32.218 [main] DEBUG io.netty.util.internal.PlatformDependent0 - jdk.internal.misc.Unsafe.allocateUninitializedArray(int): unavailable: class io.netty.util.internal.PlatformDependent0$6 cannot access class jdk.internal.misc.Unsafe (in module java.base) because module java.base does not export jdk.internal.misc to unnamed module @4439f31e
13:20:32.219 [main] DEBUG io.netty.util.internal.PlatformDependent0 - java.nio.DirectByteBuffer.<init>(long, int): unavailable
13:20:32.219 [main] DEBUG io.netty.util.internal.PlatformDependent - sun.misc.Unsafe: available
13:20:32.239 [main] DEBUG io.netty.util.internal.PlatformDependent - maxDirectMemory: 4294967296 bytes (maybe)
13:20:32.239 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.tmpdir: /var/folders/xr/zq7hw3lj3rldvhgmtt5r6nm80000gn/T (java.io.tmpdir)
13:20:32.239 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.bitMode: 64 (sun.arch.data.model)
13:20:32.241 [main] DEBUG io.netty.util.internal.PlatformDependent - Platform: MacOS
13:20:32.242 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.maxDirectMemory: -1 bytes
13:20:32.242 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.uninitializedArrayAllocationThreshold: -1
13:20:32.243 [main] DEBUG io.netty.util.internal.CleanerJava9 - java.nio.ByteBuffer.cleaner(): available
13:20:32.244 [main] DEBUG io.netty.util.internal.PlatformDependent - -Dio.netty.noPreferDirect: false
13:20:32.251 [main] DEBUG io.netty.util.internal.PlatformDependent - org.jctools-core.MpscChunkedArrayQueue: available
13:20:32.294 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.level: simple
13:20:32.294 [main] DEBUG io.netty.util.ResourceLeakDetector - -Dio.netty.leakDetection.targetRecords: 4
13:20:32.301 [main] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkAccessible: true
13:20:32.302 [main] DEBUG io.netty.buffer.AbstractByteBuf - -Dio.netty.buffer.checkBounds: true
13:20:32.302 [main] DEBUG io.netty.util.ResourceLeakDetectorFactory - Loaded default ResourceLeakDetector: io.netty.util.ResourceLeakDetector@1060b431
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numHeapArenas: 24
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.numDirectArenas: 24
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.pageSize: 8192
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxOrder: 11
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.chunkSize: 16777216
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.smallCacheSize: 256
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.normalCacheSize: 64
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedBufferCapacity: 32768
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimInterval: 8192
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.cacheTrimIntervalMillis: 0
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.useCacheForAllThreads: true
13:20:32.306 [main] DEBUG io.netty.buffer.PooledByteBufAllocator - -Dio.netty.allocator.maxCachedByteBuffersPerChunk: 1023
13:20:32.314 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.allocator.type: pooled
13:20:32.314 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.threadLocalDirectBufferSize: 0
13:20:32.315 [main] DEBUG io.netty.buffer.ByteBufUtil - -Dio.netty.maxThreadLocalCharBufferSize: 16384
13:20:32.581 [main] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.workdir: /var/folders/xr/zq7hw3lj3rldvhgmtt5r6nm80000gn/T (io.netty.tmpdir)
13:20:32.581 [main] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.deleteLibAfterLoading: true
13:20:32.581 [main] DEBUG io.netty.util.internal.NativeLibraryLoader - -Dio.netty.native.tryPatchShadedId: true
13:20:32.912 [main] DEBUG io.netty.util.internal.NativeLibraryLoader - Successfully loaded the library /var/folders/xr/zq7hw3lj3rldvhgmtt5r6nm80000gn/T/libnetty_quiche_osx_x86_648545327336240740440.dylib
13:20:32.959 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv4Stack: false
13:20:32.959 [main] DEBUG io.netty.util.NetUtil - -Djava.net.preferIPv6Addresses: false
13:20:32.967 [main] DEBUG io.netty.util.NetUtilInitializations - Loopback interface: lo0 (lo0, 0:0:0:0:0:0:0:1%lo0)
13:20:32.968 [main] DEBUG io.netty.util.NetUtil - Failed to get SOMAXCONN from sysctl and file /proc/sys/net/core/somaxconn. Default: 128
13:20:33.020 [main] DEBUG io.netty.channel.DefaultChannelId - -Dio.netty.processId: 33344 (auto-detected)
13:20:33.025 [main] DEBUG io.netty.channel.DefaultChannelId - -Dio.netty.machineId: ac:de:48:ff:fe:00:11:22 (auto-detected)
13:20:44.224 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxCapacityPerThread: 4096
13:20:44.225 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.maxSharedCapacityFactor: 2
13:20:44.225 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.linkCapacity: 16
13:20:44.225 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.ratio: 8
13:20:44.225 [nioEventLoopGroup-2-1] DEBUG io.netty.util.Recycler - -Dio.netty.recycler.delayedQueue.ratio: 8
13:20:44.319 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Initial version=ff00001d dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 scid= token=6e657474797f000001d2b4e491f6aeacf3 len=1303 pn=2
13:20:44.319 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm CRYPTO off=0 len=327
13:20:44.321 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 write message lvl=Initial len=90
13:20:44.321 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 set write secret lvl=Handshake
13:20:44.322 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 write message lvl=Handshake len=1557
13:20:44.322 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 set write secret lvl=OneRTT
13:20:44.322 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 set read secret lvl=Handshake
13:20:44.322 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=955
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Initial version=ff00001d dcid= scid=772194f28a2c2ff6aa14b37c35063e06a1614388 len=116 pn=0
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm ACK delay=419 blocks=[2..2]
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm CRYPTO off=0 len=90
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=998.852788ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=147 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=158.925µs recent_delivered_packet_sent_time=159.272µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Handshake version=ff00001d dcid= scid=772194f28a2c2ff6aa14b37c35063e06a1614388 len=1019 pn=0
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm CRYPTO off=0 len=999
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=998.713269ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=1196 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=289.937µs recent_delivered_packet_sent_time=290.184µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Handshake version=ff00001d dcid= scid=772194f28a2c2ff6aa14b37c35063e06a1614388 len=579 pn=1
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm CRYPTO off=999 len=558
13:20:44.323 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=998.451068ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=1805 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=552.367µs recent_delivered_packet_sent_time=552.604µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Initial version=ff00001d dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 scid= token=6e657474797f000001d2b4e491f6aeacf3 len=1303 pn=4
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm CRYPTO off=0 len=327
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=955
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Initial version=ff00001d dcid= scid=772194f28a2c2ff6aa14b37c35063e06a1614388 len=23 pn=1
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm ACK delay=26 blocks=[2..2, 4..4]
13:20:44.324 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=997.503294ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=1805 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=1.500373ms recent_delivered_packet_sent_time=1.500704ms app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Handshake version=ff00001d dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 scid= len=61 pn=5
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=21 blocks=[0..1]
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 0
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 1
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm CRYPTO off=0 len=36
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 set read secret lvl=OneRTT
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 772194f28a2c2ff6aa14b37c35063e06a1614388 write message lvl=OneRTT len=396
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=false TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 dropped epoch 0 state
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=60 pn=6
13:20:44.325 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm STREAM id=2 off=0 len=41 fin=false
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Handshake version=ff00001d dcid= scid=772194f28a2c2ff6aa14b37c35063e06a1614388 len=22 pn=2
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm ACK delay=1127 blocks=[5..5]
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=none latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=9.185731ms recent_delivered_packet_sent_time=11.414546ms app_limited_at_pkt=1658  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=429 pn=0
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm ACK delay=1084 blocks=[6..6]
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm HANDSHAKE_DONE
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm CRYPTO off=0 len=396
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=3 off=0 len=1 fin=false
13:20:44.334 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.129378ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=431 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=9.338188ms recent_delivered_packet_sent_time=11.566951ms app_limited_at_pkt=1658  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.338 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:44.338 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=3 off=1 len=11 fin=false
13:20:44.338 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.092968ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=465 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=12.971656ms recent_delivered_packet_sent_time=15.200442ms app_limited_at_pkt=2089  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.351 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:44.351 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=7 off=0 len=1 fin=false
13:20:44.351 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.085215ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=489 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=26.482094ms recent_delivered_packet_sent_time=28.710891ms app_limited_at_pkt=2123  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.352 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:44.352 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=7 off=1 len=4 fin=false
13:20:44.352 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.140836ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=516 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=26.973355ms recent_delivered_packet_sent_time=29.202125ms app_limited_at_pkt=2147  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.353 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:44.353 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=11 off=0 len=1 fin=false
13:20:44.353 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.127668ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=540 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=28.038281ms recent_delivered_packet_sent_time=30.267087ms app_limited_at_pkt=2174  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.357 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=428 pn=7
13:20:44.357 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm STREAM id=2 off=41 len=9 fin=false
13:20:44.357 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm STREAM id=0 off=0 len=396 fin=true
13:20:44.384 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:44.384 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm ACK delay=3430 blocks=[6..7]
13:20:44.384 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=7 off=5 len=7 fin=false
13:20:44.384 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.061441ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=576 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=59.474382ms recent_delivered_packet_sent_time=61.70317ms app_limited_at_pkt=2198  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.385 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:44.385 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=7 off=12 len=4 fin=false
13:20:44.385 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.131694ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=603 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=59.956058ms recent_delivered_packet_sent_time=62.184873ms app_limited_at_pkt=2234  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.386 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:44.386 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=0 off=0 len=7 fin=false
13:20:44.386 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.072064ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=633 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=61.421516ms recent_delivered_packet_sent_time=63.650302ms app_limited_at_pkt=2261  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.388 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:44.388 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=0 off=7 len=16 fin=false
13:20:44.388 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.123394ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=672 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=63.060348ms recent_delivered_packet_sent_time=65.289172ms app_limited_at_pkt=2291  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.388 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:44.388 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 tx frm STREAM id=0 off=23 len=0 fin=true
13:20:44.389 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 timer=30.178115ms latest_rtt=1.748382ms srtt=Some(1.748382ms) min_rtt=1.748382ms rttvar=874.191µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=695 app_limited=true congestion_recovery_start_time=None delivered=1658 delivered_time=63.740739ms recent_delivered_packet_sent_time=65.969528ms app_limited_at_pkt=2330  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=24 pn=8
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=4 blocks=[0..1]
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 0
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 1
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 dropped epoch 1 state
13:20:44.391 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=2
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=24 pn=9
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=1 blocks=[0..3]
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 2
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 3
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=2
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=24 pn=10
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=3144 blocks=[0..4]
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 4
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=1
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=24 pn=11
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=1 blocks=[0..6]
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 5
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 6
13:20:44.392 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm PADDING len=2
13:20:44.393 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx pkt Short dcid=772194f28a2c2ff6aa14b37c35063e06a1614388 key_phase=false len=89 pn=12
13:20:44.393 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm ACK delay=5 blocks=[0..7]
13:20:44.393 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 772194f28a2c2ff6aa14b37c35063e06a1614388 packet newly acked 7
13:20:44.393 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:44.394 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Initial version=ff00001d dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a scid= token=6e657474797f0000014e26b809b4261775 len=1303 pn=2
13:20:44.394 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm CRYPTO off=0 len=556
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a write message lvl=Initial len=96
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a set write secret lvl=Handshake
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a write message lvl=Handshake len=157
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a set write secret lvl=OneRTT
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a set read secret lvl=Handshake
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm PADDING len=726
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Initial version=ff00001d dcid= scid=48f9fc3d4764642222548d6a45940ea4581dfc3a len=122 pn=0
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm ACK delay=135 blocks=[2..2]
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm CRYPTO off=0 len=96
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=998.923474ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=153 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=81.527µs recent_delivered_packet_sent_time=81.891µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Handshake version=ff00001d dcid= scid=48f9fc3d4764642222548d6a45940ea4581dfc3a len=177 pn=0
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm CRYPTO off=0 len=157
13:20:44.395 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=998.850155ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=360 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=152.956µs recent_delivered_packet_sent_time=153.173µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Handshake version=ff00001d dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a scid= len=61 pn=3
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm ACK delay=33 blocks=[0..0]
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 0
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm CRYPTO off=0 len=36
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a set read secret lvl=OneRTT
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 48f9fc3d4764642222548d6a45940ea4581dfc3a write message lvl=OneRTT len=396
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=true TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a dropped epoch 0 state
13:20:44.396 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=61 pn=4
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm STREAM id=2 off=0 len=42 fin=false
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Handshake version=ff00001d dcid= scid=48f9fc3d4764642222548d6a45940ea4581dfc3a len=22 pn=1
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm ACK delay=85 blocks=[3..3]
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=none latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=747.765µs recent_delivered_packet_sent_time=1.746143ms app_limited_at_pkt=207  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=428 pn=0
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm ACK delay=45 blocks=[4..4]
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm HANDSHAKE_DONE
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm CRYPTO off=0 len=396
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=3 off=0 len=1 fin=false
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.550446ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=430 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=898.121µs recent_delivered_packet_sent_time=1.896481ms app_limited_at_pkt=207  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=3 off=1 len=11 fin=false
13:20:44.397 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.612514ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=464 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.276547ms recent_delivered_packet_sent_time=2.274987ms app_limited_at_pkt=637  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=7 off=0 len=1 fin=false
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.55452ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=488 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.963945ms recent_delivered_packet_sent_time=2.96242ms app_limited_at_pkt=671  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=7 off=1 len=4 fin=false
13:20:44.398 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.613329ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=515 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.289075ms recent_delivered_packet_sent_time=3.287514ms app_limited_at_pkt=695  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=11 off=0 len=1 fin=false
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.561339ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=539 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.729624ms recent_delivered_packet_sent_time=3.72805ms app_limited_at_pkt=722  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=428 pn=5
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm STREAM id=2 off=42 len=9 fin=false
13:20:44.399 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm STREAM id=0 off=0 len=396 fin=true
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm ACK delay=172 blocks=[4..5]
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=7 off=5 len=7 fin=false
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.515617ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=575 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=4.789349ms recent_delivered_packet_sent_time=5.787871ms app_limited_at_pkt=746  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=7 off=12 len=4 fin=false
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.616372ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=602 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.141624ms recent_delivered_packet_sent_time=6.140066ms app_limited_at_pkt=782  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.401 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=0 off=0 len=7 fin=false
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.578604ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=632 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.484612ms recent_delivered_packet_sent_time=6.483023ms app_limited_at_pkt=809  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=0 off=7 len=16 fin=false
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.614294ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=671 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.826944ms recent_delivered_packet_sent_time=6.825581ms app_limited_at_pkt=839  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a tx frm STREAM id=0 off=23 len=0 fin=true
13:20:44.402 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a timer=27.598677ms latest_rtt=890.391µs srtt=Some(890.391µs) min_rtt=890.391µs rttvar=445.195µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=694 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=6.119692ms recent_delivered_packet_sent_time=7.118096ms app_limited_at_pkt=878  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=24 pn=6
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm ACK delay=3 blocks=[0..1]
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 0
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 1
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a dropped epoch 1 state
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm PADDING len=2
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=24 pn=7
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm ACK delay=1 blocks=[0..3]
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 2
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 3
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm PADDING len=2
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=24 pn=8
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm ACK delay=5 blocks=[0..5]
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 4
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 5
13:20:44.403 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm PADDING len=2
13:20:44.404 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx pkt Short dcid=48f9fc3d4764642222548d6a45940ea4581dfc3a key_phase=false len=89 pn=9
13:20:44.404 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm ACK delay=3 blocks=[0..7]
13:20:44.404 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 6
13:20:44.404 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 48f9fc3d4764642222548d6a45940ea4581dfc3a packet newly acked 7
13:20:44.404 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:44.405 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Initial version=ff00001d dcid=abb87522635084505716a9ddd2383b47a6c0f739 scid= token=6e657474797f000001eca4ccbc3c8f87f9 len=1303 pn=2
13:20:44.405 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm CRYPTO off=0 len=545
13:20:44.405 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 write message lvl=Initial len=96
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 set write secret lvl=Handshake
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 write message lvl=Handshake len=157
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 set write secret lvl=OneRTT
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 set read secret lvl=Handshake
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm PADDING len=737
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Initial version=ff00001d dcid= scid=abb87522635084505716a9ddd2383b47a6c0f739 len=122 pn=0
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm ACK delay=149 blocks=[2..2]
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm CRYPTO off=0 len=96
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=998.899337ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=153 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=105.296µs recent_delivered_packet_sent_time=105.637µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Handshake version=ff00001d dcid= scid=abb87522635084505716a9ddd2383b47a6c0f739 len=177 pn=0
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm CRYPTO off=0 len=157
13:20:44.406 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=998.822485ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=360 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=180.566µs recent_delivered_packet_sent_time=180.813µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Handshake version=ff00001d dcid=abb87522635084505716a9ddd2383b47a6c0f739 scid= len=61 pn=3
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm ACK delay=34 blocks=[0..0]
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 0
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm CRYPTO off=0 len=36
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 set read secret lvl=OneRTT
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: abb87522635084505716a9ddd2383b47a6c0f739 write message lvl=OneRTT len=396
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=true TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 dropped epoch 0 state
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=61 pn=4
13:20:44.407 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm STREAM id=2 off=0 len=42 fin=false
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Handshake version=ff00001d dcid= scid=abb87522635084505716a9ddd2383b47a6c0f739 len=22 pn=1
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm ACK delay=103 blocks=[3..3]
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=none latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=938.313µs recent_delivered_packet_sent_time=2.079097ms app_limited_at_pkt=207  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=428 pn=0
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm ACK delay=59 blocks=[4..4]
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm HANDSHAKE_DONE
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm CRYPTO off=0 len=396
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=3 off=0 len=1 fin=false
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.923484ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=430 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.062761ms recent_delivered_packet_sent_time=2.203477ms app_limited_at_pkt=207  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=3 off=1 len=11 fin=false
13:20:44.408 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.951542ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=464 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.501436ms recent_delivered_packet_sent_time=2.642158ms app_limited_at_pkt=637  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=7 off=0 len=1 fin=false
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.901842ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=488 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.198084ms recent_delivered_packet_sent_time=3.338812ms app_limited_at_pkt=671  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=7 off=1 len=4 fin=false
13:20:44.409 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.952778ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=515 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.507464ms recent_delivered_packet_sent_time=3.648193ms app_limited_at_pkt=695  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.410 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:44.410 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=11 off=0 len=1 fin=false
13:20:44.410 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.893718ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=539 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.983269ms recent_delivered_packet_sent_time=4.12399ms app_limited_at_pkt=722  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.411 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=428 pn=5
13:20:44.411 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm STREAM id=2 off=42 len=9 fin=false
13:20:44.411 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm STREAM id=0 off=0 len=396 fin=true
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm ACK delay=116 blocks=[4..5]
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=7 off=5 len=7 fin=false
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.881558ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=575 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=4.704941ms recent_delivered_packet_sent_time=5.845685ms app_limited_at_pkt=746  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=7 off=12 len=4 fin=false
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.95722ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=602 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.025573ms recent_delivered_packet_sent_time=6.166393ms app_limited_at_pkt=782  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=0 off=0 len=7 fin=false
13:20:44.412 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.910798ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=632 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.378106ms recent_delivered_packet_sent_time=6.518809ms app_limited_at_pkt=809  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=0 off=7 len=16 fin=false
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.909035ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=671 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.761953ms recent_delivered_packet_sent_time=6.902684ms app_limited_at_pkt=839  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 tx frm STREAM id=0 off=23 len=0 fin=true
13:20:44.413 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 timer=27.938084ms latest_rtt=1.003764ms srtt=Some(1.003764ms) min_rtt=1.003764ms rttvar=501.882µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=694 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=6.04135ms recent_delivered_packet_sent_time=7.182093ms app_limited_at_pkt=878  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=24 pn=6
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm ACK delay=3 blocks=[0..1]
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 0
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 1
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 dropped epoch 1 state
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm PADDING len=2
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=24 pn=7
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm ACK delay=3 blocks=[0..3]
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 2
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 3
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm PADDING len=2
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=24 pn=8
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm ACK delay=5 blocks=[0..5]
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 4
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 5
13:20:44.414 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm PADDING len=2
13:20:44.415 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx pkt Short dcid=abb87522635084505716a9ddd2383b47a6c0f739 key_phase=false len=89 pn=9
13:20:44.415 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm ACK delay=4 blocks=[0..7]
13:20:44.415 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 6
13:20:44.415 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: abb87522635084505716a9ddd2383b47a6c0f739 packet newly acked 7
13:20:44.415 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:44.426 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 48f9fc3d4764642222548d6a45940ea4581dfc3a draining timeout expired
13:20:44.437 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: abb87522635084505716a9ddd2383b47a6c0f739 draining timeout expired
13:20:44.551 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 772194f28a2c2ff6aa14b37c35063e06a1614388 draining timeout expired
13:20:45.480 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Initial version=ff00001d dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff scid= token=6e657474797f0000017f66cddbcd933112 len=1303 pn=2
13:20:45.480 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm CRYPTO off=0 len=550
13:20:45.481 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff write message lvl=Initial len=96
13:20:45.481 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff set write secret lvl=Handshake
13:20:45.481 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff write message lvl=Handshake len=157
13:20:45.481 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff set write secret lvl=OneRTT
13:20:45.481 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff set read secret lvl=Handshake
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm PADDING len=732
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Initial version=ff00001d dcid= scid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff len=122 pn=0
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm ACK delay=269 blocks=[2..2]
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm CRYPTO off=0 len=96
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=998.890343ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=153 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=114.494µs recent_delivered_packet_sent_time=114.917µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.482 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Handshake version=ff00001d dcid= scid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff len=177 pn=0
13:20:45.483 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm CRYPTO off=0 len=157
13:20:45.483 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=998.75431ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=360 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=250.21µs recent_delivered_packet_sent_time=250.596µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Handshake version=ff00001d dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff scid= len=61 pn=3
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm ACK delay=37 blocks=[0..0]
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 0
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm CRYPTO off=0 len=36
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff set read secret lvl=OneRTT
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff write message lvl=OneRTT len=396
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=true TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff dropped epoch 0 state
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=62 pn=4
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm STREAM id=2 off=0 len=43 fin=false
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Handshake version=ff00001d dcid= scid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff len=22 pn=1
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm ACK delay=79 blocks=[3..3]
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=none latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=699.128µs recent_delivered_packet_sent_time=1.959862ms app_limited_at_pkt=207  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=428 pn=0
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm ACK delay=40 blocks=[4..4]
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm HANDSHAKE_DONE
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm CRYPTO off=0 len=396
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=3 off=0 len=1 fin=false
13:20:45.484 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.282038ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=430 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=810.685µs recent_delivered_packet_sent_time=2.071464ms app_limited_at_pkt=207  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.485 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:45.485 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=3 off=1 len=11 fin=false
13:20:45.485 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.167731ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=464 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.386992ms recent_delivered_packet_sent_time=2.647599ms app_limited_at_pkt=637  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.486 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:45.486 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=7 off=0 len=1 fin=false
13:20:45.486 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.233905ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=488 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.293322ms recent_delivered_packet_sent_time=3.553956ms app_limited_at_pkt=671  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.486 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:45.486 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=7 off=1 len=4 fin=false
13:20:45.487 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.201306ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=515 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.946457ms recent_delivered_packet_sent_time=4.207216ms app_limited_at_pkt=695  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.487 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:45.487 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=11 off=0 len=1 fin=false
13:20:45.487 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.275111ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=539 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=3.699438ms recent_delivered_packet_sent_time=4.960183ms app_limited_at_pkt=722  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.488 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=429 pn=5
13:20:45.488 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm STREAM id=2 off=43 len=9 fin=false
13:20:45.488 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm STREAM id=0 off=0 len=397 fin=true
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm ACK delay=436 blocks=[4..5]
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=7 off=5 len=7 fin=false
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.146136ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=575 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=8.230784ms recent_delivered_packet_sent_time=9.491562ms app_limited_at_pkt=746  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=7 off=12 len=4 fin=false
13:20:45.492 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.253235ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=602 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=8.844637ms recent_delivered_packet_sent_time=10.10545ms app_limited_at_pkt=782  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.493 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:45.493 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=0 off=0 len=7 fin=false
13:20:45.493 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.200491ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=632 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=9.411754ms recent_delivered_packet_sent_time=10.672435ms app_limited_at_pkt=809  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.494 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:45.494 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=0 off=7 len=16 fin=false
13:20:45.494 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.160431ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=671 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=10.259147ms recent_delivered_packet_sent_time=11.519855ms app_limited_at_pkt=839  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.494 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:45.494 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff tx frm STREAM id=0 off=23 len=0 fin=true
13:20:45.495 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff timer=28.255381ms latest_rtt=1.121847ms srtt=Some(1.121847ms) min_rtt=1.121847ms rttvar=560.923µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=694 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=10.895921ms recent_delivered_packet_sent_time=12.156716ms app_limited_at_pkt=878  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.495 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=24 pn=6
13:20:45.495 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm ACK delay=3 blocks=[0..1]
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 0
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 1
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff dropped epoch 1 state
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm PADDING len=2
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=24 pn=7
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm ACK delay=3 blocks=[0..3]
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 2
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 3
13:20:45.496 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm PADDING len=2
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=24 pn=8
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm ACK delay=8 blocks=[0..5]
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 4
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 5
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm PADDING len=2
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx pkt Short dcid=1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff key_phase=false len=89 pn=9
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm ACK delay=6 blocks=[0..7]
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 6
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff packet newly acked 7
13:20:45.497 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:45.499 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Initial version=ff00001d dcid=db65bc8608162609aa4889628366f575009fc998 scid= token=6e657474797f000001f7c01a465301079c len=1303 pn=2
13:20:45.499 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm CRYPTO off=0 len=543
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 write message lvl=Initial len=96
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 set write secret lvl=Handshake
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 write message lvl=Handshake len=157
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 set write secret lvl=OneRTT
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 set read secret lvl=Handshake
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm PADDING len=739
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Initial version=ff00001d dcid= scid=db65bc8608162609aa4889628366f575009fc998 len=122 pn=0
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm ACK delay=194 blocks=[2..2]
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm CRYPTO off=0 len=96
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=998.924148ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=153 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=80.57µs recent_delivered_packet_sent_time=80.927µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Handshake version=ff00001d dcid= scid=db65bc8608162609aa4889628366f575009fc998 len=177 pn=0
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm CRYPTO off=0 len=157
13:20:45.500 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=998.83664ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=360 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=167.945µs recent_delivered_packet_sent_time=168.37µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.501 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Handshake version=ff00001d dcid=db65bc8608162609aa4889628366f575009fc998 scid= len=61 pn=3
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm ACK delay=42 blocks=[0..0]
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 0
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm CRYPTO off=0 len=36
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 set read secret lvl=OneRTT
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: db65bc8608162609aa4889628366f575009fc998 write message lvl=OneRTT len=396
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=true TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 dropped epoch 0 state
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=61 pn=4
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm STREAM id=2 off=0 len=42 fin=false
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Handshake version=ff00001d dcid= scid=db65bc8608162609aa4889628366f575009fc998 len=22 pn=1
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm ACK delay=113 blocks=[3..3]
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=none latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=974.366µs recent_delivered_packet_sent_time=2.143332ms app_limited_at_pkt=207  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=428 pn=0
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm ACK delay=50 blocks=[4..4]
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm HANDSHAKE_DONE
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm CRYPTO off=0 len=396
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=3 off=0 len=1 fin=false
13:20:45.502 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.051487ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=430 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.085222ms recent_delivered_packet_sent_time=2.254192ms app_limited_at_pkt=207  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.503 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:45.503 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=3 off=1 len=11 fin=false
13:20:45.503 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=27.95798ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=464 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.736478ms recent_delivered_packet_sent_time=2.905492ms app_limited_at_pkt=637  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=7 off=0 len=1 fin=false
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=27.958518ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=488 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.554007ms recent_delivered_packet_sent_time=3.7229ms app_limited_at_pkt=671  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=7 off=1 len=4 fin=false
13:20:45.504 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.087849ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=515 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.93275ms recent_delivered_packet_sent_time=4.101598ms app_limited_at_pkt=695  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=11 off=0 len=1 fin=false
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.037277ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=539 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=3.391544ms recent_delivered_packet_sent_time=4.560414ms app_limited_at_pkt=722  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=429 pn=5
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm STREAM id=2 off=42 len=9 fin=false
13:20:45.505 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm STREAM id=0 off=0 len=397 fin=true
13:20:45.506 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:45.506 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm ACK delay=86 blocks=[4..5]
13:20:45.506 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=7 off=5 len=7 fin=false
13:20:45.506 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.03674ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=575 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=4.696489ms recent_delivered_packet_sent_time=5.865405ms app_limited_at_pkt=746  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.506 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=7 off=12 len=4 fin=false
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.010075ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=602 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.203319ms recent_delivered_packet_sent_time=6.372384ms app_limited_at_pkt=782  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=0 off=0 len=7 fin=false
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.080862ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=632 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=5.588899ms recent_delivered_packet_sent_time=6.757959ms app_limited_at_pkt=809  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=0 off=7 len=16 fin=false
13:20:45.507 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=28.07207ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=671 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=6.030878ms recent_delivered_packet_sent_time=7.199937ms app_limited_at_pkt=839  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.508 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:45.508 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 tx frm STREAM id=0 off=23 len=0 fin=true
13:20:45.508 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 timer=27.989567ms latest_rtt=1.04516ms srtt=Some(1.04516ms) min_rtt=1.04516ms rttvar=522.58µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=694 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=6.451125ms recent_delivered_packet_sent_time=7.620181ms app_limited_at_pkt=878  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=24 pn=6
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm ACK delay=3 blocks=[0..1]
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 0
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 1
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 dropped epoch 1 state
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm PADDING len=2
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=24 pn=7
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm ACK delay=1 blocks=[0..3]
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 2
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 3
13:20:45.509 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm PADDING len=2
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=24 pn=8
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm ACK delay=6 blocks=[0..5]
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 4
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 5
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm PADDING len=2
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx pkt Short dcid=db65bc8608162609aa4889628366f575009fc998 key_phase=false len=89 pn=9
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm ACK delay=3 blocks=[0..7]
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 6
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: db65bc8608162609aa4889628366f575009fc998 packet newly acked 7
13:20:45.510 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:45.512 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Initial version=ff00001d dcid=22777627cac4f010a2c123a20731d6e70b20f82a scid= token=6e657474797f0000017406fb3df967404f len=1303 pn=2
13:20:45.512 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm CRYPTO off=0 len=543
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a write message lvl=Initial len=96
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a set write secret lvl=Handshake
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a write message lvl=Handshake len=157
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a set write secret lvl=OneRTT
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a set read secret lvl=Handshake
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm PADDING len=739
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Initial version=ff00001d dcid= scid=22777627cac4f010a2c123a20731d6e70b20f82a len=122 pn=0
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm ACK delay=197 blocks=[2..2]
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm CRYPTO off=0 len=96
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=998.942924ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=153 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=62.465µs recent_delivered_packet_sent_time=62.869µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Handshake version=ff00001d dcid= scid=22777627cac4f010a2c123a20731d6e70b20f82a len=177 pn=0
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm CRYPTO off=0 len=157
13:20:45.513 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=998.894501ms latest_rtt=0ns srtt=None min_rtt=0ns rttvar=166.5ms loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=360 app_limited=true congestion_recovery_start_time=None delivered=0 delivered_time=108.448µs recent_delivered_packet_sent_time=108.719µs app_limited_at_pkt=0  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Handshake version=ff00001d dcid=22777627cac4f010a2c123a20731d6e70b20f82a scid= len=62 pn=3
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm ACK delay=64 blocks=[0..0]
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 0
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm CRYPTO off=0 len=36
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a set read secret lvl=OneRTT
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::tls: 22777627cac4f010a2c123a20731d6e70b20f82a write message lvl=OneRTT len=396
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a connection established: proto=Ok("h3-29") cipher=Some(AES128_GCM) curve=Some("X25519") sigalg=None resumed=true TransportParams { original_destination_connection_id: None, max_idle_timeout: 30000, stateless_reset_token: None, max_udp_payload_size: 1472, initial_max_data: 15728640, initial_max_stream_data_bidi_local: 6291456, initial_max_stream_data_bidi_remote: 6291456, initial_max_stream_data_uni: 6291456, initial_max_streams_bidi: 100, initial_max_streams_uni: 103, ack_delay_exponent: 3, max_ack_delay: 25, disable_active_migration: false, active_conn_id_limit: 2, initial_source_connection_id: Some(), retry_source_connection_id: None, max_datagram_frame_size: Some(65536) }
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a dropped epoch 0 state
13:20:45.515 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=56 pn=4
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm STREAM id=2 off=0 len=37 fin=false
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Handshake version=ff00001d dcid= scid=22777627cac4f010a2c123a20731d6e70b20f82a len=22 pn=1
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm ACK delay=153 blocks=[3..3]
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=none latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=0 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.305289ms recent_delivered_packet_sent_time=2.928372ms app_limited_at_pkt=207  hystart=window_end=None last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=429 pn=0
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm ACK delay=72 blocks=[4..4]
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm HANDSHAKE_DONE
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm CRYPTO off=0 len=396
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=3 off=0 len=1 fin=false
13:20:45.516 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.533825ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=431 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=1.433412ms recent_delivered_packet_sent_time=3.056365ms app_limited_at_pkt=207  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.517 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=32 pn=1
13:20:45.517 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=3 off=1 len=11 fin=false
13:20:45.517 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.495877ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=465 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=2.062333ms recent_delivered_packet_sent_time=3.68539ms app_limited_at_pkt=638  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.518 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=22 pn=2
13:20:45.518 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=7 off=0 len=1 fin=false
13:20:45.518 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.45199ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=489 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=3.167934ms recent_delivered_packet_sent_time=4.790954ms app_limited_at_pkt=672  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.518 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=25 pn=3
13:20:45.518 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=7 off=1 len=4 fin=false
13:20:45.519 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.507238ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=516 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=3.789933ms recent_delivered_packet_sent_time=5.41299ms app_limited_at_pkt=696  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.519 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=22 pn=4
13:20:45.519 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=11 off=0 len=1 fin=false
13:20:45.519 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.57676ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=540 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=4.300038ms recent_delivered_packet_sent_time=5.92298ms app_limited_at_pkt=723  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.520 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=429 pn=5
13:20:45.520 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm STREAM id=2 off=37 len=9 fin=false
13:20:45.520 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm STREAM id=0 off=0 len=397 fin=true
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=34 pn=5
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm ACK delay=207 blocks=[4..5]
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=7 off=5 len=7 fin=false
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.419565ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=576 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=6.943295ms recent_delivered_packet_sent_time=8.566304ms app_limited_at_pkt=747  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=25 pn=6
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=7 off=12 len=4 fin=false
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.579167ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=603 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=7.344073ms recent_delivered_packet_sent_time=8.96697ms app_limited_at_pkt=783  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=28 pn=7
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=0 off=0 len=7 fin=false
13:20:45.522 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.566659ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=633 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=7.72209ms recent_delivered_packet_sent_time=9.345024ms app_limited_at_pkt=810  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=37 pn=8
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=0 off=7 len=16 fin=false
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.530813ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=672 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=8.27286ms recent_delivered_packet_sent_time=9.895963ms app_limited_at_pkt=840  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx pkt Short dcid= key_phase=false len=21 pn=9
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a tx frm STREAM id=0 off=23 len=0 fin=true
13:20:45.523 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a timer=29.582666ms latest_rtt=1.542369ms srtt=Some(1.542369ms) min_rtt=1.542369ms rttvar=771.184µs loss_time=[None, None, None] loss_probes=[0, 0, 0] cwnd=12000 ssthresh=18446744073709551615 bytes_in_flight=695 app_limited=true congestion_recovery_start_time=None delivered=207 delivered_time=8.585839ms recent_delivered_packet_sent_time=10.208839ms app_limited_at_pkt=879  hystart=window_end=Some(0) last_round_min_rtt=None current_round_min_rtt=None rtt_sample_count=0 lss_start_time=None  
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=24 pn=6
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm ACK delay=5 blocks=[0..1]
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 0
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 1
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a dropped epoch 1 state
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm PADDING len=2
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=24 pn=7
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm ACK delay=2 blocks=[0..3]
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 2
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 3
13:20:45.524 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm PADDING len=2
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=24 pn=8
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm ACK delay=7 blocks=[0..5]
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 4
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 5
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm PADDING len=2
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx pkt Short dcid=22777627cac4f010a2c123a20731d6e70b20f82a key_phase=false len=89 pn=9
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm ACK delay=10 blocks=[0..7]
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 6
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche::recovery: 22777627cac4f010a2c123a20731d6e70b20f82a packet newly acked 7
13:20:45.525 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a rx frm APPLICATION_CLOSE err=200 reason=[31, 32, 36, 3a, 45, 72, 72, 6f, 72, 20, 64, 65, 63, 6f, 64, 69, 6e, 67, 20, 68, 65, 61, 64, 65, 72, 73, 20, 6f, 6e, 20, 73, 74, 72, 65, 61, 6d, 20, 30, 3a, 20, 45, 72, 72, 6f, 72, 20, 63, 61, 6c, 63, 75, 6c, 61, 74, 69, 6e, 67, 20, 42, 61, 73, 65, 2e]
13:20:45.537 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: db65bc8608162609aa4889628366f575009fc998 draining timeout expired
13:20:45.541 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 1d51b73dfb4b96e703b17a9d5b3d08ae4a2ac3ff draining timeout expired
13:20:45.552 [nioEventLoopGroup-2-1] DEBUG io.netty.incubator.codec.quic.Quiche - quiche: 22777627cac4f010a2c123a20731d6e70b20f82a draining timeout expired

Http3ServerExample & Http3ClientExample and python client questions

hi guys
My scenario is java server side other languages java, python, c++ keep long connect client, after client subscribe, server keep send data
Http3ServerExample & Http3ClientExample and python client question

1、Http3ServerExample what is the difference of Http3HeadersFrame frame and Http3DataFrame frame ?

when run Http3ClientExample come into Http3DataFrame frame when run python client into Http3HeadersFrame
@OverRide
protected void channelRead(ChannelHandlerContext ctx,
Http3HeadersFrame frame, boolean isLast) {
if (isLast) {
for(int i = 0; i<1000; i++) {
writeResponse(ctx, i);
}
}
ReferenceCountUtil.release(frame);
}

@OverRide
protected void channelRead(ChannelHandlerContext ctx,
Http3DataFrame frame, boolean isLast) {
if (isLast) {
for(int i = 0; i<1000; i++) {
writeResponse(ctx, i);
}
}
ReferenceCountUtil.release(frame);
}

2、server loop send data

1)java
java client if send .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT) just receive one hello word
but if comment //send .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT) can receive what server send

2)python
need execute .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT)? what QuicStreamChannel.SHUTDOWN_OUTPUT WRITE_FIN mean?

3、python client how to keep long connect?

if python client send wss got error:

io.netty.incubator.codec.http3.Http3HeadersValidationException: Invalid HTTP/3 pseudo-header ':protocol' encountered.
at io.netty.incubator.codec.http3.Http3HeadersSink.validate(Http3HeadersSink.java:138)
at io.netty.incubator.codec.http3.Http3HeadersSink.accept(Http3HeadersSink.java:118)
at io.netty.incubator.codec.http3.Http3HeadersSink.accept(Http3HeadersSink.java:29)
at io.netty.incubator.codec.http3.QpackDecoder.decodeLiteral(QpackDecoder.java:390)
at io.netty.incubator.codec.http3.QpackDecoder.decode(QpackDecoder.java:135)
at io.netty.incubator.codec.http3.Http3FrameCodec.decodeHeaders(Http3FrameCodec.java:390)
at io.netty.incubator.codec.http3.Http3FrameCodec.decodeFrame(Http3FrameCodec.java:243)
at io.netty.incubator.codec.http3.Http3FrameCodec.decode(Http3FrameCodec.java:192)
at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:507)
at io.netty.handler.codec.ByteToMessageDecoder.callDecode(ByteToMessageDecoder.java:446)
at io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:276)
at io.netty.incubator.codec.http3.Http3FrameCodec.channelRead(Http3FrameCodec.java:122)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:357)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1410)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:379)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:365)
at io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.recv(QuicheQuicStreamChannel.java:900)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.beginRead(QuicheQuicStreamChannel.java:602)
at io.netty.channel.DefaultChannelPipeline$HeadContext.read(DefaultChannelPipeline.java:1362)
at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
at io.netty.incubator.codec.http3.Http3FrameCodec.read(Http3FrameCodec.java:625)
at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
at io.netty.incubator.codec.http3.Http3FrameTypeDuplexValidationHandler.read(Http3FrameTypeDuplexValidationHandler.java:85)
at io.netty.channel.AbstractChannelHandlerContext.invokeRead(AbstractChannelHandlerContext.java:686)
at io.netty.channel.AbstractChannelHandlerContext.read(AbstractChannelHandlerContext.java:671)
at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:1004)
at io.netty.channel.DefaultChannelPipeline.read(DefaultChannelPipeline.java:46)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:287)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel.read(QuicheQuicStreamChannel.java:51)
at io.netty.channel.DefaultChannelPipeline$HeadContext.readIfIsAutoRead(DefaultChannelPipeline.java:1422)
at io.netty.channel.DefaultChannelPipeline$HeadContext.channelActive(DefaultChannelPipeline.java:1400)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:230)
at io.netty.channel.AbstractChannelHandlerContext.invokeChannelActive(AbstractChannelHandlerContext.java:216)
at io.netty.channel.DefaultChannelPipeline.fireChannelActive(DefaultChannelPipeline.java:895)
at io.netty.incubator.codec.quic.QuicheQuicStreamChannel$QuicStreamChannelUnsafe.register(QuicheQuicStreamChannel.java:474)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:87)
at io.netty.channel.SingleThreadEventLoop.register(SingleThreadEventLoop.java:81)
at io.netty.incubator.codec.quic.QuicheQuicChannel$1.onUnhandledInboundMessage(QuicheQuicChannel.java:439)

python core code:

async def get(self, url: str, headers: Optional[Dict] = None) -> Deque[H3Event]:
    """
    Perform a GET request.
    """
    return await self._request(
        HttpRequest(method="GET", url=URL(url), headers=headers)
    )

async def post(
    self, url: str, data: bytes, headers: Optional[Dict] = None
) -> Deque[H3Event]:
    """
    Perform a POST request.
    """
    return await self._request(
        HttpRequest(method="POST", url=URL(url), content=data, headers=headers)
    )

async def websocket(
    self, url: str, subprotocols: Optional[List[str]] = None
) -> WebSocket:
    """
    Open a WebSocket.
    """
    request = HttpRequest(method="CONNECT", url=URL(url))
    stream_id = self._quic.get_next_available_stream_id()
    websocket = WebSocket(
        http=self._http, stream_id=stream_id, transmit=self.transmit
    )

    self._websockets[stream_id] = websocket

    headers = [
        (b":method", b"CONNECT"),
        (b":scheme", b"https"),
        (b":authority", request.url.authority.encode()),
        (b":path", request.url.full_path.encode()),
        (b":protocol", b"websocket"),
        (b"user-agent", USER_AGENT.encode()),
        (b"sec-websocket-version", b"13"),
    ]
    if subprotocols:
        headers.append(
            (b"sec-websocket-protocol", ", ".join(subprotocols).encode())
        )
    self._http.send_headers(stream_id=stream_id, headers=headers)

    self.transmit()

    return websocket

4、can netty-incubator-codec-http3 support websocket?

Handshake delays

Hi, I've been actively testing quic/http3 recently and noticed the following delays during the handshake phase:

  1. When a client sends initial Quic packet server replies with a handshake with a certificate(cert size is about 4.5K) , but it stops sending handshake frames after 3750 bytes and then when the client acks first crypto frames it continues with certificate handshake. qlog and a diagram are attached. Can you shed some light why does on this delay ?
  2. With 0-RTT enabled a client sends initial + 0-RTT (with http3 headers), server replies with NCI and ACKs, the client sends 'handshake done' and only after that packet server pushes a request into the pipeline. Wireshark screenshot is attached. Is it the way 0-RTT supposed to work? Looks like it takes more steps then it's suggested by the spec.

c3d3e273a1a87b3655098dae734a57d6c38e713a-5e9334e8.qlog.gz

image2023-12-21 19-45-28

Screenshot 2023-12-21 at 19 02 00

h2load requests are often not fully processed

At first I thought that the h2load client does not send a headers frame,
but the developer and the verbose details show that the frames are sent and no response is received from the server.
The logging does not display any errors, but the Http3WebServiceHandler does not receive a headers frame either.

HttpWebServer HTTP/3 code part:

// Configure SSL
QuicSslContext quicSslContext = QuicSslContextBuilder
        .forServer(certificate.key(), null, certificate.cert())
        .applicationProtocols(Http3.supportedApplicationProtocols()).build();
// Configure codec
ChannelHandler codec = Http3.newQuicServerCodecBuilder()
        .sslContext(quicSslContext)
        .maxIdleTimeout(5000, TimeUnit.MILLISECONDS)
        .initialMaxData(10000000)
        .initialMaxStreamDataBidirectionalLocal(1000000)
        .initialMaxStreamDataBidirectionalRemote(1000000)
        .initialMaxStreamsBidirectional(100)
        .maxRecvUdpPayloadSize(10000000)
        .maxSendUdpPayloadSize(10000000)
        .tokenHandler(InsecureQuicTokenHandler.INSTANCE)
        .handler(new ChannelInitializer<QuicChannel>() {
            @Override
            protected void initChannel(QuicChannel quicChannel) {
                // Called for each connection
                Http3ServerPushStreamManager pushStreamManager =
                        new Http3ServerPushStreamManager(quicChannel);
                quicChannel.pipeline().addLast(new Http3ServerConnectionHandler(
                        new ChannelInitializer<QuicStreamChannel>() {
                            // Called for each request-stream
                            @Override
                            protected void initChannel(QuicStreamChannel streamChannel) {
                                streamChannel.pipeline().addLast(
                                        new Http3WebServiceHandler(
                                                gatewayHost,
                                                persistencePort,
                                                authPort,
                                                imagePort,
                                                recommenderPort
                                        )
                                );
                                streamChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
                            }
                        },
                        pushStreamManager.controlStreamListener(),
                        null,
                        null,
                        false
                ));
                quicChannel.pipeline().addLast(new LoggingHandler(LogLevel.INFO));
            }
        }).build();
// Configure the server
try {
    Bootstrap bootstrap = new Bootstrap();
    Channel channel;
    String status = httpVersion + " web service is available on https://";
    if (gatewayHost.isEmpty()) {
        channel = bootstrap.group(bossGroup)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(DEFAULT_WEB_PORT)).sync().channel();
        status += "localhost:" + DEFAULT_WEB_PORT + WEB_ENDPOINT;
    } else {
        channel = bootstrap.group(bossGroup)
                .channel(NioDatagramChannel.class)
                .handler(codec)
                .bind(new InetSocketAddress(webPort)).sync().channel();
        status += "web:" + webPort + WEB_ENDPOINT;
    }
    LOG.info(status);
    channel.closeFuture().sync();
} finally {
    bossGroup.shutdownGracefully();
}
HttpWebServer Log

13:32:40.916 [main] INFO  web.rest.server.HttpWebServer - HTTP/3 web service is available on https://web:4433/api/web
13:33:10.811 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2] REGISTERED
13:33:10.826 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] ACTIVE
13:33:10.826 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] USER_EVENT: io.netty.incubator.codec.quic.QuicStreamLimitChangedEvent@38c894c9
13:33:10.830 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] READ: [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}]
13:33:10.913 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] REGISTERED
13:33:10.913 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] ACTIVE
13:33:10.915 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] USER_EVENT: io.netty.channel.socket.ChannelInputShutdownEvent@7f905320
13:33:10.917 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] USER_EVENT: io.netty.channel.socket.ChannelInputShutdownReadComplete@15c9a6c5
13:33:10.919 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] READ: [id: 0xa1e9772f, QuicStreamAddress{streamId=2}]
13:33:10.922 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] READ COMPLETE
13:33:10.923 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] READ: [id: 0x133adc02, QuicStreamAddress{streamId=6}]
13:33:10.924 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] READ: [id: 0x076d49cc, QuicStreamAddress{streamId=10}]
13:33:10.925 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} - R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] READ COMPLETE
13:33:15.936 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} ! R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] INACTIVE
13:33:15.936 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - (8e64a9a94ada3c0b18ef8ca0e420ee86a9d07269)[id: 0xfe518ab2, L:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=20 cap=20]} ! R:QuicConnectionAddress{connId=java.nio.HeapByteBuffer[pos=0 lim=8 cap=8]}] UNREGISTERED
13:33:15.936 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] INACTIVE
13:33:15.936 [nioEventLoopGroup-2-1] INFO  io.netty.handler.logging.LoggingHandler - [id: 0x8cc4ce67, QuicStreamAddress{streamId=0}] UNREGISTERED
If you need more details, I will be happy to help.

Http3FrameToHttpObjectCodec writes invalid header frame

If a LastHttpContent.EMPTY_LAST_CONTENT comes last, Http3FrameToHttpObjectCodec writes an empty header frame.

Http3Headers headers = HttpConversionUtil.toHttp3Headers(last.trailingHeaders(), validateHeaders);
ctx.write(new DefaultHttp3HeadersFrame(headers)).addListener(QuicStreamChannel.WRITE_FIN);

Using the example client (Http3ClientExample) the response generated will throw an error,

io.netty.incubator.codec.http3.Http3HeadersValidationException: Not all mandatory pseudo-headers included.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.