Experimental HTTP3 codec on top of our own QUIC codec.
For some example usage please checkout our server example and client example.
Experimental HTTP3 codec on top of QUIC
License: Apache License 2.0
Experimental HTTP3 codec on top of our own QUIC codec.
For some example usage please checkout our server example and client example.
I want to close the log for both client and server example. Can I?
http3 uses qpack for compression. We need to have an implementation:
I'd love to see some examples of how to use this!
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:
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);
}
}
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();
}
}
[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) [?:?]
Believe me, if I support webtransport now, your project will have a huge improvement
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)
As stated by the RFC we need to handle reserved / unknown stream types.
can any browser access the server exaple?
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
Is it possible to implement sni and how?
Regarding QPACK spec, Huffman compression is optional when transmitting string literals. Implementation provided in #3 use compression always which might be sub optimal in some cases.
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?
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.
We should verify settings as stated in the rfc
https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.4.1
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 :
`/*
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:
`/*
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)
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()
}
}
}
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]
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?
I am using the example code to transmit a file.
I try several times. Sometimes it throws the Frame type unexpected exception. Sometimes it works fine.
So I am wondering what would cause the exception
/*
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();
}
}
}
============================================
/*
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)
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:
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();
}
}
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();
}
}
[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) [?:?]
I would like to resurrect the issue #252
The only solution I found to eliminate this error is to check streamTrackers
for null here https://github.com/netty/netty-incubator-codec-http3/blob/main/src/main/java/io/netty/incubator/codec/http3/QpackEncoder.java#L156
But I don't think this is a real 'fix'
When I was using the case client, I added Http3FrameToHttpObjectCodec and HttpObjectAggregator
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:
I received a stack of errors like this:
Of course, this is a high probability, not a certainty。
I suggest that the wirte method of Http3FrameToHttpObjectCodec be modified:
Http3FrameCodec
enables validation in Http3HeadersSink
also for trailers which leads to mandating presence of pseudo headers for trailers too. Pseudo headers are not expected to be in the trailers.
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
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.
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'
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:
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]));
}
}
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();
}
}
[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) [?:?]
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
Thank you very much
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;
Unknowns - how does the browser determine the appropriate 'config_id' value to put in the ECH payload?
As discussed here.
The final goal is to reuse the same HuffmanEncoder
and HuffmanDecoder
both in codec-http2
and codec-http3
.
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);
#3 implementation covers static table only.
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
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?
The execution time is up to 40 milliseconds :
ChannelHandler codec = Http3.newQuicClientCodecBuilder()
.sslContext(context)
.maxIdleTimeout(5000 * 5000, TimeUnit.MILLISECONDS)
.initialMaxData(10000000)
.initialMaxStreamDataBidirectionalLocal(1000000)
.build();
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
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
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
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
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);
}
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?
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)
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
Hi, I've been actively testing quic/http3 recently and noticed the following delays during the handshake phase:
c3d3e273a1a87b3655098dae734a57d6c38e713a-5e9334e8.qlog.gz
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();
}
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 a LastHttpContent.EMPTY_LAST_CONTENT comes last, Http3FrameToHttpObjectCodec writes an empty header frame.
Using the example client (Http3ClientExample) the response generated will throw an error,
io.netty.incubator.codec.http3.Http3HeadersValidationException: Not all mandatory pseudo-headers included.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.