From fcd9b342e9072da9e3d101143eb869b74d28727c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Prante?= Date: Sat, 6 Jan 2024 22:52:21 +0100 Subject: [PATCH] promote netty-handler-codec-quic from incubator, add netty-handler-codec-http3 --- netty-channel-epoll/build.gradle | 4 + .../channel/epoll/AbstractEpollChannel.java | 796 +++ .../epoll/AbstractEpollServerChannel.java | 142 + .../epoll/AbstractEpollStreamChannel.java | 1059 ++++ .../java/io/netty/channel/epoll/Epoll.java | 118 + .../channel/epoll/EpollChannelConfig.java | 237 + .../channel/epoll/EpollChannelOption.java | 62 + .../channel/epoll/EpollDatagramChannel.java | 779 +++ .../epoll/EpollDatagramChannelConfig.java | 566 ++ .../epoll/EpollDomainDatagramChannel.java | 382 ++ .../EpollDomainDatagramChannelConfig.java | 175 + .../epoll/EpollDomainSocketChannel.java | 194 + .../epoll/EpollDomainSocketChannelConfig.java | 217 + .../netty/channel/epoll/EpollEventArray.java | 123 + .../netty/channel/epoll/EpollEventLoop.java | 595 +++ .../channel/epoll/EpollEventLoopGroup.java | 193 + .../io/netty/channel/epoll/EpollMode.java | 36 + .../epoll/EpollRecvByteAllocatorHandle.java | 88 + ...EpollRecvByteAllocatorStreamingHandle.java | 35 + .../epoll/EpollServerChannelConfig.java | 234 + .../epoll/EpollServerDomainSocketChannel.java | 103 + .../epoll/EpollServerSocketChannel.java | 115 + .../epoll/EpollServerSocketChannelConfig.java | 288 + .../channel/epoll/EpollSocketChannel.java | 176 + .../epoll/EpollSocketChannelConfig.java | 665 +++ .../io/netty/channel/epoll/EpollTcpInfo.java | 193 + .../io/netty/channel/epoll/LinuxSocket.java | 484 ++ .../java/io/netty/channel/epoll/Native.java | 338 ++ .../epoll/NativeDatagramPacketArray.java | 232 + .../NativeStaticallyReferencedJniMethods.java | 46 + .../epoll/SegmentedDatagramPacket.java | 111 + .../io/netty/channel/epoll/TcpMd5Util.java | 73 + .../io/netty/channel/epoll/VSockAddress.java | 80 + .../io/netty/channel/epoll/package-info.java | 21 + .../src/main/java/module-info.java | 7 + netty-channel/src/main/java/module-info.java | 1 + netty-handler-codec-http3/build.gradle | 6 + .../handler/codec/http3/CharSequenceMap.java | 46 + .../http3/DefaultHttp3CancelPushFrame.java | 56 + .../codec/http3/DefaultHttp3DataFrame.java | 76 + .../codec/http3/DefaultHttp3GoAwayFrame.java | 56 + .../codec/http3/DefaultHttp3Headers.java | 225 + .../codec/http3/DefaultHttp3HeadersFrame.java | 61 + .../http3/DefaultHttp3MaxPushIdFrame.java | 56 + .../http3/DefaultHttp3PushPromiseFrame.java | 69 + .../http3/DefaultHttp3SettingsFrame.java | 86 + .../codec/http3/DefaultHttp3UnknownFrame.java | 105 + .../io/netty/handler/codec/http3/Http3.java | 176 + .../codec/http3/Http3CancelPushFrame.java | 34 + .../http3/Http3ClientConnectionHandler.java | 81 + .../handler/codec/http3/Http3CodecUtils.java | 331 ++ .../codec/http3/Http3ConnectionHandler.java | 203 + .../codec/http3/Http3ControlStreamFrame.java | 23 + .../Http3ControlStreamFrameTypeValidator.java | 43 + .../Http3ControlStreamInboundHandler.java | 319 ++ .../Http3ControlStreamOutboundHandler.java | 145 + .../handler/codec/http3/Http3DataFrame.java | 54 + .../handler/codec/http3/Http3ErrorCode.java | 129 + .../handler/codec/http3/Http3Exception.java | 57 + .../netty/handler/codec/http3/Http3Frame.java | 28 + .../handler/codec/http3/Http3FrameCodec.java | 811 +++ .../http3/Http3FrameToHttpObjectCodec.java | 293 + ...Http3FrameTypeDuplexValidationHandler.java | 87 + ...ttp3FrameTypeInboundValidationHandler.java | 50 + ...tp3FrameTypeOutboundValidationHandler.java | 51 + .../codec/http3/Http3FrameTypeValidator.java | 24 + .../http3/Http3FrameValidationUtils.java | 94 + .../handler/codec/http3/Http3GoAwayFrame.java | 34 + .../handler/codec/http3/Http3Headers.java | 225 + .../codec/http3/Http3HeadersFrame.java | 34 + .../handler/codec/http3/Http3HeadersSink.java | 165 + .../Http3HeadersValidationException.java | 41 + .../codec/http3/Http3MaxPushIdFrame.java | 34 + .../codec/http3/Http3PushPromiseFrame.java | 41 + .../Http3PushStreamClientInitializer.java | 61 + ...ttp3PushStreamClientValidationHandler.java | 89 + .../codec/http3/Http3PushStreamFrame.java | 23 + .../Http3PushStreamFrameTypeValidator.java | 41 + .../Http3PushStreamServerInitializer.java | 79 + ...ttp3PushStreamServerValidationHandler.java | 34 + .../http3/Http3RequestStreamCodecState.java | 66 + ...ttp3RequestStreamDecodeStateValidator.java | 62 + ...ttp3RequestStreamEncodeStateValidator.java | 122 + .../codec/http3/Http3RequestStreamFrame.java | 23 + .../Http3RequestStreamFrameTypeValidator.java | 40 + .../Http3RequestStreamInboundHandler.java | 135 + .../http3/Http3RequestStreamInitializer.java | 57 + .../Http3RequestStreamValidationHandler.java | 139 + .../Http3RequestStreamValidationUtils.java | 158 + .../http3/Http3ServerConnectionHandler.java | 93 + .../http3/Http3ServerPushStreamManager.java | 289 + .../codec/http3/Http3SettingsFrame.java | 74 + ...directionalStreamInboundClientHandler.java | 59 + ...tp3UnidirectionalStreamInboundHandler.java | 191 + ...directionalStreamInboundServerHandler.java | 43 + .../codec/http3/Http3UnknownFrame.java | 67 + .../codec/http3/HttpConversionUtil.java | 645 +++ .../handler/codec/http3/QpackAttributes.java | 108 + .../handler/codec/http3/QpackDecoder.java | 516 ++ .../codec/http3/QpackDecoderDynamicTable.java | 170 + .../codec/http3/QpackDecoderHandler.java | 152 + .../http3/QpackDecoderStateSyncStrategy.java | 75 + .../handler/codec/http3/QpackEncoder.java | 544 ++ .../codec/http3/QpackEncoderDynamicTable.java | 489 ++ .../codec/http3/QpackEncoderHandler.java | 245 + .../handler/codec/http3/QpackException.java | 32 + .../handler/codec/http3/QpackHeaderField.java | 51 + .../codec/http3/QpackHuffmanDecoder.java | 4717 +++++++++++++++++ .../codec/http3/QpackHuffmanEncoder.java | 176 + .../handler/codec/http3/QpackStaticTable.java | 227 + .../netty/handler/codec/http3/QpackUtil.java | 468 ++ .../handler/codec/http3/package-info.java | 20 + .../src/main/java/module-info.java | 9 + ...ctHttp3FrameTypeValidationHandlerTest.java | 180 + .../AbtractHttp3ConnectionHandlerTest.java | 113 + .../codec/http3/EmbeddedQuicChannel.java | 313 ++ .../http3/EmbeddedQuicStreamChannel.java | 466 ++ .../Http3ClientConnectionHandlerTest.java | 35 + ...p3ControlStreamFrameTypeValidatorTest.java | 43 + .../Http3ControlStreamInboundHandlerTest.java | 269 + ...Http3ControlStreamOutboundHandlerTest.java | 202 + .../codec/http3/Http3FrameCodecTest.java | 838 +++ .../Http3FrameToHttpObjectCodecTest.java | 1049 ++++ .../Http3FrameTypeValidationHandlerTest.java | 46 + .../http3/Http3FrameTypeValidatorTest.java | 42 + .../codec/http3/Http3HeadersSinkTest.java | 146 + ...Http3PushStreamFrameTypeValidatorTest.java | 43 + ...PushStreamServerValidationHandlerTest.java | 46 + .../codec/http3/Http3PushStreamTest.java | 212 + ...p3RequestStreamFrameTypeValidatorTest.java | 43 + .../Http3RequestStreamInboundHandlerTest.java | 69 + ...tp3RequestStreamValidationHandlerTest.java | 544 ++ .../Http3ServerConnectionHandlerTest.java | 45 + .../Http3ServerPushStreamManagerTest.java | 208 + .../codec/http3/Http3SpecTestServer.java | 115 + .../handler/codec/http3/Http3TestUtils.java | 103 + ...nidirectionalStreamInboundHandlerTest.java | 283 + .../codec/http3/HttpConversionUtilTest.java | 228 + .../http3/QpackDecoderDynamicTableTest.java | 129 + .../codec/http3/QpackDecoderHandlerTest.java | 359 ++ .../handler/codec/http3/QpackDecoderTest.java | 169 + .../codec/http3/QpackEncoderDecoderTest.java | 541 ++ .../http3/QpackEncoderDynamicTableTest.java | 261 + .../codec/http3/QpackStaticTableTest.java | 68 + .../codec/http3/QpackStreamHandlerTest.java | 64 + .../http3/example/Http3ClientExample.java | 110 + .../http3/example/Http3ServerExample.java | 121 + .../src/test/resources/logging.properties | 7 + netty-handler-codec-quic/build.gradle | 5 + .../netty/handler/codec/quic/BoringSSL.java | 129 + .../quic/BoringSSLAsyncPrivateKeyMethod.java | 57 + .../quic/BoringSSLCertificateCallback.java | 276 + .../BoringSSLCertificateCallbackTask.java | 73 + .../BoringSSLCertificateVerifyCallback.java | 124 + ...oringSSLCertificateVerifyCallbackTask.java | 40 + .../BoringSSLHandshakeCompleteCallback.java | 36 + .../quic/BoringSSLKeylessManagerFactory.java | 245 + .../quic/BoringSSLKeylessPrivateKey.java | 43 + .../handler/codec/quic/BoringSSLKeylog.java | 35 + .../codec/quic/BoringSSLKeylogCallback.java | 38 + .../codec/quic/BoringSSLLoggingKeylog.java | 35 + ...LNativeStaticallyReferencedJniMethods.java | 43 + .../codec/quic/BoringSSLPrivateKeyMethod.java | 58 + .../BoringSSLPrivateKeyMethodDecryptTask.java | 33 + .../BoringSSLPrivateKeyMethodSignTask.java | 35 + .../quic/BoringSSLPrivateKeyMethodTask.java | 32 + .../codec/quic/BoringSSLSessionCallback.java | 83 + .../quic/BoringSSLSessionTicketCallback.java | 65 + .../handler/codec/quic/BoringSSLTask.java | 60 + .../BoringSSLTlsextServernameCallback.java | 45 + .../codec/quic/DefaultQuicStreamFrame.java | 110 + .../codec/quic/DirectIoByteBufAllocator.java | 136 + .../handler/codec/quic/EpollQuicUtils.java | 65 + .../handler/codec/quic/FlushStrategy.java | 60 + .../io/netty/handler/codec/quic/Hmac.java | 67 + .../HmacSignQuicConnectionIdGenerator.java | 56 + .../quic/HmacSignQuicResetTokenGenerator.java | 39 + .../codec/quic/InsecureQuicTokenHandler.java | 84 + .../codec/quic/NoQuicTokenHandler.java | 48 + .../handler/codec/quic/QLogConfiguration.java | 70 + .../io/netty/handler/codec/quic/Quic.java | 167 + .../netty/handler/codec/quic/QuicChannel.java | 274 + .../codec/quic/QuicChannelBootstrap.java | 244 + .../handler/codec/quic/QuicChannelConfig.java | 62 + .../handler/codec/quic/QuicChannelOption.java | 50 + .../codec/quic/QuicClientCodecBuilder.java | 52 + .../codec/quic/QuicClientSessionCache.java | 244 + .../quic/QuicClosedChannelException.java | 40 + .../handler/codec/quic/QuicCodecBuilder.java | 508 ++ .../quic/QuicCongestionControlAlgorithm.java | 25 + .../codec/quic/QuicConnectionAddress.java | 129 + .../codec/quic/QuicConnectionCloseEvent.java | 96 + .../codec/quic/QuicConnectionIdGenerator.java | 77 + .../codec/quic/QuicConnectionStats.java | 67 + .../quic/QuicDatagramExtensionEvent.java | 48 + .../netty/handler/codec/quic/QuicError.java | 81 + .../netty/handler/codec/quic/QuicEvent.java | 23 + .../handler/codec/quic/QuicException.java | 40 + .../codec/quic/QuicExtensionEvent.java | 23 + .../handler/codec/quic/QuicHeaderParser.java | 163 + .../handler/codec/quic/QuicPacketType.java | 83 + .../handler/codec/quic/QuicPathEvent.java | 297 ++ .../codec/quic/QuicResetTokenGenerator.java | 42 + .../codec/quic/QuicServerCodecBuilder.java | 221 + .../handler/codec/quic/QuicSslContext.java | 43 + .../codec/quic/QuicSslContextBuilder.java | 381 ++ .../handler/codec/quic/QuicSslEngine.java | 23 + .../codec/quic/QuicSslSessionContext.java | 34 + .../handler/codec/quic/QuicStreamAddress.java | 61 + .../handler/codec/quic/QuicStreamChannel.java | 299 ++ .../quic/QuicStreamChannelBootstrap.java | 148 + .../codec/quic/QuicStreamChannelConfig.java | 83 + .../handler/codec/quic/QuicStreamFrame.java | 128 + .../codec/quic/QuicStreamIdGenerator.java | 41 + .../quic/QuicStreamLimitChangedEvent.java | 26 + .../codec/quic/QuicStreamPriority.java | 83 + .../handler/codec/quic/QuicStreamType.java | 31 + .../handler/codec/quic/QuicTokenHandler.java | 54 + .../codec/quic/QuicTransportParameters.java | 113 + .../io/netty/handler/codec/quic/Quiche.java | 870 +++ .../handler/codec/quic/QuicheConfig.java | 137 + .../handler/codec/quic/QuicheLogger.java | 35 + ...eNativeStaticallyReferencedJniMethods.java | 96 + .../handler/codec/quic/QuicheQuicChannel.java | 1969 +++++++ .../codec/quic/QuicheQuicChannelConfig.java | 158 + .../codec/quic/QuicheQuicClientCodec.java | 76 + .../handler/codec/quic/QuicheQuicCodec.java | 315 ++ .../codec/quic/QuicheQuicConnection.java | 232 + .../codec/quic/QuicheQuicConnectionStats.java | 91 + .../codec/quic/QuicheQuicServerCodec.java | 268 + .../codec/quic/QuicheQuicSslContext.java | 497 ++ .../codec/quic/QuicheQuicSslEngine.java | 567 ++ .../codec/quic/QuicheQuicSslEngineMap.java | 37 + .../codec/quic/QuicheQuicStreamChannel.java | 956 ++++ .../quic/QuicheQuicStreamChannelConfig.java | 175 + .../quic/QuicheQuicTransportParameters.java | 110 + .../handler/codec/quic/QuicheRecvInfo.java | 85 + .../handler/codec/quic/QuicheSendInfo.java | 167 + ...SecureRandomQuicConnectionIdGenerator.java | 53 + .../SegmentedDatagramPacketAllocator.java | 63 + .../netty/handler/codec/quic/SockaddrIn.java | 187 + .../codec/quic/SslEarlyDataReadyEvent.java | 32 + .../codec/quic/SslSessionTicketKey.java | 129 + .../handler/codec/quic/package-info.java | 19 + .../src/main/java/module-info.java | 9 + .../native/libnetty_quiche_linux_x86_64.so | Bin 0 -> 6859392 bytes netty-util/src/main/java/module-info.java | 6 + settings.gradle | 5 +- 248 files changed, 45788 insertions(+), 1 deletion(-) create mode 100644 netty-channel-epoll/build.gradle create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollServerChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollStreamChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/Epoll.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelOption.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventArray.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoop.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoopGroup.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollMode.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorHandle.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorStreamingHandle.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerDomainSocketChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannelConfig.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollTcpInfo.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/LinuxSocket.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/Native.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeDatagramPacketArray.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeStaticallyReferencedJniMethods.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/SegmentedDatagramPacket.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/TcpMd5Util.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/VSockAddress.java create mode 100644 netty-channel-epoll/src/main/java/io/netty/channel/epoll/package-info.java create mode 100644 netty-channel-epoll/src/main/java/module-info.java create mode 100644 netty-handler-codec-http3/build.gradle create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/CharSequenceMap.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3CancelPushFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3DataFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3GoAwayFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3HeadersFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3MaxPushIdFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3PushPromiseFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3SettingsFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3UnknownFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CancelPushFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ClientConnectionHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CodecUtils.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ConnectionHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3DataFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ErrorCode.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Exception.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Frame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodec.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeDuplexValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeInboundValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeOutboundValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameValidationUtils.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3GoAwayFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Headers.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersSink.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersValidationException.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3MaxPushIdFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushPromiseFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientInitializer.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerInitializer.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamCodecState.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamDecodeStateValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidator.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInitializer.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationUtils.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerConnectionHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerPushStreamManager.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3SettingsFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundClientHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundServerHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnknownFrame.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/HttpConversionUtil.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackAttributes.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoder.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderDynamicTable.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderStateSyncStrategy.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderHandler.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackException.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHeaderField.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackStaticTable.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackUtil.java create mode 100644 netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/package-info.java create mode 100644 netty-handler-codec-http3/src/main/java/module-info.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbstractHttp3FrameTypeValidationHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbtractHttp3ConnectionHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicStreamChannel.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ClientConnectionHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidatorTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameCodecTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodecTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidationHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidatorTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3HeadersSinkTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidatorTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidatorTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerConnectionHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerPushStreamManagerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3SpecTestServer.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3TestUtils.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/HttpConversionUtilTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderDynamicTableTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDecoderTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDynamicTableTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStaticTableTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStreamHandlerTest.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ClientExample.java create mode 100644 netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ServerExample.java create mode 100644 netty-handler-codec-http3/src/test/resources/logging.properties create mode 100644 netty-handler-codec-quic/build.gradle create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLAsyncPrivateKeyMethod.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallbackTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallbackTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLHandshakeCompleteCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessManagerFactory.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessPrivateKey.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylog.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylogCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLLoggingKeylog.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLNativeStaticallyReferencedJniMethods.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethod.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodDecryptTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodSignTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionTicketCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTask.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTlsextServernameCallback.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DefaultQuicStreamFrame.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DirectIoByteBufAllocator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/EpollQuicUtils.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/FlushStrategy.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicConnectionIdGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicResetTokenGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/InsecureQuicTokenHandler.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/NoQuicTokenHandler.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QLogConfiguration.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quic.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannel.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelBootstrap.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelConfig.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelOption.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientCodecBuilder.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientSessionCache.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClosedChannelException.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCodecBuilder.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCongestionControlAlgorithm.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionAddress.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionCloseEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionIdGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionStats.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicDatagramExtensionEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicError.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicException.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicExtensionEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicHeaderParser.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPacketType.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPathEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicResetTokenGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicServerCodecBuilder.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContext.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContextBuilder.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslEngine.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslSessionContext.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamAddress.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannel.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelBootstrap.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelConfig.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamFrame.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamIdGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamLimitChangedEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamPriority.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamType.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTokenHandler.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTransportParameters.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quiche.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheConfig.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheLogger.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheNativeStaticallyReferencedJniMethods.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannelConfig.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicClientCodec.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicCodec.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnection.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnectionStats.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicServerCodec.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslContext.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngine.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngineMap.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannel.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannelConfig.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicTransportParameters.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheRecvInfo.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheSendInfo.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SecureRandomQuicConnectionIdGenerator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SegmentedDatagramPacketAllocator.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SockaddrIn.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslEarlyDataReadyEvent.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslSessionTicketKey.java create mode 100644 netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/package-info.java create mode 100644 netty-handler-codec-quic/src/main/java/module-info.java create mode 100755 netty-handler-codec-quic/src/main/resources/META-INF/native/libnetty_quiche_linux_x86_64.so diff --git a/netty-channel-epoll/build.gradle b/netty-channel-epoll/build.gradle new file mode 100644 index 0000000..1f0cb7a --- /dev/null +++ b/netty-channel-epoll/build.gradle @@ -0,0 +1,4 @@ +dependencies { + api project(':netty-channel') + api project(':netty-channel-unix') +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java new file mode 100644 index 0000000..915e265 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollChannel.java @@ -0,0 +1,796 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.channel.AbstractChannel; +import io.netty.channel.Channel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPromise; +import io.netty.channel.ConnectTimeoutException; +import io.netty.channel.EventLoop; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; +import io.netty.channel.socket.SocketChannelConfig; +import io.netty.channel.unix.FileDescriptor; +import io.netty.channel.unix.IovArray; +import io.netty.channel.unix.Socket; +import io.netty.channel.unix.UnixChannel; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.Future; + +import java.io.IOException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AlreadyConnectedException; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.ConnectionPendingException; +import java.nio.channels.NotYetConnectedException; +import java.nio.channels.UnresolvedAddressException; +import java.util.concurrent.TimeUnit; + +import static io.netty.channel.internal.ChannelUtils.WRITE_STATUS_SNDBUF_FULL; +import static io.netty.channel.unix.UnixChannelUtil.computeRemoteAddr; +import static io.netty.util.internal.ObjectUtil.checkNotNull; + +abstract class AbstractEpollChannel extends AbstractChannel implements UnixChannel { + private static final ChannelMetadata METADATA = new ChannelMetadata(false); + protected final LinuxSocket socket; + /** + * The future of the current connection attempt. If not null, subsequent + * connection attempts will fail. + */ + private ChannelPromise connectPromise; + private Future connectTimeoutFuture; + private SocketAddress requestedRemoteAddress; + + private volatile SocketAddress local; + private volatile SocketAddress remote; + + protected int flags = Native.EPOLLET; + boolean inputClosedSeenErrorOnRead; + boolean epollInReadyRunnablePending; + + protected volatile boolean active; + + AbstractEpollChannel(LinuxSocket fd) { + this(null, fd, false); + } + + AbstractEpollChannel(Channel parent, LinuxSocket fd, boolean active) { + super(parent); + this.socket = checkNotNull(fd, "fd"); + this.active = active; + if (active) { + // Directly cache the remote and local addresses + // See https://github.com/netty/netty/issues/2359 + this.local = fd.localAddress(); + this.remote = fd.remoteAddress(); + } + } + + AbstractEpollChannel(Channel parent, LinuxSocket fd, SocketAddress remote) { + super(parent); + this.socket = checkNotNull(fd, "fd"); + this.active = true; + // Directly cache the remote and local addresses + // See https://github.com/netty/netty/issues/2359 + this.remote = remote; + this.local = fd.localAddress(); + } + + static boolean isSoErrorZero(Socket fd) { + try { + return fd.getSoError() == 0; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + protected void setFlag(int flag) throws IOException { + if (!isFlagSet(flag)) { + flags |= flag; + modifyEvents(); + } + } + + void clearFlag(int flag) throws IOException { + if (isFlagSet(flag)) { + flags &= ~flag; + modifyEvents(); + } + } + + boolean isFlagSet(int flag) { + return (flags & flag) != 0; + } + + @Override + public final FileDescriptor fd() { + return socket; + } + + @Override + public abstract EpollChannelConfig config(); + + @Override + public boolean isActive() { + return active; + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + @Override + protected void doClose() throws Exception { + active = false; + // Even if we allow half closed sockets we should give up on reading. Otherwise we may allow a read attempt on a + // socket which has not even been connected yet. This has been observed to block during unit tests. + inputClosedSeenErrorOnRead = true; + try { + ChannelPromise promise = connectPromise; + if (promise != null) { + // Use tryFailure() instead of setFailure() to avoid the race against cancel(). + promise.tryFailure(new ClosedChannelException()); + connectPromise = null; + } + + Future future = connectTimeoutFuture; + if (future != null) { + future.cancel(false); + connectTimeoutFuture = null; + } + + if (isRegistered()) { + // Need to check if we are on the EventLoop as doClose() may be triggered by the GlobalEventExecutor + // if SO_LINGER is used. + // + // See https://github.com/netty/netty/issues/7159 + EventLoop loop = eventLoop(); + if (loop.inEventLoop()) { + doDeregister(); + } else { + loop.execute(new Runnable() { + @Override + public void run() { + try { + doDeregister(); + } catch (Throwable cause) { + pipeline().fireExceptionCaught(cause); + } + } + }); + } + } + } finally { + socket.close(); + } + } + + void resetCachedAddresses() { + local = socket.localAddress(); + remote = socket.remoteAddress(); + } + + @Override + protected void doDisconnect() throws Exception { + doClose(); + } + + @Override + protected boolean isCompatible(EventLoop loop) { + return loop instanceof EpollEventLoop; + } + + @Override + public boolean isOpen() { + return socket.isOpen(); + } + + @Override + protected void doDeregister() throws Exception { + ((EpollEventLoop) eventLoop()).remove(this); + } + + @Override + protected final void doBeginRead() throws Exception { + // Channel.read() or ChannelHandlerContext.read() was called + final AbstractEpollUnsafe unsafe = (AbstractEpollUnsafe) unsafe(); + unsafe.readPending = true; + + // We must set the read flag here as it is possible the user didn't read in the last read loop, the + // executeEpollInReadyRunnable could read nothing, and if the user doesn't explicitly call read they will + // never get data after this. + setFlag(Native.EPOLLIN); + + // If EPOLL ET mode is enabled and auto read was toggled off on the last read loop then we may not be notified + // again if we didn't consume all the data. So we force a read operation here if there maybe more data. + if (unsafe.maybeMoreDataToRead) { + unsafe.executeEpollInReadyRunnable(config()); + } + } + + final boolean shouldBreakEpollInReady(ChannelConfig config) { + return socket.isInputShutdown() && (inputClosedSeenErrorOnRead || !isAllowHalfClosure(config)); + } + + private static boolean isAllowHalfClosure(ChannelConfig config) { + if (config instanceof EpollDomainSocketChannelConfig) { + return ((EpollDomainSocketChannelConfig) config).isAllowHalfClosure(); + } + return config instanceof SocketChannelConfig && + ((SocketChannelConfig) config).isAllowHalfClosure(); + } + + final void clearEpollIn() { + // Only clear if registered with an EventLoop as otherwise + if (isRegistered()) { + final EventLoop loop = eventLoop(); + final AbstractEpollUnsafe unsafe = (AbstractEpollUnsafe) unsafe(); + if (loop.inEventLoop()) { + unsafe.clearEpollIn0(); + } else { + // schedule a task to clear the EPOLLIN as it is not safe to modify it directly + loop.execute(new Runnable() { + @Override + public void run() { + if (!unsafe.readPending && !config().isAutoRead()) { + // Still no read triggered so clear it now + unsafe.clearEpollIn0(); + } + } + }); + } + } else { + // The EventLoop is not registered atm so just update the flags so the correct value + // will be used once the channel is registered + flags &= ~Native.EPOLLIN; + } + } + + private void modifyEvents() throws IOException { + if (isOpen() && isRegistered()) { + ((EpollEventLoop) eventLoop()).modify(this); + } + } + + @Override + protected void doRegister() throws Exception { + // Just in case the previous EventLoop was shutdown abruptly, or an event is still pending on the old EventLoop + // make sure the epollInReadyRunnablePending variable is reset so we will be able to execute the Runnable on the + // new EventLoop. + epollInReadyRunnablePending = false; + ((EpollEventLoop) eventLoop()).add(this); + } + + @Override + protected abstract AbstractEpollUnsafe newUnsafe(); + + /** + * Returns an off-heap copy of the specified {@link ByteBuf}, and releases the original one. + */ + protected final ByteBuf newDirectBuffer(ByteBuf buf) { + return newDirectBuffer(buf, buf); + } + + /** + * Returns an off-heap copy of the specified {@link ByteBuf}, and releases the specified holder. + * The caller must ensure that the holder releases the original {@link ByteBuf} when the holder is released by + * this method. + */ + protected final ByteBuf newDirectBuffer(Object holder, ByteBuf buf) { + final int readableBytes = buf.readableBytes(); + if (readableBytes == 0) { + ReferenceCountUtil.release(holder); + return Unpooled.EMPTY_BUFFER; + } + + final ByteBufAllocator alloc = alloc(); + if (alloc.isDirectBufferPooled()) { + return newDirectBuffer0(holder, buf, alloc, readableBytes); + } + + final ByteBuf directBuf = ByteBufUtil.threadLocalDirectBuffer(); + if (directBuf == null) { + return newDirectBuffer0(holder, buf, alloc, readableBytes); + } + + directBuf.writeBytes(buf, buf.readerIndex(), readableBytes); + ReferenceCountUtil.safeRelease(holder); + return directBuf; + } + + private static ByteBuf newDirectBuffer0(Object holder, ByteBuf buf, ByteBufAllocator alloc, int capacity) { + final ByteBuf directBuf = alloc.directBuffer(capacity); + directBuf.writeBytes(buf, buf.readerIndex(), capacity); + ReferenceCountUtil.safeRelease(holder); + return directBuf; + } + + protected static void checkResolvable(InetSocketAddress addr) { + if (addr.isUnresolved()) { + throw new UnresolvedAddressException(); + } + } + + /** + * Read bytes into the given {@link ByteBuf} and return the amount. + */ + protected final int doReadBytes(ByteBuf byteBuf) throws Exception { + int writerIndex = byteBuf.writerIndex(); + int localReadAmount; + unsafe().recvBufAllocHandle().attemptedBytesRead(byteBuf.writableBytes()); + if (byteBuf.hasMemoryAddress()) { + localReadAmount = socket.recvAddress(byteBuf.memoryAddress(), writerIndex, byteBuf.capacity()); + } else { + ByteBuffer buf = byteBuf.internalNioBuffer(writerIndex, byteBuf.writableBytes()); + localReadAmount = socket.recv(buf, buf.position(), buf.limit()); + } + if (localReadAmount > 0) { + byteBuf.writerIndex(writerIndex + localReadAmount); + } + return localReadAmount; + } + + protected final int doWriteBytes(ChannelOutboundBuffer in, ByteBuf buf) throws Exception { + if (buf.hasMemoryAddress()) { + int localFlushedAmount = socket.sendAddress(buf.memoryAddress(), buf.readerIndex(), buf.writerIndex()); + if (localFlushedAmount > 0) { + in.removeBytes(localFlushedAmount); + return 1; + } + } else { + final ByteBuffer nioBuf = buf.nioBufferCount() == 1 ? + buf.internalNioBuffer(buf.readerIndex(), buf.readableBytes()) : buf.nioBuffer(); + int localFlushedAmount = socket.send(nioBuf, nioBuf.position(), nioBuf.limit()); + if (localFlushedAmount > 0) { + nioBuf.position(nioBuf.position() + localFlushedAmount); + in.removeBytes(localFlushedAmount); + return 1; + } + } + return WRITE_STATUS_SNDBUF_FULL; + } + + /** + * Write bytes to the socket, with or without a remote address. + * Used for datagram and TCP client fast open writes. + */ + final long doWriteOrSendBytes(ByteBuf data, InetSocketAddress remoteAddress, boolean fastOpen) + throws IOException { + assert !(fastOpen && remoteAddress == null) : "fastOpen requires a remote address"; + if (data.hasMemoryAddress()) { + long memoryAddress = data.memoryAddress(); + if (remoteAddress == null) { + return socket.sendAddress(memoryAddress, data.readerIndex(), data.writerIndex()); + } + return socket.sendToAddress(memoryAddress, data.readerIndex(), data.writerIndex(), + remoteAddress.getAddress(), remoteAddress.getPort(), fastOpen); + } + + if (data.nioBufferCount() > 1) { + IovArray array = ((EpollEventLoop) eventLoop()).cleanIovArray(); + array.add(data, data.readerIndex(), data.readableBytes()); + int cnt = array.count(); + assert cnt != 0; + + if (remoteAddress == null) { + return socket.writevAddresses(array.memoryAddress(0), cnt); + } + return socket.sendToAddresses(array.memoryAddress(0), cnt, + remoteAddress.getAddress(), remoteAddress.getPort(), fastOpen); + } + + ByteBuffer nioData = data.internalNioBuffer(data.readerIndex(), data.readableBytes()); + if (remoteAddress == null) { + return socket.send(nioData, nioData.position(), nioData.limit()); + } + return socket.sendTo(nioData, nioData.position(), nioData.limit(), + remoteAddress.getAddress(), remoteAddress.getPort(), fastOpen); + } + + protected abstract class AbstractEpollUnsafe extends AbstractUnsafe { + boolean readPending; + boolean maybeMoreDataToRead; + private EpollRecvByteAllocatorHandle allocHandle; + private final Runnable epollInReadyRunnable = new Runnable() { + @Override + public void run() { + epollInReadyRunnablePending = false; + epollInReady(); + } + }; + + /** + * Called once EPOLLIN event is ready to be processed + */ + abstract void epollInReady(); + + final void epollInBefore() { + maybeMoreDataToRead = false; + } + + final void epollInFinally(ChannelConfig config) { + maybeMoreDataToRead = allocHandle.maybeMoreDataToRead(); + + if (allocHandle.isReceivedRdHup() || (readPending && maybeMoreDataToRead)) { + // trigger a read again as there may be something left to read and because of epoll ET we + // will not get notified again until we read everything from the socket + // + // It is possible the last fireChannelRead call could cause the user to call read() again, or if + // autoRead is true the call to channelReadComplete would also call read, but maybeMoreDataToRead is set + // to false before every read operation to prevent re-entry into epollInReady() we will not read from + // the underlying OS again unless the user happens to call read again. + executeEpollInReadyRunnable(config); + } else if (!readPending && !config.isAutoRead()) { + // Check if there is a readPending which was not processed yet. + // This could be for two reasons: + // * The user called Channel.read() or ChannelHandlerContext.read() in channelRead(...) method + // * The user called Channel.read() or ChannelHandlerContext.read() in channelReadComplete(...) method + // + // See https://github.com/netty/netty/issues/2254 + clearEpollIn(); + } + } + + final void executeEpollInReadyRunnable(ChannelConfig config) { + if (epollInReadyRunnablePending || !isActive() || shouldBreakEpollInReady(config)) { + return; + } + epollInReadyRunnablePending = true; + eventLoop().execute(epollInReadyRunnable); + } + + /** + * Called once EPOLLRDHUP event is ready to be processed + */ + final void epollRdHupReady() { + // This must happen before we attempt to read. This will ensure reading continues until an error occurs. + recvBufAllocHandle().receivedRdHup(); + + if (isActive()) { + // If it is still active, we need to call epollInReady as otherwise we may miss to + // read pending data from the underlying file descriptor. + // See https://github.com/netty/netty/issues/3709 + epollInReady(); + } else { + // Just to be safe make sure the input marked as closed. + shutdownInput(true); + } + + // Clear the EPOLLRDHUP flag to prevent continuously getting woken up on this event. + clearEpollRdHup(); + } + + /** + * Clear the {@link Native#EPOLLRDHUP} flag from EPOLL, and close on failure. + */ + private void clearEpollRdHup() { + try { + clearFlag(Native.EPOLLRDHUP); + } catch (IOException e) { + pipeline().fireExceptionCaught(e); + close(voidPromise()); + } + } + + /** + * Shutdown the input side of the channel. + */ + void shutdownInput(boolean rdHup) { + if (!socket.isInputShutdown()) { + if (isAllowHalfClosure(config())) { + try { + socket.shutdown(true, false); + } catch (IOException ignored) { + // We attempted to shutdown and failed, which means the input has already effectively been + // shutdown. + fireEventAndClose(ChannelInputShutdownEvent.INSTANCE); + return; + } catch (NotYetConnectedException ignore) { + // We attempted to shutdown and failed, which means the input has already effectively been + // shutdown. + } + clearEpollIn0(); + pipeline().fireUserEventTriggered(ChannelInputShutdownEvent.INSTANCE); + } else { + close(voidPromise()); + } + } else if (!rdHup && !inputClosedSeenErrorOnRead) { + inputClosedSeenErrorOnRead = true; + pipeline().fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + } + } + + private void fireEventAndClose(Object evt) { + pipeline().fireUserEventTriggered(evt); + close(voidPromise()); + } + + @Override + public EpollRecvByteAllocatorHandle recvBufAllocHandle() { + if (allocHandle == null) { + allocHandle = newEpollHandle((RecvByteBufAllocator.ExtendedHandle) super.recvBufAllocHandle()); + } + return allocHandle; + } + + /** + * Create a new {@link EpollRecvByteAllocatorHandle} instance. + * @param handle The handle to wrap with EPOLL specific logic. + */ + EpollRecvByteAllocatorHandle newEpollHandle(RecvByteBufAllocator.ExtendedHandle handle) { + return new EpollRecvByteAllocatorHandle(handle); + } + + @Override + protected final void flush0() { + // Flush immediately only when there's no pending flush. + // If there's a pending flush operation, event loop will call forceFlush() later, + // and thus there's no need to call it now. + if (!isFlagSet(Native.EPOLLOUT)) { + super.flush0(); + } + } + + /** + * Called once a EPOLLOUT event is ready to be processed + */ + final void epollOutReady() { + if (connectPromise != null) { + // pending connect which is now complete so handle it. + finishConnect(); + } else if (!socket.isOutputShutdown()) { + // directly call super.flush0() to force a flush now + super.flush0(); + } + } + + protected final void clearEpollIn0() { + assert eventLoop().inEventLoop(); + try { + readPending = false; + clearFlag(Native.EPOLLIN); + } catch (IOException e) { + // When this happens there is something completely wrong with either the filedescriptor or epoll, + // so fire the exception through the pipeline and close the Channel. + pipeline().fireExceptionCaught(e); + unsafe().close(unsafe().voidPromise()); + } + } + + @Override + public void connect( + final SocketAddress remoteAddress, final SocketAddress localAddress, final ChannelPromise promise) { + if (!promise.setUncancellable() || !ensureOpen(promise)) { + return; + } + + try { + if (connectPromise != null) { + throw new ConnectionPendingException(); + } + + boolean wasActive = isActive(); + if (doConnect(remoteAddress, localAddress)) { + fulfillConnectPromise(promise, wasActive); + } else { + connectPromise = promise; + requestedRemoteAddress = remoteAddress; + + // Schedule connect timeout. + final int connectTimeoutMillis = config().getConnectTimeoutMillis(); + if (connectTimeoutMillis > 0) { + connectTimeoutFuture = eventLoop().schedule(new Runnable() { + @Override + public void run() { + ChannelPromise connectPromise = AbstractEpollChannel.this.connectPromise; + if (connectPromise != null && !connectPromise.isDone() + && connectPromise.tryFailure(new ConnectTimeoutException( + "connection timed out after " + connectTimeoutMillis + " ms: " + + remoteAddress))) { + close(voidPromise()); + } + } + }, connectTimeoutMillis, TimeUnit.MILLISECONDS); + } + + promise.addListener(new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture future) throws Exception { + if (future.isCancelled()) { + if (connectTimeoutFuture != null) { + connectTimeoutFuture.cancel(false); + } + connectPromise = null; + close(voidPromise()); + } + } + }); + } + } catch (Throwable t) { + closeIfClosed(); + promise.tryFailure(annotateConnectException(t, remoteAddress)); + } + } + + private void fulfillConnectPromise(ChannelPromise promise, boolean wasActive) { + if (promise == null) { + // Closed via cancellation and the promise has been notified already. + return; + } + active = true; + + // Get the state as trySuccess() may trigger an ChannelFutureListener that will close the Channel. + // We still need to ensure we call fireChannelActive() in this case. + boolean active = isActive(); + + // trySuccess() will return false if a user cancelled the connection attempt. + boolean promiseSet = promise.trySuccess(); + + // Regardless if the connection attempt was cancelled, channelActive() event should be triggered, + // because what happened is what happened. + if (!wasActive && active) { + pipeline().fireChannelActive(); + } + + // If a user cancelled the connection attempt, close the channel, which is followed by channelInactive(). + if (!promiseSet) { + close(voidPromise()); + } + } + + private void fulfillConnectPromise(ChannelPromise promise, Throwable cause) { + if (promise == null) { + // Closed via cancellation and the promise has been notified already. + return; + } + + // Use tryFailure() instead of setFailure() to avoid the race against cancel(). + promise.tryFailure(cause); + closeIfClosed(); + } + + private void finishConnect() { + // Note this method is invoked by the event loop only if the connection attempt was + // neither cancelled nor timed out. + + assert eventLoop().inEventLoop(); + + boolean connectStillInProgress = false; + try { + boolean wasActive = isActive(); + if (!doFinishConnect()) { + connectStillInProgress = true; + return; + } + fulfillConnectPromise(connectPromise, wasActive); + } catch (Throwable t) { + fulfillConnectPromise(connectPromise, annotateConnectException(t, requestedRemoteAddress)); + } finally { + if (!connectStillInProgress) { + // Check for null as the connectTimeoutFuture is only created if a connectTimeoutMillis > 0 is used + // See https://github.com/netty/netty/issues/1770 + if (connectTimeoutFuture != null) { + connectTimeoutFuture.cancel(false); + } + connectPromise = null; + } + } + } + + /** + * Finish the connect + */ + private boolean doFinishConnect() throws Exception { + if (socket.finishConnect()) { + clearFlag(Native.EPOLLOUT); + if (requestedRemoteAddress instanceof InetSocketAddress) { + remote = computeRemoteAddr((InetSocketAddress) requestedRemoteAddress, socket.remoteAddress()); + } + requestedRemoteAddress = null; + + return true; + } + setFlag(Native.EPOLLOUT); + return false; + } + } + + @Override + protected void doBind(SocketAddress local) throws Exception { + if (local instanceof InetSocketAddress) { + checkResolvable((InetSocketAddress) local); + } + socket.bind(local); + this.local = socket.localAddress(); + } + + /** + * Connect to the remote peer + */ + protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { + if (localAddress instanceof InetSocketAddress) { + checkResolvable((InetSocketAddress) localAddress); + } + + InetSocketAddress remoteSocketAddr = remoteAddress instanceof InetSocketAddress + ? (InetSocketAddress) remoteAddress : null; + if (remoteSocketAddr != null) { + checkResolvable(remoteSocketAddr); + } + + if (remote != null) { + // Check if already connected before trying to connect. This is needed as connect(...) will not return -1 + // and set errno to EISCONN if a previous connect(...) attempt was setting errno to EINPROGRESS and finished + // later. + throw new AlreadyConnectedException(); + } + + if (localAddress != null) { + socket.bind(localAddress); + } + + boolean connected = doConnect0(remoteAddress); + if (connected) { + remote = remoteSocketAddr == null ? + remoteAddress : computeRemoteAddr(remoteSocketAddr, socket.remoteAddress()); + } + // We always need to set the localAddress even if not connected yet as the bind already took place. + // + // See https://github.com/netty/netty/issues/3463 + local = socket.localAddress(); + return connected; + } + + boolean doConnect0(SocketAddress remote) throws Exception { + boolean success = false; + try { + boolean connected = socket.connect(remote); + if (!connected) { + setFlag(Native.EPOLLOUT); + } + success = true; + return connected; + } finally { + if (!success) { + doClose(); + } + } + } + + @Override + protected SocketAddress localAddress0() { + return local; + } + + @Override + protected SocketAddress remoteAddress0() { + return remote; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollServerChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollServerChannel.java new file mode 100644 index 0000000..c4ea86f --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollServerChannel.java @@ -0,0 +1,142 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import io.netty.channel.EventLoop; +import io.netty.channel.ServerChannel; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; + +public abstract class AbstractEpollServerChannel extends AbstractEpollChannel implements ServerChannel { + private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16); + + protected AbstractEpollServerChannel(int fd) { + this(new LinuxSocket(fd), false); + } + + protected AbstractEpollServerChannel(LinuxSocket fd) { + this(fd, isSoErrorZero(fd)); + } + + protected AbstractEpollServerChannel(LinuxSocket fd, boolean active) { + super(null, fd, active); + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + @Override + protected boolean isCompatible(EventLoop loop) { + return loop instanceof EpollEventLoop; + } + + @Override + protected InetSocketAddress remoteAddress0() { + return null; + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollServerSocketUnsafe(); + } + + @Override + protected void doWrite(ChannelOutboundBuffer in) throws Exception { + throw new UnsupportedOperationException(); + } + + @Override + protected Object filterOutboundMessage(Object msg) throws Exception { + throw new UnsupportedOperationException(); + } + + protected abstract Channel newChildChannel(int fd, byte[] remote, int offset, int len) throws Exception; + + final class EpollServerSocketUnsafe extends AbstractEpollUnsafe { + // Will hold the remote address after accept(...) was successful. + // We need 24 bytes for the address as maximum + 1 byte for storing the length. + // So use 26 bytes as it's a power of two. + private final byte[] acceptedAddress = new byte[26]; + + @Override + public void connect(SocketAddress socketAddress, SocketAddress socketAddress2, ChannelPromise channelPromise) { + // Connect not supported by ServerChannel implementations + channelPromise.setFailure(new UnsupportedOperationException()); + } + + @Override + void epollInReady() { + assert eventLoop().inEventLoop(); + final ChannelConfig config = config(); + if (shouldBreakEpollInReady(config)) { + clearEpollIn0(); + return; + } + final EpollRecvByteAllocatorHandle allocHandle = recvBufAllocHandle(); + allocHandle.edgeTriggered(isFlagSet(Native.EPOLLET)); + + final ChannelPipeline pipeline = pipeline(); + allocHandle.reset(config); + allocHandle.attemptedBytesRead(1); + epollInBefore(); + + Throwable exception = null; + try { + try { + do { + // lastBytesRead represents the fd. We use lastBytesRead because it must be set so that the + // EpollRecvByteAllocatorHandle knows if it should try to read again or not when autoRead is + // enabled. + allocHandle.lastBytesRead(socket.accept(acceptedAddress)); + if (allocHandle.lastBytesRead() == -1) { + // this means everything was handled for now + break; + } + allocHandle.incMessagesRead(1); + + readPending = false; + pipeline.fireChannelRead(newChildChannel(allocHandle.lastBytesRead(), acceptedAddress, 1, + acceptedAddress[0])); + } while (allocHandle.continueReading()); + } catch (Throwable t) { + exception = t; + } + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + + if (exception != null) { + pipeline.fireExceptionCaught(exception); + } + } finally { + epollInFinally(config); + } + } + } + + @Override + protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { + throw new UnsupportedOperationException(); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollStreamChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollStreamChannel.java new file mode 100644 index 0000000..7cbe0d1 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/AbstractEpollStreamChannel.java @@ -0,0 +1,1059 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import io.netty.channel.DefaultFileRegion; +import io.netty.channel.EventLoop; +import io.netty.channel.FileRegion; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.internal.ChannelUtils; +import io.netty.channel.socket.DuplexChannel; +import io.netty.channel.unix.FileDescriptor; +import io.netty.channel.unix.IovArray; +import io.netty.channel.unix.SocketWritableByteChannel; +import io.netty.channel.unix.UnixChannelUtil; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.StringUtil; +import io.netty.util.internal.UnstableApi; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.WritableByteChannel; +import java.util.Queue; +import java.util.concurrent.Executor; + +import static io.netty.channel.internal.ChannelUtils.MAX_BYTES_PER_GATHERING_WRITE_ATTEMPTED_LOW_THRESHOLD; +import static io.netty.channel.internal.ChannelUtils.WRITE_STATUS_SNDBUF_FULL; +import static io.netty.channel.unix.FileDescriptor.pipe; +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero; + +public abstract class AbstractEpollStreamChannel extends AbstractEpollChannel implements DuplexChannel { + private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16); + private static final String EXPECTED_TYPES = + " (expected: " + StringUtil.simpleClassName(ByteBuf.class) + ", " + + StringUtil.simpleClassName(DefaultFileRegion.class) + ')'; + private static final InternalLogger logger = InternalLoggerFactory.getInstance(AbstractEpollStreamChannel.class); + + private final Runnable flushTask = new Runnable() { + @Override + public void run() { + // Calling flush0 directly to ensure we not try to flush messages that were added via write(...) in the + // meantime. + ((AbstractEpollUnsafe) unsafe()).flush0(); + } + }; + + // Lazy init these if we need to splice(...) + private volatile Queue spliceQueue; + private FileDescriptor pipeIn; + private FileDescriptor pipeOut; + + private WritableByteChannel byteChannel; + + protected AbstractEpollStreamChannel(Channel parent, int fd) { + this(parent, new LinuxSocket(fd)); + } + + protected AbstractEpollStreamChannel(int fd) { + this(new LinuxSocket(fd)); + } + + AbstractEpollStreamChannel(LinuxSocket fd) { + this(fd, isSoErrorZero(fd)); + } + + AbstractEpollStreamChannel(Channel parent, LinuxSocket fd) { + super(parent, fd, true); + // Add EPOLLRDHUP so we are notified once the remote peer close the connection. + flags |= Native.EPOLLRDHUP; + } + + protected AbstractEpollStreamChannel(Channel parent, LinuxSocket fd, SocketAddress remote) { + super(parent, fd, remote); + // Add EPOLLRDHUP so we are notified once the remote peer close the connection. + flags |= Native.EPOLLRDHUP; + } + + protected AbstractEpollStreamChannel(LinuxSocket fd, boolean active) { + super(null, fd, active); + // Add EPOLLRDHUP so we are notified once the remote peer close the connection. + flags |= Native.EPOLLRDHUP; + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollStreamUnsafe(); + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + /** + * Splice from this {@link AbstractEpollStreamChannel} to another {@link AbstractEpollStreamChannel}. + * The {@code len} is the number of bytes to splice. If using {@link Integer#MAX_VALUE} it will + * splice until the {@link ChannelFuture} was canceled or it was failed. + * + * Please note: + * + * + */ + public final ChannelFuture spliceTo(final AbstractEpollStreamChannel ch, final int len) { + return spliceTo(ch, len, newPromise()); + } + + /** + * Splice from this {@link AbstractEpollStreamChannel} to another {@link AbstractEpollStreamChannel}. + * The {@code len} is the number of bytes to splice. If using {@link Integer#MAX_VALUE} it will + * splice until the {@link ChannelFuture} was canceled or it was failed. + * + * Please note: + * + * + */ + public final ChannelFuture spliceTo(final AbstractEpollStreamChannel ch, final int len, + final ChannelPromise promise) { + if (ch.eventLoop() != eventLoop()) { + throw new IllegalArgumentException("EventLoops are not the same."); + } + checkPositiveOrZero(len, "len"); + if (ch.config().getEpollMode() != EpollMode.LEVEL_TRIGGERED + || config().getEpollMode() != EpollMode.LEVEL_TRIGGERED) { + throw new IllegalStateException("spliceTo() supported only when using " + EpollMode.LEVEL_TRIGGERED); + } + checkNotNull(promise, "promise"); + if (!isOpen()) { + promise.tryFailure(new ClosedChannelException()); + } else { + addToSpliceQueue(new SpliceInChannelTask(ch, len, promise)); + failSpliceIfClosed(promise); + } + return promise; + } + + /** + * Splice from this {@link AbstractEpollStreamChannel} to another {@link FileDescriptor}. + * The {@code offset} is the offset for the {@link FileDescriptor} and {@code len} is the + * number of bytes to splice. If using {@link Integer#MAX_VALUE} it will splice until the + * {@link ChannelFuture} was canceled or it was failed. + * + * Please note: + * + */ + public final ChannelFuture spliceTo(final FileDescriptor ch, final int offset, final int len) { + return spliceTo(ch, offset, len, newPromise()); + } + + /** + * Splice from this {@link AbstractEpollStreamChannel} to another {@link FileDescriptor}. + * The {@code offset} is the offset for the {@link FileDescriptor} and {@code len} is the + * number of bytes to splice. If using {@link Integer#MAX_VALUE} it will splice until the + * {@link ChannelFuture} was canceled or it was failed. + * + * Please note: + * + */ + public final ChannelFuture spliceTo(final FileDescriptor ch, final int offset, final int len, + final ChannelPromise promise) { + checkPositiveOrZero(len, "len"); + checkPositiveOrZero(offset, "offset"); + if (config().getEpollMode() != EpollMode.LEVEL_TRIGGERED) { + throw new IllegalStateException("spliceTo() supported only when using " + EpollMode.LEVEL_TRIGGERED); + } + checkNotNull(promise, "promise"); + if (!isOpen()) { + promise.tryFailure(new ClosedChannelException()); + } else { + addToSpliceQueue(new SpliceFdTask(ch, offset, len, promise)); + failSpliceIfClosed(promise); + } + return promise; + } + + private void failSpliceIfClosed(ChannelPromise promise) { + if (!isOpen()) { + // Seems like the Channel was closed in the meantime try to fail the promise to prevent any + // cases where a future may not be notified otherwise. + if (promise.tryFailure(new ClosedChannelException())) { + eventLoop().execute(new Runnable() { + @Override + public void run() { + // Call this via the EventLoop as it is a MPSC queue. + clearSpliceQueue(); + } + }); + } + } + } + + /** + * Write bytes form the given {@link ByteBuf} to the underlying {@link java.nio.channels.Channel}. + * @param in the collection which contains objects to write. + * @param buf the {@link ByteBuf} from which the bytes should be written + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + */ + private int writeBytes(ChannelOutboundBuffer in, ByteBuf buf) throws Exception { + int readableBytes = buf.readableBytes(); + if (readableBytes == 0) { + in.remove(); + return 0; + } + + if (buf.hasMemoryAddress() || buf.nioBufferCount() == 1) { + return doWriteBytes(in, buf); + } else { + ByteBuffer[] nioBuffers = buf.nioBuffers(); + return writeBytesMultiple(in, nioBuffers, nioBuffers.length, readableBytes, + config().getMaxBytesPerGatheringWrite()); + } + } + + private void adjustMaxBytesPerGatheringWrite(long attempted, long written, long oldMaxBytesPerGatheringWrite) { + // By default we track the SO_SNDBUF when ever it is explicitly set. However some OSes may dynamically change + // SO_SNDBUF (and other characteristics that determine how much data can be written at once) so we should try + // make a best effort to adjust as OS behavior changes. + if (attempted == written) { + if (attempted << 1 > oldMaxBytesPerGatheringWrite) { + config().setMaxBytesPerGatheringWrite(attempted << 1); + } + } else if (attempted > MAX_BYTES_PER_GATHERING_WRITE_ATTEMPTED_LOW_THRESHOLD && written < attempted >>> 1) { + config().setMaxBytesPerGatheringWrite(attempted >>> 1); + } + } + + /** + * Write multiple bytes via {@link IovArray}. + * @param in the collection which contains objects to write. + * @param array The array which contains the content to write. + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + * @throws IOException If an I/O exception occurs during write. + */ + private int writeBytesMultiple(ChannelOutboundBuffer in, IovArray array) throws IOException { + final long expectedWrittenBytes = array.size(); + assert expectedWrittenBytes != 0; + final int cnt = array.count(); + assert cnt != 0; + + final long localWrittenBytes = socket.writevAddresses(array.memoryAddress(0), cnt); + if (localWrittenBytes > 0) { + adjustMaxBytesPerGatheringWrite(expectedWrittenBytes, localWrittenBytes, array.maxBytes()); + in.removeBytes(localWrittenBytes); + return 1; + } + return WRITE_STATUS_SNDBUF_FULL; + } + + /** + * Write multiple bytes via {@link ByteBuffer} array. + * @param in the collection which contains objects to write. + * @param nioBuffers The buffers to write. + * @param nioBufferCnt The number of buffers to write. + * @param expectedWrittenBytes The number of bytes we expect to write. + * @param maxBytesPerGatheringWrite The maximum number of bytes we should attempt to write. + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + * @throws IOException If an I/O exception occurs during write. + */ + private int writeBytesMultiple( + ChannelOutboundBuffer in, ByteBuffer[] nioBuffers, int nioBufferCnt, long expectedWrittenBytes, + long maxBytesPerGatheringWrite) throws IOException { + assert expectedWrittenBytes != 0; + if (expectedWrittenBytes > maxBytesPerGatheringWrite) { + expectedWrittenBytes = maxBytesPerGatheringWrite; + } + + final long localWrittenBytes = socket.writev(nioBuffers, 0, nioBufferCnt, expectedWrittenBytes); + if (localWrittenBytes > 0) { + adjustMaxBytesPerGatheringWrite(expectedWrittenBytes, localWrittenBytes, maxBytesPerGatheringWrite); + in.removeBytes(localWrittenBytes); + return 1; + } + return WRITE_STATUS_SNDBUF_FULL; + } + + /** + * Write a {@link DefaultFileRegion} + * @param in the collection which contains objects to write. + * @param region the {@link DefaultFileRegion} from which the bytes should be written + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + */ + private int writeDefaultFileRegion(ChannelOutboundBuffer in, DefaultFileRegion region) throws Exception { + final long offset = region.transferred(); + final long regionCount = region.count(); + if (offset >= regionCount) { + in.remove(); + return 0; + } + + final long flushedAmount = socket.sendFile(region, region.position(), offset, regionCount - offset); + if (flushedAmount > 0) { + in.progress(flushedAmount); + if (region.transferred() >= regionCount) { + in.remove(); + } + return 1; + } else if (flushedAmount == 0) { + validateFileRegion(region, offset); + } + return WRITE_STATUS_SNDBUF_FULL; + } + + /** + * Write a {@link FileRegion} + * @param in the collection which contains objects to write. + * @param region the {@link FileRegion} from which the bytes should be written + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + */ + private int writeFileRegion(ChannelOutboundBuffer in, FileRegion region) throws Exception { + if (region.transferred() >= region.count()) { + in.remove(); + return 0; + } + + if (byteChannel == null) { + byteChannel = new EpollSocketWritableByteChannel(); + } + final long flushedAmount = region.transferTo(byteChannel, region.transferred()); + if (flushedAmount > 0) { + in.progress(flushedAmount); + if (region.transferred() >= region.count()) { + in.remove(); + } + return 1; + } + return WRITE_STATUS_SNDBUF_FULL; + } + + @Override + protected void doWrite(ChannelOutboundBuffer in) throws Exception { + int writeSpinCount = config().getWriteSpinCount(); + do { + final int msgCount = in.size(); + // Do gathering write if the outbound buffer entries start with more than one ByteBuf. + if (msgCount > 1 && in.current() instanceof ByteBuf) { + writeSpinCount -= doWriteMultiple(in); + } else if (msgCount == 0) { + // Wrote all messages. + clearFlag(Native.EPOLLOUT); + // Return here so we not set the EPOLLOUT flag. + return; + } else { // msgCount == 1 + writeSpinCount -= doWriteSingle(in); + } + + // We do not break the loop here even if the outbound buffer was flushed completely, + // because a user might have triggered another write and flush when we notify his or her + // listeners. + } while (writeSpinCount > 0); + + if (writeSpinCount == 0) { + // It is possible that we have set EPOLLOUT, woken up by EPOLL because the socket is writable, and then use + // our write quantum. In this case we no longer want to set the EPOLLOUT flag because the socket is still + // writable (as far as we know). We will find out next time we attempt to write if the socket is writable + // and set the EPOLLOUT if necessary. + clearFlag(Native.EPOLLOUT); + + // We used our writeSpin quantum, and should try to write again later. + eventLoop().execute(flushTask); + } else { + // Underlying descriptor can not accept all data currently, so set the EPOLLOUT flag to be woken up + // when it can accept more data. + setFlag(Native.EPOLLOUT); + } + } + + /** + * Attempt to write a single object. + * @param in the collection which contains objects to write. + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + * @throws Exception If an I/O error occurs. + */ + protected int doWriteSingle(ChannelOutboundBuffer in) throws Exception { + // The outbound buffer contains only one message or it contains a file region. + Object msg = in.current(); + if (msg instanceof ByteBuf) { + return writeBytes(in, (ByteBuf) msg); + } else if (msg instanceof DefaultFileRegion) { + return writeDefaultFileRegion(in, (DefaultFileRegion) msg); + } else if (msg instanceof FileRegion) { + return writeFileRegion(in, (FileRegion) msg); + } else if (msg instanceof SpliceOutTask) { + if (!((SpliceOutTask) msg).spliceOut()) { + return WRITE_STATUS_SNDBUF_FULL; + } + in.remove(); + return 1; + } else { + // Should never reach here. + throw new Error(); + } + } + + /** + * Attempt to write multiple {@link ByteBuf} objects. + * @param in the collection which contains objects to write. + * @return The value that should be decremented from the write quantum which starts at + * {@link ChannelConfig#getWriteSpinCount()}. The typical use cases are as follows: + * + * @throws Exception If an I/O error occurs. + */ + private int doWriteMultiple(ChannelOutboundBuffer in) throws Exception { + final long maxBytesPerGatheringWrite = config().getMaxBytesPerGatheringWrite(); + IovArray array = ((EpollEventLoop) eventLoop()).cleanIovArray(); + array.maxBytes(maxBytesPerGatheringWrite); + in.forEachFlushedMessage(array); + + if (array.count() >= 1) { + // TODO: Handle the case where cnt == 1 specially. + return writeBytesMultiple(in, array); + } + // cnt == 0, which means the outbound buffer contained empty buffers only. + in.removeBytes(0); + return 0; + } + + @Override + protected Object filterOutboundMessage(Object msg) { + if (msg instanceof ByteBuf) { + ByteBuf buf = (ByteBuf) msg; + return UnixChannelUtil.isBufferCopyNeededForWrite(buf)? newDirectBuffer(buf): buf; + } + + if (msg instanceof FileRegion || msg instanceof SpliceOutTask) { + return msg; + } + + throw new UnsupportedOperationException( + "unsupported message type: " + StringUtil.simpleClassName(msg) + EXPECTED_TYPES); + } + + @UnstableApi + @Override + protected final void doShutdownOutput() throws Exception { + socket.shutdown(false, true); + } + + private void shutdownInput0(final ChannelPromise promise) { + try { + socket.shutdown(true, false); + promise.setSuccess(); + } catch (Throwable cause) { + promise.setFailure(cause); + } + } + + @Override + public boolean isOutputShutdown() { + return socket.isOutputShutdown(); + } + + @Override + public boolean isInputShutdown() { + return socket.isInputShutdown(); + } + + @Override + public boolean isShutdown() { + return socket.isShutdown(); + } + + @Override + public ChannelFuture shutdownOutput() { + return shutdownOutput(newPromise()); + } + + @Override + public ChannelFuture shutdownOutput(final ChannelPromise promise) { + EventLoop loop = eventLoop(); + if (loop.inEventLoop()) { + ((AbstractUnsafe) unsafe()).shutdownOutput(promise); + } else { + loop.execute(new Runnable() { + @Override + public void run() { + ((AbstractUnsafe) unsafe()).shutdownOutput(promise); + } + }); + } + + return promise; + } + + @Override + public ChannelFuture shutdownInput() { + return shutdownInput(newPromise()); + } + + @Override + public ChannelFuture shutdownInput(final ChannelPromise promise) { + Executor closeExecutor = ((EpollStreamUnsafe) unsafe()).prepareToClose(); + if (closeExecutor != null) { + closeExecutor.execute(new Runnable() { + @Override + public void run() { + shutdownInput0(promise); + } + }); + } else { + EventLoop loop = eventLoop(); + if (loop.inEventLoop()) { + shutdownInput0(promise); + } else { + loop.execute(new Runnable() { + @Override + public void run() { + shutdownInput0(promise); + } + }); + } + } + return promise; + } + + @Override + public ChannelFuture shutdown() { + return shutdown(newPromise()); + } + + @Override + public ChannelFuture shutdown(final ChannelPromise promise) { + ChannelFuture shutdownOutputFuture = shutdownOutput(); + if (shutdownOutputFuture.isDone()) { + shutdownOutputDone(shutdownOutputFuture, promise); + } else { + shutdownOutputFuture.addListener(new ChannelFutureListener() { + @Override + public void operationComplete(final ChannelFuture shutdownOutputFuture) throws Exception { + shutdownOutputDone(shutdownOutputFuture, promise); + } + }); + } + return promise; + } + + private void shutdownOutputDone(final ChannelFuture shutdownOutputFuture, final ChannelPromise promise) { + ChannelFuture shutdownInputFuture = shutdownInput(); + if (shutdownInputFuture.isDone()) { + shutdownDone(shutdownOutputFuture, shutdownInputFuture, promise); + } else { + shutdownInputFuture.addListener(new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture shutdownInputFuture) throws Exception { + shutdownDone(shutdownOutputFuture, shutdownInputFuture, promise); + } + }); + } + } + + private static void shutdownDone(ChannelFuture shutdownOutputFuture, + ChannelFuture shutdownInputFuture, + ChannelPromise promise) { + Throwable shutdownOutputCause = shutdownOutputFuture.cause(); + Throwable shutdownInputCause = shutdownInputFuture.cause(); + if (shutdownOutputCause != null) { + if (shutdownInputCause != null) { + logger.debug("Exception suppressed because a previous exception occurred.", + shutdownInputCause); + } + promise.setFailure(shutdownOutputCause); + } else if (shutdownInputCause != null) { + promise.setFailure(shutdownInputCause); + } else { + promise.setSuccess(); + } + } + + @Override + protected void doClose() throws Exception { + try { + // Calling super.doClose() first so spliceTo(...) will fail on next call. + super.doClose(); + } finally { + safeClosePipe(pipeIn); + safeClosePipe(pipeOut); + clearSpliceQueue(); + } + } + + private void clearSpliceQueue() { + Queue sQueue = spliceQueue; + if (sQueue == null) { + return; + } + ClosedChannelException exception = null; + + for (;;) { + SpliceInTask task = sQueue.poll(); + if (task == null) { + break; + } + if (exception == null) { + exception = new ClosedChannelException(); + } + task.promise.tryFailure(exception); + } + } + + private static void safeClosePipe(FileDescriptor fd) { + if (fd != null) { + try { + fd.close(); + } catch (IOException e) { + logger.warn("Error while closing a pipe", e); + } + } + } + + class EpollStreamUnsafe extends AbstractEpollUnsafe { + // Overridden here just to be able to access this method from AbstractEpollStreamChannel + @Override + protected Executor prepareToClose() { + return super.prepareToClose(); + } + + private void handleReadException(ChannelPipeline pipeline, ByteBuf byteBuf, Throwable cause, boolean close, + EpollRecvByteAllocatorHandle allocHandle) { + if (byteBuf != null) { + if (byteBuf.isReadable()) { + readPending = false; + pipeline.fireChannelRead(byteBuf); + } else { + byteBuf.release(); + } + } + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + pipeline.fireExceptionCaught(cause); + + // If oom will close the read event, release connection. + // See https://github.com/netty/netty/issues/10434 + if (close || cause instanceof OutOfMemoryError || cause instanceof IOException) { + shutdownInput(false); + } + } + + @Override + EpollRecvByteAllocatorHandle newEpollHandle(RecvByteBufAllocator.ExtendedHandle handle) { + return new EpollRecvByteAllocatorStreamingHandle(handle); + } + + @Override + void epollInReady() { + final ChannelConfig config = config(); + if (shouldBreakEpollInReady(config)) { + clearEpollIn0(); + return; + } + final EpollRecvByteAllocatorHandle allocHandle = recvBufAllocHandle(); + allocHandle.edgeTriggered(isFlagSet(Native.EPOLLET)); + + final ChannelPipeline pipeline = pipeline(); + final ByteBufAllocator allocator = config.getAllocator(); + allocHandle.reset(config); + epollInBefore(); + + ByteBuf byteBuf = null; + boolean close = false; + Queue sQueue = null; + try { + do { + if (sQueue != null || (sQueue = spliceQueue) != null) { + SpliceInTask spliceTask = sQueue.peek(); + if (spliceTask != null) { + boolean spliceInResult = spliceTask.spliceIn(allocHandle); + + if (allocHandle.isReceivedRdHup()) { + shutdownInput(true); + } + if (spliceInResult) { + // We need to check if it is still active as if not we removed all SpliceTasks in + // doClose(...) + if (isActive()) { + sQueue.remove(); + } + continue; + } else { + break; + } + } + } + + // we use a direct buffer here as the native implementations only be able + // to handle direct buffers. + byteBuf = allocHandle.allocate(allocator); + allocHandle.lastBytesRead(doReadBytes(byteBuf)); + if (allocHandle.lastBytesRead() <= 0) { + // nothing was read, release the buffer. + byteBuf.release(); + byteBuf = null; + close = allocHandle.lastBytesRead() < 0; + if (close) { + // There is nothing left to read as we received an EOF. + readPending = false; + } + break; + } + allocHandle.incMessagesRead(1); + readPending = false; + pipeline.fireChannelRead(byteBuf); + byteBuf = null; + + if (shouldBreakEpollInReady(config)) { + // We need to do this for two reasons: + // + // - If the input was shutdown in between (which may be the case when the user did it in the + // fireChannelRead(...) method we should not try to read again to not produce any + // miss-leading exceptions. + // + // - If the user closes the channel we need to ensure we not try to read from it again as + // the filedescriptor may be re-used already by the OS if the system is handling a lot of + // concurrent connections and so needs a lot of filedescriptors. If not do this we risk + // reading data from a filedescriptor that belongs to another socket then the socket that + // was "wrapped" by this Channel implementation. + break; + } + } while (allocHandle.continueReading()); + + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + + if (close) { + shutdownInput(false); + } + } catch (Throwable t) { + handleReadException(pipeline, byteBuf, t, close, allocHandle); + } finally { + if (sQueue == null) { + epollInFinally(config); + } else { + if (!config.isAutoRead()) { + clearEpollIn(); + } + } + } + } + } + + private void addToSpliceQueue(final SpliceInTask task) { + Queue sQueue = spliceQueue; + if (sQueue == null) { + synchronized (this) { + sQueue = spliceQueue; + if (sQueue == null) { + spliceQueue = sQueue = PlatformDependent.newMpscQueue(); + } + } + } + sQueue.add(task); + } + + protected abstract class SpliceInTask { + final ChannelPromise promise; + int len; + + protected SpliceInTask(int len, ChannelPromise promise) { + this.promise = promise; + this.len = len; + } + + abstract boolean spliceIn(RecvByteBufAllocator.Handle handle); + + protected final int spliceIn(FileDescriptor pipeOut, RecvByteBufAllocator.Handle handle) throws IOException { + // calculate the maximum amount of data we are allowed to splice + int length = Math.min(handle.guess(), len); + int splicedIn = 0; + for (;;) { + // Splicing until there is nothing left to splice. + int localSplicedIn = Native.splice(socket.intValue(), -1, pipeOut.intValue(), -1, length); + handle.lastBytesRead(localSplicedIn); + if (localSplicedIn == 0) { + break; + } + splicedIn += localSplicedIn; + length -= localSplicedIn; + } + + return splicedIn; + } + } + + // Let it directly implement channelFutureListener as well to reduce object creation. + private final class SpliceInChannelTask extends SpliceInTask implements ChannelFutureListener { + private final AbstractEpollStreamChannel ch; + + SpliceInChannelTask(AbstractEpollStreamChannel ch, int len, ChannelPromise promise) { + super(len, promise); + this.ch = ch; + } + + @Override + public void operationComplete(ChannelFuture future) throws Exception { + if (!future.isSuccess()) { + promise.setFailure(future.cause()); + } + } + + @Override + public boolean spliceIn(RecvByteBufAllocator.Handle handle) { + assert ch.eventLoop().inEventLoop(); + if (len == 0) { + promise.setSuccess(); + return true; + } + try { + // We create the pipe on the target channel as this will allow us to just handle pending writes + // later in a correct fashion without get into any ordering issues when spliceTo(...) is called + // on multiple Channels pointing to one target Channel. + FileDescriptor pipeOut = ch.pipeOut; + if (pipeOut == null) { + // Create a new pipe as non was created before. + FileDescriptor[] pipe = pipe(); + ch.pipeIn = pipe[0]; + pipeOut = ch.pipeOut = pipe[1]; + } + + int splicedIn = spliceIn(pipeOut, handle); + if (splicedIn > 0) { + // Integer.MAX_VALUE is a special value which will result in splice forever. + if (len != Integer.MAX_VALUE) { + len -= splicedIn; + } + + // Depending on if we are done with splicing inbound data we set the right promise for the + // outbound splicing. + final ChannelPromise splicePromise; + if (len == 0) { + splicePromise = promise; + } else { + splicePromise = ch.newPromise().addListener(this); + } + + boolean autoRead = config().isAutoRead(); + + // Just call unsafe().write(...) and flush() as we not want to traverse the whole pipeline for this + // case. + ch.unsafe().write(new SpliceOutTask(ch, splicedIn, autoRead), splicePromise); + ch.unsafe().flush(); + if (autoRead && !splicePromise.isDone()) { + // Write was not done which means the target channel was not writable. In this case we need to + // disable reading until we are done with splicing to the target channel because: + // + // - The user may want to to trigger another splice operation once the splicing was complete. + config().setAutoRead(false); + } + } + + return len == 0; + } catch (Throwable cause) { + promise.setFailure(cause); + return true; + } + } + } + + private final class SpliceOutTask { + private final AbstractEpollStreamChannel ch; + private final boolean autoRead; + private int len; + + SpliceOutTask(AbstractEpollStreamChannel ch, int len, boolean autoRead) { + this.ch = ch; + this.len = len; + this.autoRead = autoRead; + } + + public boolean spliceOut() throws Exception { + assert ch.eventLoop().inEventLoop(); + try { + int splicedOut = Native.splice(ch.pipeIn.intValue(), -1, ch.socket.intValue(), -1, len); + len -= splicedOut; + if (len == 0) { + if (autoRead) { + // AutoRead was used and we spliced everything so start reading again + config().setAutoRead(true); + } + return true; + } + return false; + } catch (IOException e) { + if (autoRead) { + // AutoRead was used and we spliced everything so start reading again + config().setAutoRead(true); + } + throw e; + } + } + } + + private final class SpliceFdTask extends SpliceInTask { + private final FileDescriptor fd; + private final ChannelPromise promise; + private int offset; + + SpliceFdTask(FileDescriptor fd, int offset, int len, ChannelPromise promise) { + super(len, promise); + this.fd = fd; + this.promise = promise; + this.offset = offset; + } + + @Override + public boolean spliceIn(RecvByteBufAllocator.Handle handle) { + assert eventLoop().inEventLoop(); + if (len == 0) { + promise.setSuccess(); + return true; + } + + try { + FileDescriptor[] pipe = pipe(); + FileDescriptor pipeIn = pipe[0]; + FileDescriptor pipeOut = pipe[1]; + try { + int splicedIn = spliceIn(pipeOut, handle); + if (splicedIn > 0) { + // Integer.MAX_VALUE is a special value which will result in splice forever. + if (len != Integer.MAX_VALUE) { + len -= splicedIn; + } + do { + int splicedOut = Native.splice(pipeIn.intValue(), -1, fd.intValue(), offset, splicedIn); + offset += splicedOut; + splicedIn -= splicedOut; + } while (splicedIn > 0); + if (len == 0) { + promise.setSuccess(); + return true; + } + } + return false; + } finally { + safeClosePipe(pipeIn); + safeClosePipe(pipeOut); + } + } catch (Throwable cause) { + promise.setFailure(cause); + return true; + } + } + } + + private final class EpollSocketWritableByteChannel extends SocketWritableByteChannel { + EpollSocketWritableByteChannel() { + super(socket); + assert fd == socket; + } + + @Override + protected int write(final ByteBuffer buf, final int pos, final int limit) throws IOException { + return socket.send(buf, pos, limit); + } + + @Override + protected ByteBufAllocator alloc() { + return AbstractEpollStreamChannel.this.alloc(); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Epoll.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Epoll.java new file mode 100644 index 0000000..69620b1 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Epoll.java @@ -0,0 +1,118 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.ChannelOption; +import io.netty.channel.unix.FileDescriptor; +import io.netty.util.internal.SystemPropertyUtil; + +/** + * Tells if {@code netty-transport-native-epoll} is + * supported. + */ +public final class Epoll { + + private static final Throwable UNAVAILABILITY_CAUSE; + + static { + Throwable cause = null; + + if (SystemPropertyUtil.getBoolean("io.netty.transport.noNative", false)) { + cause = new UnsupportedOperationException( + "Native transport was explicit disabled with -Dio.netty.transport.noNative=true"); + } else { + FileDescriptor epollFd = null; + FileDescriptor eventFd = null; + try { + epollFd = Native.newEpollCreate(); + eventFd = Native.newEventFd(); + } catch (Throwable t) { + cause = t; + } finally { + if (epollFd != null) { + try { + epollFd.close(); + } catch (Exception ignore) { + // ignore + } + } + if (eventFd != null) { + try { + eventFd.close(); + } catch (Exception ignore) { + // ignore + } + } + } + } + + UNAVAILABILITY_CAUSE = cause; + } + + /** + * Returns {@code true} if and only if the {@code + * netty-transport-native-epoll} is available. + */ + public static boolean isAvailable() { + return UNAVAILABILITY_CAUSE == null; + } + + /** + * Ensure that {@code netty-transport-native-epoll} is + * available. + * + * @throws UnsatisfiedLinkError if unavailable + */ + public static void ensureAvailability() { + if (UNAVAILABILITY_CAUSE != null) { + throw (Error) new UnsatisfiedLinkError( + "failed to load the required native library").initCause(UNAVAILABILITY_CAUSE); + } + } + + /** + * Returns the cause of unavailability of + * {@code netty-transport-native-epoll}. + * + * @return the cause if unavailable. {@code null} if available. + */ + public static Throwable unavailabilityCause() { + return UNAVAILABILITY_CAUSE; + } + + /** + * Returns {@code true} if the epoll native transport is both {@linkplain #isAvailable() available} and supports + * {@linkplain ChannelOption#TCP_FASTOPEN_CONNECT client-side TCP FastOpen}. + * + * @return {@code true} if it's possible to use client-side TCP FastOpen via epoll, otherwise {@code false}. + */ + public static boolean isTcpFastOpenClientSideAvailable() { + return isAvailable() && Native.IS_SUPPORTING_TCP_FASTOPEN_CLIENT; + } + + /** + * Returns {@code true} if the epoll native transport is both {@linkplain #isAvailable() available} and supports + * {@linkplain ChannelOption#TCP_FASTOPEN server-side TCP FastOpen}. + * + * @return {@code true} if it's possible to use server-side TCP FastOpen via epoll, otherwise {@code false}. + */ + public static boolean isTcpFastOpenServerSideAvailable() { + return isAvailable() && Native.IS_SUPPORTING_TCP_FASTOPEN_SERVER; + } + + private Epoll() { + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelConfig.java new file mode 100644 index 0000000..6f06d74 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelConfig.java @@ -0,0 +1,237 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.DefaultChannelConfig; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.unix.IntegerUnixChannelOption; +import io.netty.channel.unix.RawUnixChannelOption; +import io.netty.util.internal.ObjectUtil; + +import java.io.IOException; +import java.nio.ByteBuffer; +import java.util.Map; + +import static io.netty.channel.unix.Limits.SSIZE_MAX; + +public class EpollChannelConfig extends DefaultChannelConfig { + private volatile long maxBytesPerGatheringWrite = SSIZE_MAX; + + protected EpollChannelConfig(Channel channel) { + super(checkAbstractEpollChannel(channel)); + } + + protected EpollChannelConfig(Channel channel, RecvByteBufAllocator recvByteBufAllocator) { + super(checkAbstractEpollChannel(channel), recvByteBufAllocator); + } + + protected LinuxSocket socket() { + return ((AbstractEpollChannel) channel).socket; + } + + private static Channel checkAbstractEpollChannel(Channel channel) { + if (!(channel instanceof AbstractEpollChannel)) { + throw new IllegalArgumentException("channel is not AbstractEpollChannel: " + channel.getClass()); + } + return channel; + } + + @Override + public Map, Object> getOptions() { + return getOptions(super.getOptions(), EpollChannelOption.EPOLL_MODE); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == EpollChannelOption.EPOLL_MODE) { + return (T) getEpollMode(); + } + try { + if (option instanceof IntegerUnixChannelOption) { + IntegerUnixChannelOption opt = (IntegerUnixChannelOption) option; + return (T) Integer.valueOf(((AbstractEpollChannel) channel).socket.getIntOpt( + opt.level(), opt.optname())); + } + if (option instanceof RawUnixChannelOption) { + RawUnixChannelOption opt = (RawUnixChannelOption) option; + ByteBuffer out = ByteBuffer.allocate(opt.length()); + ((AbstractEpollChannel) channel).socket.getRawOpt(opt.level(), opt.optname(), out); + return (T) out.flip(); + } + } catch (IOException e) { + throw new ChannelException(e); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + if (option == EpollChannelOption.EPOLL_MODE) { + setEpollMode((EpollMode) value); + } else { + try { + if (option instanceof IntegerUnixChannelOption) { + IntegerUnixChannelOption opt = (IntegerUnixChannelOption) option; + ((AbstractEpollChannel) channel).socket.setIntOpt(opt.level(), opt.optname(), (Integer) value); + return true; + } else if (option instanceof RawUnixChannelOption) { + RawUnixChannelOption opt = (RawUnixChannelOption) option; + ((AbstractEpollChannel) channel).socket.setRawOpt(opt.level(), opt.optname(), (ByteBuffer) value); + return true; + } + } catch (IOException e) { + throw new ChannelException(e); + } + return super.setOption(option, value); + } + return true; + } + + @Override + public EpollChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public EpollChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + if (!(allocator.newHandle() instanceof RecvByteBufAllocator.ExtendedHandle)) { + throw new IllegalArgumentException("allocator.newHandle() must return an object of type: " + + RecvByteBufAllocator.ExtendedHandle.class); + } + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + @Deprecated + public EpollChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + @Deprecated + public EpollChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public EpollChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + /** + * Return the {@link EpollMode} used. Default is + * {@link EpollMode#EDGE_TRIGGERED}. If you want to use {@link #isAutoRead()} {@code false} or + * {@link #getMaxMessagesPerRead()} and have an accurate behaviour you should use + * {@link EpollMode#LEVEL_TRIGGERED}. + */ + public EpollMode getEpollMode() { + return ((AbstractEpollChannel) channel).isFlagSet(Native.EPOLLET) + ? EpollMode.EDGE_TRIGGERED : EpollMode.LEVEL_TRIGGERED; + } + + /** + * Set the {@link EpollMode} used. Default is + * {@link EpollMode#EDGE_TRIGGERED}. If you want to use {@link #isAutoRead()} {@code false} or + * {@link #getMaxMessagesPerRead()} and have an accurate behaviour you should use + * {@link EpollMode#LEVEL_TRIGGERED}. + * + * Be aware this config setting can only be adjusted before the channel was registered. + */ + public EpollChannelConfig setEpollMode(EpollMode mode) { + ObjectUtil.checkNotNull(mode, "mode"); + + try { + switch (mode) { + case EDGE_TRIGGERED: + checkChannelNotRegistered(); + ((AbstractEpollChannel) channel).setFlag(Native.EPOLLET); + break; + case LEVEL_TRIGGERED: + checkChannelNotRegistered(); + ((AbstractEpollChannel) channel).clearFlag(Native.EPOLLET); + break; + default: + throw new Error(); + } + } catch (IOException e) { + throw new ChannelException(e); + } + return this; + } + + private void checkChannelNotRegistered() { + if (channel.isRegistered()) { + throw new IllegalStateException("EpollMode can only be changed before channel is registered"); + } + } + + @Override + protected final void autoReadCleared() { + ((AbstractEpollChannel) channel).clearEpollIn(); + } + + protected final void setMaxBytesPerGatheringWrite(long maxBytesPerGatheringWrite) { + this.maxBytesPerGatheringWrite = maxBytesPerGatheringWrite; + } + + protected final long getMaxBytesPerGatheringWrite() { + return maxBytesPerGatheringWrite; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelOption.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelOption.java new file mode 100644 index 0000000..b10938e --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollChannelOption.java @@ -0,0 +1,62 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.ChannelOption; +import io.netty.channel.unix.UnixChannelOption; +import java.net.InetAddress; +import java.util.Map; + +public final class EpollChannelOption extends UnixChannelOption { + + public static final ChannelOption TCP_CORK = valueOf(EpollChannelOption.class, "TCP_CORK"); + public static final ChannelOption TCP_NOTSENT_LOWAT = valueOf(EpollChannelOption.class, "TCP_NOTSENT_LOWAT"); + public static final ChannelOption TCP_KEEPIDLE = valueOf(EpollChannelOption.class, "TCP_KEEPIDLE"); + public static final ChannelOption TCP_KEEPINTVL = valueOf(EpollChannelOption.class, "TCP_KEEPINTVL"); + public static final ChannelOption TCP_KEEPCNT = valueOf(EpollChannelOption.class, "TCP_KEEPCNT"); + public static final ChannelOption TCP_USER_TIMEOUT = + valueOf(EpollChannelOption.class, "TCP_USER_TIMEOUT"); + public static final ChannelOption IP_FREEBIND = valueOf("IP_FREEBIND"); + public static final ChannelOption IP_TRANSPARENT = valueOf("IP_TRANSPARENT"); + public static final ChannelOption IP_RECVORIGDSTADDR = valueOf("IP_RECVORIGDSTADDR"); + /** + * @deprecated Use {@link ChannelOption#TCP_FASTOPEN} instead. + */ + @Deprecated + public static final ChannelOption TCP_FASTOPEN = ChannelOption.TCP_FASTOPEN; + + /** + * @deprecated Use {@link ChannelOption#TCP_FASTOPEN_CONNECT} instead. + */ + @Deprecated + public static final ChannelOption TCP_FASTOPEN_CONNECT = ChannelOption.TCP_FASTOPEN_CONNECT; + public static final ChannelOption TCP_DEFER_ACCEPT = + ChannelOption.valueOf(EpollChannelOption.class, "TCP_DEFER_ACCEPT"); + public static final ChannelOption TCP_QUICKACK = valueOf(EpollChannelOption.class, "TCP_QUICKACK"); + public static final ChannelOption SO_BUSY_POLL = valueOf(EpollChannelOption.class, "SO_BUSY_POLL"); + + public static final ChannelOption EPOLL_MODE = + ChannelOption.valueOf(EpollChannelOption.class, "EPOLL_MODE"); + + public static final ChannelOption> TCP_MD5SIG = valueOf("TCP_MD5SIG"); + + public static final ChannelOption MAX_DATAGRAM_PAYLOAD_SIZE = valueOf("MAX_DATAGRAM_PAYLOAD_SIZE"); + public static final ChannelOption UDP_GRO = valueOf("UDP_GRO"); + + @SuppressWarnings({ "unused", "deprecation" }) + private EpollChannelOption() { + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java new file mode 100644 index 0000000..855912c --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannel.java @@ -0,0 +1,779 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.channel.AddressedEnvelope; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import io.netty.channel.DefaultAddressedEnvelope; +import io.netty.channel.socket.DatagramChannel; +import io.netty.channel.socket.DatagramPacket; +import io.netty.channel.socket.InternetProtocolFamily; +import io.netty.channel.unix.Errors; +import io.netty.channel.unix.Errors.NativeIoException; +import io.netty.channel.unix.UnixChannelUtil; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.UncheckedBooleanSupplier; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.RecyclableArrayList; +import io.netty.util.internal.StringUtil; + +import java.io.IOException; +import java.net.Inet4Address; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.NetworkInterface; +import java.net.PortUnreachableException; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.UnresolvedAddressException; + +import static io.netty.channel.epoll.LinuxSocket.newSocketDgram; + +/** + * {@link DatagramChannel} implementation that uses linux EPOLL Edge-Triggered Mode for + * maximal performance. + */ +public final class EpollDatagramChannel extends AbstractEpollChannel implements DatagramChannel { + private static final ChannelMetadata METADATA = new ChannelMetadata(true, 16); + private static final String EXPECTED_TYPES = + " (expected: " + StringUtil.simpleClassName(DatagramPacket.class) + ", " + + StringUtil.simpleClassName(AddressedEnvelope.class) + '<' + + StringUtil.simpleClassName(ByteBuf.class) + ", " + + StringUtil.simpleClassName(InetSocketAddress.class) + ">, " + + StringUtil.simpleClassName(ByteBuf.class) + ')'; + + private final EpollDatagramChannelConfig config; + private volatile boolean connected; + + /** + * Returns {@code true} if {@link io.netty.channel.unix.SegmentedDatagramPacket} is supported natively. + * + * @return {@code true} if supported, {@code false} otherwise. + */ + public static boolean isSegmentedDatagramPacketSupported() { + return Epoll.isAvailable() && + // We only support it together with sendmmsg(...) + Native.IS_SUPPORTING_SENDMMSG && Native.IS_SUPPORTING_UDP_SEGMENT; + } + + /** + * Create a new instance which selects the {@link InternetProtocolFamily} to use depending + * on the Operation Systems default which will be chosen. + */ + public EpollDatagramChannel() { + this(null); + } + + /** + * Create a new instance using the given {@link InternetProtocolFamily}. If {@code null} is used it will depend + * on the Operation Systems default which will be chosen. + */ + public EpollDatagramChannel(InternetProtocolFamily family) { + this(newSocketDgram(family), false); + } + + /** + * Create a new instance which selects the {@link InternetProtocolFamily} to use depending + * on the Operation Systems default which will be chosen. + */ + public EpollDatagramChannel(int fd) { + this(new LinuxSocket(fd), true); + } + + private EpollDatagramChannel(LinuxSocket fd, boolean active) { + super(null, fd, active); + config = new EpollDatagramChannelConfig(this); + } + + @Override + public InetSocketAddress remoteAddress() { + return (InetSocketAddress) super.remoteAddress(); + } + + @Override + public InetSocketAddress localAddress() { + return (InetSocketAddress) super.localAddress(); + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + @Override + public boolean isActive() { + return socket.isOpen() && (config.getActiveOnOpen() && isRegistered() || active); + } + + @Override + public boolean isConnected() { + return connected; + } + + @Override + public ChannelFuture joinGroup(InetAddress multicastAddress) { + return joinGroup(multicastAddress, newPromise()); + } + + @Override + public ChannelFuture joinGroup(InetAddress multicastAddress, ChannelPromise promise) { + try { + NetworkInterface iface = config().getNetworkInterface(); + if (iface == null) { + iface = NetworkInterface.getByInetAddress(localAddress().getAddress()); + } + return joinGroup(multicastAddress, iface, null, promise); + } catch (IOException e) { + promise.setFailure(e); + } + return promise; + } + + @Override + public ChannelFuture joinGroup( + InetSocketAddress multicastAddress, NetworkInterface networkInterface) { + return joinGroup(multicastAddress, networkInterface, newPromise()); + } + + @Override + public ChannelFuture joinGroup( + InetSocketAddress multicastAddress, NetworkInterface networkInterface, + ChannelPromise promise) { + return joinGroup(multicastAddress.getAddress(), networkInterface, null, promise); + } + + @Override + public ChannelFuture joinGroup( + InetAddress multicastAddress, NetworkInterface networkInterface, InetAddress source) { + return joinGroup(multicastAddress, networkInterface, source, newPromise()); + } + + @Override + public ChannelFuture joinGroup( + final InetAddress multicastAddress, final NetworkInterface networkInterface, + final InetAddress source, final ChannelPromise promise) { + + ObjectUtil.checkNotNull(multicastAddress, "multicastAddress"); + ObjectUtil.checkNotNull(networkInterface, "networkInterface"); + + if (eventLoop().inEventLoop()) { + joinGroup0(multicastAddress, networkInterface, source, promise); + } else { + eventLoop().execute(new Runnable() { + @Override + public void run() { + joinGroup0(multicastAddress, networkInterface, source, promise); + } + }); + } + return promise; + } + + private void joinGroup0( + final InetAddress multicastAddress, final NetworkInterface networkInterface, + final InetAddress source, final ChannelPromise promise) { + assert eventLoop().inEventLoop(); + + try { + socket.joinGroup(multicastAddress, networkInterface, source); + promise.setSuccess(); + } catch (IOException e) { + promise.setFailure(e); + } + } + + @Override + public ChannelFuture leaveGroup(InetAddress multicastAddress) { + return leaveGroup(multicastAddress, newPromise()); + } + + @Override + public ChannelFuture leaveGroup(InetAddress multicastAddress, ChannelPromise promise) { + try { + return leaveGroup( + multicastAddress, NetworkInterface.getByInetAddress(localAddress().getAddress()), null, promise); + } catch (IOException e) { + promise.setFailure(e); + } + return promise; + } + + @Override + public ChannelFuture leaveGroup( + InetSocketAddress multicastAddress, NetworkInterface networkInterface) { + return leaveGroup(multicastAddress, networkInterface, newPromise()); + } + + @Override + public ChannelFuture leaveGroup( + InetSocketAddress multicastAddress, + NetworkInterface networkInterface, ChannelPromise promise) { + return leaveGroup(multicastAddress.getAddress(), networkInterface, null, promise); + } + + @Override + public ChannelFuture leaveGroup( + InetAddress multicastAddress, NetworkInterface networkInterface, InetAddress source) { + return leaveGroup(multicastAddress, networkInterface, source, newPromise()); + } + + @Override + public ChannelFuture leaveGroup( + final InetAddress multicastAddress, final NetworkInterface networkInterface, final InetAddress source, + final ChannelPromise promise) { + ObjectUtil.checkNotNull(multicastAddress, "multicastAddress"); + ObjectUtil.checkNotNull(networkInterface, "networkInterface"); + + if (eventLoop().inEventLoop()) { + leaveGroup0(multicastAddress, networkInterface, source, promise); + } else { + eventLoop().execute(new Runnable() { + @Override + public void run() { + leaveGroup0(multicastAddress, networkInterface, source, promise); + } + }); + } + return promise; + } + + private void leaveGroup0( + final InetAddress multicastAddress, final NetworkInterface networkInterface, final InetAddress source, + final ChannelPromise promise) { + assert eventLoop().inEventLoop(); + + try { + socket.leaveGroup(multicastAddress, networkInterface, source); + promise.setSuccess(); + } catch (IOException e) { + promise.setFailure(e); + } + } + + @Override + public ChannelFuture block( + InetAddress multicastAddress, NetworkInterface networkInterface, + InetAddress sourceToBlock) { + return block(multicastAddress, networkInterface, sourceToBlock, newPromise()); + } + + @Override + public ChannelFuture block( + final InetAddress multicastAddress, final NetworkInterface networkInterface, + final InetAddress sourceToBlock, final ChannelPromise promise) { + ObjectUtil.checkNotNull(multicastAddress, "multicastAddress"); + ObjectUtil.checkNotNull(sourceToBlock, "sourceToBlock"); + ObjectUtil.checkNotNull(networkInterface, "networkInterface"); + + promise.setFailure(new UnsupportedOperationException("Multicast block not supported")); + return promise; + } + + @Override + public ChannelFuture block(InetAddress multicastAddress, InetAddress sourceToBlock) { + return block(multicastAddress, sourceToBlock, newPromise()); + } + + @Override + public ChannelFuture block( + InetAddress multicastAddress, InetAddress sourceToBlock, ChannelPromise promise) { + try { + return block( + multicastAddress, + NetworkInterface.getByInetAddress(localAddress().getAddress()), + sourceToBlock, promise); + } catch (Throwable e) { + promise.setFailure(e); + } + return promise; + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollDatagramChannelUnsafe(); + } + + @Override + protected void doBind(SocketAddress localAddress) throws Exception { + if (localAddress instanceof InetSocketAddress) { + InetSocketAddress socketAddress = (InetSocketAddress) localAddress; + if (socketAddress.getAddress().isAnyLocalAddress() && + socketAddress.getAddress() instanceof Inet4Address) { + if (socket.family() == InternetProtocolFamily.IPv6) { + localAddress = new InetSocketAddress(LinuxSocket.INET6_ANY, socketAddress.getPort()); + } + } + } + super.doBind(localAddress); + active = true; + } + + @Override + protected void doWrite(ChannelOutboundBuffer in) throws Exception { + int maxMessagesPerWrite = maxMessagesPerWrite(); + while (maxMessagesPerWrite > 0) { + Object msg = in.current(); + if (msg == null) { + // Wrote all messages. + break; + } + + try { + // Check if sendmmsg(...) is supported which is only the case for GLIBC 2.14+ + if (Native.IS_SUPPORTING_SENDMMSG && in.size() > 1 || + // We only handle UDP_SEGMENT in sendmmsg. + in.current() instanceof io.netty.channel.unix.SegmentedDatagramPacket) { + NativeDatagramPacketArray array = cleanDatagramPacketArray(); + array.add(in, isConnected(), maxMessagesPerWrite); + int cnt = array.count(); + + if (cnt >= 1) { + // Try to use gathering writes via sendmmsg(...) syscall. + int offset = 0; + NativeDatagramPacketArray.NativeDatagramPacket[] packets = array.packets(); + + int send = socket.sendmmsg(packets, offset, cnt); + if (send == 0) { + // Did not write all messages. + break; + } + for (int i = 0; i < send; i++) { + in.remove(); + } + maxMessagesPerWrite -= send; + continue; + } + } + boolean done = false; + for (int i = config().getWriteSpinCount(); i > 0; --i) { + if (doWriteMessage(msg)) { + done = true; + break; + } + } + + if (done) { + in.remove(); + maxMessagesPerWrite --; + } else { + break; + } + } catch (IOException e) { + maxMessagesPerWrite --; + // Continue on write error as a DatagramChannel can write to multiple remote peers + // + // See https://github.com/netty/netty/issues/2665 + in.remove(e); + } + } + + if (in.isEmpty()) { + // Did write all messages. + clearFlag(Native.EPOLLOUT); + } else { + // Did not write all messages. + setFlag(Native.EPOLLOUT); + } + } + + private boolean doWriteMessage(Object msg) throws Exception { + final ByteBuf data; + final InetSocketAddress remoteAddress; + if (msg instanceof AddressedEnvelope) { + @SuppressWarnings("unchecked") + AddressedEnvelope envelope = + (AddressedEnvelope) msg; + data = envelope.content(); + remoteAddress = envelope.recipient(); + } else { + data = (ByteBuf) msg; + remoteAddress = null; + } + + final int dataLen = data.readableBytes(); + if (dataLen == 0) { + return true; + } + + return doWriteOrSendBytes(data, remoteAddress, false) > 0; + } + + private static void checkUnresolved(AddressedEnvelope envelope) { + if (envelope.recipient() instanceof InetSocketAddress + && (((InetSocketAddress) envelope.recipient()).isUnresolved())) { + throw new UnresolvedAddressException(); + } + } + + @Override + protected Object filterOutboundMessage(Object msg) { + if (msg instanceof io.netty.channel.unix.SegmentedDatagramPacket) { + if (!Native.IS_SUPPORTING_UDP_SEGMENT) { + throw new UnsupportedOperationException( + "unsupported message type: " + StringUtil.simpleClassName(msg) + EXPECTED_TYPES); + } + io.netty.channel.unix.SegmentedDatagramPacket packet = (io.netty.channel.unix.SegmentedDatagramPacket) msg; + checkUnresolved(packet); + + ByteBuf content = packet.content(); + return UnixChannelUtil.isBufferCopyNeededForWrite(content) ? + packet.replace(newDirectBuffer(packet, content)) : msg; + } + if (msg instanceof DatagramPacket) { + DatagramPacket packet = (DatagramPacket) msg; + checkUnresolved(packet); + + ByteBuf content = packet.content(); + return UnixChannelUtil.isBufferCopyNeededForWrite(content) ? + new DatagramPacket(newDirectBuffer(packet, content), packet.recipient()) : msg; + } + + if (msg instanceof ByteBuf) { + ByteBuf buf = (ByteBuf) msg; + return UnixChannelUtil.isBufferCopyNeededForWrite(buf)? newDirectBuffer(buf) : buf; + } + + if (msg instanceof AddressedEnvelope) { + @SuppressWarnings("unchecked") + AddressedEnvelope e = (AddressedEnvelope) msg; + checkUnresolved(e); + + if (e.content() instanceof ByteBuf && + (e.recipient() == null || e.recipient() instanceof InetSocketAddress)) { + + ByteBuf content = (ByteBuf) e.content(); + return UnixChannelUtil.isBufferCopyNeededForWrite(content)? + new DefaultAddressedEnvelope( + newDirectBuffer(e, content), (InetSocketAddress) e.recipient()) : e; + } + } + + throw new UnsupportedOperationException( + "unsupported message type: " + StringUtil.simpleClassName(msg) + EXPECTED_TYPES); + } + + @Override + public EpollDatagramChannelConfig config() { + return config; + } + + @Override + protected void doDisconnect() throws Exception { + socket.disconnect(); + connected = active = false; + resetCachedAddresses(); + } + + @Override + protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { + if (super.doConnect(remoteAddress, localAddress)) { + connected = true; + return true; + } + return false; + } + + @Override + protected void doClose() throws Exception { + super.doClose(); + connected = false; + } + + final class EpollDatagramChannelUnsafe extends AbstractEpollUnsafe { + + @Override + void epollInReady() { + assert eventLoop().inEventLoop(); + EpollDatagramChannelConfig config = config(); + if (shouldBreakEpollInReady(config)) { + clearEpollIn0(); + return; + } + final EpollRecvByteAllocatorHandle allocHandle = recvBufAllocHandle(); + allocHandle.edgeTriggered(isFlagSet(Native.EPOLLET)); + + final ChannelPipeline pipeline = pipeline(); + final ByteBufAllocator allocator = config.getAllocator(); + allocHandle.reset(config); + epollInBefore(); + + Throwable exception = null; + try { + try { + boolean connected = isConnected(); + do { + final boolean read; + int datagramSize = config().getMaxDatagramPayloadSize(); + + ByteBuf byteBuf = allocHandle.allocate(allocator); + // Only try to use recvmmsg if its really supported by the running system. + int numDatagram = Native.IS_SUPPORTING_RECVMMSG ? + datagramSize == 0 ? 1 : byteBuf.writableBytes() / datagramSize : + 0; + try { + if (numDatagram <= 1) { + if (!connected || config.isUdpGro()) { + read = recvmsg(allocHandle, cleanDatagramPacketArray(), byteBuf); + } else { + read = connectedRead(allocHandle, byteBuf, datagramSize); + } + } else { + // Try to use scattering reads via recvmmsg(...) syscall. + read = scatteringRead(allocHandle, cleanDatagramPacketArray(), + byteBuf, datagramSize, numDatagram); + } + } catch (NativeIoException e) { + if (connected) { + throw translateForConnected(e); + } + throw e; + } + + if (read) { + readPending = false; + } else { + break; + } + // We use the TRUE_SUPPLIER as it is also ok to read less then what we did try to read (as long + // as we read anything). + } while (allocHandle.continueReading(UncheckedBooleanSupplier.TRUE_SUPPLIER)); + } catch (Throwable t) { + exception = t; + } + + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + + if (exception != null) { + pipeline.fireExceptionCaught(exception); + } + } finally { + epollInFinally(config); + } + } + } + + private boolean connectedRead(EpollRecvByteAllocatorHandle allocHandle, ByteBuf byteBuf, int maxDatagramPacketSize) + throws Exception { + try { + int writable = maxDatagramPacketSize != 0 ? Math.min(byteBuf.writableBytes(), maxDatagramPacketSize) + : byteBuf.writableBytes(); + allocHandle.attemptedBytesRead(writable); + + int writerIndex = byteBuf.writerIndex(); + int localReadAmount; + if (byteBuf.hasMemoryAddress()) { + localReadAmount = socket.recvAddress(byteBuf.memoryAddress(), writerIndex, writerIndex + writable); + } else { + ByteBuffer buf = byteBuf.internalNioBuffer(writerIndex, writable); + localReadAmount = socket.recv(buf, buf.position(), buf.limit()); + } + + if (localReadAmount <= 0) { + allocHandle.lastBytesRead(localReadAmount); + + // nothing was read, release the buffer. + return false; + } + byteBuf.writerIndex(writerIndex + localReadAmount); + + allocHandle.lastBytesRead(maxDatagramPacketSize <= 0 ? + localReadAmount : writable); + + DatagramPacket packet = new DatagramPacket(byteBuf, localAddress(), remoteAddress()); + allocHandle.incMessagesRead(1); + + pipeline().fireChannelRead(packet); + byteBuf = null; + return true; + } finally { + if (byteBuf != null) { + byteBuf.release(); + } + } + } + + private IOException translateForConnected(NativeIoException e) { + // We need to correctly translate connect errors to match NIO behaviour. + if (e.expectedErr() == Errors.ERROR_ECONNREFUSED_NEGATIVE) { + PortUnreachableException error = new PortUnreachableException(e.getMessage()); + error.initCause(e); + return error; + } + return e; + } + + private static void addDatagramPacketToOut(DatagramPacket packet, + RecyclableArrayList out) { + if (packet instanceof io.netty.channel.unix.SegmentedDatagramPacket) { + io.netty.channel.unix.SegmentedDatagramPacket segmentedDatagramPacket = + (io.netty.channel.unix.SegmentedDatagramPacket) packet; + ByteBuf content = segmentedDatagramPacket.content(); + InetSocketAddress recipient = segmentedDatagramPacket.recipient(); + InetSocketAddress sender = segmentedDatagramPacket.sender(); + int segmentSize = segmentedDatagramPacket.segmentSize(); + do { + out.add(new DatagramPacket(content.readRetainedSlice(Math.min(content.readableBytes(), + segmentSize)), recipient, sender)); + } while (content.isReadable()); + + segmentedDatagramPacket.release(); + } else { + out.add(packet); + } + } + + private static void releaseAndRecycle(ByteBuf byteBuf, RecyclableArrayList packetList) { + if (byteBuf != null) { + byteBuf.release(); + } + if (packetList != null) { + for (int i = 0; i < packetList.size(); i++) { + ReferenceCountUtil.release(packetList.get(i)); + } + packetList.recycle(); + } + } + + private static void processPacket(ChannelPipeline pipeline, EpollRecvByteAllocatorHandle handle, + int bytesRead, DatagramPacket packet) { + handle.lastBytesRead(Math.max(1, bytesRead)); // Avoid signalling end-of-data for zero-sized datagrams. + handle.incMessagesRead(1); + pipeline.fireChannelRead(packet); + } + + private static void processPacketList(ChannelPipeline pipeline, EpollRecvByteAllocatorHandle handle, + int bytesRead, RecyclableArrayList packetList) { + int messagesRead = packetList.size(); + handle.lastBytesRead(Math.max(1, bytesRead)); // Avoid signalling end-of-data for zero-sized datagrams. + handle.incMessagesRead(messagesRead); + for (int i = 0; i < messagesRead; i++) { + pipeline.fireChannelRead(packetList.set(i, Unpooled.EMPTY_BUFFER)); + } + } + + private boolean recvmsg(EpollRecvByteAllocatorHandle allocHandle, + NativeDatagramPacketArray array, ByteBuf byteBuf) throws IOException { + RecyclableArrayList datagramPackets = null; + try { + int writable = byteBuf.writableBytes(); + + boolean added = array.addWritable(byteBuf, byteBuf.writerIndex(), writable); + assert added; + + allocHandle.attemptedBytesRead(writable); + + NativeDatagramPacketArray.NativeDatagramPacket msg = array.packets()[0]; + + int bytesReceived = socket.recvmsg(msg); + if (!msg.hasSender()) { + allocHandle.lastBytesRead(-1); + return false; + } + byteBuf.writerIndex(bytesReceived); + InetSocketAddress local = localAddress(); + DatagramPacket packet = msg.newDatagramPacket(byteBuf, local); + if (!(packet instanceof io.netty.channel.unix.SegmentedDatagramPacket)) { + processPacket(pipeline(), allocHandle, bytesReceived, packet); + } else { + // Its important that we process all received data out of the NativeDatagramPacketArray + // before we call fireChannelRead(...). This is because the user may call flush() + // in a channelRead(...) method and so may re-use the NativeDatagramPacketArray again. + datagramPackets = RecyclableArrayList.newInstance(); + addDatagramPacketToOut(packet, datagramPackets); + + processPacketList(pipeline(), allocHandle, bytesReceived, datagramPackets); + datagramPackets.recycle(); + datagramPackets = null; + } + + return true; + } finally { + releaseAndRecycle(byteBuf, datagramPackets); + } + } + + private boolean scatteringRead(EpollRecvByteAllocatorHandle allocHandle, NativeDatagramPacketArray array, + ByteBuf byteBuf, int datagramSize, int numDatagram) throws IOException { + RecyclableArrayList datagramPackets = null; + try { + int offset = byteBuf.writerIndex(); + for (int i = 0; i < numDatagram; i++, offset += datagramSize) { + if (!array.addWritable(byteBuf, offset, datagramSize)) { + break; + } + } + + allocHandle.attemptedBytesRead(offset - byteBuf.writerIndex()); + + NativeDatagramPacketArray.NativeDatagramPacket[] packets = array.packets(); + + int received = socket.recvmmsg(packets, 0, array.count()); + if (received == 0) { + allocHandle.lastBytesRead(-1); + return false; + } + + InetSocketAddress local = localAddress(); + + // Set the writerIndex too the maximum number of bytes we might have read. + int bytesReceived = received * datagramSize; + byteBuf.writerIndex(byteBuf.writerIndex() + bytesReceived); + + if (received == 1) { + // Single packet fast-path + DatagramPacket packet = packets[0].newDatagramPacket(byteBuf, local); + if (!(packet instanceof io.netty.channel.unix.SegmentedDatagramPacket)) { + processPacket(pipeline(), allocHandle, datagramSize, packet); + return true; + } + } + // Its important that we process all received data out of the NativeDatagramPacketArray + // before we call fireChannelRead(...). This is because the user may call flush() + // in a channelRead(...) method and so may re-use the NativeDatagramPacketArray again. + datagramPackets = RecyclableArrayList.newInstance(); + for (int i = 0; i < received; i++) { + DatagramPacket packet = packets[i].newDatagramPacket(byteBuf, local); + + // We need to skip the maximum datagram size to ensure we have the readerIndex in the right position + // for the next one. + byteBuf.skipBytes(datagramSize); + addDatagramPacketToOut(packet, datagramPackets); + } + // Ass we did use readRetainedSlice(...) before we should now release the byteBuf and null it out. + byteBuf.release(); + byteBuf = null; + + processPacketList(pipeline(), allocHandle, bytesReceived, datagramPackets); + datagramPackets.recycle(); + datagramPackets = null; + return true; + } finally { + releaseAndRecycle(byteBuf, datagramPackets); + } + } + + private NativeDatagramPacketArray cleanDatagramPacketArray() { + return ((EpollEventLoop) eventLoop()).cleanDatagramPacketArray(); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannelConfig.java new file mode 100644 index 0000000..4af8358 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDatagramChannelConfig.java @@ -0,0 +1,566 @@ +/* + * Copyright 2012 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.FixedRecvByteBufAllocator; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.DatagramChannelConfig; +import io.netty.util.internal.ObjectUtil; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.NetworkInterface; +import java.util.Map; + +public final class EpollDatagramChannelConfig extends EpollChannelConfig implements DatagramChannelConfig { + private boolean activeOnOpen; + private volatile int maxDatagramSize; + + EpollDatagramChannelConfig(EpollDatagramChannel channel) { + super(channel, new FixedRecvByteBufAllocator(2048)); + } + + @Override + @SuppressWarnings("deprecation") + public Map, Object> getOptions() { + return getOptions( + super.getOptions(), + ChannelOption.SO_BROADCAST, ChannelOption.SO_RCVBUF, ChannelOption.SO_SNDBUF, + ChannelOption.SO_REUSEADDR, ChannelOption.IP_MULTICAST_LOOP_DISABLED, + ChannelOption.IP_MULTICAST_ADDR, ChannelOption.IP_MULTICAST_IF, ChannelOption.IP_MULTICAST_TTL, + ChannelOption.IP_TOS, ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION, + EpollChannelOption.SO_REUSEPORT, EpollChannelOption.IP_FREEBIND, EpollChannelOption.IP_TRANSPARENT, + EpollChannelOption.IP_RECVORIGDSTADDR, EpollChannelOption.MAX_DATAGRAM_PAYLOAD_SIZE, + EpollChannelOption.UDP_GRO); + } + + @SuppressWarnings({ "unchecked", "deprecation" }) + @Override + public T getOption(ChannelOption option) { + if (option == ChannelOption.SO_BROADCAST) { + return (T) Boolean.valueOf(isBroadcast()); + } + if (option == ChannelOption.SO_RCVBUF) { + return (T) Integer.valueOf(getReceiveBufferSize()); + } + if (option == ChannelOption.SO_SNDBUF) { + return (T) Integer.valueOf(getSendBufferSize()); + } + if (option == ChannelOption.SO_REUSEADDR) { + return (T) Boolean.valueOf(isReuseAddress()); + } + if (option == ChannelOption.IP_MULTICAST_LOOP_DISABLED) { + return (T) Boolean.valueOf(isLoopbackModeDisabled()); + } + if (option == ChannelOption.IP_MULTICAST_ADDR) { + return (T) getInterface(); + } + if (option == ChannelOption.IP_MULTICAST_IF) { + return (T) getNetworkInterface(); + } + if (option == ChannelOption.IP_MULTICAST_TTL) { + return (T) Integer.valueOf(getTimeToLive()); + } + if (option == ChannelOption.IP_TOS) { + return (T) Integer.valueOf(getTrafficClass()); + } + if (option == ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION) { + return (T) Boolean.valueOf(activeOnOpen); + } + if (option == EpollChannelOption.SO_REUSEPORT) { + return (T) Boolean.valueOf(isReusePort()); + } + if (option == EpollChannelOption.IP_TRANSPARENT) { + return (T) Boolean.valueOf(isIpTransparent()); + } + if (option == EpollChannelOption.IP_FREEBIND) { + return (T) Boolean.valueOf(isFreeBind()); + } + if (option == EpollChannelOption.IP_RECVORIGDSTADDR) { + return (T) Boolean.valueOf(isIpRecvOrigDestAddr()); + } + if (option == EpollChannelOption.MAX_DATAGRAM_PAYLOAD_SIZE) { + return (T) Integer.valueOf(getMaxDatagramPayloadSize()); + } + if (option == EpollChannelOption.UDP_GRO) { + return (T) Boolean.valueOf(isUdpGro()); + } + return super.getOption(option); + } + + @Override + @SuppressWarnings("deprecation") + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == ChannelOption.SO_BROADCAST) { + setBroadcast((Boolean) value); + } else if (option == ChannelOption.SO_RCVBUF) { + setReceiveBufferSize((Integer) value); + } else if (option == ChannelOption.SO_SNDBUF) { + setSendBufferSize((Integer) value); + } else if (option == ChannelOption.SO_REUSEADDR) { + setReuseAddress((Boolean) value); + } else if (option == ChannelOption.IP_MULTICAST_LOOP_DISABLED) { + setLoopbackModeDisabled((Boolean) value); + } else if (option == ChannelOption.IP_MULTICAST_ADDR) { + setInterface((InetAddress) value); + } else if (option == ChannelOption.IP_MULTICAST_IF) { + setNetworkInterface((NetworkInterface) value); + } else if (option == ChannelOption.IP_MULTICAST_TTL) { + setTimeToLive((Integer) value); + } else if (option == ChannelOption.IP_TOS) { + setTrafficClass((Integer) value); + } else if (option == ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION) { + setActiveOnOpen((Boolean) value); + } else if (option == EpollChannelOption.SO_REUSEPORT) { + setReusePort((Boolean) value); + } else if (option == EpollChannelOption.IP_FREEBIND) { + setFreeBind((Boolean) value); + } else if (option == EpollChannelOption.IP_TRANSPARENT) { + setIpTransparent((Boolean) value); + } else if (option == EpollChannelOption.IP_RECVORIGDSTADDR) { + setIpRecvOrigDestAddr((Boolean) value); + } else if (option == EpollChannelOption.MAX_DATAGRAM_PAYLOAD_SIZE) { + setMaxDatagramPayloadSize((Integer) value); + } else if (option == EpollChannelOption.UDP_GRO) { + setUdpGro((Boolean) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + private void setActiveOnOpen(boolean activeOnOpen) { + if (channel.isRegistered()) { + throw new IllegalStateException("Can only changed before channel was registered"); + } + this.activeOnOpen = activeOnOpen; + } + + boolean getActiveOnOpen() { + return activeOnOpen; + } + + @Override + public EpollDatagramChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + @Deprecated + public EpollDatagramChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + @Deprecated + public EpollDatagramChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + public EpollDatagramChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollDatagramChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + public EpollDatagramChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public EpollDatagramChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollDatagramChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollDatagramChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollDatagramChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public EpollDatagramChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public int getSendBufferSize() { + try { + return ((EpollDatagramChannel) channel).socket.getSendBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setSendBufferSize(int sendBufferSize) { + try { + ((EpollDatagramChannel) channel).socket.setSendBufferSize(sendBufferSize); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getReceiveBufferSize() { + try { + return ((EpollDatagramChannel) channel).socket.getReceiveBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setReceiveBufferSize(int receiveBufferSize) { + try { + ((EpollDatagramChannel) channel).socket.setReceiveBufferSize(receiveBufferSize); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getTrafficClass() { + try { + return ((EpollDatagramChannel) channel).socket.getTrafficClass(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setTrafficClass(int trafficClass) { + try { + ((EpollDatagramChannel) channel).socket.setTrafficClass(trafficClass); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isReuseAddress() { + try { + return ((EpollDatagramChannel) channel).socket.isReuseAddress(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setReuseAddress(boolean reuseAddress) { + try { + ((EpollDatagramChannel) channel).socket.setReuseAddress(reuseAddress); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isBroadcast() { + try { + return ((EpollDatagramChannel) channel).socket.isBroadcast(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setBroadcast(boolean broadcast) { + try { + ((EpollDatagramChannel) channel).socket.setBroadcast(broadcast); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isLoopbackModeDisabled() { + try { + return ((EpollDatagramChannel) channel).socket.isLoopbackModeDisabled(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public DatagramChannelConfig setLoopbackModeDisabled(boolean loopbackModeDisabled) { + try { + ((EpollDatagramChannel) channel).socket.setLoopbackModeDisabled(loopbackModeDisabled); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getTimeToLive() { + try { + return ((EpollDatagramChannel) channel).socket.getTimeToLive(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setTimeToLive(int ttl) { + try { + ((EpollDatagramChannel) channel).socket.setTimeToLive(ttl); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public InetAddress getInterface() { + try { + return ((EpollDatagramChannel) channel).socket.getInterface(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setInterface(InetAddress interfaceAddress) { + try { + ((EpollDatagramChannel) channel).socket.setInterface(interfaceAddress); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public NetworkInterface getNetworkInterface() { + try { + return ((EpollDatagramChannel) channel).socket.getNetworkInterface(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setNetworkInterface(NetworkInterface networkInterface) { + try { + EpollDatagramChannel datagramChannel = (EpollDatagramChannel) channel; + datagramChannel.socket.setNetworkInterface(networkInterface); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDatagramChannelConfig setEpollMode(EpollMode mode) { + super.setEpollMode(mode); + return this; + } + + /** + * Returns {@code true} if the SO_REUSEPORT option is set. + */ + public boolean isReusePort() { + try { + return ((EpollDatagramChannel) channel).socket.isReusePort(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the SO_REUSEPORT option on the underlying Channel. This will allow to bind multiple + * {@link EpollSocketChannel}s to the same port and so accept connections with multiple threads. + * + * Be aware this method needs be called before {@link EpollDatagramChannel#bind(java.net.SocketAddress)} to have + * any affect. + */ + public EpollDatagramChannelConfig setReusePort(boolean reusePort) { + try { + ((EpollDatagramChannel) channel).socket.setReusePort(reusePort); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_TRANSPARENT is enabled, + * {@code false} otherwise. + */ + public boolean isIpTransparent() { + try { + return ((EpollDatagramChannel) channel).socket.isIpTransparent(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_TRANSPARENT is enabled, + * {@code false} for disable it. Default is disabled. + */ + public EpollDatagramChannelConfig setIpTransparent(boolean ipTransparent) { + try { + ((EpollDatagramChannel) channel).socket.setIpTransparent(ipTransparent); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_FREEBIND is enabled, + * {@code false} otherwise. + */ + public boolean isFreeBind() { + try { + return ((EpollDatagramChannel) channel).socket.isIpFreeBind(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_FREEBIND is enabled, + * {@code false} for disable it. Default is disabled. + */ + public EpollDatagramChannelConfig setFreeBind(boolean freeBind) { + try { + ((EpollDatagramChannel) channel).socket.setIpFreeBind(freeBind); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_RECVORIGDSTADDR is + * enabled, {@code false} otherwise. + */ + public boolean isIpRecvOrigDestAddr() { + try { + return ((EpollDatagramChannel) channel).socket.isIpRecvOrigDestAddr(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_RECVORIGDSTADDR is + * enabled, {@code false} for disable it. Default is disabled. + */ + public EpollDatagramChannelConfig setIpRecvOrigDestAddr(boolean ipTransparent) { + try { + ((EpollDatagramChannel) channel).socket.setIpRecvOrigDestAddr(ipTransparent); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the maximum {@link io.netty.channel.socket.DatagramPacket} size. This will be used to determine if + * {@code recvmmsg} should be used when reading from the underlying socket. When {@code recvmmsg} is used + * we may be able to read multiple {@link io.netty.channel.socket.DatagramPacket}s with one syscall and so + * greatly improve the performance. This number will be used to slice {@link ByteBuf}s returned by the used + * {@link RecvByteBufAllocator}. You can use {@code 0} to disable the usage of recvmmsg, any other bigger value + * will enable it. + */ + public EpollDatagramChannelConfig setMaxDatagramPayloadSize(int maxDatagramSize) { + this.maxDatagramSize = ObjectUtil.checkPositiveOrZero(maxDatagramSize, "maxDatagramSize"); + return this; + } + + /** + * Get the maximum {@link io.netty.channel.socket.DatagramPacket} size. + */ + public int getMaxDatagramPayloadSize() { + return maxDatagramSize; + } + + private volatile boolean gro; + + /** + * Enable / disable UDP_GRO. + * @param gro {@code true} if {@code UDP_GRO} should be enabled, {@code false} otherwise. + * @return this. + */ + public EpollDatagramChannelConfig setUdpGro(boolean gro) { + try { + ((EpollDatagramChannel) channel).socket.setUdpGro(gro); + } catch (IOException e) { + throw new ChannelException(e); + } + this.gro = gro; + return this; + } + + /** + * Returns if {@code UDP_GRO} is enabled. + * @return {@code true} if enabled, {@code false} otherwise. + */ + public boolean isUdpGro() { + // We don't do a syscall here but just return the cached value due a kernel bug: + // https://lore.kernel.org/netdev/20210325195614.800687-1-norman_maurer@apple.com/T/#u + return gro; + } + + @Override + public EpollDatagramChannelConfig setMaxMessagesPerWrite(int maxMessagesPerWrite) { + super.setMaxMessagesPerWrite(maxMessagesPerWrite); + return this; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannel.java new file mode 100644 index 0000000..a14d5e4 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannel.java @@ -0,0 +1,382 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.AddressedEnvelope; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.DefaultAddressedEnvelope; +import io.netty.channel.unix.DomainDatagramChannel; +import io.netty.channel.unix.DomainDatagramChannelConfig; +import io.netty.channel.unix.DomainDatagramPacket; +import io.netty.channel.unix.DomainDatagramSocketAddress; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.IovArray; +import io.netty.channel.unix.PeerCredentials; +import io.netty.channel.unix.UnixChannelUtil; +import io.netty.util.CharsetUtil; +import io.netty.util.UncheckedBooleanSupplier; +import io.netty.util.internal.StringUtil; +import io.netty.util.internal.UnstableApi; + +import java.io.IOException; +import java.net.SocketAddress; +import java.nio.ByteBuffer; + +import static io.netty.channel.epoll.LinuxSocket.newSocketDomainDgram; + +@UnstableApi +public final class EpollDomainDatagramChannel extends AbstractEpollChannel implements DomainDatagramChannel { + + private static final ChannelMetadata METADATA = new ChannelMetadata(true, 16); + + private static final String EXPECTED_TYPES = + " (expected: " + + StringUtil.simpleClassName(DomainDatagramPacket.class) + ", " + + StringUtil.simpleClassName(AddressedEnvelope.class) + '<' + + StringUtil.simpleClassName(ByteBuf.class) + ", " + + StringUtil.simpleClassName(DomainSocketAddress.class) + ">, " + + StringUtil.simpleClassName(ByteBuf.class) + ')'; + + private volatile boolean connected; + private volatile DomainSocketAddress local; + private volatile DomainSocketAddress remote; + + private final EpollDomainDatagramChannelConfig config; + + public EpollDomainDatagramChannel() { + this(newSocketDomainDgram(), false); + } + + public EpollDomainDatagramChannel(int fd) { + this(new LinuxSocket(fd), true); + } + + private EpollDomainDatagramChannel(LinuxSocket socket, boolean active) { + super(null, socket, active); + config = new EpollDomainDatagramChannelConfig(this); + } + + @Override + public EpollDomainDatagramChannelConfig config() { + return config; + } + + @Override + protected void doBind(SocketAddress localAddress) throws Exception { + super.doBind(localAddress); + local = (DomainSocketAddress) localAddress; + active = true; + } + + @Override + protected void doClose() throws Exception { + super.doClose(); + connected = active = false; + local = null; + remote = null; + } + + @Override + protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { + if (super.doConnect(remoteAddress, localAddress)) { + if (localAddress != null) { + local = (DomainSocketAddress) localAddress; + } + remote = (DomainSocketAddress) remoteAddress; + connected = true; + return true; + } + return false; + } + + @Override + protected void doDisconnect() throws Exception { + doClose(); + } + + @Override + protected void doWrite(ChannelOutboundBuffer in) throws Exception { + int maxMessagesPerWrite = maxMessagesPerWrite(); + while (maxMessagesPerWrite > 0) { + Object msg = in.current(); + if (msg == null) { + break; + } + + try { + boolean done = false; + for (int i = config().getWriteSpinCount(); i > 0; --i) { + if (doWriteMessage(msg)) { + done = true; + break; + } + } + + if (done) { + in.remove(); + maxMessagesPerWrite--; + } else { + break; + } + } catch (IOException e) { + maxMessagesPerWrite--; + + // Continue on write error as a DatagramChannel can write to multiple remote peers + // + // See https://github.com/netty/netty/issues/2665 + in.remove(e); + } + } + + if (in.isEmpty()) { + // Did write all messages. + clearFlag(Native.EPOLLOUT); + } else { + // Did not write all messages. + setFlag(Native.EPOLLOUT); + } + } + + private boolean doWriteMessage(Object msg) throws Exception { + final ByteBuf data; + DomainSocketAddress remoteAddress; + if (msg instanceof AddressedEnvelope) { + @SuppressWarnings("unchecked") + AddressedEnvelope envelope = + (AddressedEnvelope) msg; + data = envelope.content(); + remoteAddress = envelope.recipient(); + } else { + data = (ByteBuf) msg; + remoteAddress = null; + } + + final int dataLen = data.readableBytes(); + if (dataLen == 0) { + return true; + } + + final long writtenBytes; + if (data.hasMemoryAddress()) { + long memoryAddress = data.memoryAddress(); + if (remoteAddress == null) { + writtenBytes = socket.sendAddress(memoryAddress, data.readerIndex(), data.writerIndex()); + } else { + writtenBytes = socket.sendToAddressDomainSocket(memoryAddress, data.readerIndex(), data.writerIndex(), + remoteAddress.path().getBytes(CharsetUtil.UTF_8)); + } + } else if (data.nioBufferCount() > 1) { + IovArray array = ((EpollEventLoop) eventLoop()).cleanIovArray(); + array.add(data, data.readerIndex(), data.readableBytes()); + int cnt = array.count(); + assert cnt != 0; + + if (remoteAddress == null) { + writtenBytes = socket.writevAddresses(array.memoryAddress(0), cnt); + } else { + writtenBytes = socket.sendToAddressesDomainSocket(array.memoryAddress(0), cnt, + remoteAddress.path().getBytes(CharsetUtil.UTF_8)); + } + } else { + ByteBuffer nioData = data.internalNioBuffer(data.readerIndex(), data.readableBytes()); + if (remoteAddress == null) { + writtenBytes = socket.send(nioData, nioData.position(), nioData.limit()); + } else { + writtenBytes = socket.sendToDomainSocket(nioData, nioData.position(), nioData.limit(), + remoteAddress.path().getBytes(CharsetUtil.UTF_8)); + } + } + + return writtenBytes > 0; + } + + @Override + protected Object filterOutboundMessage(Object msg) { + if (msg instanceof DomainDatagramPacket) { + DomainDatagramPacket packet = (DomainDatagramPacket) msg; + ByteBuf content = packet.content(); + return UnixChannelUtil.isBufferCopyNeededForWrite(content) ? + new DomainDatagramPacket(newDirectBuffer(packet, content), packet.recipient()) : msg; + } + + if (msg instanceof ByteBuf) { + ByteBuf buf = (ByteBuf) msg; + return UnixChannelUtil.isBufferCopyNeededForWrite(buf) ? newDirectBuffer(buf) : buf; + } + + if (msg instanceof AddressedEnvelope) { + @SuppressWarnings("unchecked") + AddressedEnvelope e = (AddressedEnvelope) msg; + if (e.content() instanceof ByteBuf && + (e.recipient() == null || e.recipient() instanceof DomainSocketAddress)) { + + ByteBuf content = (ByteBuf) e.content(); + return UnixChannelUtil.isBufferCopyNeededForWrite(content) ? + new DefaultAddressedEnvelope( + newDirectBuffer(e, content), (DomainSocketAddress) e.recipient()) : e; + } + } + + throw new UnsupportedOperationException( + "unsupported message type: " + StringUtil.simpleClassName(msg) + EXPECTED_TYPES); + } + + @Override + public boolean isActive() { + return socket.isOpen() && (config.getActiveOnOpen() && isRegistered() || active); + } + + @Override + public boolean isConnected() { + return connected; + } + + @Override + public DomainSocketAddress localAddress() { + return (DomainSocketAddress) super.localAddress(); + } + + @Override + protected DomainSocketAddress localAddress0() { + return local; + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollDomainDatagramChannelUnsafe(); + } + + /** + * Returns the unix credentials (uid, gid, pid) of the peer + * SO_PEERCRED + */ + public PeerCredentials peerCredentials() throws IOException { + return socket.getPeerCredentials(); + } + + @Override + public DomainSocketAddress remoteAddress() { + return (DomainSocketAddress) super.remoteAddress(); + } + + @Override + protected DomainSocketAddress remoteAddress0() { + return remote; + } + + final class EpollDomainDatagramChannelUnsafe extends AbstractEpollUnsafe { + + @Override + void epollInReady() { + assert eventLoop().inEventLoop(); + final DomainDatagramChannelConfig config = config(); + if (shouldBreakEpollInReady(config)) { + clearEpollIn0(); + return; + } + final EpollRecvByteAllocatorHandle allocHandle = recvBufAllocHandle(); + allocHandle.edgeTriggered(isFlagSet(Native.EPOLLET)); + + final ChannelPipeline pipeline = pipeline(); + final ByteBufAllocator allocator = config.getAllocator(); + allocHandle.reset(config); + epollInBefore(); + + Throwable exception = null; + try { + ByteBuf byteBuf = null; + try { + boolean connected = isConnected(); + do { + byteBuf = allocHandle.allocate(allocator); + allocHandle.attemptedBytesRead(byteBuf.writableBytes()); + + final DomainDatagramPacket packet; + if (connected) { + allocHandle.lastBytesRead(doReadBytes(byteBuf)); + if (allocHandle.lastBytesRead() <= 0) { + // nothing was read, release the buffer. + byteBuf.release(); + break; + } + packet = new DomainDatagramPacket(byteBuf, (DomainSocketAddress) localAddress(), + (DomainSocketAddress) remoteAddress()); + } else { + final DomainDatagramSocketAddress remoteAddress; + if (byteBuf.hasMemoryAddress()) { + // has a memory address so use optimized call + remoteAddress = socket.recvFromAddressDomainSocket(byteBuf.memoryAddress(), + byteBuf.writerIndex(), byteBuf.capacity()); + } else { + ByteBuffer nioData = byteBuf.internalNioBuffer( + byteBuf.writerIndex(), byteBuf.writableBytes()); + remoteAddress = + socket.recvFromDomainSocket(nioData, nioData.position(), nioData.limit()); + } + + if (remoteAddress == null) { + allocHandle.lastBytesRead(-1); + byteBuf.release(); + break; + } + DomainSocketAddress localAddress = remoteAddress.localAddress(); + if (localAddress == null) { + localAddress = (DomainSocketAddress) localAddress(); + } + allocHandle.lastBytesRead(remoteAddress.receivedAmount()); + byteBuf.writerIndex(byteBuf.writerIndex() + allocHandle.lastBytesRead()); + + packet = new DomainDatagramPacket(byteBuf, localAddress, remoteAddress); + } + + allocHandle.incMessagesRead(1); + + readPending = false; + pipeline.fireChannelRead(packet); + + byteBuf = null; + + // We use the TRUE_SUPPLIER as it is also ok to read less then what we did try to read (as long + // as we read anything). + } while (allocHandle.continueReading(UncheckedBooleanSupplier.TRUE_SUPPLIER)); + } catch (Throwable t) { + if (byteBuf != null) { + byteBuf.release(); + } + exception = t; + } + + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + + if (exception != null) { + pipeline.fireExceptionCaught(exception); + } + } finally { + epollInFinally(config); + } + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannelConfig.java new file mode 100644 index 0000000..0138095 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainDatagramChannelConfig.java @@ -0,0 +1,175 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.FixedRecvByteBufAllocator; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.unix.DomainDatagramChannelConfig; +import io.netty.util.internal.UnstableApi; + +import java.io.IOException; +import java.util.Map; + +import static io.netty.channel.ChannelOption.DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION; +import static io.netty.channel.ChannelOption.SO_SNDBUF; + +@UnstableApi +public final class EpollDomainDatagramChannelConfig extends EpollChannelConfig implements DomainDatagramChannelConfig { + + private boolean activeOnOpen; + + EpollDomainDatagramChannelConfig(EpollDomainDatagramChannel channel) { + super(channel, new FixedRecvByteBufAllocator(2048)); + } + + @Override + @SuppressWarnings("deprecation") + public Map, Object> getOptions() { + return getOptions( + super.getOptions(), + DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION, SO_SNDBUF); + } + + @Override + @SuppressWarnings({"unchecked", "deprecation"}) + public T getOption(ChannelOption option) { + if (option == DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION) { + return (T) Boolean.valueOf(activeOnOpen); + } + if (option == SO_SNDBUF) { + return (T) Integer.valueOf(getSendBufferSize()); + } + return super.getOption(option); + } + + @Override + @SuppressWarnings("deprecation") + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == DATAGRAM_CHANNEL_ACTIVE_ON_REGISTRATION) { + setActiveOnOpen((Boolean) value); + } else if (option == SO_SNDBUF) { + setSendBufferSize((Integer) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + private void setActiveOnOpen(boolean activeOnOpen) { + if (channel.isRegistered()) { + throw new IllegalStateException("Can only changed before channel was registered"); + } + this.activeOnOpen = activeOnOpen; + } + + boolean getActiveOnOpen() { + return activeOnOpen; + } + + @Override + public EpollDomainDatagramChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setEpollMode(EpollMode mode) { + super.setEpollMode(mode); + return this; + } + + @Override + @Deprecated + public EpollDomainDatagramChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setMaxMessagesPerWrite(int maxMessagesPerWrite) { + super.setMaxMessagesPerWrite(maxMessagesPerWrite); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setSendBufferSize(int sendBufferSize) { + try { + ((EpollDomainDatagramChannel) channel).socket.setSendBufferSize(sendBufferSize); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getSendBufferSize() { + try { + return ((EpollDomainDatagramChannel) channel).socket.getSendBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollDomainDatagramChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollDomainDatagramChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannel.java new file mode 100644 index 0000000..b72dd69 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannel.java @@ -0,0 +1,194 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.DomainSocketChannel; +import io.netty.channel.unix.FileDescriptor; +import io.netty.channel.unix.PeerCredentials; +import io.netty.util.internal.UnstableApi; + +import java.io.IOException; +import java.net.SocketAddress; + +import static io.netty.channel.epoll.LinuxSocket.newSocketDomain; + +public final class EpollDomainSocketChannel extends AbstractEpollStreamChannel implements DomainSocketChannel { + private final EpollDomainSocketChannelConfig config = new EpollDomainSocketChannelConfig(this); + + private volatile DomainSocketAddress local; + private volatile DomainSocketAddress remote; + + public EpollDomainSocketChannel() { + super(newSocketDomain(), false); + } + + EpollDomainSocketChannel(Channel parent, FileDescriptor fd) { + this(parent, new LinuxSocket(fd.intValue())); + } + + public EpollDomainSocketChannel(int fd) { + super(fd); + } + + public EpollDomainSocketChannel(Channel parent, LinuxSocket fd) { + super(parent, fd); + local = fd.localDomainSocketAddress(); + remote = fd.remoteDomainSocketAddress(); + } + + public EpollDomainSocketChannel(int fd, boolean active) { + super(new LinuxSocket(fd), active); + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollDomainUnsafe(); + } + + @Override + protected DomainSocketAddress localAddress0() { + return local; + } + + @Override + protected DomainSocketAddress remoteAddress0() { + return remote; + } + + @Override + protected void doBind(SocketAddress localAddress) throws Exception { + socket.bind(localAddress); + local = (DomainSocketAddress) localAddress; + } + + @Override + public EpollDomainSocketChannelConfig config() { + return config; + } + + @Override + protected boolean doConnect(SocketAddress remoteAddress, SocketAddress localAddress) throws Exception { + if (super.doConnect(remoteAddress, localAddress)) { + local = localAddress != null ? (DomainSocketAddress) localAddress : socket.localDomainSocketAddress(); + remote = (DomainSocketAddress) remoteAddress; + return true; + } + return false; + } + + @Override + public DomainSocketAddress remoteAddress() { + return (DomainSocketAddress) super.remoteAddress(); + } + + @Override + public DomainSocketAddress localAddress() { + return (DomainSocketAddress) super.localAddress(); + } + + @Override + protected int doWriteSingle(ChannelOutboundBuffer in) throws Exception { + Object msg = in.current(); + if (msg instanceof FileDescriptor && socket.sendFd(((FileDescriptor) msg).intValue()) > 0) { + // File descriptor was written, so remove it. + in.remove(); + return 1; + } + return super.doWriteSingle(in); + } + + @Override + protected Object filterOutboundMessage(Object msg) { + if (msg instanceof FileDescriptor) { + return msg; + } + return super.filterOutboundMessage(msg); + } + + /** + * Returns the unix credentials (uid, gid, pid) of the peer + * SO_PEERCRED + */ + @UnstableApi + public PeerCredentials peerCredentials() throws IOException { + return socket.getPeerCredentials(); + } + + private final class EpollDomainUnsafe extends EpollStreamUnsafe { + @Override + void epollInReady() { + switch (config().getReadMode()) { + case BYTES: + super.epollInReady(); + break; + case FILE_DESCRIPTORS: + epollInReadFd(); + break; + default: + throw new Error(); + } + } + + private void epollInReadFd() { + if (socket.isInputShutdown()) { + clearEpollIn0(); + return; + } + final ChannelConfig config = config(); + final EpollRecvByteAllocatorHandle allocHandle = recvBufAllocHandle(); + allocHandle.edgeTriggered(isFlagSet(Native.EPOLLET)); + + final ChannelPipeline pipeline = pipeline(); + allocHandle.reset(config); + epollInBefore(); + + try { + readLoop: do { + // lastBytesRead represents the fd. We use lastBytesRead because it must be set so that the + // EpollRecvByteAllocatorHandle knows if it should try to read again or not when autoRead is + // enabled. + allocHandle.lastBytesRead(socket.recvFd()); + switch(allocHandle.lastBytesRead()) { + case 0: + break readLoop; + case -1: + close(voidPromise()); + return; + default: + allocHandle.incMessagesRead(1); + readPending = false; + pipeline.fireChannelRead(new FileDescriptor(allocHandle.lastBytesRead())); + break; + } + } while (allocHandle.continueReading()); + + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + } catch (Throwable t) { + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + pipeline.fireExceptionCaught(t); + } finally { + epollInFinally(config); + } + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannelConfig.java new file mode 100644 index 0000000..407e2ca --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollDomainSocketChannelConfig.java @@ -0,0 +1,217 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelOption; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.DuplexChannelConfig; +import io.netty.channel.unix.DomainSocketChannelConfig; +import io.netty.channel.unix.DomainSocketReadMode; +import io.netty.util.internal.ObjectUtil; + +import java.io.IOException; +import java.util.Map; + +import static io.netty.channel.ChannelOption.ALLOW_HALF_CLOSURE; +import static io.netty.channel.ChannelOption.SO_RCVBUF; +import static io.netty.channel.ChannelOption.SO_SNDBUF; +import static io.netty.channel.unix.UnixChannelOption.DOMAIN_SOCKET_READ_MODE; + +public final class EpollDomainSocketChannelConfig extends EpollChannelConfig + implements DomainSocketChannelConfig, DuplexChannelConfig { + private volatile DomainSocketReadMode mode = DomainSocketReadMode.BYTES; + private volatile boolean allowHalfClosure; + + EpollDomainSocketChannelConfig(AbstractEpollChannel channel) { + super(channel); + } + + @Override + public Map, Object> getOptions() { + return getOptions(super.getOptions(), DOMAIN_SOCKET_READ_MODE, ALLOW_HALF_CLOSURE, SO_SNDBUF, SO_RCVBUF); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == DOMAIN_SOCKET_READ_MODE) { + return (T) getReadMode(); + } + if (option == ALLOW_HALF_CLOSURE) { + return (T) Boolean.valueOf(isAllowHalfClosure()); + } + if (option == SO_SNDBUF) { + return (T) Integer.valueOf(getSendBufferSize()); + } + if (option == SO_RCVBUF) { + return (T) Integer.valueOf(getReceiveBufferSize()); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == DOMAIN_SOCKET_READ_MODE) { + setReadMode((DomainSocketReadMode) value); + } else if (option == ALLOW_HALF_CLOSURE) { + setAllowHalfClosure((Boolean) value); + } else if (option == SO_SNDBUF) { + setSendBufferSize((Integer) value); + } else if (option == SO_RCVBUF) { + setReceiveBufferSize((Integer) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + @Override + @Deprecated + public EpollDomainSocketChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + @Deprecated + public EpollDomainSocketChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + @Deprecated + public EpollDomainSocketChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setEpollMode(EpollMode mode) { + super.setEpollMode(mode); + return this; + } + + @Override + public EpollDomainSocketChannelConfig setReadMode(DomainSocketReadMode mode) { + this.mode = ObjectUtil.checkNotNull(mode, "mode"); + return this; + } + + @Override + public DomainSocketReadMode getReadMode() { + return mode; + } + + @Override + public boolean isAllowHalfClosure() { + return allowHalfClosure; + } + + @Override + public EpollDomainSocketChannelConfig setAllowHalfClosure(boolean allowHalfClosure) { + this.allowHalfClosure = allowHalfClosure; + return this; + } + + public int getSendBufferSize() { + try { + return ((EpollDomainSocketChannel) channel).socket.getSendBufferSize(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public EpollDomainSocketChannelConfig setSendBufferSize(int sendBufferSize) { + try { + ((EpollDomainSocketChannel) channel).socket.setSendBufferSize(sendBufferSize); + return this; + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public int getReceiveBufferSize() { + try { + return ((EpollDomainSocketChannel) channel).socket.getReceiveBufferSize(); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + public EpollDomainSocketChannelConfig setReceiveBufferSize(int receiveBufferSize) { + try { + ((EpollDomainSocketChannel) channel).socket.setReceiveBufferSize(receiveBufferSize); + return this; + } catch (IOException e) { + throw new RuntimeException(e); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventArray.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventArray.java new file mode 100644 index 0000000..a19cdb7 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventArray.java @@ -0,0 +1,123 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.unix.Buffer; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.UnstableApi; + +import java.nio.ByteBuffer; + +/** + * This is an internal datastructure which can be directly passed to epoll_wait to reduce the overhead. + * + * typedef union epoll_data { + * void *ptr; + * int fd; + * uint32_t u32; + * uint64_t u64; + * } epoll_data_t; + * + * struct epoll_event { + * uint32_t events; // Epoll events + * epoll_data_t data; // User data variable + * }; + * + * We use {@code fd} if the {@code epoll_data union} to store the actual file descriptor of an + * {@link AbstractEpollChannel} and so be able to map it later. + */ +@UnstableApi +public final class EpollEventArray { + // Size of the epoll_event struct + private static final int EPOLL_EVENT_SIZE = Native.sizeofEpollEvent(); + // The offset of the data union in the epoll_event struct + private static final int EPOLL_DATA_OFFSET = Native.offsetofEpollData(); + + private ByteBuffer memory; + private long memoryAddress; + private int length; + + EpollEventArray(int length) { + if (length < 1) { + throw new IllegalArgumentException("length must be >= 1 but was " + length); + } + this.length = length; + memory = Buffer.allocateDirectWithNativeOrder(calculateBufferCapacity(length)); + memoryAddress = Buffer.memoryAddress(memory); + } + + /** + * Return the {@code memoryAddress} which points to the start of this {@link EpollEventArray}. + */ + long memoryAddress() { + return memoryAddress; + } + + /** + * Return the length of the {@link EpollEventArray} which represent the maximum number of {@code epoll_events} + * that can be stored in it. + */ + int length() { + return length; + } + + /** + * Increase the storage of this {@link EpollEventArray}. + */ + void increase() { + // double the size + length <<= 1; + // There is no need to preserve what was in the memory before. + ByteBuffer buffer = Buffer.allocateDirectWithNativeOrder(calculateBufferCapacity(length)); + Buffer.free(memory); + memory = buffer; + memoryAddress = Buffer.memoryAddress(buffer); + } + + /** + * Free this {@link EpollEventArray}. Any usage after calling this method may segfault the JVM! + */ + void free() { + Buffer.free(memory); + memoryAddress = 0; + } + + /** + * Return the events for the {@code epoll_event} on this index. + */ + int events(int index) { + return getInt(index, 0); + } + + /** + * Return the file descriptor for the {@code epoll_event} on this index. + */ + int fd(int index) { + return getInt(index, EPOLL_DATA_OFFSET); + } + + private int getInt(int index, int offset) { + if (PlatformDependent.hasUnsafe()) { + long n = (long) index * EPOLL_EVENT_SIZE; + return PlatformDependent.getInt(memoryAddress + n + offset); + } + return memory.getInt(index * EPOLL_EVENT_SIZE + offset); + } + + private static int calculateBufferCapacity(int capacity) { + return capacity * EPOLL_EVENT_SIZE; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoop.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoop.java new file mode 100644 index 0000000..a4a6317 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoop.java @@ -0,0 +1,595 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.Channel; +import io.netty.channel.EventLoop; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.EventLoopTaskQueueFactory; +import io.netty.channel.SelectStrategy; +import io.netty.channel.SingleThreadEventLoop; +import io.netty.channel.epoll.AbstractEpollChannel.AbstractEpollUnsafe; +import io.netty.channel.unix.FileDescriptor; +import io.netty.channel.unix.IovArray; +import io.netty.util.IntSupplier; +import io.netty.util.collection.IntObjectHashMap; +import io.netty.util.collection.IntObjectMap; +import io.netty.util.concurrent.RejectedExecutionHandler; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.SystemPropertyUtil; +import io.netty.util.internal.UnstableApi; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.io.IOException; +import java.util.Iterator; +import java.util.Queue; +import java.util.concurrent.Executor; +import java.util.concurrent.atomic.AtomicLong; + +import static java.lang.Math.min; + +/** + * {@link EventLoop} which uses epoll under the covers. Only works on Linux! + */ +public class EpollEventLoop extends SingleThreadEventLoop { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(EpollEventLoop.class); + private static final long EPOLL_WAIT_MILLIS_THRESHOLD = + SystemPropertyUtil.getLong("io.netty.channel.epoll.epollWaitThreshold", 10); + + static { + // Ensure JNI is initialized by the time this class is loaded by this time! + // We use unix-common methods in this class which are backed by JNI methods. + Epoll.ensureAvailability(); + } + + private FileDescriptor epollFd; + private FileDescriptor eventFd; + private FileDescriptor timerFd; + private final IntObjectMap channels = new IntObjectHashMap(4096); + private final boolean allowGrowing; + private final EpollEventArray events; + + // These are initialized on first use + private IovArray iovArray; + private NativeDatagramPacketArray datagramPacketArray; + + private final SelectStrategy selectStrategy; + private final IntSupplier selectNowSupplier = new IntSupplier() { + @Override + public int get() throws Exception { + return epollWaitNow(); + } + }; + + private static final long AWAKE = -1L; + private static final long NONE = Long.MAX_VALUE; + + // nextWakeupNanos is: + // AWAKE when EL is awake + // NONE when EL is waiting with no wakeup scheduled + // other value T when EL is waiting with wakeup scheduled at time T + private final AtomicLong nextWakeupNanos = new AtomicLong(AWAKE); + private boolean pendingWakeup; + private volatile int ioRatio = 50; + + // See https://man7.org/linux/man-pages/man2/timerfd_create.2.html. + private static final long MAX_SCHEDULED_TIMERFD_NS = 999999999; + + EpollEventLoop(EventLoopGroup parent, Executor executor, int maxEvents, + SelectStrategy strategy, RejectedExecutionHandler rejectedExecutionHandler, + EventLoopTaskQueueFactory taskQueueFactory, EventLoopTaskQueueFactory tailTaskQueueFactory) { + super(parent, executor, false, newTaskQueue(taskQueueFactory), newTaskQueue(tailTaskQueueFactory), + rejectedExecutionHandler); + selectStrategy = ObjectUtil.checkNotNull(strategy, "strategy"); + if (maxEvents == 0) { + allowGrowing = true; + events = new EpollEventArray(4096); + } else { + allowGrowing = false; + events = new EpollEventArray(maxEvents); + } + openFileDescriptors(); + } + + /** + * This method is intended for use by a process checkpoint/restore + * integration, such as OpenJDK CRaC. + */ + @UnstableApi + public void openFileDescriptors() { + boolean success = false; + FileDescriptor epollFd = null; + FileDescriptor eventFd = null; + FileDescriptor timerFd = null; + try { + this.epollFd = epollFd = Native.newEpollCreate(); + this.eventFd = eventFd = Native.newEventFd(); + try { + // It is important to use EPOLLET here as we only want to get the notification once per + // wakeup and don't call eventfd_read(...). + Native.epollCtlAdd(epollFd.intValue(), eventFd.intValue(), Native.EPOLLIN | Native.EPOLLET); + } catch (IOException e) { + throw new IllegalStateException("Unable to add eventFd filedescriptor to epoll", e); + } + this.timerFd = timerFd = Native.newTimerFd(); + try { + // It is important to use EPOLLET here as we only want to get the notification once per + // wakeup and don't call read(...). + Native.epollCtlAdd(epollFd.intValue(), timerFd.intValue(), Native.EPOLLIN | Native.EPOLLET); + } catch (IOException e) { + throw new IllegalStateException("Unable to add timerFd filedescriptor to epoll", e); + } + success = true; + } finally { + if (!success) { + if (epollFd != null) { + try { + epollFd.close(); + } catch (Exception e) { + // ignore + } + } + if (eventFd != null) { + try { + eventFd.close(); + } catch (Exception e) { + // ignore + } + } + if (timerFd != null) { + try { + timerFd.close(); + } catch (Exception e) { + // ignore + } + } + } + } + } + + private static Queue newTaskQueue( + EventLoopTaskQueueFactory queueFactory) { + if (queueFactory == null) { + return newTaskQueue0(DEFAULT_MAX_PENDING_TASKS); + } + return queueFactory.newTaskQueue(DEFAULT_MAX_PENDING_TASKS); + } + + /** + * Return a cleared {@link IovArray} that can be used for writes in this {@link EventLoop}. + */ + IovArray cleanIovArray() { + if (iovArray == null) { + iovArray = new IovArray(); + } else { + iovArray.clear(); + } + return iovArray; + } + + /** + * Return a cleared {@link NativeDatagramPacketArray} that can be used for writes in this {@link EventLoop}. + */ + NativeDatagramPacketArray cleanDatagramPacketArray() { + if (datagramPacketArray == null) { + datagramPacketArray = new NativeDatagramPacketArray(); + } else { + datagramPacketArray.clear(); + } + return datagramPacketArray; + } + + @Override + protected void wakeup(boolean inEventLoop) { + if (!inEventLoop && nextWakeupNanos.getAndSet(AWAKE) != AWAKE) { + // write to the evfd which will then wake-up epoll_wait(...) + Native.eventFdWrite(eventFd.intValue(), 1L); + } + } + + @Override + protected boolean beforeScheduledTaskSubmitted(long deadlineNanos) { + // Note this is also correct for the nextWakeupNanos == -1 (AWAKE) case + return deadlineNanos < nextWakeupNanos.get(); + } + + @Override + protected boolean afterScheduledTaskSubmitted(long deadlineNanos) { + // Note this is also correct for the nextWakeupNanos == -1 (AWAKE) case + return deadlineNanos < nextWakeupNanos.get(); + } + + /** + * Register the given epoll with this {@link EventLoop}. + */ + void add(AbstractEpollChannel ch) throws IOException { + assert inEventLoop(); + int fd = ch.socket.intValue(); + Native.epollCtlAdd(epollFd.intValue(), fd, ch.flags); + AbstractEpollChannel old = channels.put(fd, ch); + + // We either expect to have no Channel in the map with the same FD or that the FD of the old Channel is already + // closed. + assert old == null || !old.isOpen(); + } + + /** + * The flags of the given epoll was modified so update the registration + */ + void modify(AbstractEpollChannel ch) throws IOException { + assert inEventLoop(); + Native.epollCtlMod(epollFd.intValue(), ch.socket.intValue(), ch.flags); + } + + /** + * Deregister the given epoll from this {@link EventLoop}. + */ + void remove(AbstractEpollChannel ch) throws IOException { + assert inEventLoop(); + int fd = ch.socket.intValue(); + + AbstractEpollChannel old = channels.remove(fd); + if (old != null && old != ch) { + // The Channel mapping was already replaced due FD reuse, put back the stored Channel. + channels.put(fd, old); + + // If we found another Channel in the map that is mapped to the same FD the given Channel MUST be closed. + assert !ch.isOpen(); + } else if (ch.isOpen()) { + // Remove the epoll. This is only needed if it's still open as otherwise it will be automatically + // removed once the file-descriptor is closed. + Native.epollCtlDel(epollFd.intValue(), fd); + } + } + + @Override + protected Queue newTaskQueue(int maxPendingTasks) { + return newTaskQueue0(maxPendingTasks); + } + + private static Queue newTaskQueue0(int maxPendingTasks) { + // This event loop never calls takeTask() + return maxPendingTasks == Integer.MAX_VALUE ? PlatformDependent.newMpscQueue() + : PlatformDependent.newMpscQueue(maxPendingTasks); + } + + /** + * Returns the percentage of the desired amount of time spent for I/O in the event loop. + */ + public int getIoRatio() { + return ioRatio; + } + + /** + * Sets the percentage of the desired amount of time spent for I/O in the event loop. The default value is + * {@code 50}, which means the event loop will try to spend the same amount of time for I/O as for non-I/O tasks. + */ + public void setIoRatio(int ioRatio) { + if (ioRatio <= 0 || ioRatio > 100) { + throw new IllegalArgumentException("ioRatio: " + ioRatio + " (expected: 0 < ioRatio <= 100)"); + } + this.ioRatio = ioRatio; + } + + @Override + public int registeredChannels() { + return channels.size(); + } + + @Override + public Iterator registeredChannelsIterator() { + assert inEventLoop(); + IntObjectMap ch = channels; + if (ch.isEmpty()) { + return ChannelsReadOnlyIterator.empty(); + } + return new ChannelsReadOnlyIterator(ch.values()); + } + + private long epollWait(long deadlineNanos) throws IOException { + if (deadlineNanos == NONE) { + return Native.epollWait(epollFd, events, timerFd, + Integer.MAX_VALUE, 0, EPOLL_WAIT_MILLIS_THRESHOLD); // disarm timer + } + long totalDelay = deadlineToDelayNanos(deadlineNanos); + int delaySeconds = (int) min(totalDelay / 1000000000L, Integer.MAX_VALUE); + int delayNanos = (int) min(totalDelay - delaySeconds * 1000000000L, MAX_SCHEDULED_TIMERFD_NS); + return Native.epollWait(epollFd, events, timerFd, delaySeconds, delayNanos, EPOLL_WAIT_MILLIS_THRESHOLD); + } + + private int epollWaitNoTimerChange() throws IOException { + return Native.epollWait(epollFd, events, false); + } + + private int epollWaitNow() throws IOException { + return Native.epollWait(epollFd, events, true); + } + + private int epollBusyWait() throws IOException { + return Native.epollBusyWait(epollFd, events); + } + + private int epollWaitTimeboxed() throws IOException { + // Wait with 1 second "safeguard" timeout + return Native.epollWait(epollFd, events, 1000); + } + + @Override + protected void run() { + long prevDeadlineNanos = NONE; + for (;;) { + try { + int strategy = selectStrategy.calculateStrategy(selectNowSupplier, hasTasks()); + switch (strategy) { + case SelectStrategy.CONTINUE: + continue; + + case SelectStrategy.BUSY_WAIT: + strategy = epollBusyWait(); + break; + + case SelectStrategy.SELECT: + if (pendingWakeup) { + // We are going to be immediately woken so no need to reset wakenUp + // or check for timerfd adjustment. + strategy = epollWaitTimeboxed(); + if (strategy != 0) { + break; + } + // We timed out so assume that we missed the write event due to an + // abnormally failed syscall (the write itself or a prior epoll_wait) + logger.warn("Missed eventfd write (not seen after > 1 second)"); + pendingWakeup = false; + if (hasTasks()) { + break; + } + // fall-through + } + + long curDeadlineNanos = nextScheduledTaskDeadlineNanos(); + if (curDeadlineNanos == -1L) { + curDeadlineNanos = NONE; // nothing on the calendar + } + nextWakeupNanos.set(curDeadlineNanos); + try { + if (!hasTasks()) { + if (curDeadlineNanos == prevDeadlineNanos) { + // No timer activity needed + strategy = epollWaitNoTimerChange(); + } else { + // Timerfd needs to be re-armed or disarmed + long result = epollWait(curDeadlineNanos); + // The result contains the actual return value and if a timer was used or not. + // We need to "unpack" using the helper methods exposed in Native. + strategy = Native.epollReady(result); + prevDeadlineNanos = Native.epollTimerWasUsed(result) ? curDeadlineNanos : NONE; + } + } + } finally { + // Try get() first to avoid much more expensive CAS in the case we + // were woken via the wakeup() method (submitted task) + if (nextWakeupNanos.get() == AWAKE || nextWakeupNanos.getAndSet(AWAKE) == AWAKE) { + pendingWakeup = true; + } + } + // fallthrough + default: + } + + final int ioRatio = this.ioRatio; + if (ioRatio == 100) { + try { + if (strategy > 0 && processReady(events, strategy)) { + prevDeadlineNanos = NONE; + } + } finally { + // Ensure we always run tasks. + runAllTasks(); + } + } else if (strategy > 0) { + final long ioStartTime = System.nanoTime(); + try { + if (processReady(events, strategy)) { + prevDeadlineNanos = NONE; + } + } finally { + // Ensure we always run tasks. + final long ioTime = System.nanoTime() - ioStartTime; + runAllTasks(ioTime * (100 - ioRatio) / ioRatio); + } + } else { + runAllTasks(0); // This will run the minimum number of tasks + } + if (allowGrowing && strategy == events.length()) { + //increase the size of the array as we needed the whole space for the events + events.increase(); + } + } catch (Error e) { + throw e; + } catch (Throwable t) { + handleLoopException(t); + } finally { + // Always handle shutdown even if the loop processing threw an exception. + try { + if (isShuttingDown()) { + closeAll(); + if (confirmShutdown()) { + break; + } + } + } catch (Error e) { + throw e; + } catch (Throwable t) { + handleLoopException(t); + } + } + } + } + + /** + * Visible only for testing! + */ + void handleLoopException(Throwable t) { + logger.warn("Unexpected exception in the selector loop.", t); + + // Prevent possible consecutive immediate failures that lead to + // excessive CPU consumption. + try { + Thread.sleep(1000); + } catch (InterruptedException e) { + // Ignore. + } + } + + private void closeAll() { + // Using the intermediate collection to prevent ConcurrentModificationException. + // In the `close()` method, the channel is deleted from `channels` map. + AbstractEpollChannel[] localChannels = channels.values().toArray(new AbstractEpollChannel[0]); + + for (AbstractEpollChannel ch: localChannels) { + ch.unsafe().close(ch.unsafe().voidPromise()); + } + } + + // Returns true if a timerFd event was encountered + private boolean processReady(EpollEventArray events, int ready) { + boolean timerFired = false; + for (int i = 0; i < ready; i ++) { + final int fd = events.fd(i); + if (fd == eventFd.intValue()) { + pendingWakeup = false; + } else if (fd == timerFd.intValue()) { + timerFired = true; + } else { + final long ev = events.events(i); + + AbstractEpollChannel ch = channels.get(fd); + if (ch != null) { + // Don't change the ordering of processing EPOLLOUT | EPOLLRDHUP / EPOLLIN if you're not 100% + // sure about it! + // Re-ordering can easily introduce bugs and bad side-effects, as we found out painfully in the + // past. + AbstractEpollUnsafe unsafe = (AbstractEpollUnsafe) ch.unsafe(); + + // First check for EPOLLOUT as we may need to fail the connect ChannelPromise before try + // to read from the file descriptor. + // See https://github.com/netty/netty/issues/3785 + // + // It is possible for an EPOLLOUT or EPOLLERR to be generated when a connection is refused. + // In either case epollOutReady() will do the correct thing (finish connecting, or fail + // the connection). + // See https://github.com/netty/netty/issues/3848 + if ((ev & (Native.EPOLLERR | Native.EPOLLOUT)) != 0) { + // Force flush of data as the epoll is writable again + unsafe.epollOutReady(); + } + + // Check EPOLLIN before EPOLLRDHUP to ensure all data is read before shutting down the input. + // See https://github.com/netty/netty/issues/4317. + // + // If EPOLLIN or EPOLLERR was received and the channel is still open call epollInReady(). This will + // try to read from the underlying file descriptor and so notify the user about the error. + if ((ev & (Native.EPOLLERR | Native.EPOLLIN)) != 0) { + // The Channel is still open and there is something to read. Do it now. + unsafe.epollInReady(); + } + + // Check if EPOLLRDHUP was set, this will notify us for connection-reset in which case + // we may close the channel directly or try to read more data depending on the state of the + // Channel and als depending on the AbstractEpollChannel subtype. + if ((ev & Native.EPOLLRDHUP) != 0) { + unsafe.epollRdHupReady(); + } + } else { + // We received an event for an fd which we not use anymore. Remove it from the epoll_event set. + try { + Native.epollCtlDel(epollFd.intValue(), fd); + } catch (IOException ignore) { + // This can happen but is nothing we need to worry about as we only try to delete + // the fd from the epoll set as we not found it in our mappings. So this call to + // epollCtlDel(...) is just to ensure we cleanup stuff and so may fail if it was + // deleted before or the file descriptor was closed before. + } + } + } + } + return timerFired; + } + + @Override + protected void cleanup() { + try { + closeFileDescriptors(); + } finally { + // release native memory + if (iovArray != null) { + iovArray.release(); + iovArray = null; + } + if (datagramPacketArray != null) { + datagramPacketArray.release(); + datagramPacketArray = null; + } + events.free(); + } + } + + /** + * This method is intended for use by process checkpoint/restore + * integration, such as OpenJDK CRaC. + * It's up to the caller to ensure that there is no concurrent use + * of the FDs while these are closed, e.g. by blocking the executor. + */ + @UnstableApi + public void closeFileDescriptors() { + // Ensure any in-flight wakeup writes have been performed prior to closing eventFd. + while (pendingWakeup) { + try { + int count = epollWaitTimeboxed(); + if (count == 0) { + // We timed-out so assume that the write we're expecting isn't coming + break; + } + for (int i = 0; i < count; i++) { + if (events.fd(i) == eventFd.intValue()) { + pendingWakeup = false; + break; + } + } + } catch (IOException ignore) { + // ignore + } + } + try { + eventFd.close(); + } catch (IOException e) { + logger.warn("Failed to close the event fd.", e); + } + try { + timerFd.close(); + } catch (IOException e) { + logger.warn("Failed to close the timer fd.", e); + } + + try { + epollFd.close(); + } catch (IOException e) { + logger.warn("Failed to close the epoll fd.", e); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoopGroup.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoopGroup.java new file mode 100644 index 0000000..a749514 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollEventLoopGroup.java @@ -0,0 +1,193 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.DefaultSelectStrategyFactory; +import io.netty.channel.EventLoop; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.EventLoopTaskQueueFactory; +import io.netty.channel.MultithreadEventLoopGroup; +import io.netty.channel.SelectStrategyFactory; +import io.netty.channel.SingleThreadEventLoop; +import io.netty.util.concurrent.EventExecutor; +import io.netty.util.concurrent.EventExecutorChooserFactory; +import io.netty.util.concurrent.RejectedExecutionHandler; +import io.netty.util.concurrent.RejectedExecutionHandlers; + +import java.util.concurrent.Executor; +import java.util.concurrent.ThreadFactory; + +/** + * {@link EventLoopGroup} which uses epoll under the covers. Because of this + * it only works on linux. + */ +public final class EpollEventLoopGroup extends MultithreadEventLoopGroup { + + // This does not use static by design to ensure the class can be loaded and only do the check when its actually + // instanced. + { + // Ensure JNI is initialized by the time this class is loaded. + Epoll.ensureAvailability(); + } + + /** + * Create a new instance using the default number of threads and the default {@link ThreadFactory}. + */ + public EpollEventLoopGroup() { + this(0); + } + + /** + * Create a new instance using the specified number of threads and the default {@link ThreadFactory}. + */ + public EpollEventLoopGroup(int nThreads) { + this(nThreads, (ThreadFactory) null); + } + + /** + * Create a new instance using the default number of threads and the given {@link ThreadFactory}. + */ + @SuppressWarnings("deprecation") + public EpollEventLoopGroup(ThreadFactory threadFactory) { + this(0, threadFactory, 0); + } + + /** + * Create a new instance using the specified number of threads and the default {@link ThreadFactory}. + */ + @SuppressWarnings("deprecation") + public EpollEventLoopGroup(int nThreads, SelectStrategyFactory selectStrategyFactory) { + this(nThreads, (ThreadFactory) null, selectStrategyFactory); + } + + /** + * Create a new instance using the specified number of threads and the given {@link ThreadFactory}. + */ + @SuppressWarnings("deprecation") + public EpollEventLoopGroup(int nThreads, ThreadFactory threadFactory) { + this(nThreads, threadFactory, 0); + } + + public EpollEventLoopGroup(int nThreads, Executor executor) { + this(nThreads, executor, DefaultSelectStrategyFactory.INSTANCE); + } + + /** + * Create a new instance using the specified number of threads and the given {@link ThreadFactory}. + */ + @SuppressWarnings("deprecation") + public EpollEventLoopGroup(int nThreads, ThreadFactory threadFactory, SelectStrategyFactory selectStrategyFactory) { + this(nThreads, threadFactory, 0, selectStrategyFactory); + } + + /** + * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the given + * maximal amount of epoll events to handle per epollWait(...). + * + * @deprecated Use {@link #EpollEventLoopGroup(int)} or {@link #EpollEventLoopGroup(int, ThreadFactory)} + */ + @Deprecated + public EpollEventLoopGroup(int nThreads, ThreadFactory threadFactory, int maxEventsAtOnce) { + this(nThreads, threadFactory, maxEventsAtOnce, DefaultSelectStrategyFactory.INSTANCE); + } + + /** + * Create a new instance using the specified number of threads, the given {@link ThreadFactory} and the given + * maximal amount of epoll events to handle per epollWait(...). + * + * @deprecated Use {@link #EpollEventLoopGroup(int)}, {@link #EpollEventLoopGroup(int, ThreadFactory)}, or + * {@link #EpollEventLoopGroup(int, SelectStrategyFactory)} + */ + @Deprecated + public EpollEventLoopGroup(int nThreads, ThreadFactory threadFactory, int maxEventsAtOnce, + SelectStrategyFactory selectStrategyFactory) { + super(nThreads, threadFactory, maxEventsAtOnce, selectStrategyFactory, RejectedExecutionHandlers.reject()); + } + + public EpollEventLoopGroup(int nThreads, Executor executor, SelectStrategyFactory selectStrategyFactory) { + super(nThreads, executor, 0, selectStrategyFactory, RejectedExecutionHandlers.reject()); + } + + public EpollEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, + SelectStrategyFactory selectStrategyFactory) { + super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, RejectedExecutionHandlers.reject()); + } + + public EpollEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, + SelectStrategyFactory selectStrategyFactory, + RejectedExecutionHandler rejectedExecutionHandler) { + super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, rejectedExecutionHandler); + } + + public EpollEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, + SelectStrategyFactory selectStrategyFactory, + RejectedExecutionHandler rejectedExecutionHandler, + EventLoopTaskQueueFactory queueFactory) { + super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, rejectedExecutionHandler, queueFactory); + } + + /** + * @param nThreads the number of threads that will be used by this instance. + * @param executor the Executor to use, or {@code null} if default one should be used. + * @param chooserFactory the {@link EventExecutorChooserFactory} to use. + * @param selectStrategyFactory the {@link SelectStrategyFactory} to use. + * @param rejectedExecutionHandler the {@link RejectedExecutionHandler} to use. + * @param taskQueueFactory the {@link EventLoopTaskQueueFactory} to use for + * {@link SingleThreadEventLoop#execute(Runnable)}, + * or {@code null} if default one should be used. + * @param tailTaskQueueFactory the {@link EventLoopTaskQueueFactory} to use for + * {@link SingleThreadEventLoop#executeAfterEventLoopIteration(Runnable)}, + * or {@code null} if default one should be used. + */ + public EpollEventLoopGroup(int nThreads, Executor executor, EventExecutorChooserFactory chooserFactory, + SelectStrategyFactory selectStrategyFactory, + RejectedExecutionHandler rejectedExecutionHandler, + EventLoopTaskQueueFactory taskQueueFactory, + EventLoopTaskQueueFactory tailTaskQueueFactory) { + super(nThreads, executor, chooserFactory, 0, selectStrategyFactory, rejectedExecutionHandler, taskQueueFactory, + tailTaskQueueFactory); + } + + /** + * Sets the percentage of the desired amount of time spent for I/O in the child event loops. The default value is + * {@code 50}, which means the event loop will try to spend the same amount of time for I/O as for non-I/O tasks. + */ + public void setIoRatio(int ioRatio) { + for (EventExecutor e: this) { + ((EpollEventLoop) e).setIoRatio(ioRatio); + } + } + + @Override + protected EventLoop newChild(Executor executor, Object... args) throws Exception { + Integer maxEvents = (Integer) args[0]; + SelectStrategyFactory selectStrategyFactory = (SelectStrategyFactory) args[1]; + RejectedExecutionHandler rejectedExecutionHandler = (RejectedExecutionHandler) args[2]; + EventLoopTaskQueueFactory taskQueueFactory = null; + EventLoopTaskQueueFactory tailTaskQueueFactory = null; + + int argsLength = args.length; + if (argsLength > 3) { + taskQueueFactory = (EventLoopTaskQueueFactory) args[3]; + } + if (argsLength > 4) { + tailTaskQueueFactory = (EventLoopTaskQueueFactory) args[4]; + } + return new EpollEventLoop(this, executor, maxEvents, + selectStrategyFactory.newSelectStrategy(), + rejectedExecutionHandler, taskQueueFactory, tailTaskQueueFactory); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollMode.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollMode.java new file mode 100644 index 0000000..32474a6 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollMode.java @@ -0,0 +1,36 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +/** + * The epoll mode to use. + */ +public enum EpollMode { + + /** + * Use {@code EPOLLET} (edge-triggered). + * + * @see man 7 epoll. + */ + EDGE_TRIGGERED, + + /** + * Do not use {@code EPOLLET} (level-triggered). + * + * @see man 7 epoll. + */ + LEVEL_TRIGGERED +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorHandle.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorHandle.java new file mode 100644 index 0000000..dc5a0b9 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorHandle.java @@ -0,0 +1,88 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.RecvByteBufAllocator.DelegatingHandle; +import io.netty.channel.RecvByteBufAllocator.ExtendedHandle; +import io.netty.channel.unix.PreferredDirectByteBufAllocator; +import io.netty.util.UncheckedBooleanSupplier; + +class EpollRecvByteAllocatorHandle extends DelegatingHandle implements ExtendedHandle { + private final PreferredDirectByteBufAllocator preferredDirectByteBufAllocator = + new PreferredDirectByteBufAllocator(); + private final UncheckedBooleanSupplier defaultMaybeMoreDataSupplier = new UncheckedBooleanSupplier() { + @Override + public boolean get() { + return maybeMoreDataToRead(); + } + }; + private boolean isEdgeTriggered; + private boolean receivedRdHup; + + EpollRecvByteAllocatorHandle(ExtendedHandle handle) { + super(handle); + } + + final void receivedRdHup() { + receivedRdHup = true; + } + + final boolean isReceivedRdHup() { + return receivedRdHup; + } + + boolean maybeMoreDataToRead() { + /** + * EPOLL ET requires that we read until we get an EAGAIN + * (see Q9 in epoll man). However in order to + * respect auto read we supporting reading to stop if auto read is off. It is expected that the + * {@link #EpollSocketChannel} implementations will track if we are in edgeTriggered mode and all data was not + * read, and will force a EPOLLIN ready event. + * + * It is assumed RDHUP is handled externally by checking {@link #isReceivedRdHup()}. + */ + return (isEdgeTriggered && lastBytesRead() > 0) || + (!isEdgeTriggered && lastBytesRead() == attemptedBytesRead()); + } + + final void edgeTriggered(boolean edgeTriggered) { + isEdgeTriggered = edgeTriggered; + } + + final boolean isEdgeTriggered() { + return isEdgeTriggered; + } + + @Override + public final ByteBuf allocate(ByteBufAllocator alloc) { + // We need to ensure we always allocate a direct ByteBuf as we can only use a direct buffer to read via JNI. + preferredDirectByteBufAllocator.updateAllocator(alloc); + return delegate().allocate(preferredDirectByteBufAllocator); + } + + @Override + public final boolean continueReading(UncheckedBooleanSupplier maybeMoreDataSupplier) { + return ((ExtendedHandle) delegate()).continueReading(maybeMoreDataSupplier); + } + + @Override + public final boolean continueReading() { + // We must override the supplier which determines if there maybe more data to read. + return continueReading(defaultMaybeMoreDataSupplier); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorStreamingHandle.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorStreamingHandle.java new file mode 100644 index 0000000..0a43992 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollRecvByteAllocatorStreamingHandle.java @@ -0,0 +1,35 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.RecvByteBufAllocator; + +final class EpollRecvByteAllocatorStreamingHandle extends EpollRecvByteAllocatorHandle { + EpollRecvByteAllocatorStreamingHandle(RecvByteBufAllocator.ExtendedHandle handle) { + super(handle); + } + + @Override + boolean maybeMoreDataToRead() { + /** + * For stream oriented descriptors we can assume we are done reading if the last read attempt didn't produce + * a full buffer (see Q9 in epoll man). + * + * If EPOLLRDHUP has been received we must read until we get a read error. + */ + return lastBytesRead() == attemptedBytesRead() || isReceivedRdHup(); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerChannelConfig.java new file mode 100644 index 0000000..1a418ec --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerChannelConfig.java @@ -0,0 +1,234 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.ServerChannelRecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.ServerSocketChannelConfig; +import io.netty.util.NetUtil; + +import java.io.IOException; +import java.util.Map; + +import static io.netty.channel.ChannelOption.SO_BACKLOG; +import static io.netty.channel.ChannelOption.SO_RCVBUF; +import static io.netty.channel.ChannelOption.SO_REUSEADDR; +import static io.netty.channel.ChannelOption.TCP_FASTOPEN; +import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero; + +public class EpollServerChannelConfig extends EpollChannelConfig implements ServerSocketChannelConfig { + private volatile int backlog = NetUtil.SOMAXCONN; + private volatile int pendingFastOpenRequestsThreshold; + + EpollServerChannelConfig(AbstractEpollChannel channel) { + super(channel, new ServerChannelRecvByteBufAllocator()); + } + + @Override + public Map, Object> getOptions() { + return getOptions(super.getOptions(), SO_RCVBUF, SO_REUSEADDR, SO_BACKLOG, TCP_FASTOPEN); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == SO_RCVBUF) { + return (T) Integer.valueOf(getReceiveBufferSize()); + } + if (option == SO_REUSEADDR) { + return (T) Boolean.valueOf(isReuseAddress()); + } + if (option == SO_BACKLOG) { + return (T) Integer.valueOf(getBacklog()); + } + if (option == TCP_FASTOPEN) { + return (T) Integer.valueOf(getTcpFastopen()); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == SO_RCVBUF) { + setReceiveBufferSize((Integer) value); + } else if (option == SO_REUSEADDR) { + setReuseAddress((Boolean) value); + } else if (option == SO_BACKLOG) { + setBacklog((Integer) value); + } else if (option == TCP_FASTOPEN) { + setTcpFastopen((Integer) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + @Override + public boolean isReuseAddress() { + try { + return ((AbstractEpollChannel) channel).socket.isReuseAddress(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollServerChannelConfig setReuseAddress(boolean reuseAddress) { + try { + ((AbstractEpollChannel) channel).socket.setReuseAddress(reuseAddress); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getReceiveBufferSize() { + try { + return ((AbstractEpollChannel) channel).socket.getReceiveBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollServerChannelConfig setReceiveBufferSize(int receiveBufferSize) { + try { + ((AbstractEpollChannel) channel).socket.setReceiveBufferSize(receiveBufferSize); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getBacklog() { + return backlog; + } + + @Override + public EpollServerChannelConfig setBacklog(int backlog) { + checkPositiveOrZero(backlog, "backlog"); + this.backlog = backlog; + return this; + } + + /** + * Returns threshold value of number of pending for fast open connect. + * + * @see RFC 7413 Passive Open + */ + public int getTcpFastopen() { + return pendingFastOpenRequestsThreshold; + } + + /** + * Enables tcpFastOpen on the server channel. If the underlying os doesn't support TCP_FASTOPEN setting this has no + * effect. This has to be set before doing listen on the socket otherwise this takes no effect. + * + * @param pendingFastOpenRequestsThreshold number of requests to be pending for fastopen at a given point in time + * for security. + * + * @see RFC 7413 Passive Open + */ + public EpollServerChannelConfig setTcpFastopen(int pendingFastOpenRequestsThreshold) { + this.pendingFastOpenRequestsThreshold = checkPositiveOrZero(pendingFastOpenRequestsThreshold, + "pendingFastOpenRequestsThreshold"); + return this; + } + + @Override + public EpollServerChannelConfig setPerformancePreferences(int connectionTime, int latency, int bandwidth) { + return this; + } + + @Override + public EpollServerChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public EpollServerChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollServerChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollServerChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollServerChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollServerChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + @Deprecated + public EpollServerChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + @Deprecated + public EpollServerChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public EpollServerChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollServerChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + public EpollServerChannelConfig setEpollMode(EpollMode mode) { + super.setEpollMode(mode); + return this; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerDomainSocketChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerDomainSocketChannel.java new file mode 100644 index 0000000..0f06c7f --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerDomainSocketChannel.java @@ -0,0 +1,103 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.Channel; +import io.netty.channel.unix.DomainSocketAddress; +import io.netty.channel.unix.ServerDomainSocketChannel; +import io.netty.channel.unix.Socket; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.io.File; +import java.net.SocketAddress; + +import static io.netty.channel.epoll.LinuxSocket.newSocketDomain; + +public final class EpollServerDomainSocketChannel extends AbstractEpollServerChannel + implements ServerDomainSocketChannel { + private static final InternalLogger logger = InternalLoggerFactory.getInstance( + EpollServerDomainSocketChannel.class); + + private final EpollServerChannelConfig config = new EpollServerChannelConfig(this); + private volatile DomainSocketAddress local; + + public EpollServerDomainSocketChannel() { + super(newSocketDomain(), false); + } + + public EpollServerDomainSocketChannel(int fd) { + super(fd); + } + + EpollServerDomainSocketChannel(LinuxSocket fd) { + super(fd); + } + + EpollServerDomainSocketChannel(LinuxSocket fd, boolean active) { + super(fd, active); + } + + @Override + protected Channel newChildChannel(int fd, byte[] addr, int offset, int len) throws Exception { + return new EpollDomainSocketChannel(this, new Socket(fd)); + } + + @Override + protected DomainSocketAddress localAddress0() { + return local; + } + + @Override + protected void doBind(SocketAddress localAddress) throws Exception { + socket.bind(localAddress); + socket.listen(config.getBacklog()); + local = (DomainSocketAddress) localAddress; + active = true; + } + + @Override + protected void doClose() throws Exception { + try { + super.doClose(); + } finally { + DomainSocketAddress local = this.local; + if (local != null) { + // Delete the socket file if possible. + File socketFile = new File(local.path()); + boolean success = socketFile.delete(); + if (!success && logger.isDebugEnabled()) { + logger.debug("Failed to delete a domain socket file: {}", local.path()); + } + } + } + } + + @Override + public EpollServerChannelConfig config() { + return config; + } + + @Override + public DomainSocketAddress remoteAddress() { + return (DomainSocketAddress) super.remoteAddress(); + } + + @Override + public DomainSocketAddress localAddress() { + return (DomainSocketAddress) super.localAddress(); + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java new file mode 100644 index 0000000..cc806b1 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannel.java @@ -0,0 +1,115 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.Channel; +import io.netty.channel.EventLoop; +import io.netty.channel.socket.InternetProtocolFamily; +import io.netty.channel.socket.ServerSocketChannel; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; + +import static io.netty.channel.epoll.LinuxSocket.newSocketStream; +import static io.netty.channel.epoll.Native.IS_SUPPORTING_TCP_FASTOPEN_SERVER; +import static io.netty.channel.unix.NativeInetAddress.address; + +/** + * {@link ServerSocketChannel} implementation that uses linux EPOLL Edge-Triggered Mode for + * maximal performance. + */ +public final class EpollServerSocketChannel extends AbstractEpollServerChannel implements ServerSocketChannel { + + private final EpollServerSocketChannelConfig config; + private volatile Collection tcpMd5SigAddresses = Collections.emptyList(); + + public EpollServerSocketChannel() { + this((InternetProtocolFamily) null); + } + + public EpollServerSocketChannel(InternetProtocolFamily protocol) { + super(newSocketStream(protocol), false); + config = new EpollServerSocketChannelConfig(this); + } + + public EpollServerSocketChannel(int fd) { + // Must call this constructor to ensure this object's local address is configured correctly. + // The local address can only be obtained from a Socket object. + this(new LinuxSocket(fd)); + } + + EpollServerSocketChannel(LinuxSocket fd) { + super(fd); + config = new EpollServerSocketChannelConfig(this); + } + + EpollServerSocketChannel(LinuxSocket fd, boolean active) { + super(fd, active); + config = new EpollServerSocketChannelConfig(this); + } + + @Override + protected boolean isCompatible(EventLoop loop) { + return loop instanceof EpollEventLoop; + } + + @Override + protected void doBind(SocketAddress localAddress) throws Exception { + super.doBind(localAddress); + final int tcpFastopen; + if (IS_SUPPORTING_TCP_FASTOPEN_SERVER && (tcpFastopen = config.getTcpFastopen()) > 0) { + socket.setTcpFastOpen(tcpFastopen); + } + socket.listen(config.getBacklog()); + active = true; + } + + @Override + public InetSocketAddress remoteAddress() { + return (InetSocketAddress) super.remoteAddress(); + } + + @Override + public InetSocketAddress localAddress() { + return (InetSocketAddress) super.localAddress(); + } + + @Override + public EpollServerSocketChannelConfig config() { + return config; + } + + @Override + protected Channel newChildChannel(int fd, byte[] address, int offset, int len) throws Exception { + return new EpollSocketChannel(this, new LinuxSocket(fd), address(address, offset, len)); + } + + Collection tcpMd5SigAddresses() { + return tcpMd5SigAddresses; + } + + void setTcpMd5Sig(Map keys) throws IOException { + // Add synchronized as newTcpMp5Sigs might do multiple operations on the socket itself. + synchronized (this) { + tcpMd5SigAddresses = TcpMd5Util.newTcpMd5Sigs(this, tcpMd5SigAddresses, keys); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannelConfig.java new file mode 100644 index 0000000..014604e --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollServerSocketChannelConfig.java @@ -0,0 +1,288 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.ServerSocketChannelConfig; + +import java.io.IOException; +import java.net.InetAddress; +import java.util.Map; + +public final class EpollServerSocketChannelConfig extends EpollServerChannelConfig + implements ServerSocketChannelConfig { + + EpollServerSocketChannelConfig(EpollServerSocketChannel channel) { + super(channel); + + // Use SO_REUSEADDR by default as java.nio does the same. + // + // See https://github.com/netty/netty/issues/2605 + setReuseAddress(true); + } + + @Override + public Map, Object> getOptions() { + return getOptions(super.getOptions(), EpollChannelOption.SO_REUSEPORT, EpollChannelOption.IP_FREEBIND, + EpollChannelOption.IP_TRANSPARENT, EpollChannelOption.TCP_DEFER_ACCEPT); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == EpollChannelOption.SO_REUSEPORT) { + return (T) Boolean.valueOf(isReusePort()); + } + if (option == EpollChannelOption.IP_FREEBIND) { + return (T) Boolean.valueOf(isFreeBind()); + } + if (option == EpollChannelOption.IP_TRANSPARENT) { + return (T) Boolean.valueOf(isIpTransparent()); + } + if (option == EpollChannelOption.TCP_DEFER_ACCEPT) { + return (T) Integer.valueOf(getTcpDeferAccept()); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == EpollChannelOption.SO_REUSEPORT) { + setReusePort((Boolean) value); + } else if (option == EpollChannelOption.IP_FREEBIND) { + setFreeBind((Boolean) value); + } else if (option == EpollChannelOption.IP_TRANSPARENT) { + setIpTransparent((Boolean) value); + } else if (option == EpollChannelOption.TCP_MD5SIG) { + @SuppressWarnings("unchecked") + final Map m = (Map) value; + setTcpMd5Sig(m); + } else if (option == EpollChannelOption.TCP_DEFER_ACCEPT) { + setTcpDeferAccept((Integer) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + @Override + public EpollServerSocketChannelConfig setReuseAddress(boolean reuseAddress) { + super.setReuseAddress(reuseAddress); + return this; + } + + @Override + public EpollServerSocketChannelConfig setReceiveBufferSize(int receiveBufferSize) { + super.setReceiveBufferSize(receiveBufferSize); + return this; + } + + @Override + public EpollServerSocketChannelConfig setPerformancePreferences(int connectionTime, int latency, int bandwidth) { + return this; + } + + @Override + public EpollServerSocketChannelConfig setBacklog(int backlog) { + super.setBacklog(backlog); + return this; + } + + @Override + public EpollServerSocketChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public EpollServerSocketChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollServerSocketChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollServerSocketChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollServerSocketChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollServerSocketChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + @Deprecated + public EpollServerSocketChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + @Deprecated + public EpollServerSocketChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public EpollServerSocketChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollServerSocketChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + /** + * Set the {@code TCP_MD5SIG} option on the socket. See {@code linux/tcp.h} for more details. + * Keys can only be set on, not read to prevent a potential leak, as they are confidential. + * Allowing them being read would mean anyone with access to the channel could get them. + */ + public EpollServerSocketChannelConfig setTcpMd5Sig(Map keys) { + try { + ((EpollServerSocketChannel) channel).setTcpMd5Sig(keys); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if the SO_REUSEPORT option is set. + */ + public boolean isReusePort() { + try { + return ((EpollServerSocketChannel) channel).socket.isReusePort(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the SO_REUSEPORT option on the underlying Channel. This will allow to bind multiple + * {@link EpollSocketChannel}s to the same port and so accept connections with multiple threads. + * + * Be aware this method needs be called before {@link EpollSocketChannel#bind(java.net.SocketAddress)} to have + * any affect. + */ + public EpollServerSocketChannelConfig setReusePort(boolean reusePort) { + try { + ((EpollServerSocketChannel) channel).socket.setReusePort(reusePort); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_FREEBIND is enabled, + * {@code false} otherwise. + */ + public boolean isFreeBind() { + try { + return ((EpollServerSocketChannel) channel).socket.isIpFreeBind(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_FREEBIND is enabled, + * {@code false} for disable it. Default is disabled. + */ + public EpollServerSocketChannelConfig setFreeBind(boolean freeBind) { + try { + ((EpollServerSocketChannel) channel).socket.setIpFreeBind(freeBind); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_TRANSPARENT is enabled, + * {@code false} otherwise. + */ + public boolean isIpTransparent() { + try { + return ((EpollServerSocketChannel) channel).socket.isIpTransparent(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_TRANSPARENT is enabled, + * {@code false} for disable it. Default is disabled. + */ + public EpollServerSocketChannelConfig setIpTransparent(boolean transparent) { + try { + ((EpollServerSocketChannel) channel).socket.setIpTransparent(transparent); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_DEFER_ACCEPT} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollServerSocketChannelConfig setTcpDeferAccept(int deferAccept) { + try { + ((EpollServerSocketChannel) channel).socket.setTcpDeferAccept(deferAccept); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns a positive value if TCP_DEFER_ACCEPT is enabled. + */ + public int getTcpDeferAccept() { + try { + return ((EpollServerSocketChannel) channel).socket.getTcpDeferAccept(); + } catch (IOException e) { + throw new ChannelException(e); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java new file mode 100644 index 0000000..e9559fd --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannel.java @@ -0,0 +1,176 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.socket.InternetProtocolFamily; +import io.netty.channel.socket.ServerSocketChannel; +import io.netty.channel.socket.SocketChannel; +import io.netty.util.concurrent.GlobalEventExecutor; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.concurrent.Executor; + +import static io.netty.channel.epoll.LinuxSocket.newSocketStream; +import static io.netty.channel.epoll.Native.IS_SUPPORTING_TCP_FASTOPEN_CLIENT; + +/** + * {@link SocketChannel} implementation that uses linux EPOLL Edge-Triggered Mode for + * maximal performance. + */ +public final class EpollSocketChannel extends AbstractEpollStreamChannel implements SocketChannel { + + private final EpollSocketChannelConfig config; + + private volatile Collection tcpMd5SigAddresses = Collections.emptyList(); + + public EpollSocketChannel() { + super(newSocketStream(), false); + config = new EpollSocketChannelConfig(this); + } + + public EpollSocketChannel(InternetProtocolFamily protocol) { + super(newSocketStream(protocol), false); + config = new EpollSocketChannelConfig(this); + } + + public EpollSocketChannel(int fd) { + super(fd); + config = new EpollSocketChannelConfig(this); + } + + EpollSocketChannel(LinuxSocket fd, boolean active) { + super(fd, active); + config = new EpollSocketChannelConfig(this); + } + + EpollSocketChannel(Channel parent, LinuxSocket fd, InetSocketAddress remoteAddress) { + super(parent, fd, remoteAddress); + config = new EpollSocketChannelConfig(this); + + if (parent instanceof EpollServerSocketChannel) { + tcpMd5SigAddresses = ((EpollServerSocketChannel) parent).tcpMd5SigAddresses(); + } + } + + /** + * Returns the {@code TCP_INFO} for the current socket. + * See man 7 tcp. + */ + public EpollTcpInfo tcpInfo() { + return tcpInfo(new EpollTcpInfo()); + } + + /** + * Updates and returns the {@code TCP_INFO} for the current socket. + * See man 7 tcp. + */ + public EpollTcpInfo tcpInfo(EpollTcpInfo info) { + try { + socket.getTcpInfo(info); + return info; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public InetSocketAddress remoteAddress() { + return (InetSocketAddress) super.remoteAddress(); + } + + @Override + public InetSocketAddress localAddress() { + return (InetSocketAddress) super.localAddress(); + } + + @Override + public EpollSocketChannelConfig config() { + return config; + } + + @Override + public ServerSocketChannel parent() { + return (ServerSocketChannel) super.parent(); + } + + @Override + protected AbstractEpollUnsafe newUnsafe() { + return new EpollSocketChannelUnsafe(); + } + + @Override + boolean doConnect0(SocketAddress remote) throws Exception { + if (IS_SUPPORTING_TCP_FASTOPEN_CLIENT && config.isTcpFastOpenConnect()) { + ChannelOutboundBuffer outbound = unsafe().outboundBuffer(); + outbound.addFlush(); + Object curr; + if ((curr = outbound.current()) instanceof ByteBuf) { + ByteBuf initialData = (ByteBuf) curr; + // If no cookie is present, the write fails with EINPROGRESS and this call basically + // becomes a normal async connect. All writes will be sent normally afterwards. + long localFlushedAmount = doWriteOrSendBytes( + initialData, (InetSocketAddress) remote, true); + if (localFlushedAmount > 0) { + // We had a cookie and our fast-open proceeded. Remove written data + // then continue with normal TCP operation. + outbound.removeBytes(localFlushedAmount); + return true; + } + } + } + return super.doConnect0(remote); + } + + private final class EpollSocketChannelUnsafe extends EpollStreamUnsafe { + @Override + protected Executor prepareToClose() { + try { + // Check isOpen() first as otherwise it will throw a RuntimeException + // when call getSoLinger() as the fd is not valid anymore. + if (isOpen() && config().getSoLinger() > 0) { + // We need to cancel this key of the channel so we may not end up in a eventloop spin + // because we try to read or write until the actual close happens which may be later due + // SO_LINGER handling. + // See https://github.com/netty/netty/issues/4449 + ((EpollEventLoop) eventLoop()).remove(EpollSocketChannel.this); + return GlobalEventExecutor.INSTANCE; + } + } catch (Throwable ignore) { + // Ignore the error as the underlying channel may be closed in the meantime and so + // getSoLinger() may produce an exception. In this case we just return null. + // See https://github.com/netty/netty/issues/4449 + } + return null; + } + } + + void setTcpMd5Sig(Map keys) throws IOException { + // Add synchronized as newTcpMp5Sigs might do multiple operations on the socket itself. + synchronized (this) { + tcpMd5SigAddresses = TcpMd5Util.newTcpMd5Sigs(this, tcpMd5SigAddresses, keys); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannelConfig.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannelConfig.java new file mode 100644 index 0000000..c4c899b --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollSocketChannelConfig.java @@ -0,0 +1,665 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelException; +import io.netty.channel.ChannelOption; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.SocketChannelConfig; +import io.netty.util.internal.PlatformDependent; + +import java.io.IOException; +import java.net.InetAddress; +import java.util.Map; + +import static io.netty.channel.ChannelOption.ALLOW_HALF_CLOSURE; +import static io.netty.channel.ChannelOption.IP_TOS; +import static io.netty.channel.ChannelOption.SO_KEEPALIVE; +import static io.netty.channel.ChannelOption.SO_LINGER; +import static io.netty.channel.ChannelOption.SO_RCVBUF; +import static io.netty.channel.ChannelOption.SO_REUSEADDR; +import static io.netty.channel.ChannelOption.SO_SNDBUF; +import static io.netty.channel.ChannelOption.TCP_NODELAY; + +public final class EpollSocketChannelConfig extends EpollChannelConfig implements SocketChannelConfig { + private volatile boolean allowHalfClosure; + private volatile boolean tcpFastopen; + + /** + * Creates a new instance. + */ + EpollSocketChannelConfig(EpollSocketChannel channel) { + super(channel); + + if (PlatformDependent.canEnableTcpNoDelayByDefault()) { + setTcpNoDelay(true); + } + calculateMaxBytesPerGatheringWrite(); + } + + @Override + public Map, Object> getOptions() { + return getOptions( + super.getOptions(), + SO_RCVBUF, SO_SNDBUF, TCP_NODELAY, SO_KEEPALIVE, SO_REUSEADDR, SO_LINGER, IP_TOS, + ALLOW_HALF_CLOSURE, EpollChannelOption.TCP_CORK, EpollChannelOption.TCP_NOTSENT_LOWAT, + EpollChannelOption.TCP_KEEPCNT, EpollChannelOption.TCP_KEEPIDLE, EpollChannelOption.TCP_KEEPINTVL, + EpollChannelOption.TCP_MD5SIG, EpollChannelOption.TCP_QUICKACK, EpollChannelOption.IP_TRANSPARENT, + ChannelOption.TCP_FASTOPEN_CONNECT, EpollChannelOption.SO_BUSY_POLL); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == SO_RCVBUF) { + return (T) Integer.valueOf(getReceiveBufferSize()); + } + if (option == SO_SNDBUF) { + return (T) Integer.valueOf(getSendBufferSize()); + } + if (option == TCP_NODELAY) { + return (T) Boolean.valueOf(isTcpNoDelay()); + } + if (option == SO_KEEPALIVE) { + return (T) Boolean.valueOf(isKeepAlive()); + } + if (option == SO_REUSEADDR) { + return (T) Boolean.valueOf(isReuseAddress()); + } + if (option == SO_LINGER) { + return (T) Integer.valueOf(getSoLinger()); + } + if (option == IP_TOS) { + return (T) Integer.valueOf(getTrafficClass()); + } + if (option == ALLOW_HALF_CLOSURE) { + return (T) Boolean.valueOf(isAllowHalfClosure()); + } + if (option == EpollChannelOption.TCP_CORK) { + return (T) Boolean.valueOf(isTcpCork()); + } + if (option == EpollChannelOption.TCP_NOTSENT_LOWAT) { + return (T) Long.valueOf(getTcpNotSentLowAt()); + } + if (option == EpollChannelOption.TCP_KEEPIDLE) { + return (T) Integer.valueOf(getTcpKeepIdle()); + } + if (option == EpollChannelOption.TCP_KEEPINTVL) { + return (T) Integer.valueOf(getTcpKeepIntvl()); + } + if (option == EpollChannelOption.TCP_KEEPCNT) { + return (T) Integer.valueOf(getTcpKeepCnt()); + } + if (option == EpollChannelOption.TCP_USER_TIMEOUT) { + return (T) Integer.valueOf(getTcpUserTimeout()); + } + if (option == EpollChannelOption.TCP_QUICKACK) { + return (T) Boolean.valueOf(isTcpQuickAck()); + } + if (option == EpollChannelOption.IP_TRANSPARENT) { + return (T) Boolean.valueOf(isIpTransparent()); + } + if (option == ChannelOption.TCP_FASTOPEN_CONNECT) { + return (T) Boolean.valueOf(isTcpFastOpenConnect()); + } + if (option == EpollChannelOption.SO_BUSY_POLL) { + return (T) Integer.valueOf(getSoBusyPoll()); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == SO_RCVBUF) { + setReceiveBufferSize((Integer) value); + } else if (option == SO_SNDBUF) { + setSendBufferSize((Integer) value); + } else if (option == TCP_NODELAY) { + setTcpNoDelay((Boolean) value); + } else if (option == SO_KEEPALIVE) { + setKeepAlive((Boolean) value); + } else if (option == SO_REUSEADDR) { + setReuseAddress((Boolean) value); + } else if (option == SO_LINGER) { + setSoLinger((Integer) value); + } else if (option == IP_TOS) { + setTrafficClass((Integer) value); + } else if (option == ALLOW_HALF_CLOSURE) { + setAllowHalfClosure((Boolean) value); + } else if (option == EpollChannelOption.TCP_CORK) { + setTcpCork((Boolean) value); + } else if (option == EpollChannelOption.TCP_NOTSENT_LOWAT) { + setTcpNotSentLowAt((Long) value); + } else if (option == EpollChannelOption.TCP_KEEPIDLE) { + setTcpKeepIdle((Integer) value); + } else if (option == EpollChannelOption.TCP_KEEPCNT) { + setTcpKeepCnt((Integer) value); + } else if (option == EpollChannelOption.TCP_KEEPINTVL) { + setTcpKeepIntvl((Integer) value); + } else if (option == EpollChannelOption.TCP_USER_TIMEOUT) { + setTcpUserTimeout((Integer) value); + } else if (option == EpollChannelOption.IP_TRANSPARENT) { + setIpTransparent((Boolean) value); + } else if (option == EpollChannelOption.TCP_MD5SIG) { + @SuppressWarnings("unchecked") + final Map m = (Map) value; + setTcpMd5Sig(m); + } else if (option == EpollChannelOption.TCP_QUICKACK) { + setTcpQuickAck((Boolean) value); + } else if (option == ChannelOption.TCP_FASTOPEN_CONNECT) { + setTcpFastOpenConnect((Boolean) value); + } else if (option == EpollChannelOption.SO_BUSY_POLL) { + setSoBusyPoll((Integer) value); + } else { + return super.setOption(option, value); + } + + return true; + } + + @Override + public int getReceiveBufferSize() { + try { + return ((EpollSocketChannel) channel).socket.getReceiveBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getSendBufferSize() { + try { + return ((EpollSocketChannel) channel).socket.getSendBufferSize(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getSoLinger() { + try { + return ((EpollSocketChannel) channel).socket.getSoLinger(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public int getTrafficClass() { + try { + return ((EpollSocketChannel) channel).socket.getTrafficClass(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isKeepAlive() { + try { + return ((EpollSocketChannel) channel).socket.isKeepAlive(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isReuseAddress() { + try { + return ((EpollSocketChannel) channel).socket.isReuseAddress(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public boolean isTcpNoDelay() { + try { + return ((EpollSocketChannel) channel).socket.isTcpNoDelay(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_CORK} option on the socket. See {@code man 7 tcp} for more details. + */ + public boolean isTcpCork() { + try { + return ((EpollSocketChannel) channel).socket.isTcpCork(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code SO_BUSY_POLL} option on the socket. See {@code man 7 tcp} for more details. + */ + public int getSoBusyPoll() { + try { + return ((EpollSocketChannel) channel).socket.getSoBusyPoll(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_NOTSENT_LOWAT} option on the socket. See {@code man 7 tcp} for more details. + * @return value is a uint32_t + */ + public long getTcpNotSentLowAt() { + try { + return ((EpollSocketChannel) channel).socket.getTcpNotSentLowAt(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_KEEPIDLE} option on the socket. See {@code man 7 tcp} for more details. + */ + public int getTcpKeepIdle() { + try { + return ((EpollSocketChannel) channel).socket.getTcpKeepIdle(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_KEEPINTVL} option on the socket. See {@code man 7 tcp} for more details. + */ + public int getTcpKeepIntvl() { + try { + return ((EpollSocketChannel) channel).socket.getTcpKeepIntvl(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_KEEPCNT} option on the socket. See {@code man 7 tcp} for more details. + */ + public int getTcpKeepCnt() { + try { + return ((EpollSocketChannel) channel).socket.getTcpKeepCnt(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Get the {@code TCP_USER_TIMEOUT} option on the socket. See {@code man 7 tcp} for more details. + */ + public int getTcpUserTimeout() { + try { + return ((EpollSocketChannel) channel).socket.getTcpUserTimeout(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setKeepAlive(boolean keepAlive) { + try { + ((EpollSocketChannel) channel).socket.setKeepAlive(keepAlive); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setPerformancePreferences( + int connectionTime, int latency, int bandwidth) { + return this; + } + + @Override + public EpollSocketChannelConfig setReceiveBufferSize(int receiveBufferSize) { + try { + ((EpollSocketChannel) channel).socket.setReceiveBufferSize(receiveBufferSize); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setReuseAddress(boolean reuseAddress) { + try { + ((EpollSocketChannel) channel).socket.setReuseAddress(reuseAddress); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setSendBufferSize(int sendBufferSize) { + try { + ((EpollSocketChannel) channel).socket.setSendBufferSize(sendBufferSize); + calculateMaxBytesPerGatheringWrite(); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setSoLinger(int soLinger) { + try { + ((EpollSocketChannel) channel).socket.setSoLinger(soLinger); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setTcpNoDelay(boolean tcpNoDelay) { + try { + ((EpollSocketChannel) channel).socket.setTcpNoDelay(tcpNoDelay); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_CORK} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setTcpCork(boolean tcpCork) { + try { + ((EpollSocketChannel) channel).socket.setTcpCork(tcpCork); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code SO_BUSY_POLL} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setSoBusyPoll(int loopMicros) { + try { + ((EpollSocketChannel) channel).socket.setSoBusyPoll(loopMicros); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_NOTSENT_LOWAT} option on the socket. See {@code man 7 tcp} for more details. + * @param tcpNotSentLowAt is a uint32_t + */ + public EpollSocketChannelConfig setTcpNotSentLowAt(long tcpNotSentLowAt) { + try { + ((EpollSocketChannel) channel).socket.setTcpNotSentLowAt(tcpNotSentLowAt); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + @Override + public EpollSocketChannelConfig setTrafficClass(int trafficClass) { + try { + ((EpollSocketChannel) channel).socket.setTrafficClass(trafficClass); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_KEEPIDLE} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setTcpKeepIdle(int seconds) { + try { + ((EpollSocketChannel) channel).socket.setTcpKeepIdle(seconds); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_KEEPINTVL} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setTcpKeepIntvl(int seconds) { + try { + ((EpollSocketChannel) channel).socket.setTcpKeepIntvl(seconds); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * @deprecated use {@link #setTcpKeepCnt(int)} + */ + @Deprecated + public EpollSocketChannelConfig setTcpKeepCntl(int probes) { + return setTcpKeepCnt(probes); + } + + /** + * Set the {@code TCP_KEEPCNT} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setTcpKeepCnt(int probes) { + try { + ((EpollSocketChannel) channel).socket.setTcpKeepCnt(probes); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_USER_TIMEOUT} option on the socket. See {@code man 7 tcp} for more details. + */ + public EpollSocketChannelConfig setTcpUserTimeout(int milliseconds) { + try { + ((EpollSocketChannel) channel).socket.setTcpUserTimeout(milliseconds); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if IP_TRANSPARENT is enabled, + * {@code false} otherwise. + */ + public boolean isIpTransparent() { + try { + return ((EpollSocketChannel) channel).socket.isIpTransparent(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * If {@code true} is used IP_TRANSPARENT is enabled, + * {@code false} for disable it. Default is disabled. + */ + public EpollSocketChannelConfig setIpTransparent(boolean transparent) { + try { + ((EpollSocketChannel) channel).socket.setIpTransparent(transparent); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_MD5SIG} option on the socket. See {@code linux/tcp.h} for more details. + * Keys can only be set on, not read to prevent a potential leak, as they are confidential. + * Allowing them being read would mean anyone with access to the channel could get them. + */ + public EpollSocketChannelConfig setTcpMd5Sig(Map keys) { + try { + ((EpollSocketChannel) channel).setTcpMd5Sig(keys); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Set the {@code TCP_QUICKACK} option on the socket. + * See TCP_QUICKACK + * for more details. + */ + public EpollSocketChannelConfig setTcpQuickAck(boolean quickAck) { + try { + ((EpollSocketChannel) channel).socket.setTcpQuickAck(quickAck); + return this; + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Returns {@code true} if TCP_QUICKACK is enabled, + * {@code false} otherwise. + */ + public boolean isTcpQuickAck() { + try { + return ((EpollSocketChannel) channel).socket.isTcpQuickAck(); + } catch (IOException e) { + throw new ChannelException(e); + } + } + + /** + * Enables client TCP fast open. {@code TCP_FASTOPEN_CONNECT} normally + * requires Linux kernel 4.11 or later, so instead we use the traditional fast open + * client socket mechanics that work with kernel 3.6 and later. See this + * LWN article for more info. + */ + public EpollSocketChannelConfig setTcpFastOpenConnect(boolean fastOpenConnect) { + tcpFastopen = fastOpenConnect; + return this; + } + + /** + * Returns {@code true} if TCP fast open is enabled, {@code false} otherwise. + */ + public boolean isTcpFastOpenConnect() { + return tcpFastopen; + } + + @Override + public boolean isAllowHalfClosure() { + return allowHalfClosure; + } + + @Override + public EpollSocketChannelConfig setAllowHalfClosure(boolean allowHalfClosure) { + this.allowHalfClosure = allowHalfClosure; + return this; + } + + @Override + public EpollSocketChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public EpollSocketChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public EpollSocketChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public EpollSocketChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public EpollSocketChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public EpollSocketChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public EpollSocketChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + @Deprecated + public EpollSocketChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + @Deprecated + public EpollSocketChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public EpollSocketChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public EpollSocketChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + public EpollSocketChannelConfig setEpollMode(EpollMode mode) { + super.setEpollMode(mode); + return this; + } + + private void calculateMaxBytesPerGatheringWrite() { + // Multiply by 2 to give some extra space in case the OS can process write data faster than we can provide. + int newSendBufferSize = getSendBufferSize() << 1; + if (newSendBufferSize > 0) { + setMaxBytesPerGatheringWrite(newSendBufferSize); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollTcpInfo.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollTcpInfo.java new file mode 100644 index 0000000..e6e4ab6 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/EpollTcpInfo.java @@ -0,0 +1,193 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +/** + *

+ * struct tcp_info + * { + * __u8 tcpi_state; + * __u8 tcpi_ca_state; + * __u8 tcpi_retransmits; + * __u8 tcpi_probes; + * __u8 tcpi_backoff; + * __u8 tcpi_options; + * __u8 tcpi_snd_wscale : 4, tcpi_rcv_wscale : 4; + * + * __u32 tcpi_rto; + * __u32 tcpi_ato; + * __u32 tcpi_snd_mss; + * __u32 tcpi_rcv_mss; + * + * __u32 tcpi_unacked; + * __u32 tcpi_sacked; + * __u32 tcpi_lost; + * __u32 tcpi_retrans; + * __u32 tcpi_fackets; + * + * __u32 tcpi_last_data_sent; + * __u32 tcpi_last_ack_sent; + * __u32 tcpi_last_data_recv; + * __u32 tcpi_last_ack_recv; + * + * __u32 tcpi_pmtu; + * __u32 tcpi_rcv_ssthresh; + * __u32 tcpi_rtt; + * __u32 tcpi_rttvar; + * __u32 tcpi_snd_ssthresh; + * __u32 tcpi_snd_cwnd; + * __u32 tcpi_advmss; + * __u32 tcpi_reordering; + * + * __u32 tcpi_rcv_rtt; + * __u32 tcpi_rcv_space; + * + * __u32 tcpi_total_retrans; + * }; + *

+ */ +public final class EpollTcpInfo { + + final long[] info = new long[32]; + + public int state() { + return (int) info[0]; + } + + public int caState() { + return (int) info[1]; + } + + public int retransmits() { + return (int) info[2]; + } + + public int probes() { + return (int) info[3]; + } + + public int backoff() { + return (int) info[4]; + } + + public int options() { + return (int) info[5]; + } + + public int sndWscale() { + return (int) info[6]; + } + + public int rcvWscale() { + return (int) info[7]; + } + + public long rto() { + return info[8]; + } + + public long ato() { + return info[9]; + } + + public long sndMss() { + return info[10]; + } + + public long rcvMss() { + return info[11]; + } + + public long unacked() { + return info[12]; + } + + public long sacked() { + return info[13]; + } + + public long lost() { + return info[14]; + } + + public long retrans() { + return info[15]; + } + + public long fackets() { + return info[16]; + } + + public long lastDataSent() { + return info[17]; + } + + public long lastAckSent() { + return info[18]; + } + + public long lastDataRecv() { + return info[19]; + } + + public long lastAckRecv() { + return info[20]; + } + + public long pmtu() { + return info[21]; + } + + public long rcvSsthresh() { + return info[22]; + } + + public long rtt() { + return info[23]; + } + + public long rttvar() { + return info[24]; + } + + public long sndSsthresh() { + return info[25]; + } + + public long sndCwnd() { + return info[26]; + } + + public long advmss() { + return info[27]; + } + + public long reordering() { + return info[28]; + } + + public long rcvRtt() { + return info[29]; + } + + public long rcvSpace() { + return info[30]; + } + + public long totalRetrans() { + return info[31]; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/LinuxSocket.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/LinuxSocket.java new file mode 100644 index 0000000..32ab46d --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/LinuxSocket.java @@ -0,0 +1,484 @@ +/* + * Copyright 2016 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.ChannelException; +import io.netty.channel.DefaultFileRegion; +import io.netty.channel.unix.Errors; +import io.netty.channel.unix.NativeInetAddress; +import io.netty.channel.unix.PeerCredentials; +import io.netty.channel.unix.Socket; +import io.netty.channel.socket.InternetProtocolFamily; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.SocketUtils; +import io.netty.util.internal.UnstableApi; + +import java.io.IOException; +import java.net.InetAddress; +import java.net.Inet6Address; +import java.net.NetworkInterface; +import java.net.UnknownHostException; +import java.util.Enumeration; + +import static io.netty.channel.unix.Errors.ioResult; +import static io.netty.channel.unix.Errors.newIOException; + +/** + * A socket which provides access Linux native methods. + */ +@UnstableApi +public final class LinuxSocket extends Socket { + static final InetAddress INET6_ANY = unsafeInetAddrByName("::"); + private static final InetAddress INET_ANY = unsafeInetAddrByName("0.0.0.0"); + private static final long MAX_UINT32_T = 0xFFFFFFFFL; + + LinuxSocket(int fd) { + super(fd); + } + + InternetProtocolFamily family() { + return ipv6 ? InternetProtocolFamily.IPv6 : InternetProtocolFamily.IPv4; + } + + int sendmmsg(NativeDatagramPacketArray.NativeDatagramPacket[] msgs, + int offset, int len) throws IOException { + return Native.sendmmsg(intValue(), ipv6, msgs, offset, len); + } + + int recvmmsg(NativeDatagramPacketArray.NativeDatagramPacket[] msgs, + int offset, int len) throws IOException { + return Native.recvmmsg(intValue(), ipv6, msgs, offset, len); + } + + int recvmsg(NativeDatagramPacketArray.NativeDatagramPacket msg) throws IOException { + return Native.recvmsg(intValue(), ipv6, msg); + } + + void setTimeToLive(int ttl) throws IOException { + setTimeToLive(intValue(), ttl); + } + + void setInterface(InetAddress address) throws IOException { + final NativeInetAddress a = NativeInetAddress.newInstance(address); + setInterface(intValue(), ipv6, a.address(), a.scopeId(), interfaceIndex(address)); + } + + void setNetworkInterface(NetworkInterface netInterface) throws IOException { + InetAddress address = deriveInetAddress(netInterface, family() == InternetProtocolFamily.IPv6); + if (address.equals(family() == InternetProtocolFamily.IPv4 ? INET_ANY : INET6_ANY)) { + throw new IOException("NetworkInterface does not support " + family()); + } + final NativeInetAddress nativeAddress = NativeInetAddress.newInstance(address); + setInterface(intValue(), ipv6, nativeAddress.address(), nativeAddress.scopeId(), interfaceIndex(netInterface)); + } + + InetAddress getInterface() throws IOException { + NetworkInterface inf = getNetworkInterface(); + if (inf != null) { + Enumeration addresses = SocketUtils.addressesFromNetworkInterface(inf); + if (addresses.hasMoreElements()) { + return addresses.nextElement(); + } + } + return null; + } + + NetworkInterface getNetworkInterface() throws IOException { + int ret = getInterface(intValue(), ipv6); + if (ipv6) { + return PlatformDependent.javaVersion() >= 7 ? NetworkInterface.getByIndex(ret) : null; + } + InetAddress address = inetAddress(ret); + return address != null ? NetworkInterface.getByInetAddress(address) : null; + } + + private static InetAddress inetAddress(int value) { + byte[] var1 = { + (byte) (value >>> 24 & 255), + (byte) (value >>> 16 & 255), + (byte) (value >>> 8 & 255), + (byte) (value & 255) + }; + + try { + return InetAddress.getByAddress(var1); + } catch (UnknownHostException ignore) { + return null; + } + } + + void joinGroup(InetAddress group, NetworkInterface netInterface, InetAddress source) throws IOException { + final NativeInetAddress g = NativeInetAddress.newInstance(group); + final boolean isIpv6 = group instanceof Inet6Address; + final NativeInetAddress i = NativeInetAddress.newInstance(deriveInetAddress(netInterface, isIpv6)); + if (source != null) { + if (source.getClass() != group.getClass()) { + throw new IllegalArgumentException("Source address is different type to group"); + } + final NativeInetAddress s = NativeInetAddress.newInstance(source); + joinSsmGroup(intValue(), ipv6 && isIpv6, g.address(), i.address(), + g.scopeId(), interfaceIndex(netInterface), s.address()); + } else { + joinGroup(intValue(), ipv6 && isIpv6, g.address(), i.address(), g.scopeId(), interfaceIndex(netInterface)); + } + } + + void leaveGroup(InetAddress group, NetworkInterface netInterface, InetAddress source) throws IOException { + final NativeInetAddress g = NativeInetAddress.newInstance(group); + final boolean isIpv6 = group instanceof Inet6Address; + final NativeInetAddress i = NativeInetAddress.newInstance(deriveInetAddress(netInterface, isIpv6)); + if (source != null) { + if (source.getClass() != group.getClass()) { + throw new IllegalArgumentException("Source address is different type to group"); + } + final NativeInetAddress s = NativeInetAddress.newInstance(source); + leaveSsmGroup(intValue(), ipv6 && isIpv6, g.address(), i.address(), + g.scopeId(), interfaceIndex(netInterface), s.address()); + } else { + leaveGroup(intValue(), ipv6 && isIpv6, g.address(), i.address(), g.scopeId(), interfaceIndex(netInterface)); + } + } + + private static int interfaceIndex(NetworkInterface networkInterface) { + return PlatformDependent.javaVersion() >= 7 ? networkInterface.getIndex() : -1; + } + + private static int interfaceIndex(InetAddress address) throws IOException { + if (PlatformDependent.javaVersion() >= 7) { + NetworkInterface iface = NetworkInterface.getByInetAddress(address); + if (iface != null) { + return iface.getIndex(); + } + } + return -1; + } + + void setTcpDeferAccept(int deferAccept) throws IOException { + setTcpDeferAccept(intValue(), deferAccept); + } + + void setTcpQuickAck(boolean quickAck) throws IOException { + setTcpQuickAck(intValue(), quickAck ? 1 : 0); + } + + void setTcpCork(boolean tcpCork) throws IOException { + setTcpCork(intValue(), tcpCork ? 1 : 0); + } + + void setSoBusyPoll(int loopMicros) throws IOException { + setSoBusyPoll(intValue(), loopMicros); + } + + void setTcpNotSentLowAt(long tcpNotSentLowAt) throws IOException { + if (tcpNotSentLowAt < 0 || tcpNotSentLowAt > MAX_UINT32_T) { + throw new IllegalArgumentException("tcpNotSentLowAt must be a uint32_t"); + } + setTcpNotSentLowAt(intValue(), (int) tcpNotSentLowAt); + } + + void setTcpFastOpen(int tcpFastopenBacklog) throws IOException { + setTcpFastOpen(intValue(), tcpFastopenBacklog); + } + + void setTcpKeepIdle(int seconds) throws IOException { + setTcpKeepIdle(intValue(), seconds); + } + + void setTcpKeepIntvl(int seconds) throws IOException { + setTcpKeepIntvl(intValue(), seconds); + } + + void setTcpKeepCnt(int probes) throws IOException { + setTcpKeepCnt(intValue(), probes); + } + + void setTcpUserTimeout(int milliseconds) throws IOException { + setTcpUserTimeout(intValue(), milliseconds); + } + + void setIpFreeBind(boolean enabled) throws IOException { + setIpFreeBind(intValue(), enabled ? 1 : 0); + } + + void setIpTransparent(boolean enabled) throws IOException { + setIpTransparent(intValue(), enabled ? 1 : 0); + } + + void setIpRecvOrigDestAddr(boolean enabled) throws IOException { + setIpRecvOrigDestAddr(intValue(), enabled ? 1 : 0); + } + + int getTimeToLive() throws IOException { + return getTimeToLive(intValue()); + } + + void getTcpInfo(EpollTcpInfo info) throws IOException { + getTcpInfo(intValue(), info.info); + } + + void setTcpMd5Sig(InetAddress address, byte[] key) throws IOException { + final NativeInetAddress a = NativeInetAddress.newInstance(address); + setTcpMd5Sig(intValue(), ipv6, a.address(), a.scopeId(), key); + } + + boolean isTcpCork() throws IOException { + return isTcpCork(intValue()) != 0; + } + + int getSoBusyPoll() throws IOException { + return getSoBusyPoll(intValue()); + } + + int getTcpDeferAccept() throws IOException { + return getTcpDeferAccept(intValue()); + } + + boolean isTcpQuickAck() throws IOException { + return isTcpQuickAck(intValue()) != 0; + } + + long getTcpNotSentLowAt() throws IOException { + return getTcpNotSentLowAt(intValue()) & MAX_UINT32_T; + } + + int getTcpKeepIdle() throws IOException { + return getTcpKeepIdle(intValue()); + } + + int getTcpKeepIntvl() throws IOException { + return getTcpKeepIntvl(intValue()); + } + + int getTcpKeepCnt() throws IOException { + return getTcpKeepCnt(intValue()); + } + + int getTcpUserTimeout() throws IOException { + return getTcpUserTimeout(intValue()); + } + + boolean isIpFreeBind() throws IOException { + return isIpFreeBind(intValue()) != 0; + } + + boolean isIpTransparent() throws IOException { + return isIpTransparent(intValue()) != 0; + } + + boolean isIpRecvOrigDestAddr() throws IOException { + return isIpRecvOrigDestAddr(intValue()) != 0; + } + + PeerCredentials getPeerCredentials() throws IOException { + return getPeerCredentials(intValue()); + } + + boolean isLoopbackModeDisabled() throws IOException { + return getIpMulticastLoop(intValue(), ipv6) == 0; + } + + void setLoopbackModeDisabled(boolean loopbackModeDisabled) throws IOException { + setIpMulticastLoop(intValue(), ipv6, loopbackModeDisabled ? 0 : 1); + } + + boolean isUdpGro() throws IOException { + return isUdpGro(intValue()) != 0; + } + + void setUdpGro(boolean gro) throws IOException { + setUdpGro(intValue(), gro ? 1 : 0); + } + + long sendFile(DefaultFileRegion src, long baseOffset, long offset, long length) throws IOException { + // Open the file-region as it may be created via the lazy constructor. This is needed as we directly access + // the FileChannel field via JNI. + src.open(); + + long res = sendFile(intValue(), src, baseOffset, offset, length); + if (res >= 0) { + return res; + } + return ioResult("sendfile", (int) res); + } + + public void bindVSock(VSockAddress address) throws IOException { + int res = bindVSock(/*fd*/intValue(), address.getCid(), address.getPort()); + if (res < 0) { + throw newIOException("bindVSock", res); + } + } + + public boolean connectVSock(VSockAddress address) throws IOException { + int res = connectVSock(/*fd*/intValue(), address.getCid(), address.getPort()); + if (res < 0) { + return Errors.handleConnectErrno("connectVSock", res); + } + return true; + } + + public VSockAddress remoteVSockAddress() { + byte[] addr = remoteVSockAddress(/*fd*/intValue()); + if (addr == null) { + return null; + } + int cid = getIntAt(addr, 0); + int port = getIntAt(addr, 4); + return new VSockAddress(cid, port); + } + + public VSockAddress localVSockAddress() { + byte[] addr = localVSockAddress(/*fd*/intValue()); + if (addr == null) { + return null; + } + int cid = getIntAt(addr, 0); + int port = getIntAt(addr, 4); + return new VSockAddress(cid, port); + } + + private static int getIntAt(byte[] array, int startIndex) { + return array[startIndex] << 24 | (array[startIndex + 1] & 0xFF) << 16 + | (array[startIndex + 2] & 0xFF) << 8 | (array[startIndex + 3] & 0xFF); + } + + private static InetAddress deriveInetAddress(NetworkInterface netInterface, boolean ipv6) { + final InetAddress ipAny = ipv6 ? INET6_ANY : INET_ANY; + if (netInterface != null) { + final Enumeration ias = netInterface.getInetAddresses(); + while (ias.hasMoreElements()) { + final InetAddress ia = ias.nextElement(); + final boolean isV6 = ia instanceof Inet6Address; + if (isV6 == ipv6) { + return ia; + } + } + } + return ipAny; + } + + public static LinuxSocket newSocket(int fd) { + return new LinuxSocket(fd); + } + + public static LinuxSocket newVSockStream() { + return new LinuxSocket(newVSockStream0()); + } + + static int newVSockStream0() { + int res = newVSockStreamFd(); + if (res < 0) { + throw new ChannelException(newIOException("newVSockStream", res)); + } + return res; + } + + public static LinuxSocket newSocketStream(boolean ipv6) { + return new LinuxSocket(newSocketStream0(ipv6)); + } + + public static LinuxSocket newSocketStream(InternetProtocolFamily protocol) { + return new LinuxSocket(newSocketStream0(protocol)); + } + + public static LinuxSocket newSocketStream() { + return newSocketStream(isIPv6Preferred()); + } + + public static LinuxSocket newSocketDgram(boolean ipv6) { + return new LinuxSocket(newSocketDgram0(ipv6)); + } + + public static LinuxSocket newSocketDgram(InternetProtocolFamily family) { + return new LinuxSocket(newSocketDgram0(family)); + } + + public static LinuxSocket newSocketDgram() { + return newSocketDgram(isIPv6Preferred()); + } + + public static LinuxSocket newSocketDomain() { + return new LinuxSocket(newSocketDomain0()); + } + + public static LinuxSocket newSocketDomainDgram() { + return new LinuxSocket(newSocketDomainDgram0()); + } + + private static InetAddress unsafeInetAddrByName(String inetName) { + try { + return InetAddress.getByName(inetName); + } catch (UnknownHostException uhe) { + throw new ChannelException(uhe); + } + } + + private static native int newVSockStreamFd(); + private static native int bindVSock(int fd, int cid, int port); + private static native int connectVSock(int fd, int cid, int port); + private static native byte[] remoteVSockAddress(int fd); + private static native byte[] localVSockAddress(int fd); + + private static native void joinGroup(int fd, boolean ipv6, byte[] group, byte[] interfaceAddress, + int scopeId, int interfaceIndex) throws IOException; + private static native void joinSsmGroup(int fd, boolean ipv6, byte[] group, byte[] interfaceAddress, + int scopeId, int interfaceIndex, byte[] source) throws IOException; + private static native void leaveGroup(int fd, boolean ipv6, byte[] group, byte[] interfaceAddress, + int scopeId, int interfaceIndex) throws IOException; + private static native void leaveSsmGroup(int fd, boolean ipv6, byte[] group, byte[] interfaceAddress, + int scopeId, int interfaceIndex, byte[] source) throws IOException; + private static native long sendFile(int socketFd, DefaultFileRegion src, long baseOffset, + long offset, long length) throws IOException; + + private static native int getTcpDeferAccept(int fd) throws IOException; + private static native int isTcpQuickAck(int fd) throws IOException; + private static native int isTcpCork(int fd) throws IOException; + private static native int getSoBusyPoll(int fd) throws IOException; + private static native int getTcpNotSentLowAt(int fd) throws IOException; + private static native int getTcpKeepIdle(int fd) throws IOException; + private static native int getTcpKeepIntvl(int fd) throws IOException; + private static native int getTcpKeepCnt(int fd) throws IOException; + private static native int getTcpUserTimeout(int fd) throws IOException; + private static native int getTimeToLive(int fd) throws IOException; + private static native int isIpFreeBind(int fd) throws IOException; + private static native int isIpTransparent(int fd) throws IOException; + private static native int isIpRecvOrigDestAddr(int fd) throws IOException; + private static native void getTcpInfo(int fd, long[] array) throws IOException; + private static native PeerCredentials getPeerCredentials(int fd) throws IOException; + + private static native void setTcpDeferAccept(int fd, int deferAccept) throws IOException; + private static native void setTcpQuickAck(int fd, int quickAck) throws IOException; + private static native void setTcpCork(int fd, int tcpCork) throws IOException; + private static native void setSoBusyPoll(int fd, int loopMicros) throws IOException; + private static native void setTcpNotSentLowAt(int fd, int tcpNotSentLowAt) throws IOException; + private static native void setTcpFastOpen(int fd, int tcpFastopenBacklog) throws IOException; + private static native void setTcpKeepIdle(int fd, int seconds) throws IOException; + private static native void setTcpKeepIntvl(int fd, int seconds) throws IOException; + private static native void setTcpKeepCnt(int fd, int probes) throws IOException; + private static native void setTcpUserTimeout(int fd, int milliseconds)throws IOException; + private static native void setIpFreeBind(int fd, int freeBind) throws IOException; + private static native void setIpTransparent(int fd, int transparent) throws IOException; + private static native void setIpRecvOrigDestAddr(int fd, int transparent) throws IOException; + private static native void setTcpMd5Sig( + int fd, boolean ipv6, byte[] address, int scopeId, byte[] key) throws IOException; + private static native void setInterface( + int fd, boolean ipv6, byte[] interfaceAddress, int scopeId, int networkInterfaceIndex) throws IOException; + private static native int getInterface(int fd, boolean ipv6); + private static native int getIpMulticastLoop(int fd, boolean ipv6) throws IOException; + private static native void setIpMulticastLoop(int fd, boolean ipv6, int enabled) throws IOException; + private static native void setTimeToLive(int fd, int ttl) throws IOException; + private static native int isUdpGro(int fd) throws IOException; + private static native void setUdpGro(int fd, int gro) throws IOException; +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Native.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Native.java new file mode 100644 index 0000000..85829ec --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/Native.java @@ -0,0 +1,338 @@ +/* + * Copyright 2013 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.channel.DefaultFileRegion; +import io.netty.channel.unix.FileDescriptor; +import io.netty.channel.unix.PeerCredentials; +import io.netty.channel.unix.Socket; +import io.netty.channel.unix.Unix; +import io.netty.util.internal.ClassInitializerUtil; +import io.netty.util.internal.NativeLibraryLoader; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.ThrowableUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.io.IOException; +import java.nio.channels.FileChannel; +import java.nio.channels.Selector; + +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.epollerr; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.epollet; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.epollin; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.epollout; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.epollrdhup; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.isSupportingRecvmmsg; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.isSupportingSendmmsg; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.kernelVersion; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.tcpFastopenMode; +import static io.netty.channel.epoll.NativeStaticallyReferencedJniMethods.tcpMd5SigMaxKeyLen; +import static io.netty.channel.unix.Errors.ioResult; +import static io.netty.channel.unix.Errors.newIOException; + +/** + * Native helper methods + *

Internal usage only! + *

Static members which call JNI methods must be defined in {@link NativeStaticallyReferencedJniMethods}. + */ +public final class Native { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(Native.class); + + static { + Selector selector = null; + try { + // We call Selector.open() as this will under the hood cause IOUtil to be loaded. + // This is a workaround for a possible classloader deadlock that could happen otherwise: + // + // See https://github.com/netty/netty/issues/10187 + selector = Selector.open(); + } catch (IOException ignore) { + // Just ignore + } + + // Preload all classes that will be used in the OnLoad(...) function of JNI to eliminate the possiblity of a + // class-loader deadlock. This is a workaround for https://github.com/netty/netty/issues/11209. + + // This needs to match all the classes that are loaded via NETTY_JNI_UTIL_LOAD_CLASS or looked up via + // NETTY_JNI_UTIL_FIND_CLASS. + ClassInitializerUtil.tryLoadClasses(Native.class, + // netty_epoll_linuxsocket + PeerCredentials.class, DefaultFileRegion.class, FileChannel.class, java.io.FileDescriptor.class, + // netty_epoll_native + NativeDatagramPacketArray.NativeDatagramPacket.class + ); + + try { + // First, try calling a side-effect free JNI method to see if the library was already + // loaded by the application. + offsetofEpollData(); + } catch (UnsatisfiedLinkError ignore) { + // The library was not previously loaded, load it now. + loadNativeLibrary(); + } finally { + try { + if (selector != null) { + selector.close(); + } + } catch (IOException ignore) { + // Just ignore + } + } + Unix.registerInternal(new Runnable() { + @Override + public void run() { + registerUnix(); + } + }); + } + + private static native int registerUnix(); + + // EventLoop operations and constants + public static final int EPOLLIN = epollin(); + public static final int EPOLLOUT = epollout(); + public static final int EPOLLRDHUP = epollrdhup(); + public static final int EPOLLET = epollet(); + public static final int EPOLLERR = epollerr(); + + public static final boolean IS_SUPPORTING_SENDMMSG = isSupportingSendmmsg(); + static final boolean IS_SUPPORTING_RECVMMSG = isSupportingRecvmmsg(); + static final boolean IS_SUPPORTING_UDP_SEGMENT = isSupportingUdpSegment(); + private static final int TFO_ENABLED_CLIENT_MASK = 0x1; + private static final int TFO_ENABLED_SERVER_MASK = 0x2; + private static final int TCP_FASTOPEN_MODE = tcpFastopenMode(); + /** + * tcp_fastopen client mode enabled + * state. + */ + static final boolean IS_SUPPORTING_TCP_FASTOPEN_CLIENT = + (TCP_FASTOPEN_MODE & TFO_ENABLED_CLIENT_MASK) == TFO_ENABLED_CLIENT_MASK; + /** + * tcp_fastopen server mode enabled + * state. + */ + static final boolean IS_SUPPORTING_TCP_FASTOPEN_SERVER = + (TCP_FASTOPEN_MODE & TFO_ENABLED_SERVER_MASK) == TFO_ENABLED_SERVER_MASK; + /** + * @deprecated Use {@link Epoll#isTcpFastOpenClientSideAvailable()} + * or {@link Epoll#isTcpFastOpenServerSideAvailable()}. + */ + @Deprecated + public static final boolean IS_SUPPORTING_TCP_FASTOPEN = IS_SUPPORTING_TCP_FASTOPEN_CLIENT || + IS_SUPPORTING_TCP_FASTOPEN_SERVER; + public static final int TCP_MD5SIG_MAXKEYLEN = tcpMd5SigMaxKeyLen(); + public static final String KERNEL_VERSION = kernelVersion(); + + public static FileDescriptor newEventFd() { + return new FileDescriptor(eventFd()); + } + + public static FileDescriptor newTimerFd() { + return new FileDescriptor(timerFd()); + } + + private static native boolean isSupportingUdpSegment(); + private static native int eventFd(); + private static native int timerFd(); + public static native void eventFdWrite(int fd, long value); + public static native void eventFdRead(int fd); + + public static FileDescriptor newEpollCreate() { + return new FileDescriptor(epollCreate()); + } + + private static native int epollCreate(); + + /** + * @deprecated this method is no longer supported. This functionality is internal to this package. + */ + @Deprecated + public static int epollWait(FileDescriptor epollFd, EpollEventArray events, FileDescriptor timerFd, + int timeoutSec, int timeoutNs) throws IOException { + long result = epollWait(epollFd, events, timerFd, timeoutSec, timeoutNs, -1); + return epollReady(result); + } + + static long epollWait(FileDescriptor epollFd, EpollEventArray events, FileDescriptor timerFd, + int timeoutSec, int timeoutNs, long millisThreshold) throws IOException { + if (timeoutSec == 0 && timeoutNs == 0) { + // Zero timeout => poll (aka return immediately) + // We shift this to be consistent with what is done in epollWait0(...) + return ((long) epollWait(epollFd, events, 0)) << 32; + } + if (timeoutSec == Integer.MAX_VALUE) { + // Max timeout => wait indefinitely: disarm timerfd first + timeoutSec = 0; + timeoutNs = 0; + } + long result = epollWait0(epollFd.intValue(), events.memoryAddress(), events.length(), timerFd.intValue(), + timeoutSec, timeoutNs, millisThreshold); + int ready = epollReady(result); + if (ready < 0) { + throw newIOException("epoll_wait", ready); + } + return result; + } + + // IMPORTANT: This needs to be consistent with what is used in netty_epoll_native.c + static int epollReady(long result) { + return (int) (result >> 32); + } + + // IMPORTANT: This needs to be consistent with what is used in netty_epoll_native.c + static boolean epollTimerWasUsed(long result) { + return (result & 0xff) != 0; + } + + static int epollWait(FileDescriptor epollFd, EpollEventArray events, boolean immediatePoll) throws IOException { + return epollWait(epollFd, events, immediatePoll ? 0 : -1); + } + + /** + * This uses epoll's own timeout and does not reset/re-arm any timerfd + */ + static int epollWait(FileDescriptor epollFd, EpollEventArray events, int timeoutMillis) throws IOException { + int ready = epollWait(epollFd.intValue(), events.memoryAddress(), events.length(), timeoutMillis); + if (ready < 0) { + throw newIOException("epoll_wait", ready); + } + return ready; + } + + /** + * Non-blocking variant of + * {@link #epollWait(FileDescriptor, EpollEventArray, FileDescriptor, int, int)} + * that will also hint to processor we are in a busy-wait loop. + */ + public static int epollBusyWait(FileDescriptor epollFd, EpollEventArray events) throws IOException { + int ready = epollBusyWait0(epollFd.intValue(), events.memoryAddress(), events.length()); + if (ready < 0) { + throw newIOException("epoll_wait", ready); + } + return ready; + } + + private static native long epollWait0( + int efd, long address, int len, int timerFd, int timeoutSec, int timeoutNs, long millisThreshold); + private static native int epollWait(int efd, long address, int len, int timeout); + private static native int epollBusyWait0(int efd, long address, int len); + + public static void epollCtlAdd(int efd, final int fd, final int flags) throws IOException { + int res = epollCtlAdd0(efd, fd, flags); + if (res < 0) { + throw newIOException("epoll_ctl", res); + } + } + private static native int epollCtlAdd0(int efd, int fd, int flags); + + public static void epollCtlMod(int efd, final int fd, final int flags) throws IOException { + int res = epollCtlMod0(efd, fd, flags); + if (res < 0) { + throw newIOException("epoll_ctl", res); + } + } + private static native int epollCtlMod0(int efd, int fd, int flags); + + public static void epollCtlDel(int efd, final int fd) throws IOException { + int res = epollCtlDel0(efd, fd); + if (res < 0) { + throw newIOException("epoll_ctl", res); + } + } + private static native int epollCtlDel0(int efd, int fd); + + // File-descriptor operations + public static int splice(int fd, long offIn, int fdOut, long offOut, long len) throws IOException { + int res = splice0(fd, offIn, fdOut, offOut, len); + if (res >= 0) { + return res; + } + return ioResult("splice", res); + } + + private static native int splice0(int fd, long offIn, int fdOut, long offOut, long len); + + @Deprecated + public static int sendmmsg(int fd, NativeDatagramPacketArray.NativeDatagramPacket[] msgs, + int offset, int len) throws IOException { + return sendmmsg(fd, Socket.isIPv6Preferred(), msgs, offset, len); + } + + static int sendmmsg(int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket[] msgs, + int offset, int len) throws IOException { + int res = sendmmsg0(fd, ipv6, msgs, offset, len); + if (res >= 0) { + return res; + } + return ioResult("sendmmsg", res); + } + + private static native int sendmmsg0( + int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket[] msgs, int offset, int len); + + static int recvmmsg(int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket[] msgs, + int offset, int len) throws IOException { + int res = recvmmsg0(fd, ipv6, msgs, offset, len); + if (res >= 0) { + return res; + } + return ioResult("recvmmsg", res); + } + + private static native int recvmmsg0( + int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket[] msgs, int offset, int len); + + static int recvmsg(int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket packet) throws IOException { + int res = recvmsg0(fd, ipv6, packet); + if (res >= 0) { + return res; + } + return ioResult("recvmsg", res); + } + + private static native int recvmsg0( + int fd, boolean ipv6, NativeDatagramPacketArray.NativeDatagramPacket msg); + + // epoll_event related + public static native int sizeofEpollEvent(); + public static native int offsetofEpollData(); + + private static void loadNativeLibrary() { + String name = PlatformDependent.normalizedOs(); + if (!"linux".equals(name)) { + throw new IllegalStateException("Only supported on Linux"); + } + String staticLibName = "netty_transport_native_epoll"; + String sharedLibName = staticLibName + '_' + PlatformDependent.normalizedArch(); + ClassLoader cl = PlatformDependent.getClassLoader(Native.class); + try { + NativeLibraryLoader.load(sharedLibName, cl); + } catch (UnsatisfiedLinkError e1) { + try { + NativeLibraryLoader.load(staticLibName, cl); + logger.debug("Failed to load {}", sharedLibName, e1); + } catch (UnsatisfiedLinkError e2) { + ThrowableUtil.addSuppressed(e1, e2); + throw e1; + } + } + } + + private Native() { + // utility + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeDatagramPacketArray.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeDatagramPacketArray.java new file mode 100644 index 0000000..b076559 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeDatagramPacketArray.java @@ -0,0 +1,232 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelOutboundBuffer.MessageProcessor; +import io.netty.channel.socket.DatagramPacket; +import io.netty.channel.unix.IovArray; +import io.netty.channel.unix.Limits; +import io.netty.channel.unix.SegmentedDatagramPacket; +import io.netty.util.internal.UnstableApi; + +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; + +import static io.netty.channel.unix.Limits.UIO_MAX_IOV; +import static io.netty.channel.unix.NativeInetAddress.copyIpv4MappedIpv6Address; + +/** + * Support sendmmsg(...) on linux with GLIBC 2.14+ + */ +final class NativeDatagramPacketArray { + + // Use UIO_MAX_IOV as this is the maximum number we can write with one sendmmsg(...) call. + private final NativeDatagramPacket[] packets = new NativeDatagramPacket[UIO_MAX_IOV]; + + // We share one IovArray for all NativeDatagramPackets to reduce memory overhead. This will allow us to write + // up to IOV_MAX iovec across all messages in one sendmmsg(...) call. + private final IovArray iovArray = new IovArray(); + + // temporary array to copy the ipv4 part of ipv6-mapped-ipv4 addresses and then create a Inet4Address out of it. + private final byte[] ipv4Bytes = new byte[4]; + private final MyMessageProcessor processor = new MyMessageProcessor(); + + private int count; + + NativeDatagramPacketArray() { + for (int i = 0; i < packets.length; i++) { + packets[i] = new NativeDatagramPacket(); + } + } + + boolean addWritable(ByteBuf buf, int index, int len) { + return add0(buf, index, len, 0, null); + } + + private boolean add0(ByteBuf buf, int index, int len, int segmentLen, InetSocketAddress recipient) { + if (count == packets.length) { + // We already filled up to UIO_MAX_IOV messages. This is the max allowed per + // recvmmsg(...) / sendmmsg(...) call, we will try again later. + return false; + } + if (len == 0) { + return true; + } + int offset = iovArray.count(); + if (offset == Limits.IOV_MAX || !iovArray.add(buf, index, len)) { + // Not enough space to hold the whole content, we will try again later. + return false; + } + NativeDatagramPacket p = packets[count]; + p.init(iovArray.memoryAddress(offset), iovArray.count() - offset, segmentLen, recipient); + + count++; + return true; + } + + void add(ChannelOutboundBuffer buffer, boolean connected, int maxMessagesPerWrite) throws Exception { + processor.connected = connected; + processor.maxMessagesPerWrite = maxMessagesPerWrite; + buffer.forEachFlushedMessage(processor); + } + + /** + * Returns the count + */ + int count() { + return count; + } + + /** + * Returns an array with {@link #count()} {@link NativeDatagramPacket}s filled. + */ + NativeDatagramPacket[] packets() { + return packets; + } + + void clear() { + this.count = 0; + this.iovArray.clear(); + } + + void release() { + iovArray.release(); + } + + private final class MyMessageProcessor implements MessageProcessor { + private boolean connected; + private int maxMessagesPerWrite; + + @Override + public boolean processMessage(Object msg) { + final boolean added; + if (msg instanceof DatagramPacket) { + DatagramPacket packet = (DatagramPacket) msg; + ByteBuf buf = packet.content(); + int segmentSize = 0; + if (packet instanceof io.netty.channel.unix.SegmentedDatagramPacket) { + int seg = ((io.netty.channel.unix.SegmentedDatagramPacket) packet).segmentSize(); + // We only need to tell the kernel that we want to use UDP_SEGMENT if there are multiple + // segments in the packet. + if (buf.readableBytes() > seg) { + segmentSize = seg; + } + } + added = add0(buf, buf.readerIndex(), buf.readableBytes(), segmentSize, packet.recipient()); + } else if (msg instanceof ByteBuf && connected) { + ByteBuf buf = (ByteBuf) msg; + added = add0(buf, buf.readerIndex(), buf.readableBytes(), 0, null); + } else { + added = false; + } + if (added) { + maxMessagesPerWrite--; + return maxMessagesPerWrite > 0; + } + return false; + } + } + + private static InetSocketAddress newAddress(byte[] addr, int addrLen, int port, int scopeId, byte[] ipv4Bytes) + throws UnknownHostException { + final InetAddress address; + if (addrLen == ipv4Bytes.length) { + System.arraycopy(addr, 0, ipv4Bytes, 0, addrLen); + address = InetAddress.getByAddress(ipv4Bytes); + } else { + address = Inet6Address.getByAddress(null, addr, scopeId); + } + return new InetSocketAddress(address, port); + } + + /** + * Used to pass needed data to JNI. + */ + @SuppressWarnings("unused") + @UnstableApi + public final class NativeDatagramPacket { + + // IMPORTANT: Most of the below variables are accessed via JNI. Be aware if you change any of these you also + // need to change these in the related .c file! + + // This is the actual struct iovec* + private long memoryAddress; + private int count; + + private final byte[] senderAddr = new byte[16]; + private int senderAddrLen; + private int senderScopeId; + private int senderPort; + + private final byte[] recipientAddr = new byte[16]; + private int recipientAddrLen; + private int recipientScopeId; + private int recipientPort; + + private int segmentSize; + + private void init(long memoryAddress, int count, int segmentSize, InetSocketAddress recipient) { + this.memoryAddress = memoryAddress; + this.count = count; + this.segmentSize = segmentSize; + + this.senderScopeId = 0; + this.senderPort = 0; + this.senderAddrLen = 0; + + if (recipient == null) { + this.recipientScopeId = 0; + this.recipientPort = 0; + this.recipientAddrLen = 0; + } else { + InetAddress address = recipient.getAddress(); + if (address instanceof Inet6Address) { + System.arraycopy(address.getAddress(), 0, recipientAddr, 0, recipientAddr.length); + recipientScopeId = ((Inet6Address) address).getScopeId(); + } else { + copyIpv4MappedIpv6Address(address.getAddress(), recipientAddr); + recipientScopeId = 0; + } + recipientAddrLen = recipientAddr.length; + recipientPort = recipient.getPort(); + } + } + + boolean hasSender() { + return senderPort > 0; + } + + DatagramPacket newDatagramPacket(ByteBuf buffer, InetSocketAddress recipient) throws UnknownHostException { + InetSocketAddress sender = newAddress(senderAddr, senderAddrLen, senderPort, senderScopeId, ipv4Bytes); + if (recipientAddrLen != 0) { + recipient = newAddress(recipientAddr, recipientAddrLen, recipientPort, recipientScopeId, ipv4Bytes); + } + + // Slice out the buffer with the correct length. + ByteBuf slice = buffer.retainedSlice(buffer.readerIndex(), count); + + // UDP_GRO + if (segmentSize > 0) { + return new SegmentedDatagramPacket(slice, segmentSize, recipient, sender); + } + return new DatagramPacket(slice, recipient, sender); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeStaticallyReferencedJniMethods.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeStaticallyReferencedJniMethods.java new file mode 100644 index 0000000..b52721b --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/NativeStaticallyReferencedJniMethods.java @@ -0,0 +1,46 @@ +/* + * Copyright 2016 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +/** + * This class is necessary to break the following cyclic dependency: + *

    + *
  1. JNI_OnLoad
  2. + *
  3. JNI Calls FindClass because RegisterNatives (used to register JNI methods) requires a class
  4. + *
  5. FindClass loads the class, but static members variables of that class attempt to call a JNI method which has not + * yet been registered.
  6. + *
  7. java.lang.UnsatisfiedLinkError is thrown because native method has not yet been registered.
  8. + *
+ * Static members which call JNI methods must not be declared in this class! + */ +final class NativeStaticallyReferencedJniMethods { + + private NativeStaticallyReferencedJniMethods() { } + + static native int epollin(); + static native int epollout(); + static native int epollrdhup(); + static native int epollet(); + static native int epollerr(); + static native long ssizeMax(); + static native int tcpMd5SigMaxKeyLen(); + static native int iovMax(); + static native int uioMaxIov(); + static native boolean isSupportingSendmmsg(); + static native boolean isSupportingRecvmmsg(); + static native int tcpFastopenMode(); + static native String kernelVersion(); +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/SegmentedDatagramPacket.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/SegmentedDatagramPacket.java new file mode 100644 index 0000000..50bca1f --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/SegmentedDatagramPacket.java @@ -0,0 +1,111 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import io.netty.buffer.ByteBuf; + +import java.net.InetSocketAddress; + +/** + * @deprecated use {@link io.netty.channel.unix.SegmentedDatagramPacket}. + */ +@Deprecated +public final class SegmentedDatagramPacket extends io.netty.channel.unix.SegmentedDatagramPacket { + + /** + * Create a new instance. + * + * @param data the {@link ByteBuf} which must be continguous. + * @param segmentSize the segment size. + * @param recipient the recipient. + */ + public SegmentedDatagramPacket(ByteBuf data, int segmentSize, InetSocketAddress recipient) { + super(data, segmentSize, recipient); + checkIsSupported(); + } + + /** + * Create a new instance. + * + * @param data the {@link ByteBuf} which must be continguous. + * @param segmentSize the segment size. + * @param recipient the recipient. + */ + public SegmentedDatagramPacket(ByteBuf data, int segmentSize, + InetSocketAddress recipient, InetSocketAddress sender) { + super(data, segmentSize, recipient, sender); + checkIsSupported(); + } + + /** + * Returns {@code true} if the underlying system supports GSO. + */ + public static boolean isSupported() { + return Epoll.isAvailable() && + // We only support it together with sendmmsg(...) + Native.IS_SUPPORTING_SENDMMSG && Native.IS_SUPPORTING_UDP_SEGMENT; + } + + @Override + public SegmentedDatagramPacket copy() { + return new SegmentedDatagramPacket(content().copy(), segmentSize(), recipient(), sender()); + } + + @Override + public SegmentedDatagramPacket duplicate() { + return new SegmentedDatagramPacket(content().duplicate(), segmentSize(), recipient(), sender()); + } + + @Override + public SegmentedDatagramPacket retainedDuplicate() { + return new SegmentedDatagramPacket(content().retainedDuplicate(), segmentSize(), recipient(), sender()); + } + + @Override + public SegmentedDatagramPacket replace(ByteBuf content) { + return new SegmentedDatagramPacket(content, segmentSize(), recipient(), sender()); + } + + @Override + public SegmentedDatagramPacket retain() { + super.retain(); + return this; + } + + @Override + public SegmentedDatagramPacket retain(int increment) { + super.retain(increment); + return this; + } + + @Override + public SegmentedDatagramPacket touch() { + super.touch(); + return this; + } + + @Override + public SegmentedDatagramPacket touch(Object hint) { + super.touch(hint); + return this; + } + + private static void checkIsSupported() { + if (!isSupported()) { + throw new IllegalStateException(); + } + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/TcpMd5Util.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/TcpMd5Util.java new file mode 100644 index 0000000..5f545db --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/TcpMd5Util.java @@ -0,0 +1,73 @@ +/* + * Copyright 2015 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.channel.epoll; + +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static io.netty.util.internal.ObjectUtil.checkNotNullWithIAE; +import static io.netty.util.internal.ObjectUtil.checkNonEmpty; + +import java.io.IOException; +import java.net.InetAddress; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; +import java.util.Map; +import java.util.Map.Entry; + +final class TcpMd5Util { + + static Collection newTcpMd5Sigs(AbstractEpollChannel channel, Collection current, + Map newKeys) throws IOException { + checkNotNull(channel, "channel"); + checkNotNull(current, "current"); + checkNotNull(newKeys, "newKeys"); + + // Validate incoming values + for (Entry e : newKeys.entrySet()) { + final byte[] key = e.getValue(); + checkNotNullWithIAE(e.getKey(), "e.getKey"); + checkNonEmpty(key, e.getKey().toString()); + if (key.length > Native.TCP_MD5SIG_MAXKEYLEN) { + throw new IllegalArgumentException("newKeys[" + e.getKey() + + "] has a key with invalid length; should not exceed the maximum length (" + + Native.TCP_MD5SIG_MAXKEYLEN + ')'); + } + } + + // Remove mappings not present in the new set. + for (InetAddress addr : current) { + if (!newKeys.containsKey(addr)) { + channel.socket.setTcpMd5Sig(addr, null); + } + } + + if (newKeys.isEmpty()) { + return Collections.emptySet(); + } + + // Set new mappings and store addresses which we set. + final Collection addresses = new ArrayList(newKeys.size()); + for (Entry e : newKeys.entrySet()) { + channel.socket.setTcpMd5Sig(e.getKey(), e.getValue()); + addresses.add(e.getKey()); + } + + return addresses; + } + + private TcpMd5Util() { + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/VSockAddress.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/VSockAddress.java new file mode 100644 index 0000000..d410072 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/VSockAddress.java @@ -0,0 +1,80 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.channel.epoll; + +import java.net.SocketAddress; + +/** + * A address for a + * VM sockets (Linux VSOCK address family). + */ + +public final class VSockAddress extends SocketAddress { + private static final long serialVersionUID = 8600894096347158429L; + + public static final int VMADDR_CID_ANY = -1; + public static final int VMADDR_CID_HYPERVISOR = 0; + public static final int VMADDR_CID_LOCAL = 1; + public static final int VMADDR_CID_HOST = 2; + + public static final int VMADDR_PORT_ANY = -1; + + private final int cid; + private final int port; + + public VSockAddress(int cid, int port) { + this.cid = cid; + this.port = port; + } + + public int getCid() { + return cid; + } + + public int getPort() { + return port; + } + + @Override + public String toString() { + return "VSockAddress{" + + "cid=" + cid + + ", port=" + port + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (!(o instanceof VSockAddress)) { + return false; + } + + VSockAddress that = (VSockAddress) o; + + return cid == that.cid && port == that.port; + } + + @Override + public int hashCode() { + int result = cid; + result = 31 * result + port; + return result; + } +} diff --git a/netty-channel-epoll/src/main/java/io/netty/channel/epoll/package-info.java b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/package-info.java new file mode 100644 index 0000000..7a96dc1 --- /dev/null +++ b/netty-channel-epoll/src/main/java/io/netty/channel/epoll/package-info.java @@ -0,0 +1,21 @@ +/* + * Copyright 2014 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/** + * Optimized transport for linux which uses EPOLL Edge-Triggered Mode + * for maximal performance. + */ +package io.netty.channel.epoll; diff --git a/netty-channel-epoll/src/main/java/module-info.java b/netty-channel-epoll/src/main/java/module-info.java new file mode 100644 index 0000000..8ff489f --- /dev/null +++ b/netty-channel-epoll/src/main/java/module-info.java @@ -0,0 +1,7 @@ +module org.xbib.io.netty.channel.epoll { + exports io.netty.channel.epoll; + requires org.xbib.io.netty.buffer; + requires org.xbib.io.netty.channel; + requires org.xbib.io.netty.channel.unix; + requires org.xbib.io.netty.util; +} diff --git a/netty-channel/src/main/java/module-info.java b/netty-channel/src/main/java/module-info.java index 2a47566..7faabd5 100644 --- a/netty-channel/src/main/java/module-info.java +++ b/netty-channel/src/main/java/module-info.java @@ -5,6 +5,7 @@ module org.xbib.io.netty.channel { exports io.netty.channel; exports io.netty.channel.embedded; exports io.netty.channel.group; + exports io.netty.channel.internal to org.xbib.io.netty.channel.epoll; exports io.netty.channel.local; exports io.netty.channel.nio; exports io.netty.channel.oio; diff --git a/netty-handler-codec-http3/build.gradle b/netty-handler-codec-http3/build.gradle new file mode 100644 index 0000000..bafe222 --- /dev/null +++ b/netty-handler-codec-http3/build.gradle @@ -0,0 +1,6 @@ +dependencies { + api project(':netty-handler-codec-http') + api project(':netty-handler-codec-quic') + testImplementation testLibs.assertj + testImplementation testLibs.mockito.core +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/CharSequenceMap.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/CharSequenceMap.java new file mode 100644 index 0000000..0809889 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/CharSequenceMap.java @@ -0,0 +1,46 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.DefaultHeaders; +import io.netty.handler.codec.UnsupportedValueConverter; +import io.netty.handler.codec.ValueConverter; + +import static io.netty.util.AsciiString.CASE_INSENSITIVE_HASHER; +import static io.netty.util.AsciiString.CASE_SENSITIVE_HASHER; + +/** + * Internal use only! + */ +final class CharSequenceMap extends DefaultHeaders> { + CharSequenceMap() { + this(true); + } + + CharSequenceMap(boolean caseSensitive) { + this(caseSensitive, UnsupportedValueConverter.instance()); + } + + CharSequenceMap(boolean caseSensitive, ValueConverter valueConverter) { + super(caseSensitive ? CASE_SENSITIVE_HASHER : CASE_INSENSITIVE_HASHER, valueConverter); + } + + @SuppressWarnings("unchecked") + CharSequenceMap(boolean caseSensitive, ValueConverter valueConverter, int arraySizeHint) { + super(caseSensitive ? CASE_SENSITIVE_HASHER : CASE_INSENSITIVE_HASHER, valueConverter, + NameValidator.NOT_NULL, arraySizeHint); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3CancelPushFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3CancelPushFrame.java new file mode 100644 index 0000000..1e833d8 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3CancelPushFrame.java @@ -0,0 +1,56 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3CancelPushFrame implements Http3CancelPushFrame { + private final long id; + + public DefaultHttp3CancelPushFrame(long id) { + this.id = ObjectUtil.checkPositiveOrZero(id, "id"); + } + + @Override + public long id() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3CancelPushFrame that = (DefaultHttp3CancelPushFrame) o; + return id == that.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(id=" + id() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3DataFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3DataFrame.java new file mode 100644 index 0000000..20e293a --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3DataFrame.java @@ -0,0 +1,76 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.DefaultByteBufHolder; +import io.netty.util.internal.StringUtil; + +public final class DefaultHttp3DataFrame extends DefaultByteBufHolder implements Http3DataFrame { + + public DefaultHttp3DataFrame(ByteBuf data) { + super(data); + } + + @Override + public Http3DataFrame copy() { + return new DefaultHttp3DataFrame(content().copy()); + } + + @Override + public Http3DataFrame duplicate() { + return new DefaultHttp3DataFrame(content().duplicate()); + } + + @Override + public Http3DataFrame retainedDuplicate() { + return new DefaultHttp3DataFrame(content().retainedDuplicate()); + } + + @Override + public Http3DataFrame replace(ByteBuf content) { + return new DefaultHttp3DataFrame(content); + } + + @Override + public Http3DataFrame retain() { + super.retain(); + return this; + } + + @Override + public Http3DataFrame retain(int increment) { + super.retain(increment); + return this; + } + + @Override + public Http3DataFrame touch() { + super.touch(); + return this; + } + + @Override + public Http3DataFrame touch(Object hint) { + super.touch(hint); + return this; + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(content=" + content() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3GoAwayFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3GoAwayFrame.java new file mode 100644 index 0000000..65a3fe2 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3GoAwayFrame.java @@ -0,0 +1,56 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3GoAwayFrame implements Http3GoAwayFrame { + private final long id; + + public DefaultHttp3GoAwayFrame(long id) { + this.id = ObjectUtil.checkPositiveOrZero(id, "id"); + } + + @Override + public long id() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3GoAwayFrame that = (DefaultHttp3GoAwayFrame) o; + return id == that.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(id=" + id() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java new file mode 100644 index 0000000..873ded4 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3Headers.java @@ -0,0 +1,225 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.CharSequenceValueConverter; +import io.netty.handler.codec.DefaultHeaders; +import io.netty.util.AsciiString; +import io.netty.util.ByteProcessor; + +import static io.netty.handler.codec.http3.Http3Headers.PseudoHeaderName.hasPseudoHeaderFormat; +import static io.netty.util.AsciiString.CASE_INSENSITIVE_HASHER; +import static io.netty.util.AsciiString.CASE_SENSITIVE_HASHER; +import static io.netty.util.AsciiString.isUpperCase; + +public final class DefaultHttp3Headers + extends DefaultHeaders implements Http3Headers { + private static final ByteProcessor HTTP3_NAME_VALIDATOR_PROCESSOR = new ByteProcessor() { + @Override + public boolean process(byte value) { + return !isUpperCase(value); + } + }; + static final NameValidator HTTP3_NAME_VALIDATOR = new NameValidator() { + @Override + public void validateName(CharSequence name) { + if (name == null || name.length() == 0) { + throw new Http3HeadersValidationException(String.format("empty headers are not allowed [%s]", name)); + } + if (name instanceof AsciiString) { + final int index; + try { + index = ((AsciiString) name).forEachByte(HTTP3_NAME_VALIDATOR_PROCESSOR); + } catch (Http3HeadersValidationException e) { + throw e; + } catch (Throwable t) { + throw new Http3HeadersValidationException( + String.format("unexpected error. invalid header name [%s]", name), t); + } + + if (index != -1) { + throw new Http3HeadersValidationException(String.format("invalid header name [%s]", name)); + } + } else { + for (int i = 0; i < name.length(); ++i) { + if (isUpperCase(name.charAt(i))) { + throw new Http3HeadersValidationException(String.format("invalid header name [%s]", name)); + } + } + } + } + }; + + private HeaderEntry firstNonPseudo = head; + + /** + * Create a new instance. + *

+ * Header names will be validated according to + * rfc7540. + */ + public DefaultHttp3Headers() { + this(true); + } + + /** + * Create a new instance. + * @param validate {@code true} to validate header names according to + * rfc7540. {@code false} to not validate header names. + */ + @SuppressWarnings("unchecked") + public DefaultHttp3Headers(boolean validate) { + // Case sensitive compare is used because it is cheaper, and header validation can be used to catch invalid + // headers. + super(CASE_SENSITIVE_HASHER, + CharSequenceValueConverter.INSTANCE, + validate ? HTTP3_NAME_VALIDATOR : NameValidator.NOT_NULL); + } + + /** + * Create a new instance. + * @param validate {@code true} to validate header names according to + * rfc7540. {@code false} to not validate header names. + * @param arraySizeHint A hint as to how large the hash data structure should be. + * The next positive power of two will be used. An upper bound may be enforced. + */ + @SuppressWarnings("unchecked") + public DefaultHttp3Headers(boolean validate, int arraySizeHint) { + // Case sensitive compare is used because it is cheaper, and header validation can be used to catch invalid + // headers. + super(CASE_SENSITIVE_HASHER, + CharSequenceValueConverter.INSTANCE, + validate ? HTTP3_NAME_VALIDATOR : NameValidator.NOT_NULL, + arraySizeHint); + } + + @Override + public Http3Headers clear() { + this.firstNonPseudo = head; + return super.clear(); + } + + @Override + public boolean equals(Object o) { + return o instanceof Http3Headers && equals((Http3Headers) o, CASE_SENSITIVE_HASHER); + } + + @Override + public int hashCode() { + return hashCode(CASE_SENSITIVE_HASHER); + } + + @Override + public Http3Headers method(CharSequence value) { + set(PseudoHeaderName.METHOD.value(), value); + return this; + } + + @Override + public Http3Headers scheme(CharSequence value) { + set(PseudoHeaderName.SCHEME.value(), value); + return this; + } + + @Override + public Http3Headers authority(CharSequence value) { + set(PseudoHeaderName.AUTHORITY.value(), value); + return this; + } + + @Override + public Http3Headers path(CharSequence value) { + set(PseudoHeaderName.PATH.value(), value); + return this; + } + + @Override + public Http3Headers status(CharSequence value) { + set(PseudoHeaderName.STATUS.value(), value); + return this; + } + + @Override + public CharSequence method() { + return get(PseudoHeaderName.METHOD.value()); + } + + @Override + public CharSequence scheme() { + return get(PseudoHeaderName.SCHEME.value()); + } + + @Override + public CharSequence authority() { + return get(PseudoHeaderName.AUTHORITY.value()); + } + + @Override + public CharSequence path() { + return get(PseudoHeaderName.PATH.value()); + } + + @Override + public CharSequence status() { + return get(PseudoHeaderName.STATUS.value()); + } + + @Override + public boolean contains(CharSequence name, CharSequence value) { + return contains(name, value, false); + } + + @Override + public boolean contains(CharSequence name, CharSequence value, boolean caseInsensitive) { + return contains(name, value, caseInsensitive ? CASE_INSENSITIVE_HASHER : CASE_SENSITIVE_HASHER); + } + + @Override + protected HeaderEntry newHeaderEntry(int h, CharSequence name, CharSequence value, + HeaderEntry next) { + return new Http3HeaderEntry(h, name, value, next); + } + + private final class Http3HeaderEntry extends HeaderEntry { + protected Http3HeaderEntry(int hash, CharSequence key, CharSequence value, + HeaderEntry next) { + super(hash, key); + this.value = value; + this.next = next; + + // Make sure the pseudo headers fields are first in iteration order + if (hasPseudoHeaderFormat(key)) { + after = firstNonPseudo; + before = firstNonPseudo.before(); + } else { + after = head; + before = head.before(); + if (firstNonPseudo == head) { + firstNonPseudo = this; + } + } + pointNeighborsToThis(); + } + + @Override + protected void remove() { + if (this == firstNonPseudo) { + firstNonPseudo = firstNonPseudo.after(); + } + super.remove(); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3HeadersFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3HeadersFrame.java new file mode 100644 index 0000000..2ad3e5e --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3HeadersFrame.java @@ -0,0 +1,61 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3HeadersFrame implements Http3HeadersFrame { + + private final Http3Headers headers; + + public DefaultHttp3HeadersFrame() { + this(new DefaultHttp3Headers()); + } + + public DefaultHttp3HeadersFrame(Http3Headers headers) { + this.headers = ObjectUtil.checkNotNull(headers, "headers"); + } + + @Override + public Http3Headers headers() { + return headers; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3HeadersFrame that = (DefaultHttp3HeadersFrame) o; + return Objects.equals(headers, that.headers); + } + + @Override + public int hashCode() { + return Objects.hash(headers); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(headers=" + headers() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3MaxPushIdFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3MaxPushIdFrame.java new file mode 100644 index 0000000..cdc96f3 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3MaxPushIdFrame.java @@ -0,0 +1,56 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3MaxPushIdFrame implements Http3MaxPushIdFrame { + private final long id; + + public DefaultHttp3MaxPushIdFrame(long id) { + this.id = ObjectUtil.checkPositiveOrZero(id, "id"); + } + + @Override + public long id() { + return id; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3MaxPushIdFrame that = (DefaultHttp3MaxPushIdFrame) o; + return id == that.id; + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(id=" + id() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3PushPromiseFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3PushPromiseFrame.java new file mode 100644 index 0000000..39a61e3 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3PushPromiseFrame.java @@ -0,0 +1,69 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3PushPromiseFrame implements Http3PushPromiseFrame { + + private final long id; + private final Http3Headers headers; + + public DefaultHttp3PushPromiseFrame(long id) { + this(id, new DefaultHttp3Headers()); + } + + public DefaultHttp3PushPromiseFrame(long id, Http3Headers headers) { + this.id = ObjectUtil.checkPositiveOrZero(id, "id"); + this.headers = ObjectUtil.checkNotNull(headers, "headers"); + } + + @Override + public long id() { + return id; + } + + @Override + public Http3Headers headers() { + return headers; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3PushPromiseFrame that = (DefaultHttp3PushPromiseFrame) o; + return id == that.id && + Objects.equals(headers, that.headers); + } + + @Override + public int hashCode() { + return Objects.hash(id, headers); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(id=" + id() + ", headers=" + headers() + ')'; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3SettingsFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3SettingsFrame.java new file mode 100644 index 0000000..654ff87 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3SettingsFrame.java @@ -0,0 +1,86 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.collection.LongObjectHashMap; +import io.netty.util.collection.LongObjectMap; +import io.netty.util.internal.StringUtil; + +import java.util.Iterator; +import java.util.Map; + +public final class DefaultHttp3SettingsFrame implements Http3SettingsFrame { + + private final LongObjectMap settings = new LongObjectHashMap<>(4); + + @Override + public Long get(long key) { + return settings.get(key); + } + + @Override + public Long put(long key, Long value) { + if (Http3CodecUtils.isReservedHttp2Setting(key)) { + throw new IllegalArgumentException("Setting is reserved for HTTP/2: " + key); + } + return settings.put(key, value); + } + + @Override + public Iterator> iterator() { + return settings.entrySet().iterator(); + } + + @Override + public int hashCode() { + return settings.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3SettingsFrame that = (DefaultHttp3SettingsFrame) o; + return that.settings.equals(settings); + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(settings=" + settings + ')'; + } + + /** + * Creates a new {@link DefaultHttp3SettingsFrame} which is a copy of the given settings. + * + * @param settingsFrame the frame to copy. + * @return the newly created copy. + */ + public static DefaultHttp3SettingsFrame copyOf(Http3SettingsFrame settingsFrame) { + DefaultHttp3SettingsFrame copy = new DefaultHttp3SettingsFrame(); + if (settingsFrame instanceof DefaultHttp3SettingsFrame) { + copy.settings.putAll(((DefaultHttp3SettingsFrame) settingsFrame).settings); + } else { + for (Map.Entry entry: settingsFrame) { + copy.put(entry.getKey(), entry.getValue()); + } + } + return copy; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3UnknownFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3UnknownFrame.java new file mode 100644 index 0000000..fb8aa79 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/DefaultHttp3UnknownFrame.java @@ -0,0 +1,105 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.DefaultByteBufHolder; +import io.netty.util.internal.StringUtil; + +import java.util.Objects; + +public final class DefaultHttp3UnknownFrame extends DefaultByteBufHolder implements Http3UnknownFrame { + private final long type; + + public DefaultHttp3UnknownFrame(long type, ByteBuf payload) { + super(payload); + this.type = Http3CodecUtils.checkIsReservedFrameType(type); + } + + @Override + public long type() { + return type; + } + + @Override + public Http3UnknownFrame copy() { + return new DefaultHttp3UnknownFrame(type, content().copy()); + } + + @Override + public Http3UnknownFrame duplicate() { + return new DefaultHttp3UnknownFrame(type, content().duplicate()); + } + + @Override + public Http3UnknownFrame retainedDuplicate() { + return new DefaultHttp3UnknownFrame(type, content().retainedDuplicate()); + } + + @Override + public Http3UnknownFrame replace(ByteBuf content) { + return new DefaultHttp3UnknownFrame(type, content); + } + + @Override + public Http3UnknownFrame retain() { + super.retain(); + return this; + } + + @Override + public Http3UnknownFrame retain(int increment) { + super.retain(increment); + return this; + } + + @Override + public Http3UnknownFrame touch() { + super.touch(); + return this; + } + + @Override + public Http3UnknownFrame touch(Object hint) { + super.touch(hint); + return this; + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "(type=" + type() + ", content=" + content() + ')'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultHttp3UnknownFrame that = (DefaultHttp3UnknownFrame) o; + if (type != that.type) { + return false; + } + return super.equals(o); + } + + @Override + public int hashCode() { + return Objects.hash(super.hashCode(), type); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3.java new file mode 100644 index 0000000..4fed393 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3.java @@ -0,0 +1,176 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicClientCodecBuilder; +import io.netty.handler.codec.quic.QuicCodecBuilder; +import io.netty.handler.codec.quic.QuicServerCodecBuilder; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamChannelBootstrap; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.AttributeKey; +import io.netty.util.concurrent.Future; + +/** + * Contains utility methods that help to bootstrap server / clients with HTTP3 support. + */ +public final class Http3 { + + private Http3() { } + + private static final String[] H3_PROTOS = new String[] { + "h3-29", + "h3-30", + "h3-31", + "h3-32", + "h3" + }; + + private static final AttributeKey HTTP3_CONTROL_STREAM_KEY = + AttributeKey.valueOf(Http3.class, "HTTP3ControlStream"); + + private static final AttributeKey QPACK_ATTRIBUTES_KEY = + AttributeKey.valueOf(Http3.class, "QpackAttributes"); + + /** + * Returns the local initiated control stream for the HTTP/3 connection. + * @param channel the channel for the HTTP/3 connection. + * @return the control stream. + */ + public static QuicStreamChannel getLocalControlStream(Channel channel) { + return channel.attr(HTTP3_CONTROL_STREAM_KEY).get(); + } + + /** + * Returns the value of the max push ID received for + * this connection. + * + * @return Received max push ID for this + * connection. + */ + static long maxPushIdReceived(QuicChannel channel) { + final Http3ConnectionHandler connectionHandler = Http3CodecUtils.getConnectionHandlerOrClose(channel); + if (connectionHandler == null) { + throw new IllegalStateException("Connection handler not found."); + } + return connectionHandler.localControlStreamHandler.maxPushIdReceived(); + } + + static void setLocalControlStream(Channel channel, QuicStreamChannel controlStreamChannel) { + channel.attr(HTTP3_CONTROL_STREAM_KEY).set(controlStreamChannel); + } + + static QpackAttributes getQpackAttributes(Channel channel) { + return channel.attr(QPACK_ATTRIBUTES_KEY).get(); + } + + static void setQpackAttributes(Channel channel, QpackAttributes attributes) { + channel.attr(QPACK_ATTRIBUTES_KEY).set(attributes); + } + + /** + * Returns a new HTTP/3 request-stream that will use the given {@link ChannelHandler} + * to dispatch {@link Http3RequestStreamFrame}s too. The needed HTTP/3 codecs are automatically added to the + * pipeline as well. + * + * If you need more control you can also use the {@link Http3RequestStreamInitializer} directly. + * + * @param channel the {@link QuicChannel} for which we create the request-stream. + * @param handler the {@link ChannelHandler} to add. + * @return the {@link Future} that will be notified once the request-stream was opened. + */ + public static Future newRequestStream(QuicChannel channel, ChannelHandler handler) { + return channel.createStream(QuicStreamType.BIDIRECTIONAL, requestStreamInitializer(handler)); + } + + /** + * Returns a new HTTP/3 request-stream bootstrap that will use the given {@link ChannelHandler} + * to dispatch {@link Http3RequestStreamFrame}s too. The needed HTTP/3 codecs are automatically added to the + * pipeline as well. + * + * If you need more control you can also use the {@link Http3RequestStreamInitializer} directly. + * + * @param channel the {@link QuicChannel} for which we create the request-stream. + * @param handler the {@link ChannelHandler} to add. + * @return the {@link QuicStreamChannelBootstrap} that should be used. + */ + public static QuicStreamChannelBootstrap newRequestStreamBootstrap(QuicChannel channel, ChannelHandler handler) { + return channel.newStreamBootstrap().handler(requestStreamInitializer(handler)) + .type(QuicStreamType.BIDIRECTIONAL); + } + + /** + * Returns the supported protocols for H3. + * + * @return the supported protocols. + */ + public static String[] supportedApplicationProtocols() { + return H3_PROTOS.clone(); + } + + /** + * + * Minimum number max unidirectional streams. + */ + // control-stream, qpack decoder stream, qpack encoder stream + public static final int MIN_INITIAL_MAX_STREAMS_UNIDIRECTIONAL = 3; + + /** + * + * Minimum max data for unidirectional streams. + */ + public static final int MIN_INITIAL_MAX_STREAM_DATA_UNIDIRECTIONAL = 1024; + + /** + * Returns a new {@link QuicServerCodecBuilder} that has preconfigured for HTTP3. + * + * @return a pre-configured builder for HTTP3. + */ + public static QuicServerCodecBuilder newQuicServerCodecBuilder() { + return configure(new QuicServerCodecBuilder()); + } + + /** + * Returns a new {@link QuicClientCodecBuilder} that has preconfigured for HTTP3. + * + * @return a pre-configured builder for HTTP3. + */ + public static QuicClientCodecBuilder newQuicClientCodecBuilder() { + return configure(new QuicClientCodecBuilder()); + } + + private static > T configure(T builder) { + return builder.initialMaxStreamsUnidirectional(MIN_INITIAL_MAX_STREAMS_UNIDIRECTIONAL) + .initialMaxStreamDataUnidirectional(MIN_INITIAL_MAX_STREAM_DATA_UNIDIRECTIONAL); + } + + private static Http3RequestStreamInitializer requestStreamInitializer(ChannelHandler handler) { + if (handler instanceof Http3RequestStreamInitializer) { + return (Http3RequestStreamInitializer) handler; + } + return new Http3RequestStreamInitializer() { + @Override + protected void initRequestStream(QuicStreamChannel ch) { + ch.pipeline().addLast(handler); + } + }; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CancelPushFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CancelPushFrame.java new file mode 100644 index 0000000..caf3373 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CancelPushFrame.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See CANCEL_PUSH. + */ +public interface Http3CancelPushFrame extends Http3ControlStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE; + } + + /** + * Returns the push id that identifies the server push that is being cancelled. + * + * @return the id. + */ + long id(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ClientConnectionHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ClientConnectionHandler.java new file mode 100644 index 0000000..1056fd0 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ClientConnectionHandler.java @@ -0,0 +1,81 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.quic.QuicStreamChannel; + +import java.util.function.LongFunction; + +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; + +public final class Http3ClientConnectionHandler extends Http3ConnectionHandler { + + private final LongFunction pushStreamHandlerFactory; + + /** + * Create a new instance. + */ + public Http3ClientConnectionHandler() { + this(null, null, null, null, true); + } + + /** + * Create a new instance. + * + * @param inboundControlStreamHandler the {@link ChannelHandler} which will be notified about + * {@link Http3RequestStreamFrame}s or {@code null} if the user is not + * interested in these. + * @param pushStreamHandlerFactory the {@link LongFunction} that will provide a custom + * {@link ChannelHandler} for push streams {@code null} if no special + * handling should be done. When present, push ID will be passed as an + * argument to the {@link LongFunction}. + * @param unknownInboundStreamHandlerFactory the {@link LongFunction} that will provide a custom + * {@link ChannelHandler} for unknown inbound stream types or + * {@code null} if no special handling should be done. + * @param localSettings the local {@link Http3SettingsFrame} that should be sent to the + * remote peer or {@code null} if the default settings should be used. + * @param disableQpackDynamicTable If QPACK dynamic table should be disabled. + */ + public Http3ClientConnectionHandler(ChannelHandler inboundControlStreamHandler, + LongFunction pushStreamHandlerFactory, + LongFunction unknownInboundStreamHandlerFactory, + Http3SettingsFrame localSettings, boolean disableQpackDynamicTable) { + super(false, inboundControlStreamHandler, unknownInboundStreamHandlerFactory, localSettings, + disableQpackDynamicTable); + this.pushStreamHandlerFactory = pushStreamHandlerFactory; + } + + @Override + void initBidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel channel) { + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.1 + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Server initiated bidirectional streams are not allowed", true); + } + + @Override + void initUnidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel streamChannel) { + final Long maxTableCapacity = remoteControlStreamHandler.localSettings() + .get(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY); + streamChannel.pipeline().addLast( + new Http3UnidirectionalStreamInboundClientHandler(codecFactory, + localControlStreamHandler, remoteControlStreamHandler, + unknownInboundStreamHandlerFactory, pushStreamHandlerFactory, + () -> new QpackEncoderHandler(maxTableCapacity, qpackDecoder), + () -> new QpackDecoderHandler(qpackEncoder))); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CodecUtils.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CodecUtils.java new file mode 100644 index 0000000..bdb9c60 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3CodecUtils.java @@ -0,0 +1,331 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.CharsetUtil; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.StringUtil; + +import static io.netty.channel.ChannelFutureListener.CLOSE_ON_FAILURE; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_INTERNAL_ERROR; +import static io.netty.handler.codec.quic.QuicStreamType.UNIDIRECTIONAL; + +final class Http3CodecUtils { + + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.8 + static final long MIN_RESERVED_FRAME_TYPE = 0x1f * 1 + 0x21; + static final long MAX_RESERVED_FRAME_TYPE = 0x1f * (long) Integer.MAX_VALUE + 0x21; + + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2 + static final int HTTP3_DATA_FRAME_TYPE = 0x0; + static final int HTTP3_HEADERS_FRAME_TYPE = 0x1; + static final int HTTP3_CANCEL_PUSH_FRAME_TYPE = 0x3; + static final int HTTP3_SETTINGS_FRAME_TYPE = 0x4; + static final int HTTP3_PUSH_PROMISE_FRAME_TYPE = 0x5; + static final int HTTP3_GO_AWAY_FRAME_TYPE = 0x7; + static final int HTTP3_MAX_PUSH_ID_FRAME_TYPE = 0xd; + + static final int HTTP3_CANCEL_PUSH_FRAME_MAX_LEN = 8; + static final int HTTP3_SETTINGS_FRAME_MAX_LEN = 256; + static final int HTTP3_GO_AWAY_FRAME_MAX_LEN = 8; + static final int HTTP3_MAX_PUSH_ID_FRAME_MAX_LEN = 8; + + static final int HTTP3_CONTROL_STREAM_TYPE = 0x00; + static final int HTTP3_PUSH_STREAM_TYPE = 0x01; + static final int HTTP3_QPACK_ENCODER_STREAM_TYPE = 0x02; + static final int HTTP3_QPACK_DECODER_STREAM_TYPE = 0x03; + + private Http3CodecUtils() { } + + static long checkIsReservedFrameType(long type) { + return ObjectUtil.checkInRange(type, MIN_RESERVED_FRAME_TYPE, MAX_RESERVED_FRAME_TYPE, "type"); + } + + static boolean isReservedFrameType(long type) { + return type >= MIN_RESERVED_FRAME_TYPE && type <= MAX_RESERVED_FRAME_TYPE; + } + + /** + * Checks if the passed {@link QuicStreamChannel} is a server initiated stream. + * + * @param channel to check. + * @return {@code true} if the passed {@link QuicStreamChannel} is a server initiated stream. + */ + static boolean isServerInitiatedQuicStream(QuicStreamChannel channel) { + // Server streams have odd stream id + // https://www.rfc-editor.org/rfc/rfc9000.html#name-stream-types-and-identifier + return channel.streamId() % 2 != 0; + } + + static boolean isReservedHttp2FrameType(long type) { + switch ((int) type) { + // Reserved types that were used in HTTP/2 + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-11.2.1 + case 0x2: + case 0x6: + case 0x8: + case 0x9: + return true; + default: + return false; + } + } + + static boolean isReservedHttp2Setting(long key) { + switch ((int) key) { + // Reserved types that were used in HTTP/2 + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-11.2.2 + case 0x2: + case 0x3: + case 0x4: + case 0x5: + return true; + default: + return false; + } + } + + /** + * Returns the number of bytes needed to encode the variable length integer. + * + * See + * Variable-Length Integer Encoding. + */ + static int numBytesForVariableLengthInteger(long value) { + if (value <= 63) { + return 1; + } + if (value <= 16383) { + return 2; + } + if (value <= 1073741823) { + return 4; + } + if (value <= 4611686018427387903L) { + return 8; + } + throw new IllegalArgumentException(); + } + + /** + * Write the variable length integer into the {@link ByteBuf}. + * + * See + * Variable-Length Integer Encoding. + */ + static void writeVariableLengthInteger(ByteBuf out, long value) { + int numBytes = numBytesForVariableLengthInteger(value); + writeVariableLengthInteger(out, value, numBytes); + } + + /** + * Write the variable length integer into the {@link ByteBuf}. + * + * See + * Variable-Length Integer Encoding. + */ + static void writeVariableLengthInteger(ByteBuf out, long value, int numBytes) { + int writerIndex = out.writerIndex(); + switch (numBytes) { + case 1: + out.writeByte((byte) value); + break; + case 2: + out.writeShort((short) value); + encodeLengthIntoBuffer(out, writerIndex, (byte) 0x40); + break; + case 4: + out.writeInt((int) value); + encodeLengthIntoBuffer(out, writerIndex, (byte) 0x80); + break; + case 8: + out.writeLong(value); + encodeLengthIntoBuffer(out, writerIndex, (byte) 0xc0); + break; + default: + throw new IllegalArgumentException(); + } + } + + private static void encodeLengthIntoBuffer(ByteBuf out, int index, byte b) { + out.setByte(index, out.getByte(index) | b); + } + + /** + * Read the variable length integer from the {@link ByteBuf}. + * + * See + * Variable-Length Integer Encoding + */ + static long readVariableLengthInteger(ByteBuf in, int len) { + switch (len) { + case 1: + return in.readUnsignedByte(); + case 2: + return in.readUnsignedShort() & 0x3fff; + case 4: + return in.readUnsignedInt() & 0x3fffffff; + case 8: + return in.readLong() & 0x3fffffffffffffffL; + default: + throw new IllegalArgumentException(); + } + } + + /** + * Returns the number of bytes that were encoded into the byte for a variable length integer to read. + * + * See + * Variable-Length Integer Encoding + */ + static int numBytesForVariableLengthInteger(byte b) { + byte val = (byte) (b >> 6); + if ((val & 1) != 0) { + if ((val & 2) != 0) { + return 8; + } + return 2; + } + if ((val & 2) != 0) { + return 4; + } + return 1; + } + + static void criticalStreamClosed(ChannelHandlerContext ctx) { + if (ctx.channel().parent().isActive()) { + // Stream was closed while the parent channel is still active + Http3CodecUtils.connectionError( + ctx, Http3ErrorCode.H3_CLOSED_CRITICAL_STREAM, "Critical stream closed.", false); + } + } + + /** + * A connection-error should be handled as defined in the HTTP3 spec. + * @param ctx the {@link ChannelHandlerContext} of the handle that handles it. + * @param exception the {@link Http3Exception} that caused the error. + * @param fireException {@code true} if we should also fire the {@link Http3Exception} through the pipeline. + */ + static void connectionError(ChannelHandlerContext ctx, Http3Exception exception, boolean fireException) { + if (fireException) { + ctx.fireExceptionCaught(exception); + } + connectionError(ctx.channel(), exception.errorCode(), exception.getMessage()); + } + + /** + * A connection-error should be handled as defined in the HTTP3 spec. + * + * @param ctx the {@link ChannelHandlerContext} of the handle that handles it. + * @param errorCode the {@link Http3ErrorCode} that caused the error. + * @param msg the message that should be used as reason for the error, may be {@code null}. + * @param fireException {@code true} if we should also fire the {@link Http3Exception} through the pipeline. + */ + static void connectionError(ChannelHandlerContext ctx, Http3ErrorCode errorCode, + String msg, boolean fireException) { + if (fireException) { + ctx.fireExceptionCaught(new Http3Exception(errorCode, msg)); + } + connectionError(ctx.channel(), errorCode, msg); + } + + /** + * Closes the channel if the passed {@link ChannelFuture} fails or has already failed. + * + * @param future {@link ChannelFuture} which if fails will close the channel. + */ + static void closeOnFailure(ChannelFuture future) { + if (future.isDone() && !future.isSuccess()) { + future.channel().close(); + return; + } + future.addListener(CLOSE_ON_FAILURE); + } + + /** + * A connection-error should be handled as defined in the HTTP3 spec. + * + * @param channel the {@link Channel} on which error has occured. + * @param errorCode the {@link Http3ErrorCode} that caused the error. + * @param msg the message that should be used as reason for the error, may be {@code null}. + */ + static void connectionError(Channel channel, Http3ErrorCode errorCode, String msg) { + final QuicChannel quicChannel; + + if (channel instanceof QuicChannel) { + quicChannel = (QuicChannel) channel; + } else { + quicChannel = (QuicChannel) channel.parent(); + } + final ByteBuf buffer; + if (msg != null) { + // As we call an operation on the parent we should also use the parents allocator to allocate the buffer. + buffer = quicChannel.alloc().buffer(); + buffer.writeCharSequence(msg, CharsetUtil.US_ASCII); + } else { + buffer = Unpooled.EMPTY_BUFFER; + } + quicChannel.close(true, errorCode.code, buffer); + } + + static void streamError(ChannelHandlerContext ctx, Http3ErrorCode errorCode) { + ((QuicStreamChannel) ctx.channel()).shutdownOutput(errorCode.code); + } + + static void readIfNoAutoRead(ChannelHandlerContext ctx) { + if (!ctx.channel().config().isAutoRead()) { + ctx.read(); + } + } + + /** + * Retrieves {@link Http3ConnectionHandler} from the passed {@link QuicChannel} pipeline or closes the connection if + * none available. + * + * @param ch for which the {@link Http3ConnectionHandler} is to be retrieved. + * @return {@link Http3ConnectionHandler} if available, else close the connection and return {@code null}. + */ + static Http3ConnectionHandler getConnectionHandlerOrClose(QuicChannel ch) { + Http3ConnectionHandler connectionHandler = ch.pipeline().get(Http3ConnectionHandler.class); + if (connectionHandler == null) { + connectionError(ch, H3_INTERNAL_ERROR, "Couldn't obtain the " + + StringUtil.simpleClassName(Http3ConnectionHandler.class) + " of the parent Channel"); + return null; + } + return connectionHandler; + } + + /** + * Verify if the passed {@link QuicStreamChannel} is a {@link QuicStreamType#UNIDIRECTIONAL} QUIC stream. + * + * @param ch to verify + * @throws IllegalArgumentException if the passed {@link QuicStreamChannel} is not a + * {@link QuicStreamType#UNIDIRECTIONAL} QUIC stream. + */ + static void verifyIsUnidirectional(QuicStreamChannel ch) { + if (ch.type() != UNIDIRECTIONAL) { + throw new IllegalArgumentException("Invalid stream type: " + ch.type() + " for stream: " + ch.streamId()); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ConnectionHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ConnectionHandler.java new file mode 100644 index 0000000..ff73cc9 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ConnectionHandler.java @@ -0,0 +1,203 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.codec.http3.Http3FrameCodec.Http3FrameCodecFactory; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; + +import java.util.function.LongFunction; + +import static io.netty.handler.codec.http3.Http3RequestStreamCodecState.NO_STATE; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; +import static java.lang.Math.toIntExact; + +/** + * Handler that handles HTTP3 connections. + */ +public abstract class Http3ConnectionHandler extends ChannelInboundHandlerAdapter { + final Http3FrameCodecFactory codecFactory; + final LongFunction unknownInboundStreamHandlerFactory; + final boolean disableQpackDynamicTable; + final Http3ControlStreamInboundHandler localControlStreamHandler; + final Http3ControlStreamOutboundHandler remoteControlStreamHandler; + final QpackDecoder qpackDecoder; + final QpackEncoder qpackEncoder; + private boolean controlStreamCreationInProgress; + + /** + * Create a new instance. + * @param server {@code true} if server-side, {@code false} otherwise. + * @param inboundControlStreamHandler the {@link ChannelHandler} which will be notified about + * {@link Http3RequestStreamFrame}s or {@code null} if the user is not + * interested in these. + * @param unknownInboundStreamHandlerFactory the {@link LongFunction} that will provide a custom + * {@link ChannelHandler} for unknown inbound stream types or + * {@code null} if no special handling should be done. + * @param localSettings the local {@link Http3SettingsFrame} that should be sent to the + * remote peer or {@code null} if the default settings should be used. + * @param disableQpackDynamicTable If QPACK dynamic table should be disabled. + */ + Http3ConnectionHandler(boolean server, ChannelHandler inboundControlStreamHandler, + LongFunction unknownInboundStreamHandlerFactory, + Http3SettingsFrame localSettings, boolean disableQpackDynamicTable) { + this.unknownInboundStreamHandlerFactory = unknownInboundStreamHandlerFactory; + this.disableQpackDynamicTable = disableQpackDynamicTable; + if (localSettings == null) { + localSettings = new DefaultHttp3SettingsFrame(); + } else { + localSettings = DefaultHttp3SettingsFrame.copyOf(localSettings); + } + Long maxFieldSectionSize = localSettings.get(Http3SettingsFrame.HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE); + if (maxFieldSectionSize == null) { + // Just use the maximum value we can represent via a Long. + maxFieldSectionSize = Long.MAX_VALUE; + } + long maxTableCapacity = localSettings.getOrDefault(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, 0); + int maxBlockedStreams = toIntExact(localSettings.getOrDefault(HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS, 0)); + qpackDecoder = new QpackDecoder(maxTableCapacity, maxBlockedStreams); + qpackEncoder = new QpackEncoder(); + codecFactory = Http3FrameCodec.newFactory(qpackDecoder, maxFieldSectionSize, qpackEncoder); + remoteControlStreamHandler = new Http3ControlStreamOutboundHandler(server, localSettings, + codecFactory.newCodec(Http3FrameTypeValidator.NO_VALIDATION, NO_STATE, NO_STATE)); + localControlStreamHandler = new Http3ControlStreamInboundHandler(server, inboundControlStreamHandler, + qpackEncoder, remoteControlStreamHandler); + } + + private void createControlStreamIfNeeded(ChannelHandlerContext ctx) { + if (!controlStreamCreationInProgress && Http3.getLocalControlStream(ctx.channel()) == null) { + controlStreamCreationInProgress = true; + QuicChannel channel = (QuicChannel) ctx.channel(); + // Once the channel became active we need to create an unidirectional stream and write the + // Http3SettingsFrame to it. This needs to be the first frame on this stream. + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1. + channel.createStream(QuicStreamType.UNIDIRECTIONAL, remoteControlStreamHandler) + .addListener(f -> { + if (!f.isSuccess()) { + ctx.fireExceptionCaught(new Http3Exception(Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Unable to open control stream", f.cause())); + ctx.close(); + } else { + Http3.setLocalControlStream(channel, (QuicStreamChannel) f.getNow()); + } + }); + } + } + + /** + * Returns {@code true} if we received a GOAWAY frame from the remote peer. + * @return {@code true} if we received the frame, {@code false} otherwise. + */ + public final boolean isGoAwayReceived() { + return localControlStreamHandler.isGoAwayReceived(); + } + + /** + * Returns a new codec that will encode and decode {@link Http3Frame}s for this HTTP/3 connection. + * + * @return a new codec. + */ + public final ChannelHandler newCodec(Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + return codecFactory.newCodec(Http3RequestStreamFrameTypeValidator.INSTANCE, encodeState, decodeState); + } + + final ChannelHandler newRequestStreamValidationHandler( + QuicStreamChannel forStream, Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + final QpackAttributes qpackAttributes = Http3.getQpackAttributes(forStream.parent()); + assert qpackAttributes != null; + if (localControlStreamHandler.isServer()) { + return Http3RequestStreamValidationHandler.newServerValidator(qpackAttributes, qpackDecoder, + encodeState, decodeState); + } + return Http3RequestStreamValidationHandler.newClientValidator(localControlStreamHandler::isGoAwayReceived, + qpackAttributes, qpackDecoder, encodeState, decodeState); + } + + final ChannelHandler newPushStreamValidationHandler(QuicStreamChannel forStream, + Http3RequestStreamCodecState decodeState) { + if (localControlStreamHandler.isServer()) { + return Http3PushStreamServerValidationHandler.INSTANCE; + } + final QpackAttributes qpackAttributes = Http3.getQpackAttributes(forStream.parent()); + assert qpackAttributes != null; + return new Http3PushStreamClientValidationHandler(qpackAttributes, qpackDecoder, decodeState); + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + QuicChannel channel = (QuicChannel) ctx.channel(); + Http3.setQpackAttributes(channel, new QpackAttributes(channel, disableQpackDynamicTable)); + if (ctx.channel().isActive()) { + createControlStreamIfNeeded(ctx); + } + } + + @Override + public void channelActive(ChannelHandlerContext ctx) { + createControlStreamIfNeeded(ctx); + + ctx.fireChannelActive(); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + if (msg instanceof QuicStreamChannel) { + QuicStreamChannel channel = (QuicStreamChannel) msg; + switch (channel.type()) { + case BIDIRECTIONAL: + initBidirectionalStream(ctx, channel); + break; + case UNIDIRECTIONAL: + initUnidirectionalStream(ctx, channel); + break; + default: + throw new Error(); + } + } + ctx.fireChannelRead(msg); + } + + /** + * Called when an bidirectional stream is opened from the remote-peer. + * + * @param ctx the {@link ChannelHandlerContext} of the parent {@link QuicChannel}. + * @param streamChannel the {@link QuicStreamChannel}. + */ + abstract void initBidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel streamChannel); + + /** + * Called when an unidirectional stream is opened from the remote-peer. + * + * @param ctx the {@link ChannelHandlerContext} of the parent {@link QuicChannel}. + * @param streamChannel the {@link QuicStreamChannel}. + */ + abstract void initUnidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel streamChannel); + + /** + * Always returns {@code false} as it keeps state. + */ + @Override + public boolean isSharable() { + return false; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrame.java new file mode 100644 index 0000000..7e55bf1 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrame.java @@ -0,0 +1,23 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Marker interface for frames that can be sent and received on a + * HTTP3 control stream. + */ +public interface Http3ControlStreamFrame extends Http3Frame { +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidator.java new file mode 100644 index 0000000..0f44dc5 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidator.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Validate that the frame type is valid for a control stream. + */ +final class Http3ControlStreamFrameTypeValidator implements Http3FrameTypeValidator { + + static final Http3ControlStreamFrameTypeValidator INSTANCE = new Http3ControlStreamFrameTypeValidator(); + + private Http3ControlStreamFrameTypeValidator() { } + + @Override + public void validate(long type, boolean first) throws Http3Exception { + switch ((int) type) { + case Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE: + case Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE: + case Http3CodecUtils.HTTP3_DATA_FRAME_TYPE: + if (first) { + throw new Http3Exception(Http3ErrorCode.H3_MISSING_SETTINGS, + "Missing settings frame."); + } + throw new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Unexpected frame type '" + type + "' received"); + default: + break; + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java new file mode 100644 index 0000000..97bddfa --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandler.java @@ -0,0 +1,319 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; + +import java.nio.channels.ClosedChannelException; + +import static io.netty.handler.codec.http3.Http3CodecUtils.closeOnFailure; +import static io.netty.handler.codec.http3.Http3CodecUtils.connectionError; +import static io.netty.handler.codec.http3.Http3CodecUtils.criticalStreamClosed; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_FRAME_UNEXPECTED; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_ID_ERROR; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_MISSING_SETTINGS; +import static io.netty.handler.codec.http3.Http3ErrorCode.QPACK_ENCODER_STREAM_ERROR; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; +import static io.netty.handler.codec.http3.QpackUtil.toIntOrThrow; +import static io.netty.util.internal.ThrowableUtil.unknownStackTrace; + +final class Http3ControlStreamInboundHandler extends Http3FrameTypeInboundValidationHandler { + final boolean server; + private final ChannelHandler controlFrameHandler; + private final QpackEncoder qpackEncoder; + private final Http3ControlStreamOutboundHandler remoteControlStreamHandler; + private boolean firstFrameRead; + private Long receivedGoawayId; + private Long receivedMaxPushId; + + Http3ControlStreamInboundHandler(boolean server, ChannelHandler controlFrameHandler, QpackEncoder qpackEncoder, + Http3ControlStreamOutboundHandler remoteControlStreamHandler) { + super(Http3ControlStreamFrame.class); + this.server = server; + this.controlFrameHandler = controlFrameHandler; + this.qpackEncoder = qpackEncoder; + this.remoteControlStreamHandler = remoteControlStreamHandler; + } + + boolean isServer() { + return server; + } + + boolean isGoAwayReceived() { + return receivedGoawayId != null; + } + + long maxPushIdReceived() { + return receivedMaxPushId == null ? -1 : receivedMaxPushId; + } + + private boolean forwardControlFrames() { + return controlFrameHandler != null; + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + super.handlerAdded(ctx); + // The user want's to be notified about control frames, add the handler to the pipeline. + if (controlFrameHandler != null) { + ctx.pipeline().addLast(controlFrameHandler); + } + } + + @Override + void readFrameDiscarded(ChannelHandlerContext ctx, Object discardedFrame) { + if (!firstFrameRead && !(discardedFrame instanceof Http3SettingsFrame)) { + connectionError(ctx, Http3ErrorCode.H3_MISSING_SETTINGS, "Missing settings frame.", forwardControlFrames()); + } + } + + @Override + void channelRead(ChannelHandlerContext ctx, Http3ControlStreamFrame frame) throws QpackException { + boolean isSettingsFrame = frame instanceof Http3SettingsFrame; + if (!firstFrameRead && !isSettingsFrame) { + connectionError(ctx, H3_MISSING_SETTINGS, "Missing settings frame.", forwardControlFrames()); + ReferenceCountUtil.release(frame); + return; + } + if (firstFrameRead && isSettingsFrame) { + connectionError(ctx, H3_FRAME_UNEXPECTED, "Second settings frame received.", forwardControlFrames()); + ReferenceCountUtil.release(frame); + return; + } + firstFrameRead = true; + + final boolean valid; + if (isSettingsFrame) { + valid = handleHttp3SettingsFrame(ctx, (Http3SettingsFrame) frame); + } else if (frame instanceof Http3GoAwayFrame) { + valid = handleHttp3GoAwayFrame(ctx, (Http3GoAwayFrame) frame); + } else if (frame instanceof Http3MaxPushIdFrame) { + valid = handleHttp3MaxPushIdFrame(ctx, (Http3MaxPushIdFrame) frame); + } else if (frame instanceof Http3CancelPushFrame) { + valid = handleHttp3CancelPushFrame(ctx, (Http3CancelPushFrame) frame); + } else { + // We don't need to do any special handling for Http3UnknownFrames as we either pass these to the next# + // handler or release these directly. + assert frame instanceof Http3UnknownFrame; + valid = true; + } + + if (!valid || controlFrameHandler == null) { + ReferenceCountUtil.release(frame); + return; + } + + // The user did specify ChannelHandler that should be notified about control stream frames. + // Let's forward the frame so the user can do something with it. + ctx.fireChannelRead(frame); + } + + private boolean handleHttp3SettingsFrame(ChannelHandlerContext ctx, Http3SettingsFrame settingsFrame) + throws QpackException { + final QuicChannel quicChannel = (QuicChannel) ctx.channel().parent(); + final QpackAttributes qpackAttributes = Http3.getQpackAttributes(quicChannel); + assert qpackAttributes != null; + final GenericFutureListener> closeOnFailure = future -> { + if (!future.isSuccess()) { + criticalStreamClosed(ctx); + } + }; + if (qpackAttributes.dynamicTableDisabled()) { + qpackEncoder.configureDynamicTable(qpackAttributes, 0, 0); + return true; + } + quicChannel.createStream(QuicStreamType.UNIDIRECTIONAL, + new QPackEncoderStreamInitializer(qpackEncoder, qpackAttributes, + settingsFrame.getOrDefault(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, 0), + settingsFrame.getOrDefault(HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS, 0))) + .addListener(closeOnFailure); + quicChannel.createStream(QuicStreamType.UNIDIRECTIONAL, new QPackDecoderStreamInitializer(qpackAttributes)) + .addListener(closeOnFailure); + return true; + } + + private boolean handleHttp3GoAwayFrame(ChannelHandlerContext ctx, Http3GoAwayFrame goAwayFrame) { + long id = goAwayFrame.id(); + if (!server && id % 4 != 0) { + connectionError(ctx, H3_FRAME_UNEXPECTED, "GOAWAY received with ID of non-request stream.", + forwardControlFrames()); + return false; + } + if (receivedGoawayId != null && id > receivedGoawayId) { + connectionError(ctx, H3_ID_ERROR, + "GOAWAY received with ID larger than previously received.", forwardControlFrames()); + return false; + } + receivedGoawayId = id; + return true; + } + + private boolean handleHttp3MaxPushIdFrame(ChannelHandlerContext ctx, Http3MaxPushIdFrame frame) { + long id = frame.id(); + if (!server) { + connectionError(ctx, H3_FRAME_UNEXPECTED, "MAX_PUSH_ID received by client.", + forwardControlFrames()); + return false; + } + if (receivedMaxPushId != null && id < receivedMaxPushId) { + connectionError(ctx, H3_ID_ERROR, "MAX_PUSH_ID reduced limit.", forwardControlFrames()); + return false; + } + receivedMaxPushId = id; + return true; + } + + private boolean handleHttp3CancelPushFrame(ChannelHandlerContext ctx, Http3CancelPushFrame cancelPushFrame) { + final Long maxPushId = server ? receivedMaxPushId : remoteControlStreamHandler.sentMaxPushId(); + if (maxPushId == null || maxPushId < cancelPushFrame.id()) { + connectionError(ctx, H3_ID_ERROR, "CANCEL_PUSH received with an ID greater than MAX_PUSH_ID.", + forwardControlFrames()); + return false; + } + return true; + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.fireChannelReadComplete(); + + // control streams should always be processed, no matter what the user is doing in terms of + // configuration and AUTO_READ. + Http3CodecUtils.readIfNoAutoRead(ctx); + } + + @Override + public boolean isSharable() { + // Not sharable as it keeps state. + return false; + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof ChannelInputShutdownEvent) { + // See https://www.ietf.org/archive/id/draft-ietf-quic-qpack-19.html#section-4.2 + criticalStreamClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + private abstract static class AbstractQPackStreamInitializer extends ChannelInboundHandlerAdapter { + private final int streamType; + protected final QpackAttributes attributes; + + AbstractQPackStreamInitializer(int streamType, QpackAttributes attributes) { + this.streamType = streamType; + this.attributes = attributes; + } + + @Override + public final void channelActive(ChannelHandlerContext ctx) { + // We need to write the streamType into the stream before doing anything else. + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1 + // Just allocate 8 bytes which would be the max needed. + ByteBuf buffer = ctx.alloc().buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, streamType); + closeOnFailure(ctx.writeAndFlush(buffer)); + streamAvailable(ctx); + ctx.fireChannelActive(); + } + + @Override + public final void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + streamClosed(ctx); + if (evt instanceof ChannelInputShutdownEvent) { + // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#section-4.2 + criticalStreamClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) { + streamClosed(ctx); + // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#section-4.2 + criticalStreamClosed(ctx); + ctx.fireChannelInactive(); + } + + protected abstract void streamAvailable(ChannelHandlerContext ctx); + + protected abstract void streamClosed(ChannelHandlerContext ctx); + } + + private static final class QPackEncoderStreamInitializer extends AbstractQPackStreamInitializer { + private static final ClosedChannelException ENCODER_STREAM_INACTIVE = + unknownStackTrace(new ClosedChannelException(), ClosedChannelException.class, "streamClosed()"); + private final QpackEncoder encoder; + private final long maxTableCapacity; + private final long blockedStreams; + + QPackEncoderStreamInitializer(QpackEncoder encoder, QpackAttributes attributes, long maxTableCapacity, + long blockedStreams) { + super(Http3CodecUtils.HTTP3_QPACK_ENCODER_STREAM_TYPE, attributes); + this.encoder = encoder; + this.maxTableCapacity = maxTableCapacity; + this.blockedStreams = blockedStreams; + } + + @Override + protected void streamAvailable(ChannelHandlerContext ctx) { + final QuicStreamChannel stream = (QuicStreamChannel) ctx.channel(); + attributes.encoderStream(stream); + + try { + encoder.configureDynamicTable(attributes, maxTableCapacity, toIntOrThrow(blockedStreams)); + } catch (QpackException e) { + connectionError(ctx, new Http3Exception(QPACK_ENCODER_STREAM_ERROR, + "Dynamic table configuration failed.", e), true); + } + } + + @Override + protected void streamClosed(ChannelHandlerContext ctx) { + attributes.encoderStreamInactive(ENCODER_STREAM_INACTIVE); + } + } + + private static final class QPackDecoderStreamInitializer extends AbstractQPackStreamInitializer { + private static final ClosedChannelException DECODER_STREAM_INACTIVE = + unknownStackTrace(new ClosedChannelException(), ClosedChannelException.class, "streamClosed()"); + private QPackDecoderStreamInitializer(QpackAttributes attributes) { + super(Http3CodecUtils.HTTP3_QPACK_DECODER_STREAM_TYPE, attributes); + } + + @Override + protected void streamAvailable(ChannelHandlerContext ctx) { + attributes.decoderStream((QuicStreamChannel) ctx.channel()); + } + + @Override + protected void streamClosed(ChannelHandlerContext ctx) { + attributes.decoderStreamInactive(DECODER_STREAM_INACTIVE); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandler.java new file mode 100644 index 0000000..a2b39f0 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandler.java @@ -0,0 +1,145 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.internal.ObjectUtil; + +import static io.netty.handler.codec.http3.Http3CodecUtils.closeOnFailure; + +final class Http3ControlStreamOutboundHandler + extends Http3FrameTypeDuplexValidationHandler { + private final boolean server; + private final Http3SettingsFrame localSettings; + private final ChannelHandler codec; + private Long sentMaxPushId; + private Long sendGoAwayId; + + Http3ControlStreamOutboundHandler(boolean server, Http3SettingsFrame localSettings, ChannelHandler codec) { + super(Http3ControlStreamFrame.class); + this.server = server; + this.localSettings = ObjectUtil.checkNotNull(localSettings, "localSettings"); + this.codec = ObjectUtil.checkNotNull(codec, "codec"); + } + + /** + * Returns the local settings that were sent on the control stream. + * + * @return the local {@link Http3SettingsFrame}. + */ + Http3SettingsFrame localSettings() { + return localSettings; + } + + /** + * Returns the last id that was sent in a MAX_PUSH_ID frame or {@code null} if none was sent yet. + * + * @return the id. + */ + Long sentMaxPushId() { + return sentMaxPushId; + } + + @Override + public void channelActive(ChannelHandlerContext ctx) { + // We need to write 0x00 into the stream before doing anything else. + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1 + // Just allocate 8 bytes which would be the max needed. + ByteBuf buffer = ctx.alloc().buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, Http3CodecUtils.HTTP3_CONTROL_STREAM_TYPE); + ctx.write(buffer); + // Add the encoder and decoder in the pipeline so we can handle Http3Frames. This needs to happen after + // we did write the type via a ByteBuf. + ctx.pipeline().addFirst(codec); + // If writing of the local settings fails let's just teardown the connection. + closeOnFailure(ctx.writeAndFlush(DefaultHttp3SettingsFrame.copyOf(localSettings))); + + ctx.fireChannelActive(); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof ChannelInputShutdownEvent) { + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1 + Http3CodecUtils.criticalStreamClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) { + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1 + Http3CodecUtils.criticalStreamClosed(ctx); + ctx.fireChannelInactive(); + } + + @Override + void write(ChannelHandlerContext ctx, Http3ControlStreamFrame msg, ChannelPromise promise) { + if (msg instanceof Http3MaxPushIdFrame && !handleHttp3MaxPushIdFrame(promise, (Http3MaxPushIdFrame) msg)) { + ReferenceCountUtil.release(msg); + return; + } else if (msg instanceof Http3GoAwayFrame && !handleHttp3GoAwayFrame(promise, (Http3GoAwayFrame) msg)) { + ReferenceCountUtil.release(msg); + return; + } + + ctx.write(msg, promise); + } + + private boolean handleHttp3MaxPushIdFrame(ChannelPromise promise, Http3MaxPushIdFrame maxPushIdFrame) { + long id = maxPushIdFrame.id(); + + // See https://datatracker.ietf.org/doc/html/draft-ietf-quic-http-32#section-7.2.7 + if (sentMaxPushId != null && id < sentMaxPushId) { + promise.setFailure(new Http3Exception(Http3ErrorCode.H3_ID_ERROR, "MAX_PUSH_ID reduced limit.")); + return false; + } + + sentMaxPushId = maxPushIdFrame.id(); + return true; + } + + private boolean handleHttp3GoAwayFrame(ChannelPromise promise, Http3GoAwayFrame goAwayFrame) { + long id = goAwayFrame.id(); + + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-5.2 + if (server && id % 4 != 0) { + promise.setFailure(new Http3Exception(Http3ErrorCode.H3_ID_ERROR, + "GOAWAY id not valid : " + id)); + return false; + } + + if (sendGoAwayId != null && id > sendGoAwayId) { + promise.setFailure(new Http3Exception(Http3ErrorCode.H3_ID_ERROR, + "GOAWAY id is bigger then the last sent: " + id + " > " + sendGoAwayId)); + return false; + } + + sendGoAwayId = id; + return true; + } + + @Override + public boolean isSharable() { + // This handle keeps state so we cant reuse it. + return false; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3DataFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3DataFrame.java new file mode 100644 index 0000000..e303701 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3DataFrame.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufHolder; + +/** + * See DATA. + */ +public interface Http3DataFrame extends ByteBufHolder, Http3RequestStreamFrame, Http3PushStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_DATA_FRAME_TYPE; + } + + @Override + Http3DataFrame copy(); + + @Override + Http3DataFrame duplicate(); + + @Override + Http3DataFrame retainedDuplicate(); + + @Override + Http3DataFrame replace(ByteBuf content); + + @Override + Http3DataFrame retain(); + + @Override + Http3DataFrame retain(int increment); + + @Override + Http3DataFrame touch(); + + @Override + Http3DataFrame touch(Object hint); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ErrorCode.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ErrorCode.java new file mode 100644 index 0000000..c079ad2 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ErrorCode.java @@ -0,0 +1,129 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Different HTTP3 error codes. + */ +public enum Http3ErrorCode { + + /** + * No error. This is used when the connection or stream needs to be closed, but there is no error to signal. + */ + H3_NO_ERROR(0x100), + + /** + * Peer violated protocol requirements in a way that does not match a more specific error code, + * or endpoint declines to use the more specific error code. + */ + H3_GENERAL_PROTOCOL_ERROR(0x101), + + /** + * An internal error has occurred in the HTTP stack. + */ + H3_INTERNAL_ERROR(0x102), + + /** + * The endpoint detected that its peer created a stream that it will not accept. + */ + H3_STREAM_CREATION_ERROR(0x103), + + /** + * A stream required by the HTTP/3 connection was closed or reset. + */ + H3_CLOSED_CRITICAL_STREAM(0x104), + + /** + * A frame was received that was not permitted in the current state or on the current stream. + */ + H3_FRAME_UNEXPECTED(0x105), + + /** + * A frame that fails to satisfy layout requirements or with an invalid size was received. + */ + H3_FRAME_ERROR(0x106), + + /** + * The endpoint detected that its peer is exhibiting a behavior that might be generating excessive load. + */ + H3_EXCESSIVE_LOAD(0x107), + + /** + * A Stream ID or Push ID was used incorrectly, such as exceeding a limit, reducing a limit, or being reused. + */ + H3_ID_ERROR(0x108), + + /** + * An endpoint detected an error in the payload of a SETTINGS frame. + */ + H3_SETTINGS_ERROR(0x109), + + /** + * No SETTINGS frame was received at the beginning of the control stream. + */ + H3_MISSING_SETTINGS(0x10a), + + /** + * A server rejected a request without performing any application processing. + */ + H3_REQUEST_REJECTED(0x10b), + + /** + * The request or its response (including pushed response) is cancelled. + */ + H3_REQUEST_CANCELLED(0x10c), + + /** + * The client's stream terminated without containing a fully-formed request. + */ + H3_REQUEST_INCOMPLETE(0x10d), + + /** + * An HTTP message was malformed and cannot be processed. + */ + H3_MESSAGE_ERROR(0x10e), + + /** + * The TCP connection established in response to a CONNECT request was reset or abnormally closed. + */ + H3_CONNECT_ERROR(0x10f), + + /** + * The requested operation cannot be served over HTTP/3. The peer should retry over HTTP/1.1. + */ + H3_VERSION_FALLBACK(0x110), + + /** + * The decoder failed to interpret an encoded field section and is not able to continue decoding that field section. + */ + QPACK_DECOMPRESSION_FAILED(0x200), + + /** + * The decoder failed to interpret an encoder instruction received on the encoder stream. + */ + QPACK_ENCODER_STREAM_ERROR(0x201), + + /** + * The encoder failed to interpret a decoder instruction received on the decoder stream. + */ + QPACK_DECODER_STREAM_ERROR(0x202); + + final int code; + + Http3ErrorCode(int code) { + this.code = code; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Exception.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Exception.java new file mode 100644 index 0000000..e46f7c7 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Exception.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ObjectUtil; + +/** + * An exception related to violate the HTTP3 spec. + */ +public final class Http3Exception extends Exception { + private final Http3ErrorCode errorCode; + + /** + * Create a new instance. + * + * @param errorCode the {@link Http3ErrorCode} that caused this exception. + * @param message the message to include. + */ + public Http3Exception(Http3ErrorCode errorCode, String message) { + super(message); + this.errorCode = ObjectUtil.checkNotNull(errorCode, "errorCode"); + } + + /** + * Create a new instance. + * + * @param errorCode the {@link Http3ErrorCode} that caused this exception. + * @param message the message to include. + * @param cause the {@link Throwable} to wrap. + */ + public Http3Exception(Http3ErrorCode errorCode, String message, Throwable cause) { + super(message, cause); + this.errorCode = ObjectUtil.checkNotNull(errorCode, "errorCode"); + } + + /** + * Returns the related {@link Http3ErrorCode}. + * + * @return the {@link Http3ErrorCode}. + */ + public Http3ErrorCode errorCode() { + return errorCode; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Frame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Frame.java new file mode 100644 index 0000000..be406df --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Frame.java @@ -0,0 +1,28 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Marker interface that is implemented by all HTTP3 frames. + */ +public interface Http3Frame { + /** + * The type of the frame. + * + * @return the type. + */ + long type(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java new file mode 100644 index 0000000..1217019 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameCodec.java @@ -0,0 +1,811 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelPromise; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamFrame; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; + +import java.net.SocketAddress; +import java.util.ArrayDeque; +import java.util.Deque; +import java.util.List; +import java.util.Map; +import java.util.function.BiFunction; + +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_DATA_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_GO_AWAY_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_SETTINGS_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.numBytesForVariableLengthInteger; +import static io.netty.handler.codec.http3.Http3CodecUtils.readVariableLengthInteger; +import static io.netty.handler.codec.http3.Http3CodecUtils.writeVariableLengthInteger; +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static io.netty.util.internal.ObjectUtil.checkPositive; + +/** + * Decodes / encodes {@link Http3Frame}s. + */ +final class Http3FrameCodec extends ByteToMessageDecoder implements ChannelOutboundHandler { + private final Http3FrameTypeValidator validator; + private final long maxHeaderListSize; + private final QpackDecoder qpackDecoder; + private final QpackEncoder qpackEncoder; + private final Http3RequestStreamCodecState encodeState; + private final Http3RequestStreamCodecState decodeState; + + private boolean firstFrame = true; + private boolean error; + private long type = -1; + private int payLoadLength = -1; + private QpackAttributes qpackAttributes; + private ReadResumptionListener readResumptionListener; + private WriteResumptionListener writeResumptionListener; + + static Http3FrameCodecFactory newFactory(QpackDecoder qpackDecoder, + long maxHeaderListSize, QpackEncoder qpackEncoder) { + checkNotNull(qpackEncoder, "qpackEncoder"); + checkNotNull(qpackDecoder, "qpackDecoder"); + + // QPACK decoder and encoder are shared between streams in a connection. + return (validator, encodeState, decodeState) -> new Http3FrameCodec(validator, qpackDecoder, + maxHeaderListSize, qpackEncoder, encodeState, decodeState); + } + + Http3FrameCodec(Http3FrameTypeValidator validator, QpackDecoder qpackDecoder, + long maxHeaderListSize, QpackEncoder qpackEncoder, Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + this.validator = checkNotNull(validator, "validator"); + this.qpackDecoder = checkNotNull(qpackDecoder, "qpackDecoder"); + this.maxHeaderListSize = checkPositive(maxHeaderListSize, "maxHeaderListSize"); + this.qpackEncoder = checkNotNull(qpackEncoder, "qpackEncoder"); + this.encodeState = checkNotNull(encodeState, "encodeState"); + this.decodeState = checkNotNull(decodeState, "decodeState"); + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + qpackAttributes = Http3.getQpackAttributes(ctx.channel().parent()); + assert qpackAttributes != null; + + initReadResumptionListenerIfRequired(ctx); + super.handlerAdded(ctx); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) throws Exception { + if (writeResumptionListener != null) { + writeResumptionListener.drain(); + } + super.channelInactive(ctx); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + ByteBuf buffer; + if (msg instanceof QuicStreamFrame) { + QuicStreamFrame streamFrame = (QuicStreamFrame) msg; + buffer = streamFrame.content().retain(); + streamFrame.release(); + } else { + buffer = (ByteBuf) msg; + } + super.channelRead(ctx, buffer); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) throws Exception { + assert readResumptionListener != null; + if (readResumptionListener.readCompleted()) { + super.channelReadComplete(ctx); + } + } + + private void connectionError(ChannelHandlerContext ctx, Http3ErrorCode code, String msg, boolean fireException) { + error = true; + Http3CodecUtils.connectionError(ctx, code, msg, fireException); + } + + private void connectionError(ChannelHandlerContext ctx, Http3Exception exception, boolean fireException) { + error = true; + Http3CodecUtils.connectionError(ctx, exception, fireException); + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { + assert readResumptionListener != null; + if (!in.isReadable() || readResumptionListener.isSuspended()) { + return; + } + if (error) { + in.skipBytes(in.readableBytes()); + return; + } + if (type == -1) { + int typeLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + if (in.readableBytes() < typeLen) { + return; + } + long localType = readVariableLengthInteger(in, typeLen); + if (Http3CodecUtils.isReservedHttp2FrameType(localType)) { + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.8 + connectionError(ctx, Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Reserved type for HTTP/2 received.", true); + return; + } + try { + // Validate if the type is valid for the current stream first. + validator.validate(localType, firstFrame); + } catch (Http3Exception e) { + connectionError(ctx, e, true); + return; + } + type = localType; + firstFrame = false; + if (!in.isReadable()) { + return; + } + } + if (payLoadLength == -1) { + int payloadLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + assert payloadLen <= 8; + if (in.readableBytes() < payloadLen) { + return; + } + long len = readVariableLengthInteger(in, payloadLen); + if (len > Integer.MAX_VALUE) { + connectionError(ctx, Http3ErrorCode.H3_EXCESSIVE_LOAD, + "Received an invalid frame len.", true); + return; + } + payLoadLength = (int) len; + } + int read = decodeFrame(ctx, type, payLoadLength, in, out); + if (read >= 0) { + if (read == payLoadLength) { + type = -1; + payLoadLength = -1; + } else { + payLoadLength -= read; + } + } + } + + private static int skipBytes(ByteBuf in, int payLoadLength) { + in.skipBytes(payLoadLength); + return payLoadLength; + } + + private int decodeFrame(ChannelHandlerContext ctx, long longType, int payLoadLength, ByteBuf in, List out) { + if (longType > Integer.MAX_VALUE && !Http3CodecUtils.isReservedFrameType(longType)) { + return skipBytes(in, payLoadLength); + } + int type = (int) longType; + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-11.2.1 + switch (type) { + case HTTP3_DATA_FRAME_TYPE: + // DATA + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.1 + int readable = in.readableBytes(); + if (readable == 0 && payLoadLength > 0) { + return 0; + } + int length = Math.min(readable, payLoadLength); + out.add(new DefaultHttp3DataFrame(in.readRetainedSlice(length))); + return length; + case HTTP3_HEADERS_FRAME_TYPE: + // HEADERS + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.2 + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, + // Let's use the maxHeaderListSize as a limit as this is this is the decompressed amounts of + // bytes which means the once we decompressed the headers we will be bigger then the actual + // payload size now. + maxHeaderListSize, Http3ErrorCode.H3_EXCESSIVE_LOAD)) { + return 0; + } + assert qpackAttributes != null; + if (!qpackAttributes.dynamicTableDisabled() && !qpackAttributes.decoderStreamAvailable()) { + assert readResumptionListener != null; + readResumptionListener.suspended(); + return 0; + } + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + if (decodeHeaders(ctx, headersFrame.headers(), in, payLoadLength, decodeState.receivedFinalHeaders())) { + out.add(headersFrame); + return payLoadLength; + } + return -1; + case HTTP3_CANCEL_PUSH_FRAME_TYPE: + // CANCEL_PUSH + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.3 + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, + HTTP3_CANCEL_PUSH_FRAME_MAX_LEN, Http3ErrorCode.H3_FRAME_ERROR)) { + return 0; + } + int pushIdLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + out.add(new DefaultHttp3CancelPushFrame(readVariableLengthInteger(in, pushIdLen))); + return payLoadLength; + case HTTP3_SETTINGS_FRAME_TYPE: + // SETTINGS + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.4 + + // Use 256 as this gives space for 16 maximal size encoder and 128 minimal size encoded settings. + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, HTTP3_SETTINGS_FRAME_MAX_LEN, + Http3ErrorCode.H3_EXCESSIVE_LOAD)) { + return 0; + } + Http3SettingsFrame settingsFrame = decodeSettings(ctx, in, payLoadLength); + if (settingsFrame != null) { + out.add(settingsFrame); + } + return payLoadLength; + case HTTP3_PUSH_PROMISE_FRAME_TYPE: + // PUSH_PROMISE + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.5 + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, + // Let's use the maxHeaderListSize as a limit as this is this is the decompressed amounts of + // bytes which means the once we decompressed the headers we will be bigger then the actual + // payload size now. + Math.max(maxHeaderListSize, maxHeaderListSize + 8), Http3ErrorCode.H3_EXCESSIVE_LOAD)) { + return 0; + } + + assert qpackAttributes != null; + if (!qpackAttributes.dynamicTableDisabled() && !qpackAttributes.decoderStreamAvailable()) { + assert readResumptionListener != null; + readResumptionListener.suspended(); + return 0; + } + int readerIdx = in.readerIndex(); + int pushPromiseIdLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + Http3PushPromiseFrame pushPromiseFrame = new DefaultHttp3PushPromiseFrame( + readVariableLengthInteger(in, pushPromiseIdLen)); + if (decodeHeaders(ctx, pushPromiseFrame.headers(), in, payLoadLength - pushPromiseIdLen, false)) { + out.add(pushPromiseFrame); + return payLoadLength; + } + in.readerIndex(readerIdx); + return -1; + case HTTP3_GO_AWAY_FRAME_TYPE: + // GO_AWAY + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.6 + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, + HTTP3_GO_AWAY_FRAME_MAX_LEN, Http3ErrorCode.H3_FRAME_ERROR)) { + return 0; + } + int idLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + out.add(new DefaultHttp3GoAwayFrame(readVariableLengthInteger(in, idLen))); + return payLoadLength; + case HTTP3_MAX_PUSH_ID_FRAME_TYPE: + // MAX_PUSH_ID + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.7 + if (!enforceMaxPayloadLength(ctx, in, type, payLoadLength, + HTTP3_MAX_PUSH_ID_FRAME_MAX_LEN, Http3ErrorCode.H3_FRAME_ERROR)) { + return 0; + } + int pidLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + out.add(new DefaultHttp3MaxPushIdFrame(readVariableLengthInteger(in, pidLen))); + return payLoadLength; + default: + if (!Http3CodecUtils.isReservedFrameType(longType)) { + return skipBytes(in, payLoadLength); + } + // Handling reserved frame types + // https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.8 + if (in.readableBytes() < payLoadLength) { + return 0; + } + out.add(new DefaultHttp3UnknownFrame(longType, in.readRetainedSlice(payLoadLength))); + return payLoadLength; + } + } + + private boolean enforceMaxPayloadLength( + ChannelHandlerContext ctx, ByteBuf in, int type, int payLoadLength, + long maxPayLoadLength, Http3ErrorCode error) { + if (payLoadLength > maxPayLoadLength) { + connectionError(ctx, error, + "Received an invalid frame len " + payLoadLength + " for frame of type " + type + '.', true); + return false; + } + return in.readableBytes() >= payLoadLength; + } + + private Http3SettingsFrame decodeSettings(ChannelHandlerContext ctx, ByteBuf in, int payLoadLength) { + Http3SettingsFrame settingsFrame = new DefaultHttp3SettingsFrame(); + while (payLoadLength > 0) { + int keyLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + long key = readVariableLengthInteger(in, keyLen); + if (Http3CodecUtils.isReservedHttp2Setting(key)) { + // This must be treated as a connection error + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.4.1 + connectionError(ctx, Http3ErrorCode.H3_SETTINGS_ERROR, + "Received a settings key that is reserved for HTTP/2.", true); + return null; + } + payLoadLength -= keyLen; + int valueLen = numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + long value = readVariableLengthInteger(in, valueLen); + payLoadLength -= valueLen; + + if (settingsFrame.put(key, value) != null) { + // This must be treated as a connection error + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.4 + connectionError(ctx, Http3ErrorCode.H3_SETTINGS_ERROR, + "Received a duplicate settings key.", true); + return null; + } + } + return settingsFrame; + } + + /** + * Decode the header block into header fields. + * + * @param ctx {@link ChannelHandlerContext} for this handler. + * @param headers to be populated by decode. + * @param in {@link ByteBuf} containing the encode header block. It is assumed that the entire header block is + * contained in this buffer. + * @param length Number of bytes in the passed buffer that represent the encoded header block. + * @param trailer {@code true} if this is a trailer section. + * @return {@code true} if the headers were decoded, {@code false} otherwise. A header block may not be decoded if + * it is awaiting QPACK dynamic table updates. + */ + private boolean decodeHeaders(ChannelHandlerContext ctx, Http3Headers headers, ByteBuf in, int length, + boolean trailer) { + try { + Http3HeadersSink sink = new Http3HeadersSink(headers, maxHeaderListSize, true, trailer); + assert qpackAttributes != null; + assert readResumptionListener != null; + if (qpackDecoder.decode(qpackAttributes, + ((QuicStreamChannel) ctx.channel()).streamId(), in, length, sink, readResumptionListener)) { + // Throws exception if detected any problem so far + sink.finish(); + return true; + } + readResumptionListener.suspended(); + } catch (Http3Exception e) { + connectionError(ctx, e.errorCode(), e.getMessage(), true); + } catch (QpackException e) { + // Must be treated as a connection error. + connectionError(ctx, Http3ErrorCode.QPACK_DECOMPRESSION_FAILED, + "Decompression of header block failed.", true); + } catch (Http3HeadersValidationException e) { + error = true; + ctx.fireExceptionCaught(e); + // We should shutdown the stream with an error. + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-4.1.3 + Http3CodecUtils.streamError(ctx, Http3ErrorCode.H3_MESSAGE_ERROR); + } + return false; + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { + assert qpackAttributes != null; + if (writeResumptionListener != null) { + writeResumptionListener.enqueue(msg, promise); + return; + } + + if ((msg instanceof Http3HeadersFrame || msg instanceof Http3PushPromiseFrame) && + !qpackAttributes.dynamicTableDisabled() && !qpackAttributes.encoderStreamAvailable()) { + writeResumptionListener = WriteResumptionListener.newListener(ctx, this); + writeResumptionListener.enqueue(msg, promise); + return; + } + + write0(ctx, msg, promise); + } + + private void write0(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { + try { + if (msg instanceof Http3DataFrame) { + writeDataFrame(ctx, (Http3DataFrame) msg, promise); + } else if (msg instanceof Http3HeadersFrame) { + writeHeadersFrame(ctx, (Http3HeadersFrame) msg, promise); + } else if (msg instanceof Http3CancelPushFrame) { + writeCancelPushFrame(ctx, (Http3CancelPushFrame) msg, promise); + } else if (msg instanceof Http3SettingsFrame) { + writeSettingsFrame(ctx, (Http3SettingsFrame) msg, promise); + } else if (msg instanceof Http3PushPromiseFrame) { + writePushPromiseFrame(ctx, (Http3PushPromiseFrame) msg, promise); + } else if (msg instanceof Http3GoAwayFrame) { + writeGoAwayFrame(ctx, (Http3GoAwayFrame) msg, promise); + } else if (msg instanceof Http3MaxPushIdFrame) { + writeMaxPushIdFrame(ctx, (Http3MaxPushIdFrame) msg, promise); + } else if (msg instanceof Http3UnknownFrame) { + writeUnknownFrame(ctx, (Http3UnknownFrame) msg, promise); + } else { + unsupported(promise); + } + } finally { + ReferenceCountUtil.release(msg); + } + } + + private static void writeDataFrame( + ChannelHandlerContext ctx, Http3DataFrame frame, ChannelPromise promise) { + ByteBuf out = ctx.alloc().directBuffer(16); + writeVariableLengthInteger(out, frame.type()); + writeVariableLengthInteger(out, frame.content().readableBytes()); + ByteBuf content = frame.content().retain(); + ctx.write(Unpooled.wrappedUnmodifiableBuffer(out, content), promise); + } + + private void writeHeadersFrame(ChannelHandlerContext ctx, Http3HeadersFrame frame, ChannelPromise promise) { + assert qpackAttributes != null; + final QuicStreamChannel channel = (QuicStreamChannel) ctx.channel(); + writeDynamicFrame(ctx, frame.type(), frame, (f, out) -> { + qpackEncoder.encodeHeaders(qpackAttributes, out, ctx.alloc(), channel.streamId(), f.headers()); + return true; + }, promise); + } + + private static void writeCancelPushFrame( + ChannelHandlerContext ctx, Http3CancelPushFrame frame, ChannelPromise promise) { + writeFrameWithId(ctx, frame.type(), frame.id(), promise); + } + + private static void writeSettingsFrame( + ChannelHandlerContext ctx, Http3SettingsFrame frame, ChannelPromise promise) { + writeDynamicFrame(ctx, frame.type(), frame, (f, out) -> { + for (Map.Entry e : f) { + Long key = e.getKey(); + if (Http3CodecUtils.isReservedHttp2Setting(key)) { + Http3Exception exception = new Http3Exception(Http3ErrorCode.H3_SETTINGS_ERROR, + "Received a settings key that is reserved for HTTP/2."); + promise.setFailure(exception); + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.8 + Http3CodecUtils.connectionError(ctx, exception, false); + return false; + } + Long value = e.getValue(); + int keyLen = numBytesForVariableLengthInteger(key); + int valueLen = numBytesForVariableLengthInteger(value); + writeVariableLengthInteger(out, key, keyLen); + writeVariableLengthInteger(out, value, valueLen); + } + return true; + }, promise); + } + + private static void writeDynamicFrame(ChannelHandlerContext ctx, long type, T frame, + BiFunction writer, + ChannelPromise promise) { + ByteBuf out = ctx.alloc().directBuffer(); + int initialWriterIndex = out.writerIndex(); + // Move 16 bytes forward as this is the maximum amount we could ever need for the type + payload length. + int payloadStartIndex = initialWriterIndex + 16; + out.writerIndex(payloadStartIndex); + + if (writer.apply(frame, out)) { + int finalWriterIndex = out.writerIndex(); + int payloadLength = finalWriterIndex - payloadStartIndex; + int len = numBytesForVariableLengthInteger(payloadLength); + out.writerIndex(payloadStartIndex - len); + writeVariableLengthInteger(out, payloadLength, len); + + int typeLength = numBytesForVariableLengthInteger(type); + int startIndex = payloadStartIndex - len - typeLength; + out.writerIndex(startIndex); + writeVariableLengthInteger(out, type, typeLength); + + out.setIndex(startIndex, finalWriterIndex); + ctx.write(out, promise); + } else { + // We failed to encode, lets release the buffer so we dont leak. + out.release(); + } + } + + private void writePushPromiseFrame(ChannelHandlerContext ctx, Http3PushPromiseFrame frame, ChannelPromise promise) { + assert qpackAttributes != null; + final QuicStreamChannel channel = (QuicStreamChannel) ctx.channel(); + writeDynamicFrame(ctx, frame.type(), frame, (f, out) -> { + long id = f.id(); + writeVariableLengthInteger(out, id); + qpackEncoder.encodeHeaders(qpackAttributes, out, ctx.alloc(), channel.streamId(), f.headers()); + return true; + }, promise); + } + + private static void writeGoAwayFrame( + ChannelHandlerContext ctx, Http3GoAwayFrame frame, ChannelPromise promise) { + writeFrameWithId(ctx, frame.type(), frame.id(), promise); + } + + private static void writeMaxPushIdFrame( + ChannelHandlerContext ctx, Http3MaxPushIdFrame frame, ChannelPromise promise) { + writeFrameWithId(ctx, frame.type(), frame.id(), promise); + } + + private static void writeFrameWithId(ChannelHandlerContext ctx, long type, long id, ChannelPromise promise) { + ByteBuf out = ctx.alloc().directBuffer(24); + writeVariableLengthInteger(out, type); + writeVariableLengthInteger(out, numBytesForVariableLengthInteger(id)); + writeVariableLengthInteger(out, id); + ctx.write(out, promise); + } + + private void writeUnknownFrame( + ChannelHandlerContext ctx, Http3UnknownFrame frame, ChannelPromise promise) { + long type = frame.type(); + if (Http3CodecUtils.isReservedHttp2FrameType(type)) { + Http3Exception exception = new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Reserved type for HTTP/2 send."); + promise.setFailure(exception); + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-7.2.8 + connectionError(ctx, exception.errorCode(), exception.getMessage(), false); + return; + } + if (!Http3CodecUtils.isReservedFrameType(type)) { + Http3Exception exception = new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Non reserved type for HTTP/3 send."); + promise.setFailure(exception); + return; + } + ByteBuf out = ctx.alloc().directBuffer(); + writeVariableLengthInteger(out, type); + writeVariableLengthInteger(out, frame.content().readableBytes()); + ByteBuf content = frame.content().retain(); + ctx.write(Unpooled.wrappedUnmodifiableBuffer(out, content), promise); + } + + private void initReadResumptionListenerIfRequired(ChannelHandlerContext ctx) { + if (readResumptionListener == null) { + readResumptionListener = new ReadResumptionListener(ctx, this); + } + } + + private static void unsupported(ChannelPromise promise) { + promise.setFailure(new UnsupportedOperationException()); + } + + @Override + public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) { + ctx.bind(localAddress, promise); + } + + @Override + public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, + SocketAddress localAddress, ChannelPromise promise) { + ctx.connect(remoteAddress, localAddress, promise); + } + + @Override + public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.disconnect(promise); + } + + @Override + public void close(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.close(promise); + } + + @Override + public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.deregister(promise); + } + + @Override + public void read(ChannelHandlerContext ctx) { + assert readResumptionListener != null; + if (readResumptionListener.readRequested()) { + ctx.read(); + } + } + + @Override + public void flush(ChannelHandlerContext ctx) { + if (writeResumptionListener != null) { + writeResumptionListener.enqueueFlush(); + } else { + ctx.flush(); + } + } + + private static final class ReadResumptionListener + implements Runnable, GenericFutureListener> { + private static final int STATE_SUSPENDED = 0b1000_0000; + private static final int STATE_READ_PENDING = 0b0100_0000; + private static final int STATE_READ_COMPLETE_PENDING = 0b0010_0000; + + private final ChannelHandlerContext ctx; + private final Http3FrameCodec codec; + private byte state; + + ReadResumptionListener(ChannelHandlerContext ctx, Http3FrameCodec codec) { + this.ctx = ctx; + this.codec = codec; + assert codec.qpackAttributes != null; + if (!codec.qpackAttributes.dynamicTableDisabled() && !codec.qpackAttributes.decoderStreamAvailable()) { + codec.qpackAttributes.whenDecoderStreamAvailable(this); + } + } + + void suspended() { + assert !codec.qpackAttributes.dynamicTableDisabled(); + setState(STATE_SUSPENDED); + } + + boolean readCompleted() { + if (hasState(STATE_SUSPENDED)) { + setState(STATE_READ_COMPLETE_PENDING); + return false; + } + return true; + } + + boolean readRequested() { + if (hasState(STATE_SUSPENDED)) { + setState(STATE_READ_PENDING); + return false; + } + return true; + } + + boolean isSuspended() { + return hasState(STATE_SUSPENDED); + } + + @Override + public void operationComplete(Future future) { + if (future.isSuccess()) { + resume(); + } else { + ctx.fireExceptionCaught(future.cause()); + } + } + + @Override + public void run() { + resume(); + } + + private void resume() { + unsetState(STATE_SUSPENDED); + try { + codec.channelRead(ctx, Unpooled.EMPTY_BUFFER); + if (hasState(STATE_READ_COMPLETE_PENDING)) { + unsetState(STATE_READ_COMPLETE_PENDING); + codec.channelReadComplete(ctx); + } + if (hasState(STATE_READ_PENDING)) { + unsetState(STATE_READ_PENDING); + codec.read(ctx); + } + } catch (Exception e) { + ctx.fireExceptionCaught(e); + } + } + + private void setState(int toSet) { + state |= toSet; + } + + private boolean hasState(int toCheck) { + return (state & toCheck) == toCheck; + } + + private void unsetState(int toUnset) { + state &= ~toUnset; + } + } + + private static final class WriteResumptionListener + implements GenericFutureListener> { + private static final Object FLUSH = new Object(); + private final Deque buffer; + private final ChannelHandlerContext ctx; + private final Http3FrameCodec codec; + + private WriteResumptionListener(ChannelHandlerContext ctx, Http3FrameCodec codec) { + this.ctx = ctx; + this.codec = codec; + buffer = new ArrayDeque<>(4); // assuming we will buffer header, data, trailer and a flush + } + + @Override + public void operationComplete(Future future) { + drain(); + } + + void enqueue(Object msg, ChannelPromise promise) { + assert ctx.channel().eventLoop().inEventLoop(); + buffer.addLast(new BufferedEntry(msg, promise)); + } + + void enqueueFlush() { + assert ctx.channel().eventLoop().inEventLoop(); + buffer.addLast(FLUSH); + } + + void drain() { + assert ctx.channel().eventLoop().inEventLoop(); + boolean flushSeen = false; + try { + for (Object entry = buffer.pollFirst(); entry != null; entry = buffer.pollFirst()) { + if (entry == FLUSH) { + flushSeen = true; + } else { + assert entry instanceof BufferedEntry; + BufferedEntry bufferedEntry = (BufferedEntry) entry; + codec.write0(ctx, bufferedEntry.msg, bufferedEntry.promise); + } + } + // indicate that writes do not need to be enqueued. As we are on the eventloop, no other writes can + // happen while we are draining, hence we would not write out of order. + codec.writeResumptionListener = null; + } finally { + if (flushSeen) { + codec.flush(ctx); + } + } + } + + static WriteResumptionListener newListener(ChannelHandlerContext ctx, Http3FrameCodec codec) { + WriteResumptionListener listener = new WriteResumptionListener(ctx, codec); + assert codec.qpackAttributes != null; + codec.qpackAttributes.whenEncoderStreamAvailable(listener); + return listener; + } + + private static final class BufferedEntry { + private final Object msg; + private final ChannelPromise promise; + + BufferedEntry(Object msg, ChannelPromise promise) { + this.msg = msg; + this.promise = promise; + } + } + } + + /** + * A factory for creating codec for HTTP3 frames. + */ + @FunctionalInterface + interface Http3FrameCodecFactory { + /** + * Creates a new codec instance for the passed {@code streamType}. + * + * @param validator for the frames. + * @param encodeState for the request stream. + * @param decodeState for the request stream. + * @return new codec instance for the passed {@code streamType}. + */ + ChannelHandler newCodec(Http3FrameTypeValidator validator, Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodec.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodec.java new file mode 100644 index 0000000..cbf2bb5 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodec.java @@ -0,0 +1,293 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelPromise; +import io.netty.handler.codec.EncoderException; +import io.netty.handler.codec.UnsupportedMessageTypeException; +import io.netty.handler.codec.http.DefaultHttpContent; +import io.netty.handler.codec.http.DefaultLastHttpContent; +import io.netty.handler.codec.http.FullHttpMessage; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; +import io.netty.handler.codec.http.HttpMessage; +import io.netty.handler.codec.http.HttpObject; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.handler.codec.http.HttpScheme; +import io.netty.handler.codec.http.HttpUtil; +import io.netty.handler.codec.http.HttpVersion; +import io.netty.handler.codec.http.LastHttpContent; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.concurrent.PromiseCombiner; + +import java.net.SocketAddress; + +/** + * This handler converts from {@link Http3RequestStreamFrame} to {@link HttpObject}, + * and back. It can be used as an adapter in conjunction with {@link + * Http3ServerConnectionHandler} or {@link Http3ClientConnectionHandler} to make http/3 connections + * backward-compatible with {@link ChannelHandler}s expecting {@link HttpObject}. + * + * For simplicity, it converts to chunked encoding unless the entire stream + * is a single header. + */ +public final class Http3FrameToHttpObjectCodec extends Http3RequestStreamInboundHandler + implements ChannelOutboundHandler { + + private final boolean isServer; + private final boolean validateHeaders; + private boolean inboundTranslationInProgress; + + public Http3FrameToHttpObjectCodec(final boolean isServer, + final boolean validateHeaders) { + this.isServer = isServer; + this.validateHeaders = validateHeaders; + } + + public Http3FrameToHttpObjectCodec(final boolean isServer) { + this(isServer, true); + } + + @Override + public boolean isSharable() { + return false; + } + + @Override + protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame) throws Exception { + Http3Headers headers = frame.headers(); + long id = ((QuicStreamChannel) ctx.channel()).streamId(); + + final CharSequence status = headers.status(); + + // 100-continue response is a special case where we should not send a fin, + // but we need to decode it as a FullHttpResponse to play nice with HttpObjectAggregator. + if (null != status && HttpResponseStatus.CONTINUE.codeAsText().contentEquals(status)) { + final FullHttpMessage fullMsg = newFullMessage(id, headers, ctx.alloc()); + ctx.fireChannelRead(fullMsg); + return; + } + + if (headers.method() == null && status == null) { + // Must be trailers! + LastHttpContent last = new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER, validateHeaders); + HttpConversionUtil.addHttp3ToHttpHeaders(id, headers, last.trailingHeaders(), + HttpVersion.HTTP_1_1, true, true); + inboundTranslationInProgress = false; + ctx.fireChannelRead(last); + } else { + HttpMessage req = newMessage(id, headers); + if (!HttpUtil.isContentLengthSet(req)) { + req.headers().add(HttpHeaderNames.TRANSFER_ENCODING, HttpHeaderValues.CHUNKED); + } + inboundTranslationInProgress = true; + ctx.fireChannelRead(req); + } + } + + @Override + protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) throws Exception { + inboundTranslationInProgress = true; + ctx.fireChannelRead(new DefaultHttpContent(frame.content())); + } + + @Override + protected void channelInputClosed(ChannelHandlerContext ctx) throws Exception { + if (inboundTranslationInProgress) { + ctx.fireChannelRead(LastHttpContent.EMPTY_LAST_CONTENT); + } + } + + /** + * Encode from an {@link HttpObject} to an {@link Http3RequestStreamFrame}. This method will + * be called for each written message that can be handled by this encoder. + * + * NOTE: 100-Continue responses that are NOT {@link FullHttpResponse} will be rejected. + * + * @param ctx the {@link ChannelHandlerContext} which this handler belongs to + * @param msg the {@link HttpObject} message to encode + * @throws Exception is thrown if an error occurs + */ + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (!(msg instanceof HttpObject)) { + throw new UnsupportedMessageTypeException(); + } + // 100-continue is typically a FullHttpResponse, but the decoded + // Http3HeadersFrame should not handles as a end of stream. + if (msg instanceof HttpResponse) { + final HttpResponse res = (HttpResponse) msg; + if (res.status().equals(HttpResponseStatus.CONTINUE)) { + if (res instanceof FullHttpResponse) { + final Http3Headers headers = toHttp3Headers(res); + ctx.write(new DefaultHttp3HeadersFrame(headers), promise); + ((FullHttpResponse) res).release(); + return; + } else { + throw new EncoderException( + HttpResponseStatus.CONTINUE.toString() + " must be a FullHttpResponse"); + } + } + } + + // this combiner is created lazily if we need multiple write calls + PromiseCombiner combiner = null; + // With the last content, *if* we write anything here, we need to wait for that write to complete before + // closing. To do that, we need to unvoid the promise. So if we write anything *and* this is the last message + // we will unvoid. + boolean isLast = msg instanceof LastHttpContent; + + if (msg instanceof HttpMessage) { + Http3Headers headers = toHttp3Headers((HttpMessage) msg); + DefaultHttp3HeadersFrame frame = new DefaultHttp3HeadersFrame(headers); + + if (msg instanceof HttpContent && (!promise.isVoid() || isLast)) { + combiner = new PromiseCombiner(ctx.executor()); + } + promise = writeWithOptionalCombiner(ctx, frame, promise, combiner, isLast); + } + + if (isLast) { + LastHttpContent last = (LastHttpContent) msg; + boolean readable = last.content().isReadable(); + boolean hasTrailers = !last.trailingHeaders().isEmpty(); + + if (combiner == null && readable && hasTrailers && !promise.isVoid()) { + combiner = new PromiseCombiner(ctx.executor()); + } + + if (readable) { + promise = writeWithOptionalCombiner(ctx, + new DefaultHttp3DataFrame(last.content()), promise, combiner, true); + } + if (hasTrailers) { + Http3Headers headers = HttpConversionUtil.toHttp3Headers(last.trailingHeaders(), validateHeaders); + promise = writeWithOptionalCombiner(ctx, + new DefaultHttp3HeadersFrame(headers), promise, combiner, true); + } + if (!readable) { + last.release(); + } + + if (!readable && !hasTrailers && combiner == null) { + // we had to write nothing. happy days! + ((QuicStreamChannel) ctx.channel()).shutdownOutput(); + promise.trySuccess(); + } else { + promise.addListener(QuicStreamChannel.SHUTDOWN_OUTPUT); + } + } else if (msg instanceof HttpContent) { + promise = writeWithOptionalCombiner(ctx, + new DefaultHttp3DataFrame(((HttpContent) msg).content()), promise, combiner, false); + } + + if (combiner != null) { + combiner.finish(promise); + } + } + + /** + * Write a message. If there is a combiner, add a new write promise to that combiner. If there is no combiner + * ({@code null}), use the {@code outerPromise} directly as the write promise. + */ + private static ChannelPromise writeWithOptionalCombiner( + ChannelHandlerContext ctx, + Object msg, + ChannelPromise outerPromise, + PromiseCombiner combiner, + boolean unvoidPromise + ) { + if (unvoidPromise) { + outerPromise = outerPromise.unvoid(); + } + if (combiner == null) { + ctx.write(msg, outerPromise); + } else { + combiner.add(ctx.write(msg)); + } + return outerPromise; + } + + private Http3Headers toHttp3Headers(HttpMessage msg) { + if (msg instanceof HttpRequest) { + msg.headers().set( + HttpConversionUtil.ExtensionHeaderNames.SCHEME.text(), HttpScheme.HTTPS); + } + + return HttpConversionUtil.toHttp3Headers(msg, validateHeaders); + } + + private HttpMessage newMessage(final long id, + final Http3Headers headers) throws Http3Exception { + return isServer ? + HttpConversionUtil.toHttpRequest(id, headers, validateHeaders) : + HttpConversionUtil.toHttpResponse(id, headers, validateHeaders); + } + + private FullHttpMessage newFullMessage(final long id, + final Http3Headers headers, + final ByteBufAllocator alloc) throws Http3Exception { + return isServer ? + HttpConversionUtil.toFullHttpRequest(id, headers, alloc, validateHeaders) : + HttpConversionUtil.toFullHttpResponse(id, headers, alloc, validateHeaders); + } + + @Override + public void flush(ChannelHandlerContext ctx) { + ctx.flush(); + } + + @Override + public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) { + ctx.bind(localAddress, promise); + } + + @Override + public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, + SocketAddress localAddress, ChannelPromise promise) { + ctx.connect(remoteAddress, localAddress, promise); + } + + @Override + public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.disconnect(promise); + } + + @Override + public void close(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.close(promise); + } + + @Override + public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.deregister(promise); + } + + @Override + public void read(ChannelHandlerContext ctx) throws Exception { + ctx.read(); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeDuplexValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeDuplexValidationHandler.java new file mode 100644 index 0000000..30d9485 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeDuplexValidationHandler.java @@ -0,0 +1,87 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandler; +import io.netty.channel.ChannelPromise; + +import java.net.SocketAddress; + +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.validateFrameWritten; + +class Http3FrameTypeDuplexValidationHandler extends Http3FrameTypeInboundValidationHandler + implements ChannelOutboundHandler { + + Http3FrameTypeDuplexValidationHandler(Class frameType) { + super(frameType); + } + + @Override + public final void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { + T frame = validateFrameWritten(frameType, msg); + if (frame != null) { + write(ctx, frame, promise); + } else { + writeFrameDiscarded(msg, promise); + } + } + + void write(ChannelHandlerContext ctx, T msg, ChannelPromise promise) { + ctx.write(msg, promise); + } + + void writeFrameDiscarded(Object discardedFrame, ChannelPromise promise) { + frameTypeUnexpected(promise, discardedFrame); + } + + @Override + public void flush(ChannelHandlerContext ctx) { + ctx.flush(); + } + + @Override + public void bind(ChannelHandlerContext ctx, SocketAddress localAddress, ChannelPromise promise) { + ctx.bind(localAddress, promise); + } + + @Override + public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, SocketAddress localAddress, + ChannelPromise promise) throws Exception { + ctx.connect(remoteAddress, localAddress, promise); + } + + @Override + public void disconnect(ChannelHandlerContext ctx, ChannelPromise promise) { + ctx.disconnect(promise); + } + + @Override + public void close(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception { + ctx.close(promise); + } + + @Override + public void deregister(ChannelHandlerContext ctx, ChannelPromise promise) throws Exception { + ctx.deregister(promise); + } + + @Override + public void read(ChannelHandlerContext ctx) throws Exception { + ctx.read(); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeInboundValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeInboundValidationHandler.java new file mode 100644 index 0000000..658d131 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeInboundValidationHandler.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.util.internal.ObjectUtil; + +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.validateFrameRead; + +class Http3FrameTypeInboundValidationHandler extends ChannelInboundHandlerAdapter { + + protected final Class frameType; + + Http3FrameTypeInboundValidationHandler(Class frameType) { + this.frameType = ObjectUtil.checkNotNull(frameType, "frameType"); + } + + @Override + public final void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + final T frame = validateFrameRead(frameType, msg); + if (frame != null) { + channelRead(ctx, frame); + } else { + readFrameDiscarded(ctx, msg); + } + } + + void channelRead(ChannelHandlerContext ctx, T frame) throws Exception { + ctx.fireChannelRead(frame); + } + + void readFrameDiscarded(ChannelHandlerContext ctx, Object discardedFrame) { + frameTypeUnexpected(ctx, discardedFrame); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeOutboundValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeOutboundValidationHandler.java new file mode 100644 index 0000000..42265b3 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeOutboundValidationHandler.java @@ -0,0 +1,51 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.util.internal.ObjectUtil; + +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.validateFrameWritten; + +class Http3FrameTypeOutboundValidationHandler extends ChannelOutboundHandlerAdapter { + + private final Class frameType; + + Http3FrameTypeOutboundValidationHandler(Class frameType) { + this.frameType = ObjectUtil.checkNotNull(frameType, "frameType"); + } + + @Override + public final void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { + T frame = validateFrameWritten(frameType, msg); + if (frame != null) { + write(ctx, frame, promise); + } else { + writeFrameDiscarded(msg, promise); + } + } + + void write(ChannelHandlerContext ctx, T msg, ChannelPromise promise) { + ctx.write(msg, promise); + } + + void writeFrameDiscarded(Object discardedFrame, ChannelPromise promise) { + frameTypeUnexpected(promise, discardedFrame); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeValidator.java new file mode 100644 index 0000000..a597115 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameTypeValidator.java @@ -0,0 +1,24 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +@FunctionalInterface +interface Http3FrameTypeValidator { + + Http3FrameTypeValidator NO_VALIDATION = (type, first) -> { }; + + void validate(long type, boolean first) throws Http3Exception; +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameValidationUtils.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameValidationUtils.java new file mode 100644 index 0000000..751cc53 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3FrameValidationUtils.java @@ -0,0 +1,94 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.internal.StringUtil; + +final class Http3FrameValidationUtils { + + private Http3FrameValidationUtils() { + // no instances + } + + @SuppressWarnings("unchecked") + private static T cast(Object msg) { + return (T) msg; + } + + private static boolean isValid(Class frameType, Object msg) { + return frameType.isInstance(msg); + } + + /** + * Check if the passed {@code msg} is of the {@code expectedFrameType} and return the expected type, else return + * {@code null}. + * + * @param expectedFrameType {@link Class} of the expected frame type. + * @param msg to validate. + * @param Expected type. + * @return {@code msg} as expected frame type or {@code null} if it can not be converted to the expected type. + */ + static T validateFrameWritten(Class expectedFrameType, Object msg) { + if (isValid(expectedFrameType, msg)) { + return cast(msg); + } + return null; + } + + /** + * Check if the passed {@code msg} is of the {@code expectedFrameType} and return the expected type, else return + * {@code null}. + * + * @param expectedFrameType {@link Class} of the expected frame type. + * @param msg to validate. + * @param Expected type. + * @return {@code msg} as expected frame type or {@code null} if it can not be converted to the expected type. + */ + static T validateFrameRead(Class expectedFrameType, Object msg) { + if (isValid(expectedFrameType, msg)) { + return cast(msg); + } + return null; + } + + /** + * Handle unexpected frame type by failing the passed {@link ChannelPromise}. + * + * @param promise to fail. + * @param frame which is unexpected. + */ + static void frameTypeUnexpected(ChannelPromise promise, Object frame) { + String type = StringUtil.simpleClassName(frame); + ReferenceCountUtil.release(frame); + promise.setFailure(new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Frame of type " + type + " unexpected")); + } + + /** + * Handle unexpected frame type by propagating a connection error with code: + * {@link Http3ErrorCode#H3_FRAME_UNEXPECTED}. + * + * @param ctx to use for propagation of failure. + * @param frame which is unexpected. + */ + static void frameTypeUnexpected(ChannelHandlerContext ctx, Object frame) { + ReferenceCountUtil.release(frame); + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_FRAME_UNEXPECTED, "Frame type unexpected", true); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3GoAwayFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3GoAwayFrame.java new file mode 100644 index 0000000..1a41fc6 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3GoAwayFrame.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See GOAWAY. + */ +public interface Http3GoAwayFrame extends Http3ControlStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE; + } + + /** + * Returns the id. + * + * @return the id. + */ + long id(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Headers.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Headers.java new file mode 100644 index 0000000..e98cb4d --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3Headers.java @@ -0,0 +1,225 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.Headers; +import io.netty.util.AsciiString; + +import java.util.Iterator; +import java.util.Map.Entry; + +public interface Http3Headers extends Headers { + + /** + * HTTP/2 (and HTTP/3) pseudo-headers names. + */ + enum PseudoHeaderName { + /** + * {@code :method}. + */ + METHOD(":method", true), + + /** + * {@code :scheme}. + */ + SCHEME(":scheme", true), + + /** + * {@code :authority}. + */ + AUTHORITY(":authority", true), + + /** + * {@code :path}. + */ + PATH(":path", true), + + /** + * {@code :status}. + */ + STATUS(":status", false); + + private static final char PSEUDO_HEADER_PREFIX = ':'; + private static final byte PSEUDO_HEADER_PREFIX_BYTE = (byte) PSEUDO_HEADER_PREFIX; + + private final AsciiString value; + private final boolean requestOnly; + private static final CharSequenceMap PSEUDO_HEADERS = new CharSequenceMap(); + + static { + for (PseudoHeaderName pseudoHeader : PseudoHeaderName.values()) { + PSEUDO_HEADERS.add(pseudoHeader.value(), pseudoHeader); + } + } + + PseudoHeaderName(String value, boolean requestOnly) { + this.value = AsciiString.cached(value); + this.requestOnly = requestOnly; + } + + public AsciiString value() { + // Return a slice so that the buffer gets its own reader index. + return value; + } + + /** + * Indicates whether the specified header follows the pseudo-header format (begins with ':' character) + * + * @param headerName the header name to check. + * @return {@code true} if the header follow the pseudo-header format + */ + public static boolean hasPseudoHeaderFormat(CharSequence headerName) { + if (headerName instanceof AsciiString) { + final AsciiString asciiHeaderName = (AsciiString) headerName; + return asciiHeaderName.length() > 0 && asciiHeaderName.byteAt(0) == PSEUDO_HEADER_PREFIX_BYTE; + } else { + return headerName.length() > 0 && headerName.charAt(0) == PSEUDO_HEADER_PREFIX; + } + } + + /** + * Indicates whether the given header name is a valid HTTP/3 pseudo header. + * + * @param name the header name. + * @return {@code true} if the given header name is a valid HTTP/3 pseudo header, {@code false} otherwise. + */ + public static boolean isPseudoHeader(CharSequence name) { + return PSEUDO_HEADERS.contains(name); + } + + /** + * Returns the {@link PseudoHeaderName} corresponding to the specified header name. + * + * @param name the header name. + * @return corresponding {@link PseudoHeaderName} if any, {@code null} otherwise. + */ + public static PseudoHeaderName getPseudoHeader(CharSequence name) { + return PSEUDO_HEADERS.get(name); + } + + /** + * Indicates whether the pseudo-header is to be used in a request context. + * + * @return {@code true} if the pseudo-header is to be used in a request context + */ + public boolean isRequestOnly() { + return requestOnly; + } + } + + /** + * Returns an iterator over all HTTP/3 headers. The iteration order is as follows: + * 1. All pseudo headers (order not specified). + * 2. All non-pseudo headers (in insertion order). + */ + @Override + Iterator> iterator(); + + /** + * Equivalent to {@link #getAll(Object)} but no intermediate list is generated. + * @param name the name of the header to retrieve + * @return an {@link Iterator} of header values corresponding to {@code name}. + */ + Iterator valueIterator(CharSequence name); + + /** + * Sets the {@link PseudoHeaderName#METHOD} header + * + * @param value the value for the header. + * @return this instance itself. + */ + Http3Headers method(CharSequence value); + + /** + * Sets the {@link PseudoHeaderName#SCHEME} header + * + * @param value the value for the header. + * @return this instance itself. + */ + Http3Headers scheme(CharSequence value); + + /** + * Sets the {@link PseudoHeaderName#AUTHORITY} header + * + * @param value the value for the header. + * @return this instance itself. + */ + Http3Headers authority(CharSequence value); + + /** + * Sets the {@link PseudoHeaderName#PATH} header + * + * @param value the value for the header. + * @return this instance itself. + */ + Http3Headers path(CharSequence value); + + /** + * Sets the {@link PseudoHeaderName#STATUS} header + * + * @param value the value for the header. + * @return this instance itself. + */ + Http3Headers status(CharSequence value); + + /** + * Gets the {@link PseudoHeaderName#METHOD} header or {@code null} if there is no such header + * + * @return the value of the header. + */ + CharSequence method(); + + /** + * Gets the {@link PseudoHeaderName#SCHEME} header or {@code null} if there is no such header + * + * @return the value of the header. + */ + CharSequence scheme(); + + /** + * Gets the {@link PseudoHeaderName#AUTHORITY} header or {@code null} if there is no such header + * + * @return the value of the header. + */ + CharSequence authority(); + + /** + * Gets the {@link PseudoHeaderName#PATH} header or {@code null} if there is no such header + * + * @return the value of the header. + */ + CharSequence path(); + + /** + * Gets the {@link PseudoHeaderName#STATUS} header or {@code null} if there is no such header + * + * @return the value of the header. + */ + CharSequence status(); + + /** + * Returns {@code true} if a header with the {@code name} and {@code value} exists, {@code false} otherwise. + *

+ * If {@code caseInsensitive} is {@code true} then a case insensitive compare is done on the value. + * + * @param name the name of the header to find + * @param value the value of the header to find + * @param caseInsensitive {@code true} then a case insensitive compare is run to compare values. + * otherwise a case sensitive compare is run to compare values. + * @return {@code true} if its contained, {@code false} otherwise. + */ + boolean contains(CharSequence name, CharSequence value, boolean caseInsensitive); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersFrame.java new file mode 100644 index 0000000..bf02e84 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersFrame.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See HEADERS. + */ +public interface Http3HeadersFrame extends Http3RequestStreamFrame, Http3PushStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE; + } + + /** + * Returns the carried headers. + * + * @return the carried headers. + */ + Http3Headers headers(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersSink.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersSink.java new file mode 100644 index 0000000..08cb97c --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersSink.java @@ -0,0 +1,165 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.http.HttpMethod; + +import java.util.function.BiConsumer; + +import static io.netty.handler.codec.http3.Http3Headers.PseudoHeaderName.getPseudoHeader; +import static io.netty.handler.codec.http3.Http3Headers.PseudoHeaderName.hasPseudoHeaderFormat; + +/** + * {@link BiConsumer} that does add header names and values to + * {@link Http3Headers} while also validate these. + */ +final class Http3HeadersSink implements BiConsumer { + private final Http3Headers headers; + private final long maxHeaderListSize; + private final boolean validate; + private final boolean trailer; + private long headersLength; + private boolean exceededMaxLength; + private Http3HeadersValidationException validationException; + private HeaderType previousType; + private boolean request; + private int pseudoHeadersCount; + + Http3HeadersSink(Http3Headers headers, long maxHeaderListSize, boolean validate, boolean trailer) { + this.headers = headers; + this.maxHeaderListSize = maxHeaderListSize; + this.validate = validate; + this.trailer = trailer; + } + + /** + * This method must be called after the sink is used. + */ + void finish() throws Http3HeadersValidationException, Http3Exception { + if (exceededMaxLength) { + throw new Http3Exception(Http3ErrorCode.H3_EXCESSIVE_LOAD, + String.format("Header size exceeded max allowed size (%d)", maxHeaderListSize)); + } + if (validationException != null) { + throw validationException; + } + if (validate) { + if (trailer) { + if (pseudoHeadersCount != 0) { + // Trailers must not have pseudo headers. + throw new Http3HeadersValidationException("Pseudo-header(s) included in trailers."); + } + return; + } + + // Validate that all mandatory pseudo-headers are included. + if (request) { + CharSequence method = headers.method(); + // fast-path + if (pseudoHeadersCount < 2) { + // There can't be any duplicates for pseudy header names. + throw new Http3HeadersValidationException("Not all mandatory pseudo-headers included."); + } + if (HttpMethod.CONNECT.asciiName().contentEqualsIgnoreCase(method)) { + // For CONNECT we must only include: + // - :method + // - :authority + if (pseudoHeadersCount != 2 || headers.authority() == null) { + // There can't be any duplicates for pseudy header names. + throw new Http3HeadersValidationException("Not all mandatory pseudo-headers included."); + } + } else { + // For requests we must include: + // - :method + // - :scheme + // - :authority + // - :path + if (pseudoHeadersCount != 4) { + // There can't be any duplicates for pseudy header names. + throw new Http3HeadersValidationException("Not all mandatory pseudo-headers included."); + } + } + } else { + // For responses we must include: + // - :status + if (pseudoHeadersCount != 1) { + // There can't be any duplicates for pseudy header names. + throw new Http3HeadersValidationException("Not all mandatory pseudo-headers included."); + } + } + } + } + + @Override + public void accept(CharSequence name, CharSequence value) { + headersLength += QpackHeaderField.sizeOf(name, value); + exceededMaxLength |= headersLength > maxHeaderListSize; + + if (exceededMaxLength || validationException != null) { + // We don't store the header since we've already failed validation requirements. + return; + } + + if (validate) { + try { + validate(headers, name); + } catch (Http3HeadersValidationException ex) { + validationException = ex; + return; + } + } + + headers.add(name, value); + } + + private void validate(Http3Headers headers, CharSequence name) { + if (hasPseudoHeaderFormat(name)) { + if (previousType == HeaderType.REGULAR_HEADER) { + throw new Http3HeadersValidationException( + String.format("Pseudo-header field '%s' found after regular header.", name)); + } + + final Http3Headers.PseudoHeaderName pseudoHeader = getPseudoHeader(name); + if (pseudoHeader == null) { + throw new Http3HeadersValidationException( + String.format("Invalid HTTP/3 pseudo-header '%s' encountered.", name)); + } + + final HeaderType currentHeaderType = pseudoHeader.isRequestOnly() ? + HeaderType.REQUEST_PSEUDO_HEADER : HeaderType.RESPONSE_PSEUDO_HEADER; + if (previousType != null && currentHeaderType != previousType) { + throw new Http3HeadersValidationException("Mix of request and response pseudo-headers."); + } + + if (headers.contains(name)) { + // There can't be any duplicates for pseudy header names. + throw new Http3HeadersValidationException( + String.format("Pseudo-header field '%s' exists already.", name)); + } + pseudoHeadersCount++; + request = pseudoHeader.isRequestOnly(); + previousType = currentHeaderType; + } else { + previousType = HeaderType.REGULAR_HEADER; + } + } + + private enum HeaderType { + REGULAR_HEADER, + REQUEST_PSEUDO_HEADER, + RESPONSE_PSEUDO_HEADER + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersValidationException.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersValidationException.java new file mode 100644 index 0000000..c9c15ff --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3HeadersValidationException.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Thrown if {@link Http3Headers} validation fails for some reason. + */ +public final class Http3HeadersValidationException extends RuntimeException { + + /** + * Create a new instance. + * + * @param message the message. + */ + public Http3HeadersValidationException(String message) { + super(message); + } + + /** + * Create a new instance. + * + * @param message the message. + * @param cause the wrapped {@link Throwable}. + */ + public Http3HeadersValidationException(String message, Throwable cause) { + super(message, cause); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3MaxPushIdFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3MaxPushIdFrame.java new file mode 100644 index 0000000..d184d9b --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3MaxPushIdFrame.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See MAX_PUSH_ID. + */ +public interface Http3MaxPushIdFrame extends Http3ControlStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE; + } + + /** + * Returns the maximum value for a Push ID that the server can use. + * + * @return the id. + */ + long id(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushPromiseFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushPromiseFrame.java new file mode 100644 index 0000000..b944dd8 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushPromiseFrame.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See PUSH_PROMISE. + */ +public interface Http3PushPromiseFrame extends Http3RequestStreamFrame { + + @Override + default long type() { + return Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE; + } + + /** + * Returns the push id. + * + * @return the id. + */ + long id(); + + /** + * Returns the carried headers. + * + * @return the headers. + */ + Http3Headers headers(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientInitializer.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientInitializer.java new file mode 100644 index 0000000..ca8c45b --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientInitializer.java @@ -0,0 +1,61 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.quic.QuicStreamChannel; + +import static io.netty.handler.codec.http3.Http3CodecUtils.isServerInitiatedQuicStream; +import static io.netty.handler.codec.http3.Http3RequestStreamCodecState.NO_STATE; + +/** + * Abstract base class that users can extend to init HTTP/3 push-streams for clients. This initializer + * will automatically add HTTP/3 codecs etc to the {@link ChannelPipeline} as well. + */ +public abstract class Http3PushStreamClientInitializer extends ChannelInitializer { + + @Override + protected final void initChannel(QuicStreamChannel ch) { + if (isServerInitiatedQuicStream(ch)) { + throw new IllegalArgumentException("Using client push stream initializer for server stream: " + + ch.streamId()); + } + Http3CodecUtils.verifyIsUnidirectional(ch); + + Http3ConnectionHandler connectionHandler = Http3CodecUtils.getConnectionHandlerOrClose(ch.parent()); + if (connectionHandler == null) { + // connection should have been closed + return; + } + ChannelPipeline pipeline = ch.pipeline(); + Http3RequestStreamDecodeStateValidator decodeStateValidator = new Http3RequestStreamDecodeStateValidator(); + // Add the encoder and decoder in the pipeline, so we can handle Http3Frames + pipeline.addLast(connectionHandler.newCodec(NO_STATE, decodeStateValidator)); + pipeline.addLast(decodeStateValidator); + // Add the handler that will validate what we write and receive on this stream. + pipeline.addLast(connectionHandler.newPushStreamValidationHandler(ch, decodeStateValidator)); + initPushStream(ch); + } + + /** + * Initialize the {@link QuicStreamChannel} to handle {@link Http3PushStreamFrame}s. At the point of calling this + * method it is already valid to write {@link Http3PushStreamFrame}s as the codec is already in the pipeline. + * + * @param ch the {QuicStreamChannel} for the push stream. + */ + protected abstract void initPushStream(QuicStreamChannel ch); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientValidationHandler.java new file mode 100644 index 0000000..fdc944a --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamClientValidationHandler.java @@ -0,0 +1,89 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; + +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.INVALID_FRAME_READ; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.sendStreamAbandonedIfRequired; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateHeaderFrameRead; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateOnStreamClosure; + +final class Http3PushStreamClientValidationHandler + extends Http3FrameTypeInboundValidationHandler { + private final QpackAttributes qpackAttributes; + private final QpackDecoder qpackDecoder; + private final Http3RequestStreamCodecState decodeState; + + private long expectedLength = -1; + private long seenLength; + + Http3PushStreamClientValidationHandler(QpackAttributes qpackAttributes, QpackDecoder qpackDecoder, + Http3RequestStreamCodecState decodeState) { + super(Http3RequestStreamFrame.class); + this.qpackAttributes = qpackAttributes; + this.qpackDecoder = qpackDecoder; + this.decodeState = decodeState; + } + + @Override + void channelRead(ChannelHandlerContext ctx, Http3RequestStreamFrame frame) { + if (frame instanceof Http3PushPromiseFrame) { + ctx.fireChannelRead(frame); + return; + } + + if (frame instanceof Http3HeadersFrame) { + Http3HeadersFrame headersFrame = (Http3HeadersFrame) frame; + long maybeContentLength = validateHeaderFrameRead(headersFrame, ctx, decodeState); + if (maybeContentLength >= 0) { + expectedLength = maybeContentLength; + } else if (maybeContentLength == INVALID_FRAME_READ) { + return; + } + } + + if (frame instanceof Http3DataFrame) { + final Http3DataFrame dataFrame = (Http3DataFrame) frame; + long maybeContentLength = validateDataFrameRead(dataFrame, ctx, expectedLength, seenLength, false); + if (maybeContentLength >= 0) { + seenLength = maybeContentLength; + } else if (maybeContentLength == INVALID_FRAME_READ) { + return; + } + } + ctx.fireChannelRead(frame); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt == ChannelInputShutdownReadComplete.INSTANCE) { + sendStreamAbandonedIfRequired(ctx, qpackAttributes, qpackDecoder, decodeState); + if (!validateOnStreamClosure(ctx, expectedLength, seenLength, false)) { + return; + } + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public boolean isSharable() { + // This handle keeps state so we can't share it. + return false; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrame.java new file mode 100644 index 0000000..a1485ce --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrame.java @@ -0,0 +1,23 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Marker interface for frames that can be sent and received on a + * HTTP3 push stream. + */ +public interface Http3PushStreamFrame extends Http3Frame { +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidator.java new file mode 100644 index 0000000..3e48d6e --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidator.java @@ -0,0 +1,41 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Validate that the frame type is valid for a push stream. + */ +final class Http3PushStreamFrameTypeValidator implements Http3FrameTypeValidator { + + static final Http3PushStreamFrameTypeValidator INSTANCE = new Http3PushStreamFrameTypeValidator(); + + private Http3PushStreamFrameTypeValidator() { } + + @Override + public void validate(long type, boolean first) throws Http3Exception { + switch ((int) type) { + case Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE: + case Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE: + case Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE: + case Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE: + case Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE: + throw new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Unexpected frame type '" + type + "' received"); + default: + break; + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerInitializer.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerInitializer.java new file mode 100644 index 0000000..7a6e3cb --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerInitializer.java @@ -0,0 +1,79 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.quic.QuicStreamChannel; + +import static io.netty.handler.codec.http3.Http3CodecUtils.isServerInitiatedQuicStream; +import static io.netty.handler.codec.http3.Http3CodecUtils.writeVariableLengthInteger; +import static io.netty.handler.codec.http3.Http3RequestStreamCodecState.NO_STATE; +import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero; + +/** + * Abstract base class that users can extend to init HTTP/3 push-streams for servers. This initializer + * will automatically add HTTP/3 codecs etc to the {@link ChannelPipeline} as well. + */ +public abstract class Http3PushStreamServerInitializer extends ChannelInitializer { + + private final long pushId; + + protected Http3PushStreamServerInitializer(long pushId) { + this.pushId = checkPositiveOrZero(pushId, "pushId"); + } + + @Override + protected final void initChannel(QuicStreamChannel ch) { + if (!isServerInitiatedQuicStream(ch)) { + throw new IllegalArgumentException("Using server push stream initializer for client stream: " + + ch.streamId()); + } + Http3CodecUtils.verifyIsUnidirectional(ch); + + // We need to write stream type into the stream before doing anything else. + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-6.2.1 + // Just allocate 16 bytes which would be the max needed to write 2 variable length ints. + ByteBuf buffer = ch.alloc().buffer(16); + writeVariableLengthInteger(buffer, Http3CodecUtils.HTTP3_PUSH_STREAM_TYPE); + writeVariableLengthInteger(buffer, pushId); + ch.write(buffer); + + Http3ConnectionHandler connectionHandler = Http3CodecUtils.getConnectionHandlerOrClose(ch.parent()); + if (connectionHandler == null) { + // connection should have been closed + return; + } + + ChannelPipeline pipeline = ch.pipeline(); + Http3RequestStreamEncodeStateValidator encodeStateValidator = new Http3RequestStreamEncodeStateValidator(); + // Add the encoder and decoder in the pipeline so we can handle Http3Frames + pipeline.addLast(connectionHandler.newCodec(encodeStateValidator, NO_STATE)); + pipeline.addLast(encodeStateValidator); + // Add the handler that will validate what we write and receive on this stream. + pipeline.addLast(connectionHandler.newPushStreamValidationHandler(ch, NO_STATE)); + initPushStream(ch); + } + + /** + * Initialize the {@link QuicStreamChannel} to handle {@link Http3PushStreamFrame}s. At the point of calling this + * method it is already valid to write {@link Http3PushStreamFrame}s as the codec is already in the pipeline. + * + * @param ch the {QuicStreamChannel} for the push stream. + */ + protected abstract void initPushStream(QuicStreamChannel ch); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandler.java new file mode 100644 index 0000000..b8da4cd --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandler.java @@ -0,0 +1,34 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * See HTTP Message Exchanges. + */ +final class Http3PushStreamServerValidationHandler + extends Http3FrameTypeOutboundValidationHandler { + + static final Http3PushStreamServerValidationHandler INSTANCE = new Http3PushStreamServerValidationHandler(); + + private Http3PushStreamServerValidationHandler() { + super(Http3PushStreamFrame.class); + } + + @Override + public boolean isSharable() { + return true; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamCodecState.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamCodecState.java new file mode 100644 index 0000000..f0663a1 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamCodecState.java @@ -0,0 +1,66 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * State of encoding or decoding for a stream following the + * HTTP message exchange semantics + */ +interface Http3RequestStreamCodecState { + /** + * An implementation of {@link Http3RequestStreamCodecState} that managed no state. + */ + Http3RequestStreamCodecState NO_STATE = new Http3RequestStreamCodecState() { + @Override + public boolean started() { + return false; + } + + @Override + public boolean receivedFinalHeaders() { + return false; + } + + @Override + public boolean terminated() { + return false; + } + }; + + /** + * If any {@link Http3HeadersFrame} or {@link Http3DataFrame} has been received/sent on this stream. + * + * @return {@code true} if any {@link Http3HeadersFrame} or {@link Http3DataFrame} has been received/sent on this + * stream. + */ + boolean started(); + + /** + * If a final {@link Http3HeadersFrame} has been received/sent before {@link Http3DataFrame} starts. + * + * @return {@code true} if a final {@link Http3HeadersFrame} has been received/sent before {@link Http3DataFrame} + * starts + */ + boolean receivedFinalHeaders(); + + /** + * If no more frames are expected on this stream. + * + * @return {@code true} if no more frames are expected on this stream. + */ + boolean terminated(); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamDecodeStateValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamDecodeStateValidator.java new file mode 100644 index 0000000..c0db6c0 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamDecodeStateValidator.java @@ -0,0 +1,62 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.codec.http3.Http3RequestStreamEncodeStateValidator.State; + +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; +import static io.netty.handler.codec.http3.Http3RequestStreamEncodeStateValidator.evaluateFrame; +import static io.netty.handler.codec.http3.Http3RequestStreamEncodeStateValidator.isFinalHeadersReceived; +import static io.netty.handler.codec.http3.Http3RequestStreamEncodeStateValidator.isStreamStarted; +import static io.netty.handler.codec.http3.Http3RequestStreamEncodeStateValidator.isTrailersReceived; + +final class Http3RequestStreamDecodeStateValidator extends ChannelInboundHandlerAdapter + implements Http3RequestStreamCodecState { + private State state = State.None; + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + if (!(msg instanceof Http3RequestStreamFrame)) { + super.channelRead(ctx, msg); + return; + } + final Http3RequestStreamFrame frame = (Http3RequestStreamFrame) msg; + final State nextState = evaluateFrame(state, frame); + if (nextState == null) { + frameTypeUnexpected(ctx, msg); + return; + } + state = nextState; + super.channelRead(ctx, msg); + } + + @Override + public boolean started() { + return isStreamStarted(state); + } + + @Override + public boolean receivedFinalHeaders() { + return isFinalHeadersReceived(state); + } + + @Override + public boolean terminated() { + return isTrailersReceived(state); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java new file mode 100644 index 0000000..6e2460f --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamEncodeStateValidator.java @@ -0,0 +1,122 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.handler.codec.http.HttpStatusClass; + +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; + +final class Http3RequestStreamEncodeStateValidator extends ChannelOutboundHandlerAdapter + implements Http3RequestStreamCodecState { + enum State { + None, + Headers, + FinalHeaders, + Trailers + } + private State state = State.None; + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (!(msg instanceof Http3RequestStreamFrame)) { + super.write(ctx, msg, promise); + return; + } + final Http3RequestStreamFrame frame = (Http3RequestStreamFrame) msg; + final State nextState = evaluateFrame(state, frame); + if (nextState == null) { + frameTypeUnexpected(ctx, msg); + return; + } + state = nextState; + super.write(ctx, msg, promise); + } + + @Override + public boolean started() { + return isStreamStarted(state); + } + + @Override + public boolean receivedFinalHeaders() { + return isFinalHeadersReceived(state); + } + + @Override + public boolean terminated() { + return isTrailersReceived(state); + } + + /** + * Evaluates the passed frame and returns the following: + *

    + *
  • Modified {@link State} if the state should be changed.
  • + *
  • Same {@link State} as the passed {@code state} if no state change is necessary
  • + *
  • {@code null} if the frame is unexpected
  • + *
+ * + * @param state Current state. + * @param frame to evaluate. + * @return Next {@link State} or {@code null} if the frame is invalid. + */ + static State evaluateFrame(State state, Http3RequestStreamFrame frame) { + if (frame instanceof Http3PushPromiseFrame || frame instanceof Http3UnknownFrame) { + // always allow push promise frames. + return state; + } + switch (state) { + case None: + case Headers: + if (!(frame instanceof Http3HeadersFrame)) { + return null; + } + return isInformationalResponse((Http3HeadersFrame) frame) ? State.Headers : State.FinalHeaders; + case FinalHeaders: + if (frame instanceof Http3HeadersFrame) { + if (isInformationalResponse((Http3HeadersFrame) frame)) { + // Information response after final response headers + return null; + } + // trailers + return State.Trailers; + } + return state; + case Trailers: + return null; + default: + throw new Error(); + } + } + + static boolean isStreamStarted(State state) { + return state != State.None; + } + + static boolean isFinalHeadersReceived(State state) { + return isStreamStarted(state) && state != State.Headers; + } + + static boolean isTrailersReceived(State state) { + return state == State.Trailers; + } + + private static boolean isInformationalResponse(Http3HeadersFrame headersFrame) { + return HttpStatusClass.valueOf(headersFrame.headers().status()) == HttpStatusClass.INFORMATIONAL; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrame.java new file mode 100644 index 0000000..b4c7ffb --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrame.java @@ -0,0 +1,23 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Marker interface for frames that can be sent and received on a + * HTTP3 request stream. + */ +public interface Http3RequestStreamFrame extends Http3Frame { +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidator.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidator.java new file mode 100644 index 0000000..26f7044 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidator.java @@ -0,0 +1,40 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +/** + * Validate that the frame type is valid for a request stream. + */ +final class Http3RequestStreamFrameTypeValidator implements Http3FrameTypeValidator { + + static final Http3RequestStreamFrameTypeValidator INSTANCE = new Http3RequestStreamFrameTypeValidator(); + + private Http3RequestStreamFrameTypeValidator() { } + + @Override + public void validate(long type, boolean first) throws Http3Exception { + switch ((int) type) { + case Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE: + case Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE: + case Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE: + case Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE: + throw new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Unexpected frame type '" + type + "' received"); + default: + break; + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandler.java new file mode 100644 index 0000000..09492e3 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandler.java @@ -0,0 +1,135 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.handler.codec.quic.QuicException; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +/** + * {@link ChannelInboundHandlerAdapter} which makes it easy to handle + * HTTP3 request streams. + */ +public abstract class Http3RequestStreamInboundHandler extends ChannelInboundHandlerAdapter { + private static final InternalLogger logger = + InternalLoggerFactory.getInstance(Http3RequestStreamInboundHandler.class); + + @Override + public final void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + if (msg instanceof Http3UnknownFrame) { + channelRead(ctx, (Http3UnknownFrame) msg); + } else if (msg instanceof Http3HeadersFrame) { + channelRead(ctx, (Http3HeadersFrame) msg); + } else if (msg instanceof Http3DataFrame) { + channelRead(ctx, (Http3DataFrame) msg); + } else { + super.channelRead(ctx, msg); + } + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception { + if (evt == ChannelInputShutdownEvent.INSTANCE) { + channelInputClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { + if (cause instanceof QuicException) { + handleQuicException(ctx, (QuicException) cause); + } else if (cause instanceof Http3Exception) { + handleHttp3Exception(ctx, (Http3Exception) cause); + } else { + ctx.fireExceptionCaught(cause); + } + } + + /** + * Called once a {@link Http3HeadersFrame} is ready for this stream to process. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @param frame the {@link Http3HeadersFrame} that was read + * @throws Exception thrown if an error happens during processing. + */ + protected abstract void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame) throws Exception; + + /** + * Called once a {@link Http3DataFrame} is ready for this stream to process. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @param frame the {@link Http3DataFrame} that was read + * @throws Exception thrown if an error happens during processing. + */ + protected abstract void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) throws Exception; + + /** + * Called once the input is closed and so no more inbound data is received on it. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @throws Exception thrown if an error happens during processing. + */ + protected abstract void channelInputClosed(ChannelHandlerContext ctx) throws Exception; + + /** + * Called once a {@link Http3UnknownFrame} is ready for this stream to process. By default these frames are just + * released and so dropped on the floor as stated in the RFC. That said you may want to override this method if + * you use some custom frames which are not part of the main spec. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @param frame the {@link Http3UnknownFrame} that was read + */ + protected void channelRead(@SuppressWarnings("unused") ChannelHandlerContext ctx, Http3UnknownFrame frame) { + frame.release(); + } + + /** + * Called once a {@link QuicException} should be handled. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @param exception the {@link QuicException} that caused the error. + */ + protected void handleQuicException(@SuppressWarnings("unused") ChannelHandlerContext ctx, QuicException exception) { + logger.debug("Caught QuicException on channel {}", ctx.channel(), exception); + } + + /** + * Called once a {@link Http3Exception} should be handled. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @param exception the {@link Http3Exception} that caused the error. + */ + protected void handleHttp3Exception(@SuppressWarnings("unused") ChannelHandlerContext ctx, + Http3Exception exception) { + logger.error("Caught Http3Exception on channel {}", ctx.channel(), exception); + } + + /** + * Return the local control stream for this HTTP/3 connection. This can be used to send + * {@link Http3ControlStreamFrame}s to the remote peer. + * + * @param ctx the {@link ChannelHandlerContext} of this handler. + * @return the control stream. + */ + protected final QuicStreamChannel controlStream(ChannelHandlerContext ctx) { + return Http3.getLocalControlStream(ctx.channel().parent()); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInitializer.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInitializer.java new file mode 100644 index 0000000..0afba0c --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamInitializer.java @@ -0,0 +1,57 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.internal.StringUtil; + +/** + * Abstract base class that users can extend to init HTTP/3 request-streams. This initializer + * will automatically add HTTP/3 codecs etc to the {@link ChannelPipeline} as well. + */ +public abstract class Http3RequestStreamInitializer extends ChannelInitializer { + + @Override + protected final void initChannel(QuicStreamChannel ch) { + ChannelPipeline pipeline = ch.pipeline(); + Http3ConnectionHandler connectionHandler = ch.parent().pipeline().get(Http3ConnectionHandler.class); + if (connectionHandler == null) { + throw new IllegalStateException("Couldn't obtain the " + + StringUtil.simpleClassName(Http3ConnectionHandler.class) + " of the parent Channel"); + } + + Http3RequestStreamEncodeStateValidator encodeStateValidator = new Http3RequestStreamEncodeStateValidator(); + Http3RequestStreamDecodeStateValidator decodeStateValidator = new Http3RequestStreamDecodeStateValidator(); + + // Add the encoder and decoder in the pipeline so we can handle Http3Frames + pipeline.addLast(connectionHandler.newCodec(encodeStateValidator, decodeStateValidator)); + // Add the handler that will validate what we write and receive on this stream. + pipeline.addLast(encodeStateValidator); + pipeline.addLast(decodeStateValidator); + pipeline.addLast(connectionHandler.newRequestStreamValidationHandler(ch, encodeStateValidator, + decodeStateValidator)); + initRequestStream(ch); + } + + /** + * Init the {@link QuicStreamChannel} to handle {@link Http3RequestStreamFrame}s. At the point of calling this + * method it is already valid to write {@link Http3RequestStreamFrame}s as the codec is already in the pipeline. + * @param ch the {QuicStreamChannel} for the request stream. + */ + protected abstract void initRequestStream(QuicStreamChannel ch); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java new file mode 100644 index 0000000..2ef23ce --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandler.java @@ -0,0 +1,139 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; + +import java.util.function.BooleanSupplier; + +import static io.netty.handler.codec.http.HttpMethod.HEAD; +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.INVALID_FRAME_READ; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.sendStreamAbandonedIfRequired; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateClientWrite; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateDataFrameRead; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateHeaderFrameRead; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationUtils.validateOnStreamClosure; + +final class Http3RequestStreamValidationHandler extends Http3FrameTypeDuplexValidationHandler { + private final boolean server; + private final BooleanSupplier goAwayReceivedSupplier; + private final QpackAttributes qpackAttributes; + private final QpackDecoder qpackDecoder; + private final Http3RequestStreamCodecState decodeState; + private final Http3RequestStreamCodecState encodeState; + + private boolean clientHeadRequest; + private long expectedLength = -1; + private long seenLength; + + static ChannelHandler newServerValidator(QpackAttributes qpackAttributes, QpackDecoder decoder, + Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + return new Http3RequestStreamValidationHandler(true, () -> false, qpackAttributes, decoder, + encodeState, decodeState); + } + + static ChannelHandler newClientValidator(BooleanSupplier goAwayReceivedSupplier, QpackAttributes qpackAttributes, + QpackDecoder decoder, Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + return new Http3RequestStreamValidationHandler(false, goAwayReceivedSupplier, qpackAttributes, decoder, + encodeState, decodeState); + } + + private Http3RequestStreamValidationHandler(boolean server, BooleanSupplier goAwayReceivedSupplier, + QpackAttributes qpackAttributes, QpackDecoder qpackDecoder, + Http3RequestStreamCodecState encodeState, + Http3RequestStreamCodecState decodeState) { + super(Http3RequestStreamFrame.class); + this.server = server; + this.goAwayReceivedSupplier = goAwayReceivedSupplier; + this.qpackAttributes = qpackAttributes; + this.qpackDecoder = qpackDecoder; + this.decodeState = decodeState; + this.encodeState = encodeState; + } + + @Override + void write(ChannelHandlerContext ctx, Http3RequestStreamFrame frame, ChannelPromise promise) { + if (!server) { + if (!validateClientWrite(frame, promise, ctx, goAwayReceivedSupplier, encodeState)) { + return; + } + if (frame instanceof Http3HeadersFrame) { + clientHeadRequest = HEAD.asciiName().equals(((Http3HeadersFrame) frame).headers().method()); + } + } + ctx.write(frame, promise); + } + + @Override + void channelRead(ChannelHandlerContext ctx, Http3RequestStreamFrame frame) { + if (frame instanceof Http3PushPromiseFrame) { + if (server) { + // Server should not receive a push promise + // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#name-push_promise + frameTypeUnexpected(ctx, frame); + } else { + ctx.fireChannelRead(frame); + } + return; + } + + if (frame instanceof Http3HeadersFrame) { + Http3HeadersFrame headersFrame = (Http3HeadersFrame) frame; + long maybeContentLength = validateHeaderFrameRead(headersFrame, ctx, decodeState); + if (maybeContentLength >= 0) { + expectedLength = maybeContentLength; + } else if (maybeContentLength == INVALID_FRAME_READ) { + return; + } + } + + if (frame instanceof Http3DataFrame) { + final Http3DataFrame dataFrame = (Http3DataFrame) frame; + long maybeContentLength = validateDataFrameRead(dataFrame, ctx, expectedLength, seenLength, + clientHeadRequest); + if (maybeContentLength >= 0) { + seenLength = maybeContentLength; + } else if (maybeContentLength == INVALID_FRAME_READ) { + return; + } + } + + ctx.fireChannelRead(frame); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt == ChannelInputShutdownReadComplete.INSTANCE) { + sendStreamAbandonedIfRequired(ctx, qpackAttributes, qpackDecoder, decodeState); + if (!validateOnStreamClosure(ctx, expectedLength, seenLength, clientHeadRequest)) { + return; + } + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public boolean isSharable() { + // This handle keeps state so we can't share it. + return false; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationUtils.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationUtils.java new file mode 100644 index 0000000..9c580bf --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3RequestStreamValidationUtils.java @@ -0,0 +1,158 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.internal.StringUtil; + +import java.util.function.BooleanSupplier; + +import static io.netty.handler.codec.http.HttpUtil.normalizeAndGetContentLength; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_MESSAGE_ERROR; +import static io.netty.handler.codec.http3.Http3FrameValidationUtils.frameTypeUnexpected; + +final class Http3RequestStreamValidationUtils { + static final long CONTENT_LENGTH_NOT_MODIFIED = -1; + static final long INVALID_FRAME_READ = -2; + + private Http3RequestStreamValidationUtils() { + // No instances + } + + /** + * Validate write of the passed {@link Http3RequestStreamFrame} for a client and takes appropriate error handling + * for invalid frames. + * + * @param frame to validate. + * @param promise for the write. + * @param ctx for the handler. + * @param goAwayReceivedSupplier for the channel. + * @param encodeState for the stream. + * @return {@code true} if the frame is valid. + */ + static boolean validateClientWrite(Http3RequestStreamFrame frame, ChannelPromise promise, ChannelHandlerContext ctx, + BooleanSupplier goAwayReceivedSupplier, + Http3RequestStreamCodecState encodeState) { + if (goAwayReceivedSupplier.getAsBoolean() && !encodeState.started()) { + String type = StringUtil.simpleClassName(frame); + ReferenceCountUtil.release(frame); + promise.setFailure(new Http3Exception(Http3ErrorCode.H3_FRAME_UNEXPECTED, + "Frame of type " + type + " unexpected as we received a GOAWAY already.")); + ctx.close(); + return false; + } + if (frame instanceof Http3PushPromiseFrame) { + // Only supported on the server. + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-4.1 + frameTypeUnexpected(promise, frame); + return false; + } + return true; + } + + static long validateHeaderFrameRead(Http3HeadersFrame headersFrame, ChannelHandlerContext ctx, + Http3RequestStreamCodecState decodeState) { + if (headersFrame.headers().contains(HttpHeaderNames.CONNECTION)) { + headerUnexpected(ctx, headersFrame, "connection header included"); + return INVALID_FRAME_READ; + } + CharSequence value = headersFrame.headers().get(HttpHeaderNames.TE); + if (value != null && !HttpHeaderValues.TRAILERS.equals(value)) { + headerUnexpected(ctx, headersFrame, "te header field included with invalid value: " + value); + return INVALID_FRAME_READ; + } + if (decodeState.receivedFinalHeaders()) { + long length = normalizeAndGetContentLength( + headersFrame.headers().getAll(HttpHeaderNames.CONTENT_LENGTH), false, true); + if (length != CONTENT_LENGTH_NOT_MODIFIED) { + headersFrame.headers().setLong(HttpHeaderNames.CONTENT_LENGTH, length); + } + return length; + } + return CONTENT_LENGTH_NOT_MODIFIED; + } + + static long validateDataFrameRead(Http3DataFrame dataFrame, ChannelHandlerContext ctx, + long expectedLength, long seenLength, boolean clientHeadRequest) { + try { + return verifyContentLength(dataFrame.content().readableBytes(), expectedLength, seenLength, false, + clientHeadRequest); + } catch (Http3Exception e) { + ReferenceCountUtil.release(dataFrame); + failStream(ctx, e); + return INVALID_FRAME_READ; + } + } + + static boolean validateOnStreamClosure(ChannelHandlerContext ctx, long expectedLength, long seenLength, + boolean clientHeadRequest) { + try { + verifyContentLength(0, expectedLength, seenLength, true, clientHeadRequest); + return true; + } catch (Http3Exception e) { + ctx.fireExceptionCaught(e); + Http3CodecUtils.streamError(ctx, e.errorCode()); + return false; + } + } + + static void sendStreamAbandonedIfRequired(ChannelHandlerContext ctx, QpackAttributes qpackAttributes, + QpackDecoder qpackDecoder, Http3RequestStreamCodecState decodeState) { + if (!qpackAttributes.dynamicTableDisabled() && !decodeState.terminated()) { + final long streamId = ((QuicStreamChannel) ctx.channel()).streamId(); + if (qpackAttributes.decoderStreamAvailable()) { + qpackDecoder.streamAbandoned(qpackAttributes.decoderStream(), streamId); + } else { + qpackAttributes.whenDecoderStreamAvailable(future -> { + if (future.isSuccess()) { + qpackDecoder.streamAbandoned(qpackAttributes.decoderStream(), streamId); + } + }); + } + } + } + + private static void headerUnexpected(ChannelHandlerContext ctx, Http3RequestStreamFrame frame, String msg) { + // We should close the stream. + // See https://quicwg.org/base-drafts/draft-ietf-quic-http.html#section-4.1.1 + ReferenceCountUtil.release(frame); + failStream(ctx, new Http3Exception(H3_MESSAGE_ERROR, msg)); + } + + private static void failStream(ChannelHandlerContext ctx, Http3Exception cause) { + ctx.fireExceptionCaught(cause); + Http3CodecUtils.streamError(ctx, cause.errorCode()); + } + + // See https://tools.ietf.org/html/draft-ietf-quic-http-34#section-4.1.3 + private static long verifyContentLength(int length, long expectedLength, long seenLength, boolean end, + boolean clientHeadRequest) throws Http3Exception { + seenLength += length; + if (expectedLength != -1 && (seenLength > expectedLength || + (!clientHeadRequest && end && seenLength != expectedLength))) { + throw new Http3Exception( + H3_MESSAGE_ERROR, "Expected content-length " + expectedLength + + " != " + seenLength + "."); + } + return seenLength; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerConnectionHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerConnectionHandler.java new file mode 100644 index 0000000..238357f --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerConnectionHandler.java @@ -0,0 +1,93 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPipeline; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.internal.ObjectUtil; + +import java.util.function.LongFunction; + +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; + + +/** + * Handler that handles HTTP3 for the server-side. + */ +public final class Http3ServerConnectionHandler extends Http3ConnectionHandler { + private final ChannelHandler requestStreamHandler; + + /** + * Create a new instance. + * + * @param requestStreamHandler the {@link ChannelHandler} that is used for each new request stream. + * This handler will receive {@link Http3HeadersFrame} and {@link Http3DataFrame}s. + */ + public Http3ServerConnectionHandler(ChannelHandler requestStreamHandler) { + this(requestStreamHandler, null, null, null, true); + } + + /** + * Create a new instance. + * @param requestStreamHandler the {@link ChannelHandler} that is used for each new request stream. + * This handler will receive {@link Http3HeadersFrame} and + * {@link Http3DataFrame}s. + * @param inboundControlStreamHandler the {@link ChannelHandler} which will be notified about + * {@link Http3RequestStreamFrame}s or {@code null} if the user is not + * interested in these. + * @param unknownInboundStreamHandlerFactory the {@link LongFunction} that will provide a custom + * {@link ChannelHandler} for unknown inbound stream types or + * {@code null} if no special handling should be done. + * @param localSettings the local {@link Http3SettingsFrame} that should be sent to the + * remote peer or {@code null} if the default settings should be used. + * @param disableQpackDynamicTable If QPACK dynamic table should be disabled. + */ + public Http3ServerConnectionHandler(ChannelHandler requestStreamHandler, + ChannelHandler inboundControlStreamHandler, + LongFunction unknownInboundStreamHandlerFactory, + Http3SettingsFrame localSettings, boolean disableQpackDynamicTable) { + super(true, inboundControlStreamHandler, unknownInboundStreamHandlerFactory, localSettings, + disableQpackDynamicTable); + this.requestStreamHandler = ObjectUtil.checkNotNull(requestStreamHandler, "requestStreamHandler"); + } + + @Override + void initBidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel streamChannel) { + ChannelPipeline pipeline = streamChannel.pipeline(); + Http3RequestStreamEncodeStateValidator encodeStateValidator = new Http3RequestStreamEncodeStateValidator(); + Http3RequestStreamDecodeStateValidator decodeStateValidator = new Http3RequestStreamDecodeStateValidator(); + // Add the encoder and decoder in the pipeline so we can handle Http3Frames + pipeline.addLast(newCodec(encodeStateValidator, decodeStateValidator)); + pipeline.addLast(encodeStateValidator); + pipeline.addLast(decodeStateValidator); + pipeline.addLast(newRequestStreamValidationHandler(streamChannel, encodeStateValidator, decodeStateValidator)); + pipeline.addLast(requestStreamHandler); + } + + @Override + void initUnidirectionalStream(ChannelHandlerContext ctx, QuicStreamChannel streamChannel) { + final Long maxTableCapacity = remoteControlStreamHandler.localSettings() + .get(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY); + streamChannel.pipeline().addLast( + new Http3UnidirectionalStreamInboundServerHandler(codecFactory, + localControlStreamHandler, remoteControlStreamHandler, + unknownInboundStreamHandlerFactory, + () -> new QpackEncoderHandler(maxTableCapacity, qpackDecoder), + () -> new QpackDecoderHandler(qpackEncoder))); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerPushStreamManager.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerPushStreamManager.java new file mode 100644 index 0000000..d4491d3 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3ServerPushStreamManager.java @@ -0,0 +1,289 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandler; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamChannelBootstrap; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; + +import java.util.concurrent.ConcurrentMap; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; +import java.util.function.UnaryOperator; + +import static io.netty.handler.codec.http3.Http3.maxPushIdReceived; +import static io.netty.handler.codec.http3.Http3CodecUtils.connectionError; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_ID_ERROR; +import static io.netty.util.internal.PlatformDependent.newConcurrentHashMap; +import static java.util.Objects.requireNonNull; +import static java.util.concurrent.atomic.AtomicLongFieldUpdater.newUpdater; + +/** + * A manager for push streams + * for a server. New push streams can be initiated using the various {@code newPushStream} methods. It is required to + * add the {@link ChannelHandler} returned from {@link #controlStreamListener()} to the {@link QuicChannel} associated + * with this manager. + */ +public final class Http3ServerPushStreamManager { + private static final AtomicLongFieldUpdater nextIdUpdater = + newUpdater(Http3ServerPushStreamManager.class, "nextId"); + private static final Object CANCELLED_STREAM = new Object(); + private static final Object PUSH_ID_GENERATED = new Object(); + private static final Object AWAITING_STREAM_ESTABLISHMENT = new Object(); + + private final QuicChannel channel; + private final ConcurrentMap pushStreams; + private final ChannelInboundHandler controlStreamListener; + + private volatile long nextId; + + /** + * Creates a new instance. + * + * @param channel for which this manager is created. + */ + public Http3ServerPushStreamManager(QuicChannel channel) { + this(channel, 8); + } + + /** + * Creates a new instance. + * + * @param channel for which this manager is created. + * @param initialPushStreamsCountHint a hint for the number of push streams that may be created. + */ + public Http3ServerPushStreamManager(QuicChannel channel, int initialPushStreamsCountHint) { + this.channel = requireNonNull(channel, "channel"); + pushStreams = newConcurrentHashMap(initialPushStreamsCountHint); + controlStreamListener = new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + if (msg instanceof Http3CancelPushFrame) { + final long pushId = ((Http3CancelPushFrame) msg).id(); + if (pushId >= nextId) { + connectionError(ctx, H3_ID_ERROR, "CANCEL_PUSH id greater than the last known id", true); + return; + } + + pushStreams.computeIfPresent(pushId, (id, existing) -> { + if (existing == AWAITING_STREAM_ESTABLISHMENT) { + return CANCELLED_STREAM; + } + if (existing == PUSH_ID_GENERATED) { + throw new IllegalStateException("Unexpected push stream state " + existing + + " for pushId: " + id); + } + assert existing instanceof QuicStreamChannel; + ((QuicStreamChannel) existing).close(); + // remove the push stream from the map. + return null; + }); + } + ReferenceCountUtil.release(msg); + } + }; + } + + /** + * Returns {@code true} if server push is allowed at this point. + * + * @return {@code true} if server push is allowed at this point. + */ + public boolean isPushAllowed() { + return isPushAllowed(maxPushIdReceived(channel)); + } + + /** + * Reserves a push ID to be used to create a new push stream subsequently. A push ID can only be used to create + * exactly one push stream. + * + * @return Next push ID. + * @throws IllegalStateException If it is not allowed to create any more push streams on the associated + * {@link QuicChannel}. Use {@link #isPushAllowed()} to check if server push is allowed. + */ + public long reserveNextPushId() { + final long maxPushId = maxPushIdReceived(channel); + if (isPushAllowed(maxPushId)) { + return nextPushId(); + } + throw new IllegalStateException("MAX allowed push ID: " + maxPushId + ", next push ID: " + nextId); + } + + /** + * Returns a new HTTP/3 push-stream that will use the given {@link ChannelHandler} + * to dispatch {@link Http3PushStreamFrame}s too. The needed HTTP/3 codecs are automatically added to the + * pipeline as well. + * + * @param pushId for the push stream. This MUST be obtained using {@link #reserveNextPushId()}. + * @param handler the {@link ChannelHandler} to add. Can be {@code null}. + * @return the {@link Future} that will be notified once the push-stream was opened. + */ + public Future newPushStream(long pushId, ChannelHandler handler) { + final Promise promise = channel.eventLoop().newPromise(); + newPushStream(pushId, handler, promise); + return promise; + } + + /** + * Returns a new HTTP/3 push-stream that will use the given {@link ChannelHandler} + * to dispatch {@link Http3PushStreamFrame}s too. The needed HTTP/3 codecs are automatically added to the + * pipeline as well. + * + * @param pushId for the push stream. This MUST be obtained using {@link #reserveNextPushId()}. + * @param handler the {@link ChannelHandler} to add. Can be {@code null}. + * @param promise to indicate creation of the push stream. + */ + public void newPushStream(long pushId, ChannelHandler handler, Promise promise) { + validatePushId(pushId); + channel.createStream(QuicStreamType.UNIDIRECTIONAL, pushStreamInitializer(pushId, handler), promise); + setupCancelPushIfStreamCreationFails(pushId, promise, channel); + } + + /** + * Returns a new HTTP/3 push-stream that will use the given {@link ChannelHandler} + * to dispatch {@link Http3PushStreamFrame}s too. The needed HTTP/3 codecs are automatically added to the + * pipeline as well. + * + * @param pushId for the push stream. This MUST be obtained using {@link #reserveNextPushId()}. + * @param handler the {@link ChannelHandler} to add. Can be {@code null}. + * @param bootstrapConfigurator {@link UnaryOperator} to configure the {@link QuicStreamChannelBootstrap} used. + * @param promise to indicate creation of the push stream. + */ + public void newPushStream(long pushId, ChannelHandler handler, + UnaryOperator bootstrapConfigurator, + Promise promise) { + validatePushId(pushId); + QuicStreamChannelBootstrap bootstrap = bootstrapConfigurator.apply(channel.newStreamBootstrap()); + bootstrap.type(QuicStreamType.UNIDIRECTIONAL) + .handler(pushStreamInitializer(pushId, handler)) + .create(promise); + setupCancelPushIfStreamCreationFails(pushId, promise, channel); + } + + /** + * A {@link ChannelInboundHandler} to be added to the {@link QuicChannel} associated with this + * {@link Http3ServerPushStreamManager} to listen to control stream frames. + * + * @return {@link ChannelInboundHandler} to be added to the {@link QuicChannel} associated with this + * {@link Http3ServerPushStreamManager} to listen to control stream frames. + */ + public ChannelInboundHandler controlStreamListener() { + return controlStreamListener; + } + + private boolean isPushAllowed(long maxPushId) { + return nextId <= maxPushId; + } + + private long nextPushId() { + final long pushId = nextIdUpdater.getAndIncrement(this); + pushStreams.put(pushId, PUSH_ID_GENERATED); + return pushId; + } + + private void validatePushId(long pushId) { + if (!pushStreams.replace(pushId, PUSH_ID_GENERATED, AWAITING_STREAM_ESTABLISHMENT)) { + throw new IllegalArgumentException("Unknown push ID: " + pushId); + } + } + + private Http3PushStreamServerInitializer pushStreamInitializer(long pushId, ChannelHandler handler) { + final Http3PushStreamServerInitializer initializer; + if (handler instanceof Http3PushStreamServerInitializer) { + initializer = (Http3PushStreamServerInitializer) handler; + } else { + initializer = null; + } + return new Http3PushStreamServerInitializer(pushId) { + @Override + protected void initPushStream(QuicStreamChannel ch) { + ch.pipeline().addLast(new ChannelInboundHandlerAdapter() { + private boolean stateUpdated; + + @Override + public void channelActive(ChannelHandlerContext ctx) { + if (!stateUpdated) { + updatePushStreamsMap(); + } + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + if (!stateUpdated && ctx.channel().isActive()) { + updatePushStreamsMap(); + } + } + + private void updatePushStreamsMap() { + assert !stateUpdated; + stateUpdated = true; + pushStreams.compute(pushId, (id, existing) -> { + if (existing == AWAITING_STREAM_ESTABLISHMENT) { + return ch; + } + if (existing == CANCELLED_STREAM) { + ch.close(); + return null; // remove push stream. + } + throw new IllegalStateException("Unexpected push stream state " + + existing + " for pushId: " + id); + }); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt == ChannelInputShutdownReadComplete.INSTANCE) { + pushStreams.remove(pushId); + } + ctx.fireUserEventTriggered(evt); + } + }); + if (initializer != null) { + initializer.initPushStream(ch); + } else if (handler != null) { + ch.pipeline().addLast(handler); + } + } + }; + } + + private static void setupCancelPushIfStreamCreationFails(long pushId, Future future, + QuicChannel channel) { + if (future.isDone()) { + sendCancelPushIfFailed(future, pushId, channel); + } else { + future.addListener(f -> sendCancelPushIfFailed(future, pushId, channel)); + } + } + + private static void sendCancelPushIfFailed(Future future, long pushId, QuicChannel channel) { + // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#name-cancel_push + // If we can not establish the stream, we can not send the promised push response, so send a CANCEL_PUSH + if (!future.isSuccess()) { + final QuicStreamChannel localControlStream = Http3.getLocalControlStream(channel); + assert localControlStream != null; + localControlStream.writeAndFlush(new DefaultHttp3CancelPushFrame(pushId)); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3SettingsFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3SettingsFrame.java new file mode 100644 index 0000000..ed0de15 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3SettingsFrame.java @@ -0,0 +1,74 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import java.util.Map; + +/** + * See SETTINGS. + */ +public interface Http3SettingsFrame extends Http3ControlStreamFrame, Iterable> { + + /** + * See + * SETTINGS_QPACK_MAX_TABLE_CAPACITY. + */ + long HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY = 0x1; + /** + * See + * SETTINGS_QPACK_BLOCKED_STREAMS. + */ + long HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS = 0x7; + /** + * See + * SETTINGS_MAX_FIELD_SECTION_SIZE. + */ + long HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE = 0x6; + + @Override + default long type() { + return Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE; + } + + /** + * Get a setting from the frame. + * + * @param key the key of the setting. + * @return the value of the setting or {@code null} if none was found with the given key. + */ + Long get(long key); + + /** + * Get a setting from the frame. + * + * @param key the key of the setting. + * @param defaultValue If the setting does not exist. + * @return the value of the setting or {@code defaultValue} if none was found with the given key. + */ + default Long getOrDefault(long key, long defaultValue) { + final Long val = get(key); + return val == null ? defaultValue : val; + } + + /** + * Put a setting in the frame. + * + * @param key the key of the setting + * @param value the value of the setting. + * @return the previous stored valued for the given key or {@code null} if none was stored before. + */ + Long put(long key, Long value); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundClientHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundClientHandler.java new file mode 100644 index 0000000..c75a7f5 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundClientHandler.java @@ -0,0 +1,59 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http3.Http3FrameCodec.Http3FrameCodecFactory; + +import java.util.function.LongFunction; +import java.util.function.Supplier; + +final class Http3UnidirectionalStreamInboundClientHandler extends Http3UnidirectionalStreamInboundHandler { + private final LongFunction pushStreamHandlerFactory; + + Http3UnidirectionalStreamInboundClientHandler( + Http3FrameCodecFactory codecFactory, + Http3ControlStreamInboundHandler localControlStreamHandler, + Http3ControlStreamOutboundHandler remoteControlStreamHandler, + LongFunction unknownStreamHandlerFactory, + LongFunction pushStreamHandlerFactory, + Supplier qpackEncoderHandlerFactory, Supplier qpackDecoderHandlerFactory) { + super(codecFactory, localControlStreamHandler, remoteControlStreamHandler, unknownStreamHandlerFactory, + qpackEncoderHandlerFactory, qpackDecoderHandlerFactory); + this.pushStreamHandlerFactory = pushStreamHandlerFactory == null ? __ -> ReleaseHandler.INSTANCE : + pushStreamHandlerFactory; + } + + @Override + void initPushStream(ChannelHandlerContext ctx, long pushId) { + // See https://tools.ietf.org/html/draft-ietf-quic-http-32#section-4.4 + Long maxPushId = remoteControlStreamHandler.sentMaxPushId(); + if (maxPushId == null) { + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_ID_ERROR, + "Received push stream before sending MAX_PUSH_ID frame.", false); + } else if (maxPushId < pushId) { + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_ID_ERROR, + "Received push stream with ID " + pushId + " greater than the max push ID " + maxPushId + + '.', false); + } else { + // Replace this handler with the actual push stream handlers. + final ChannelHandler pushStreamHandler = pushStreamHandlerFactory.apply(pushId); + ctx.pipeline().replace(this, null, pushStreamHandler); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandler.java new file mode 100644 index 0000000..f0cdccb --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandler.java @@ -0,0 +1,191 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.http3.Http3FrameCodec.Http3FrameCodecFactory; +import io.netty.util.AttributeKey; +import io.netty.util.ReferenceCountUtil; + +import java.util.List; +import java.util.function.LongFunction; +import java.util.function.Supplier; + +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CONTROL_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_PUSH_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_QPACK_DECODER_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_QPACK_ENCODER_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3RequestStreamCodecState.NO_STATE; + +/** + * {@link ByteToMessageDecoder} which helps to detect the type of unidirectional stream. + */ +abstract class Http3UnidirectionalStreamInboundHandler extends ByteToMessageDecoder { + private static final AttributeKey REMOTE_CONTROL_STREAM = AttributeKey.valueOf("H3_REMOTE_CONTROL_STREAM"); + private static final AttributeKey REMOTE_QPACK_DECODER_STREAM = + AttributeKey.valueOf("H3_REMOTE_QPACK_DECODER_STREAM"); + private static final AttributeKey REMOTE_QPACK_ENCODER_STREAM = + AttributeKey.valueOf("H3_REMOTE_QPACK_ENCODER_STREAM"); + + final Http3FrameCodecFactory codecFactory; + final Http3ControlStreamInboundHandler localControlStreamHandler; + final Http3ControlStreamOutboundHandler remoteControlStreamHandler; + final Supplier qpackEncoderHandlerFactory; + final Supplier qpackDecoderHandlerFactory; + final LongFunction unknownStreamHandlerFactory; + + Http3UnidirectionalStreamInboundHandler(Http3FrameCodecFactory codecFactory, + Http3ControlStreamInboundHandler localControlStreamHandler, + Http3ControlStreamOutboundHandler remoteControlStreamHandler, + LongFunction unknownStreamHandlerFactory, + Supplier qpackEncoderHandlerFactory, + Supplier qpackDecoderHandlerFactory) { + this.codecFactory = codecFactory; + this.localControlStreamHandler = localControlStreamHandler; + this.remoteControlStreamHandler = remoteControlStreamHandler; + this.qpackEncoderHandlerFactory = qpackEncoderHandlerFactory; + this.qpackDecoderHandlerFactory = qpackDecoderHandlerFactory; + if (unknownStreamHandlerFactory == null) { + // If the user did not specify an own factory just drop all bytes on the floor. + unknownStreamHandlerFactory = type -> ReleaseHandler.INSTANCE; + } + this.unknownStreamHandlerFactory = unknownStreamHandlerFactory; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) { + if (!in.isReadable()) { + return; + } + int len = Http3CodecUtils.numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + if (in.readableBytes() < len) { + return; + } + long type = Http3CodecUtils.readVariableLengthInteger(in, len); + switch ((int) type) { + case HTTP3_CONTROL_STREAM_TYPE: + initControlStream(ctx); + break; + case HTTP3_PUSH_STREAM_TYPE: + int pushIdLen = Http3CodecUtils.numBytesForVariableLengthInteger(in.getByte(in.readerIndex())); + if (in.readableBytes() < pushIdLen) { + return; + } + long pushId = Http3CodecUtils.readVariableLengthInteger(in, pushIdLen); + initPushStream(ctx, pushId); + break; + case HTTP3_QPACK_ENCODER_STREAM_TYPE: + // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#enc-dec-stream-def + initQpackEncoderStream(ctx); + break; + case HTTP3_QPACK_DECODER_STREAM_TYPE: + // See https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#enc-dec-stream-def + initQpackDecoderStream(ctx); + break; + default: + initUnknownStream(ctx, type); + break; + } + } + + /** + * Called if the current {@link Channel} is a + * control stream. + */ + private void initControlStream(ChannelHandlerContext ctx) { + if (ctx.channel().parent().attr(REMOTE_CONTROL_STREAM).setIfAbsent(true) == null) { + ctx.pipeline().addLast(localControlStreamHandler); + // Replace this handler with the codec now. + ctx.pipeline().replace(this, null, + codecFactory.newCodec(Http3ControlStreamFrameTypeValidator.INSTANCE, NO_STATE, + NO_STATE)); + } else { + // Only one control stream is allowed. + // See https://quicwg.org/base-drafts/draft-ietf-quic-http.html#section-6.2.1 + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Received multiple control streams.", false); + } + } + + private boolean ensureStreamNotExistsYet(ChannelHandlerContext ctx, AttributeKey key) { + return ctx.channel().parent().attr(key).setIfAbsent(true) == null; + } + + /** + * Called if the current {@link Channel} is a + * push stream. + */ + abstract void initPushStream(ChannelHandlerContext ctx, long id); + + /** + * Called if the current {@link Channel} is a + * + * QPACK encoder stream. + */ + private void initQpackEncoderStream(ChannelHandlerContext ctx) { + if (ensureStreamNotExistsYet(ctx, REMOTE_QPACK_ENCODER_STREAM)) { + // Just drop stuff on the floor as we dont support dynamic table atm. + ctx.pipeline().replace(this, null, qpackEncoderHandlerFactory.get()); + } else { + // Only one stream is allowed. + // See https://www.ietf.org/archive/id/draft-ietf-quic-qpack-19.html#section-4.2 + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Received multiple QPACK encoder streams.", false); + } + } + /** + * Called if the current {@link Channel} is a + * + * QPACK decoder stream. + */ + private void initQpackDecoderStream(ChannelHandlerContext ctx) { + if (ensureStreamNotExistsYet(ctx, REMOTE_QPACK_DECODER_STREAM)) { + ctx.pipeline().replace(this, null, qpackDecoderHandlerFactory.get()); + } else { + // Only one stream is allowed. + // See https://www.ietf.org/archive/id/draft-ietf-quic-qpack-19.html#section-4.2 + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Received multiple QPACK decoder streams.", false); + } + } + + /** + * Called if we couldn't detect the stream type of the current {@link Channel}. Let's release everything that + * we receive on this stream. + */ + private void initUnknownStream(ChannelHandlerContext ctx, long streamType) { + ctx.pipeline().replace(this, null, unknownStreamHandlerFactory.apply(streamType)); + } + + static final class ReleaseHandler extends ChannelInboundHandlerAdapter { + static final ReleaseHandler INSTANCE = new ReleaseHandler(); + + @Override + public boolean isSharable() { + return true; + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + ReferenceCountUtil.release(msg); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundServerHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundServerHandler.java new file mode 100644 index 0000000..63afef0 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundServerHandler.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.http3.Http3FrameCodec.Http3FrameCodecFactory; + +import java.util.function.LongFunction; +import java.util.function.Supplier; + +final class Http3UnidirectionalStreamInboundServerHandler extends Http3UnidirectionalStreamInboundHandler { + + Http3UnidirectionalStreamInboundServerHandler(Http3FrameCodecFactory codecFactory, + Http3ControlStreamInboundHandler localControlStreamHandler, + Http3ControlStreamOutboundHandler remoteControlStreamHandler, + LongFunction unknownStreamHandlerFactory, + Supplier qpackEncoderHandlerFactory, + Supplier qpackDecoderHandlerFactory) { + super(codecFactory, localControlStreamHandler, remoteControlStreamHandler, unknownStreamHandlerFactory, + qpackEncoderHandlerFactory, qpackDecoderHandlerFactory); + } + + @Override + void initPushStream(ChannelHandlerContext ctx, long id) { + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.H3_STREAM_CREATION_ERROR, + "Server received push stream.", false); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnknownFrame.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnknownFrame.java new file mode 100644 index 0000000..0ebb3e1 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/Http3UnknownFrame.java @@ -0,0 +1,67 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufHolder; + +/** + * Unknown HTTP3 frame. + * These frames are valid on all stream types. + *
+ *    HTTP/3 Frame Format {
+ *      Type (i),
+ *      Length (i),
+ *      Frame Payload (..),
+ *    }
+ * 
+ */ +public interface Http3UnknownFrame extends + Http3RequestStreamFrame, Http3PushStreamFrame, Http3ControlStreamFrame, ByteBufHolder { + + /** + * Return the payload length of the frame. + * + * @return the length. + */ + default long length() { + return content().readableBytes(); + } + + @Override + Http3UnknownFrame copy(); + + @Override + Http3UnknownFrame duplicate(); + + @Override + Http3UnknownFrame retainedDuplicate(); + + @Override + Http3UnknownFrame replace(ByteBuf content); + + @Override + Http3UnknownFrame retain(); + + @Override + Http3UnknownFrame retain(int increment); + + @Override + Http3UnknownFrame touch(); + + @Override + Http3UnknownFrame touch(Object hint); +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/HttpConversionUtil.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/HttpConversionUtil.java new file mode 100644 index 0000000..e42b66c --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/HttpConversionUtil.java @@ -0,0 +1,645 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, version 2.0 (the + * "License"); you may not use this file except in compliance with the License. You may obtain a + * copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.handler.codec.UnsupportedValueConverter; +import io.netty.handler.codec.http.DefaultFullHttpRequest; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.DefaultHttpRequest; +import io.netty.handler.codec.http.DefaultHttpResponse; +import io.netty.handler.codec.http.FullHttpMessage; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpMessage; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.handler.codec.http.HttpUtil; +import io.netty.handler.codec.http.HttpVersion; +import io.netty.util.AsciiString; +import io.netty.util.internal.InternalThreadLocalMap; + +import java.net.URI; +import java.util.Iterator; +import java.util.List; +import java.util.Map.Entry; + +import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; +import static io.netty.handler.codec.http.HttpHeaderNames.COOKIE; +import static io.netty.handler.codec.http.HttpHeaderNames.TE; +import static io.netty.handler.codec.http.HttpHeaderValues.TRAILERS; +import static io.netty.handler.codec.http.HttpResponseStatus.parseLine; +import static io.netty.handler.codec.http.HttpScheme.HTTP; +import static io.netty.handler.codec.http.HttpScheme.HTTPS; +import static io.netty.handler.codec.http.HttpUtil.isAsteriskForm; +import static io.netty.handler.codec.http.HttpUtil.isOriginForm; +import static io.netty.util.AsciiString.EMPTY_STRING; +import static io.netty.util.AsciiString.contentEqualsIgnoreCase; +import static io.netty.util.AsciiString.indexOf; +import static io.netty.util.AsciiString.trim; +import static io.netty.util.ByteProcessor.FIND_COMMA; +import static io.netty.util.ByteProcessor.FIND_SEMI_COLON; +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static io.netty.util.internal.StringUtil.isNullOrEmpty; +import static io.netty.util.internal.StringUtil.length; +import static io.netty.util.internal.StringUtil.unescapeCsvFields; + +/** + * Provides utility methods and constants for the HTTP/3 to HTTP conversion + */ +public final class HttpConversionUtil { + /** + * The set of headers that should not be directly copied when converting headers from HTTP to HTTP/3. + */ + private static final CharSequenceMap HTTP_TO_HTTP3_HEADER_BLACKLIST = + new CharSequenceMap<>(); + static { + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(CONNECTION, EMPTY_STRING); + @SuppressWarnings("deprecation") + AsciiString keepAlive = HttpHeaderNames.KEEP_ALIVE; + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(keepAlive, EMPTY_STRING); + @SuppressWarnings("deprecation") + AsciiString proxyConnection = HttpHeaderNames.PROXY_CONNECTION; + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(proxyConnection, EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(HttpHeaderNames.TRANSFER_ENCODING, EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(HttpHeaderNames.HOST, EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(HttpHeaderNames.UPGRADE, EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(ExtensionHeaderNames.STREAM_ID.text(), EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(ExtensionHeaderNames.SCHEME.text(), EMPTY_STRING); + HTTP_TO_HTTP3_HEADER_BLACKLIST.add(ExtensionHeaderNames.PATH.text(), EMPTY_STRING); + } + + /** + * [RFC 7540], 8.1.2.3 states the path must not + * be empty, and instead should be {@code /}. + */ + private static final AsciiString EMPTY_REQUEST_PATH = AsciiString.cached("/"); + + private HttpConversionUtil() { + } + + /** + * Provides the HTTP header extensions used to carry HTTP/3 information in HTTP objects + */ + public enum ExtensionHeaderNames { + /** + * HTTP extension header which will identify the stream id from the HTTP/3 event(s) responsible for + * generating an {@code HttpObject} + *

+ * {@code "x-http3-stream-id"} + */ + STREAM_ID("x-http3-stream-id"), + /** + * HTTP extension header which will identify the scheme pseudo header from the HTTP/3 event(s) responsible for + * generating an {@code HttpObject} + *

+ * {@code "x-http3-scheme"} + */ + SCHEME("x-http3-scheme"), + /** + * HTTP extension header which will identify the path pseudo header from the HTTP/3 event(s) responsible for + * generating an {@code HttpObject} + *

+ * {@code "x-http3-path"} + */ + PATH("x-http3-path"), + /** + * HTTP extension header which will identify the stream id used to create this stream in an HTTP/3 push promise + * frame + *

+ * {@code "x-http3-stream-promise-id"} + */ + STREAM_PROMISE_ID("x-http3-stream-promise-id"); + + private final AsciiString text; + + ExtensionHeaderNames(String text) { + this.text = AsciiString.cached(text); + } + + public AsciiString text() { + return text; + } + } + + /** + * Apply HTTP/3 rules while translating status code to {@link HttpResponseStatus} + * + * @param status The status from an HTTP/3 frame + * @return The HTTP/1.x status + * @throws Http3Exception If there is a problem translating from HTTP/3 to HTTP/1.x + */ + private static HttpResponseStatus parseStatus(long streamId, CharSequence status) throws Http3Exception { + HttpResponseStatus result; + try { + result = parseLine(status); + if (result == HttpResponseStatus.SWITCHING_PROTOCOLS) { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "Invalid HTTP/3 status code '" + status + "'", null); + } + } catch (Http3Exception e) { + throw e; + } catch (Throwable t) { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, "Unrecognized HTTP status code '" + + status + "' encountered in translation to HTTP/1.x" + status, null); + } + return result; + } + + /** + * Create a new object to contain the response data + * + * @param streamId The stream associated with the response + * @param http3Headers The initial set of HTTP/3 headers to create the response with + * @param alloc The {@link ByteBufAllocator} to use to generate the content of the message + * @param validateHttpHeaders

    + *
  • {@code true} to validate HTTP headers in the http-codec
  • + *
  • {@code false} not to validate HTTP headers in the http-codec
  • + *
+ * @return A new response object which represents headers/data + * @throws Http3Exception + */ + static FullHttpResponse toFullHttpResponse(long streamId, Http3Headers http3Headers, ByteBufAllocator alloc, + boolean validateHttpHeaders) throws Http3Exception { + ByteBuf content = alloc.buffer(); + HttpResponseStatus status = parseStatus(streamId, http3Headers.status()); + // HTTP/3 does not define a way to carry the version or reason phrase that is included in an + // HTTP/1.1 status line. + FullHttpResponse msg = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, status, content, + validateHttpHeaders); + try { + addHttp3ToHttpHeaders(streamId, http3Headers, msg, false); + } catch (Http3Exception e) { + msg.release(); + throw e; + } catch (Throwable t) { + msg.release(); + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "HTTP/3 to HTTP/1.x headers conversion error", t); + } + return msg; + } + + private static CharSequence extractPath(CharSequence method, Http3Headers headers) { + if (HttpMethod.CONNECT.asciiName().contentEqualsIgnoreCase(method)) { + // See https://tools.ietf.org/html/rfc7231#section-4.3.6 + return checkNotNull(headers.authority(), + "authority header cannot be null in the conversion to HTTP/1.x"); + } else { + return checkNotNull(headers.path(), + "path header cannot be null in conversion to HTTP/1.x"); + } + } + + /** + * Create a new object to contain the request data + * + * @param streamId The stream associated with the request + * @param http3Headers The initial set of HTTP/3 headers to create the request with + * @param alloc The {@link ByteBufAllocator} to use to generate the content of the message + * @param validateHttpHeaders
    + *
  • {@code true} to validate HTTP headers in the http-codec
  • + *
  • {@code false} not to validate HTTP headers in the http-codec
  • + *
+ * @return A new request object which represents headers/data + * @throws Http3Exception + */ + static FullHttpRequest toFullHttpRequest(long streamId, Http3Headers http3Headers, ByteBufAllocator alloc, + boolean validateHttpHeaders) throws Http3Exception { + ByteBuf content = alloc.buffer(); + // HTTP/3 does not define a way to carry the version identifier that is included in the HTTP/1.1 request line. + final CharSequence method = checkNotNull(http3Headers.method(), + "method header cannot be null in conversion to HTTP/1.x"); + final CharSequence path = extractPath(method, http3Headers); + FullHttpRequest msg = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(method + .toString()), path.toString(), content, validateHttpHeaders); + try { + addHttp3ToHttpHeaders(streamId, http3Headers, msg, false); + } catch (Http3Exception e) { + msg.release(); + throw e; + } catch (Throwable t) { + msg.release(); + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "HTTP/3 to HTTP/1.x headers conversion error", t); + } + return msg; + } + + /** + * Create a new object to contain the request data. + * + * @param streamId The stream associated with the request + * @param http3Headers The initial set of HTTP/3 headers to create the request with + * @param validateHttpHeaders
    + *
  • {@code true} to validate HTTP headers in the http-codec
  • + *
  • {@code false} not to validate HTTP headers in the http-codec
  • + *
+ * @return A new request object which represents headers for a chunked request + * @throws Http3Exception + */ + static HttpRequest toHttpRequest(long streamId, Http3Headers http3Headers, boolean validateHttpHeaders) + throws Http3Exception { + // HTTP/3 does not define a way to carry the version identifier that is included in the HTTP/1.1 request line. + final CharSequence method = checkNotNull(http3Headers.method(), + "method header cannot be null in conversion to HTTP/1.x"); + final CharSequence path = extractPath(method, http3Headers); + HttpRequest msg = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.valueOf(method.toString()), + path.toString(), validateHttpHeaders); + try { + addHttp3ToHttpHeaders(streamId, http3Headers, msg.headers(), msg.protocolVersion(), false, true); + } catch (Http3Exception e) { + throw e; + } catch (Throwable t) { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "HTTP/3 to HTTP/1.x headers conversion error", t); + } + return msg; + } + + /** + * Create a new object to contain the response data. + * + * @param streamId The stream associated with the response + * @param http3Headers The initial set of HTTP/3 headers to create the response with + * @param validateHttpHeaders
    + *
  • {@code true} to validate HTTP headers in the http-codec
  • + *
  • {@code false} not to validate HTTP headers in the http-codec
  • + *
+ * @return A new response object which represents headers for a chunked response + * @throws Http3Exception + */ + static HttpResponse toHttpResponse(final long streamId, + final Http3Headers http3Headers, + final boolean validateHttpHeaders) throws Http3Exception { + final HttpResponseStatus status = parseStatus(streamId, http3Headers.status()); + // HTTP/3 does not define a way to carry the version or reason phrase that is included in an + // HTTP/1.1 status line. + final HttpResponse msg = new DefaultHttpResponse(HttpVersion.HTTP_1_1, status, validateHttpHeaders); + try { + addHttp3ToHttpHeaders(streamId, http3Headers, msg.headers(), msg.protocolVersion(), false, false); + } catch (final Http3Exception e) { + throw e; + } catch (final Throwable t) { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "HTTP/3 to HTTP/1.x headers conversion error", t); + } + return msg; + } + + /** + * Translate and add HTTP/3 headers to HTTP/1.x headers. + * + * @param streamId The stream associated with {@code sourceHeaders}. + * @param inputHeaders The HTTP/3 headers to convert. + * @param destinationMessage The object which will contain the resulting HTTP/1.x headers. + * @param addToTrailer {@code true} to add to trailing headers. {@code false} to add to initial headers. + * @throws Http3Exception If not all HTTP/3 headers can be translated to HTTP/1.x. + */ + private static void addHttp3ToHttpHeaders(long streamId, Http3Headers inputHeaders, + FullHttpMessage destinationMessage, boolean addToTrailer) throws Http3Exception { + addHttp3ToHttpHeaders(streamId, inputHeaders, + addToTrailer ? destinationMessage.trailingHeaders() : destinationMessage.headers(), + destinationMessage.protocolVersion(), addToTrailer, destinationMessage instanceof HttpRequest); + } + + /** + * Translate and add HTTP/3 headers to HTTP/1.x headers. + * + * @param streamId The stream associated with {@code sourceHeaders}. + * @param inputHeaders The HTTP/3 headers to convert. + * @param outputHeaders The object which will contain the resulting HTTP/1.x headers.. + * @param httpVersion What HTTP/1.x version {@code outputHeaders} should be treated as when doing the conversion. + * @param isTrailer {@code true} if {@code outputHeaders} should be treated as trailing headers. + * {@code false} otherwise. + * @param isRequest {@code true} if the {@code outputHeaders} will be used in a request message. + * {@code false} for response message. + * @throws Http3Exception If not all HTTP/3 headers can be translated to HTTP/1.x. + */ + static void addHttp3ToHttpHeaders(long streamId, Http3Headers inputHeaders, HttpHeaders outputHeaders, + HttpVersion httpVersion, boolean isTrailer, boolean isRequest) throws Http3Exception { + Http3ToHttpHeaderTranslator translator = new Http3ToHttpHeaderTranslator(streamId, outputHeaders, isRequest); + try { + translator.translateHeaders(inputHeaders); + } catch (Http3Exception ex) { + throw ex; + } catch (Throwable t) { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "HTTP/3 to HTTP/1.x headers conversion error", t); + } + + outputHeaders.remove(HttpHeaderNames.TRANSFER_ENCODING); + outputHeaders.remove(HttpHeaderNames.TRAILER); + if (!isTrailer) { + outputHeaders.set(ExtensionHeaderNames.STREAM_ID.text(), streamId); + HttpUtil.setKeepAlive(outputHeaders, httpVersion, true); + } + } + + /** + * Converts the given HTTP/1.x headers into HTTP/3 headers. + * The following headers are only used if they can not be found in from the {@code HOST} header or the + * {@code Request-Line} as defined by rfc7230 + *
    + *
  • {@link ExtensionHeaderNames#SCHEME}
  • + *
+ * {@link ExtensionHeaderNames#PATH} is ignored and instead extracted from the {@code Request-Line}. + */ + static Http3Headers toHttp3Headers(HttpMessage in, boolean validateHeaders) { + HttpHeaders inHeaders = in.headers(); + final Http3Headers out = new DefaultHttp3Headers(validateHeaders, inHeaders.size()); + if (in instanceof HttpRequest) { + HttpRequest request = (HttpRequest) in; + URI requestTargetUri = URI.create(request.uri()); + out.path(toHttp3Path(requestTargetUri)); + out.method(request.method().asciiName()); + setHttp3Scheme(inHeaders, requestTargetUri, out); + + // Attempt to take from HOST header before taking from the request-line + String host = inHeaders.getAsString(HttpHeaderNames.HOST); + if (host != null && !host.isEmpty()) { + setHttp3Authority(host, out); + } else { + if (!isOriginForm(request.uri()) && !isAsteriskForm(request.uri())) { + setHttp3Authority(requestTargetUri.getAuthority(), out); + } + } + } else if (in instanceof HttpResponse) { + HttpResponse response = (HttpResponse) in; + out.status(response.status().codeAsText()); + } + + // Add the HTTP headers which have not been consumed above + toHttp3Headers(inHeaders, out); + return out; + } + + static Http3Headers toHttp3Headers(HttpHeaders inHeaders, boolean validateHeaders) { + if (inHeaders.isEmpty()) { + return new DefaultHttp3Headers(); + } + + final Http3Headers out = new DefaultHttp3Headers(validateHeaders, inHeaders.size()); + toHttp3Headers(inHeaders, out); + return out; + } + + private static CharSequenceMap toLowercaseMap(Iterator valuesIter, + int arraySizeHint) { + UnsupportedValueConverter valueConverter = UnsupportedValueConverter.instance(); + CharSequenceMap result = new CharSequenceMap(true, valueConverter, arraySizeHint); + + while (valuesIter.hasNext()) { + AsciiString lowerCased = AsciiString.of(valuesIter.next()).toLowerCase(); + try { + int index = lowerCased.forEachByte(FIND_COMMA); + if (index != -1) { + int start = 0; + do { + result.add(lowerCased.subSequence(start, index, false).trim(), EMPTY_STRING); + start = index + 1; + } while (start < lowerCased.length() && + (index = lowerCased.forEachByte(start, lowerCased.length() - start, FIND_COMMA)) != -1); + result.add(lowerCased.subSequence(start, lowerCased.length(), false).trim(), EMPTY_STRING); + } else { + result.add(lowerCased.trim(), EMPTY_STRING); + } + } catch (Exception e) { + // This is not expect to happen because FIND_COMMA never throws but must be caught + // because of the ByteProcessor interface. + throw new IllegalStateException(e); + } + } + return result; + } + + /** + * Filter the {@link HttpHeaderNames#TE} header according to the + * + * special rules in the HTTP/3 RFC. + * @param entry An entry whose name is {@link HttpHeaderNames#TE}. + * @param out the resulting HTTP/3 headers. + */ + private static void toHttp3HeadersFilterTE(Entry entry, + Http3Headers out) { + if (indexOf(entry.getValue(), ',', 0) == -1) { + if (contentEqualsIgnoreCase(trim(entry.getValue()), TRAILERS)) { + out.add(TE, TRAILERS); + } + } else { + List teValues = unescapeCsvFields(entry.getValue()); + for (CharSequence teValue : teValues) { + if (contentEqualsIgnoreCase(trim(teValue), TRAILERS)) { + out.add(TE, TRAILERS); + break; + } + } + } + } + + static void toHttp3Headers(HttpHeaders inHeaders, Http3Headers out) { + Iterator> iter = inHeaders.iteratorCharSequence(); + // Choose 8 as a default size because it is unlikely we will see more than 4 Connection headers values, but + // still allowing for "enough" space in the map to reduce the chance of hash code collision. + CharSequenceMap connectionBlacklist = + toLowercaseMap(inHeaders.valueCharSequenceIterator(CONNECTION), 8); + while (iter.hasNext()) { + Entry entry = iter.next(); + final AsciiString aName = AsciiString.of(entry.getKey()).toLowerCase(); + if (!HTTP_TO_HTTP3_HEADER_BLACKLIST.contains(aName) && !connectionBlacklist.contains(aName)) { + // https://quicwg.org/base-drafts/draft-ietf-quic-http.html#section-4.1.1 makes a special exception + // for TE + if (aName.contentEqualsIgnoreCase(TE)) { + toHttp3HeadersFilterTE(entry, out); + } else if (aName.contentEqualsIgnoreCase(COOKIE)) { + AsciiString value = AsciiString.of(entry.getValue()); + // split up cookies to allow for better compression + try { + int index = value.forEachByte(FIND_SEMI_COLON); + if (index != -1) { + int start = 0; + do { + out.add(COOKIE, value.subSequence(start, index, false)); + // skip 2 characters "; " (see https://tools.ietf.org/html/rfc6265#section-4.2.1) + start = index + 2; + } while (start < value.length() && + (index = value.forEachByte(start, value.length() - start, FIND_SEMI_COLON)) != -1); + if (start >= value.length()) { + throw new IllegalArgumentException("cookie value is of unexpected format: " + value); + } + out.add(COOKIE, value.subSequence(start, value.length(), false)); + } else { + out.add(COOKIE, value); + } + } catch (Exception e) { + // This is not expect to happen because FIND_SEMI_COLON never throws but must be caught + // because of the ByteProcessor interface. + throw new IllegalStateException(e); + } + } else { + out.add(aName, entry.getValue()); + } + } + } + } + + /** + * Generate an HTTP/3 {code :path} from a URI in accordance with + * HTTP3 spec. + */ + private static AsciiString toHttp3Path(URI uri) { + StringBuilder pathBuilder = new StringBuilder(length(uri.getRawPath()) + + length(uri.getRawQuery()) + length(uri.getRawFragment()) + 2); + if (!isNullOrEmpty(uri.getRawPath())) { + pathBuilder.append(uri.getRawPath()); + } + if (!isNullOrEmpty(uri.getRawQuery())) { + pathBuilder.append('?'); + pathBuilder.append(uri.getRawQuery()); + } + if (!isNullOrEmpty(uri.getRawFragment())) { + pathBuilder.append('#'); + pathBuilder.append(uri.getRawFragment()); + } + String path = pathBuilder.toString(); + return path.isEmpty() ? EMPTY_REQUEST_PATH : new AsciiString(path); + } + + // package-private for testing only + static void setHttp3Authority(String authority, Http3Headers out) { + // The authority MUST NOT include the deprecated "userinfo" subcomponent + if (authority != null) { + if (authority.isEmpty()) { + out.authority(EMPTY_STRING); + } else { + int start = authority.indexOf('@') + 1; + int length = authority.length() - start; + if (length == 0) { + throw new IllegalArgumentException("authority: " + authority); + } + out.authority(new AsciiString(authority, start, length)); + } + } + } + + private static void setHttp3Scheme(HttpHeaders in, URI uri, Http3Headers out) { + String value = uri.getScheme(); + if (value != null) { + out.scheme(new AsciiString(value)); + return; + } + + // Consume the Scheme extension header if present + CharSequence cValue = in.get(ExtensionHeaderNames.SCHEME.text()); + if (cValue != null) { + out.scheme(AsciiString.of(cValue)); + return; + } + + if (uri.getPort() == HTTPS.port()) { + out.scheme(HTTPS.name()); + } else if (uri.getPort() == HTTP.port()) { + out.scheme(HTTP.name()); + } else { + throw new IllegalArgumentException(":scheme must be specified. " + + "see https://quicwg.org/base-drafts/draft-ietf-quic-http.html#section-4.1.1.1"); + } + } + + /** + * Utility which translates HTTP/3 headers to HTTP/1 headers. + */ + private static final class Http3ToHttpHeaderTranslator { + /** + * Translations from HTTP/3 header name to the HTTP/1.x equivalent. + */ + private static final CharSequenceMap + REQUEST_HEADER_TRANSLATIONS = new CharSequenceMap(); + private static final CharSequenceMap + RESPONSE_HEADER_TRANSLATIONS = new CharSequenceMap(); + static { + RESPONSE_HEADER_TRANSLATIONS.add(Http3Headers.PseudoHeaderName.AUTHORITY.value(), + HttpHeaderNames.HOST); + RESPONSE_HEADER_TRANSLATIONS.add(Http3Headers.PseudoHeaderName.SCHEME.value(), + ExtensionHeaderNames.SCHEME.text()); + REQUEST_HEADER_TRANSLATIONS.add(RESPONSE_HEADER_TRANSLATIONS); + RESPONSE_HEADER_TRANSLATIONS.add(Http3Headers.PseudoHeaderName.PATH.value(), + ExtensionHeaderNames.PATH.text()); + } + + private final long streamId; + private final HttpHeaders output; + private final CharSequenceMap translations; + + /** + * Create a new instance + * + * @param output The HTTP/1.x headers object to store the results of the translation + * @param request if {@code true}, translates headers using the request translation map. Otherwise uses the + * response translation map. + */ + Http3ToHttpHeaderTranslator(long streamId, HttpHeaders output, boolean request) { + this.streamId = streamId; + this.output = output; + translations = request ? REQUEST_HEADER_TRANSLATIONS : RESPONSE_HEADER_TRANSLATIONS; + } + + void translateHeaders(Iterable> inputHeaders) throws Http3Exception { + // lazily created as needed + StringBuilder cookies = null; + + for (Entry entry : inputHeaders) { + final CharSequence name = entry.getKey(); + final CharSequence value = entry.getValue(); + AsciiString translatedName = translations.get(name); + if (translatedName != null) { + output.add(translatedName, AsciiString.of(value)); + } else if (!Http3Headers.PseudoHeaderName.isPseudoHeader(name)) { + // https://tools.ietf.org/html/rfc7540#section-8.1.2.3 + // All headers that start with ':' are only valid in HTTP/3 context + if (name.length() == 0 || name.charAt(0) == ':') { + throw streamError(streamId, Http3ErrorCode.H3_MESSAGE_ERROR, + "Invalid HTTP/3 header '" + name + "' encountered in translation to HTTP/1.x", + null); + } + if (COOKIE.equals(name)) { + // combine the cookie values into 1 header entry. + // https://tools.ietf.org/html/rfc7540#section-8.1.2.5 + if (cookies == null) { + cookies = InternalThreadLocalMap.get().stringBuilder(); + } else if (cookies.length() > 0) { + cookies.append("; "); + } + cookies.append(value); + } else { + output.add(name, value); + } + } + } + if (cookies != null) { + output.add(COOKIE, cookies.toString()); + } + } + } + + private static Http3Exception streamError(long streamId, Http3ErrorCode error, String msg, Throwable cause) { + return new Http3Exception(error, streamId + ": " + msg, cause); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackAttributes.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackAttributes.java new file mode 100644 index 0000000..10a6525 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackAttributes.java @@ -0,0 +1,108 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.GenericFutureListener; +import io.netty.util.concurrent.Promise; + +import static java.util.Objects.requireNonNull; + +final class QpackAttributes { + private final QuicChannel channel; + private final boolean dynamicTableDisabled; + private final Promise encoderStreamPromise; + private final Promise decoderStreamPromise; + + private QuicStreamChannel encoderStream; + private QuicStreamChannel decoderStream; + + QpackAttributes(QuicChannel channel, boolean disableDynamicTable) { + this.channel = channel; + dynamicTableDisabled = disableDynamicTable; + encoderStreamPromise = dynamicTableDisabled ? null : channel.eventLoop().newPromise(); + decoderStreamPromise = dynamicTableDisabled ? null : channel.eventLoop().newPromise(); + } + + boolean dynamicTableDisabled() { + return dynamicTableDisabled; + } + + boolean decoderStreamAvailable() { + return !dynamicTableDisabled && decoderStream != null; + } + + boolean encoderStreamAvailable() { + return !dynamicTableDisabled && encoderStream != null; + } + + void whenEncoderStreamAvailable(GenericFutureListener> listener) { + assert !dynamicTableDisabled; + assert encoderStreamPromise != null; + encoderStreamPromise.addListener(listener); + } + + void whenDecoderStreamAvailable(GenericFutureListener> listener) { + assert !dynamicTableDisabled; + assert decoderStreamPromise != null; + decoderStreamPromise.addListener(listener); + } + + QuicStreamChannel decoderStream() { + assert decoderStreamAvailable(); + return decoderStream; + } + + QuicStreamChannel encoderStream() { + assert encoderStreamAvailable(); + return encoderStream; + } + + void decoderStream(QuicStreamChannel decoderStream) { + assert channel.eventLoop().inEventLoop(); + assert !dynamicTableDisabled; + assert decoderStreamPromise != null; + assert this.decoderStream == null; + this.decoderStream = requireNonNull(decoderStream); + decoderStreamPromise.setSuccess(decoderStream); + } + + void encoderStream(QuicStreamChannel encoderStream) { + assert channel.eventLoop().inEventLoop(); + assert !dynamicTableDisabled; + assert encoderStreamPromise != null; + assert this.encoderStream == null; + this.encoderStream = requireNonNull(encoderStream); + encoderStreamPromise.setSuccess(encoderStream); + } + + void encoderStreamInactive(Throwable cause) { + assert channel.eventLoop().inEventLoop(); + assert !dynamicTableDisabled; + assert encoderStreamPromise != null; + encoderStreamPromise.tryFailure(cause); + } + + void decoderStreamInactive(Throwable cause) { + assert channel.eventLoop().inEventLoop(); + assert !dynamicTableDisabled; + assert decoderStreamPromise != null; + decoderStreamPromise.tryFailure(cause); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoder.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoder.java new file mode 100644 index 0000000..6539f45 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoder.java @@ -0,0 +1,516 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.AsciiString; +import io.netty.util.collection.IntObjectHashMap; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.util.ArrayList; +import java.util.List; +import java.util.function.BiConsumer; + +import static io.netty.handler.codec.http3.Http3CodecUtils.closeOnFailure; +import static io.netty.handler.codec.http3.QpackDecoderStateSyncStrategy.ackEachInsert; +import static io.netty.handler.codec.http3.QpackUtil.decodePrefixedIntegerAsInt; +import static io.netty.handler.codec.http3.QpackUtil.encodePrefixedInteger; +import static io.netty.handler.codec.http3.QpackUtil.firstByteEquals; +import static io.netty.handler.codec.http3.QpackUtil.toIntOrThrow; +import static java.lang.Math.floorDiv; + +final class QpackDecoder { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(QpackDecoder.class); + private static final QpackException DYNAMIC_TABLE_CAPACITY_EXCEEDS_MAX = + QpackException.newStatic(QpackDecoder.class, "setDynamicTableCapacity(...)", + "QPACK - decoder dynamic table capacity exceeds max capacity."); + private static final QpackException HEADER_ILLEGAL_INDEX_VALUE = + QpackException.newStatic(QpackDecoder.class, "decodeIndexed(...)", "QPACK - illegal index value"); + private static final QpackException NAME_ILLEGAL_INDEX_VALUE = + QpackException.newStatic(QpackDecoder.class, "decodeLiteralWithNameRef(...)", + "QPACK - illegal name index value"); + private static final QpackException INVALID_REQUIRED_INSERT_COUNT = + QpackException.newStatic(QpackDecoder.class, "decodeRequiredInsertCount(...)", + "QPACK - invalid required insert count"); + private static final QpackException MAX_BLOCKED_STREAMS_EXCEEDED = + QpackException.newStatic(QpackDecoder.class, "shouldWaitForDynamicTableUpdates(...)", + "QPACK - exceeded max blocked streams"); + private static final QpackException BLOCKED_STREAM_RESUMPTION_FAILED = + QpackException.newStatic(QpackDecoder.class, "sendInsertCountIncrementIfRequired(...)", + "QPACK - failed to resume a blocked stream"); + + private static final QpackException UNKNOWN_TYPE = + QpackException.newStatic(QpackDecoder.class, "decode(...)", "QPACK - unknown type"); + + private final QpackHuffmanDecoder huffmanDecoder; + private final QpackDecoderDynamicTable dynamicTable; + private final long maxTableCapacity; + private final int maxBlockedStreams; + private final QpackDecoderStateSyncStrategy stateSyncStrategy; + /** + * Hashmap with key as the required insert count to unblock the stream and the value a {@link List} of + * {@link Runnable} to invoke when the stream can be unblocked. + */ + private final IntObjectHashMap> blockedStreams; + + private final long maxEntries; + private final long fullRange; + private int blockedStreamsCount; + private long lastAckInsertCount; + + QpackDecoder(long maxTableCapacity, int maxBlockedStreams) { + this(maxTableCapacity, maxBlockedStreams, new QpackDecoderDynamicTable(), ackEachInsert()); + } + + QpackDecoder(long maxTableCapacity, int maxBlockedStreams, + QpackDecoderDynamicTable dynamicTable, QpackDecoderStateSyncStrategy stateSyncStrategy) { + huffmanDecoder = new QpackHuffmanDecoder(); + this.maxTableCapacity = maxTableCapacity; + this.maxBlockedStreams = maxBlockedStreams; + this.stateSyncStrategy = stateSyncStrategy; + blockedStreams = new IntObjectHashMap<>(Math.min(16, maxBlockedStreams)); + this.dynamicTable = dynamicTable; + maxEntries = QpackUtil.maxEntries(maxTableCapacity); + try { + fullRange = toIntOrThrow(2 * maxEntries); + } catch (QpackException e) { + throw new IllegalArgumentException(e); + } + } + + /** + * Decode the header block and add these to the {@link BiConsumer}. This method assumes the entire header block is + * contained in {@code in}. However, this method may not be able to decode the header block if the QPACK dynamic + * table does not contain all entries required to decode the header block. + * See blocked streams. + * In such a case, this method will return {@code false} and would invoke {@code whenDecoded} when the stream is + * unblocked and the header block is completely decoded. + * + * @param qpackAttributes {@link QpackAttributes} for the channel. + * @param streamId for the stream on which this header block was received. + * @param in {@link ByteBuf} containing the header block. + * @param length Number of bytes to be read from {@code in} + * @param sink {@link BiConsumer} to + * @param whenDecoded {@link Runnable} to invoke when a blocked decode finishes decoding. + * @return {@code true} if the headers were decoded. + */ + public boolean decode(QpackAttributes qpackAttributes, long streamId, ByteBuf in, + int length, BiConsumer sink, Runnable whenDecoded) + throws QpackException { + final int initialReaderIdx = in.readerIndex(); + final int requiredInsertCount = decodeRequiredInsertCount(qpackAttributes, in); + if (shouldWaitForDynamicTableUpdates(requiredInsertCount)) { + blockedStreamsCount++; + blockedStreams.computeIfAbsent(requiredInsertCount, __ -> new ArrayList<>(2)).add(whenDecoded); + in.readerIndex(initialReaderIdx); + return false; + } + + in = in.readSlice(length - (in.readerIndex() - initialReaderIdx)); + final int base = decodeBase(in, requiredInsertCount); + + while (in.isReadable()) { + byte b = in.getByte(in.readerIndex()); + if (isIndexed(b)) { + decodeIndexed(in, sink, base); + } else if (isIndexedWithPostBase(b)) { + decodeIndexedWithPostBase(in, sink, base); + } else if (isLiteralWithNameRef(b)) { + decodeLiteralWithNameRef(in, sink, base); + } else if (isLiteralWithPostBaseNameRef(b)) { + decodeLiteralWithPostBaseNameRef(in, sink, base); + } else if (isLiteral(b)) { + decodeLiteral(in, sink); + } else { + throw UNKNOWN_TYPE; + } + } + if (requiredInsertCount > 0) { + assert !qpackAttributes.dynamicTableDisabled(); + assert qpackAttributes.decoderStreamAvailable(); + + stateSyncStrategy.sectionAcknowledged(requiredInsertCount); + final ByteBuf sectionAck = qpackAttributes.decoderStream().alloc().buffer(8); + encodePrefixedInteger(sectionAck, (byte) 0b1000_0000, 7, streamId); + closeOnFailure(qpackAttributes.decoderStream().writeAndFlush(sectionAck)); + } + return true; + } + + /** + * Updates dynamic table capacity corresponding to the + * + * encoder instruction. + * + * @param capacity New capacity. + * @throws QpackException If the capacity update fails. + */ + void setDynamicTableCapacity(long capacity) throws QpackException { + if (capacity > maxTableCapacity) { + throw DYNAMIC_TABLE_CAPACITY_EXCEEDS_MAX; + } + dynamicTable.setCapacity(capacity); + } + + /** + * Inserts a header field with a name reference corresponding to the + * + * encoder instruction. + * + * @param qpackDecoderStream {@link QuicStreamChannel} for the QPACK decoder stream. + * @param staticTableRef {@code true} if the name reference is to the static table, {@code false} if the reference + * is to the dynamic table. + * @param nameIdx Index of the name in the table. + * @param value Literal value. + * @throws QpackException if the insertion fails. + */ + void insertWithNameReference(QuicStreamChannel qpackDecoderStream, boolean staticTableRef, int nameIdx, + CharSequence value) throws QpackException { + final QpackHeaderField entryForName; + if (staticTableRef) { + entryForName = QpackStaticTable.getField(nameIdx); + } else { + entryForName = dynamicTable.getEntryRelativeEncoderInstructions(nameIdx); + } + dynamicTable.add(new QpackHeaderField(entryForName.name, value)); + sendInsertCountIncrementIfRequired(qpackDecoderStream); + } + + /** + * Inserts a header field with a literal name corresponding to the + * + * encoder instruction. + * + * @param qpackDecoderStream {@link QuicStreamChannel} for the QPACK decoder stream. + * @param name of the field. + * @param value of the field. + * @throws QpackException if the insertion fails. + */ + void insertLiteral(QuicStreamChannel qpackDecoderStream, CharSequence name, CharSequence value) + throws QpackException { + dynamicTable.add(new QpackHeaderField(name, value)); + sendInsertCountIncrementIfRequired(qpackDecoderStream); + } + + /** + * Duplicates a previous entry corresponding to the + * + * encoder instruction. + * + * @param qpackDecoderStream {@link QuicStreamChannel} for the QPACK decoder stream. + * @param index which is duplicated. + * @throws QpackException if duplication fails. + */ + void duplicate(QuicStreamChannel qpackDecoderStream, int index) + throws QpackException { + dynamicTable.add(dynamicTable.getEntryRelativeEncoderInstructions(index)); + sendInsertCountIncrementIfRequired(qpackDecoderStream); + } + + /** + * Callback when a bi-directional stream is + * abandoned + * + * @param qpackDecoderStream {@link QuicStreamChannel} for the QPACK decoder stream. + * @param streamId which is abandoned. + */ + void streamAbandoned(QuicStreamChannel qpackDecoderStream, long streamId) { + if (maxTableCapacity == 0) { + return; + } + // https://www.rfc-editor.org/rfc/rfc9204.html#section-4.4.2 + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | Stream ID (6+) | + // +---+---+-----------------------+ + final ByteBuf cancel = qpackDecoderStream.alloc().buffer(8); + encodePrefixedInteger(cancel, (byte) 0b0100_0000, 6, streamId); + closeOnFailure(qpackDecoderStream.writeAndFlush(cancel)); + } + + private static boolean isIndexed(byte b) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Index (6+) | + // +---+---+-----------------------+ + return (b & 0b1000_0000) == 0b1000_0000; + } + + private static boolean isLiteralWithNameRef(byte b) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-nam + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | N | T |Name Index (4+)| + // +---+---+---+---+---------------+ + return (b & 0b1100_0000) == 0b0100_0000; + } + + private static boolean isLiteral(byte b) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-lit + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 1 | N | H |NameLen(3+)| + // +---+---+---+---+---+-----------+ + return (b & 0b1110_0000) == 0b0010_0000; + } + + private static boolean isIndexedWithPostBase(byte b) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line-with-pos + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 1 | Index (4+) | + // +---+---+---+---+---------------+ + return (b & 0b1111_0000) == 0b0001_0000; + } + + private static boolean isLiteralWithPostBaseNameRef(byte b) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-pos + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | N |NameIdx(3+)| + // +---+---+---+---+---+-----------+ + return (b & 0b1111_0000) == 0b0000_0000; + } + + private void decodeIndexed(ByteBuf in, BiConsumer sink, int base) + throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Index (6+) | + // +---+---+-----------------------+ + // + // T == 1 implies static table + final QpackHeaderField field; + if (firstByteEquals(in, (byte) 0b1100_0000)) { + final int idx = decodePrefixedIntegerAsInt(in, 6); + assert idx >= 0; + if (idx >= QpackStaticTable.length) { + throw HEADER_ILLEGAL_INDEX_VALUE; + } + field = QpackStaticTable.getField(idx); + } else { + final int idx = decodePrefixedIntegerAsInt(in, 6); + assert idx >= 0; + field = dynamicTable.getEntryRelativeEncodedField(base - idx - 1); + } + sink.accept(field.name, field.value); + } + + private void decodeIndexedWithPostBase(ByteBuf in, BiConsumer sink, int base) + throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line-with-pos + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 1 | Index (4+) | + // +---+---+---+---+---------------+ + final int idx = decodePrefixedIntegerAsInt(in, 4); + assert idx >= 0; + QpackHeaderField field = dynamicTable.getEntryRelativeEncodedField(base + idx); + sink.accept(field.name, field.value); + } + + private void decodeLiteralWithNameRef(ByteBuf in, BiConsumer sink, int base) + throws QpackException { + final CharSequence name; + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-nam + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | N | T |Name Index (4+)| + // +---+---+---+---+---------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + // + // T == 1 implies static table + if (firstByteEquals(in, (byte) 0b0001_0000)) { + final int idx = decodePrefixedIntegerAsInt(in, 4); + assert idx >= 0; + if (idx >= QpackStaticTable.length) { + throw NAME_ILLEGAL_INDEX_VALUE; + } + name = QpackStaticTable.getField(idx).name; + } else { + final int idx = decodePrefixedIntegerAsInt(in, 4); + assert idx >= 0; + name = dynamicTable.getEntryRelativeEncodedField(base - idx - 1).name; + } + final CharSequence value = decodeHuffmanEncodedLiteral(in, 7); + sink.accept(name, value); + } + + private void decodeLiteralWithPostBaseNameRef(ByteBuf in, BiConsumer sink, int base) + throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-nam + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | N |NameIdx(3+)| + // +---+---+---+---+---+-----------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + final int idx = decodePrefixedIntegerAsInt(in, 3); + assert idx >= 0; + CharSequence name = dynamicTable.getEntryRelativeEncodedField(base + idx).name; + final CharSequence value = decodeHuffmanEncodedLiteral(in, 7); + sink.accept(name, value); + } + + private void decodeLiteral(ByteBuf in, BiConsumer sink) throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-lit + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 1 | N | H |NameLen(3+)| + // +---+---+---+---+---+-----------+ + // | Name String (Length bytes) | + // +---+---------------------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + final CharSequence name = decodeHuffmanEncodedLiteral(in, 3); + final CharSequence value = decodeHuffmanEncodedLiteral(in, 7); + sink.accept(name, value); + } + + private CharSequence decodeHuffmanEncodedLiteral(ByteBuf in, int prefix) throws QpackException { + assert prefix < 8; + final boolean huffmanEncoded = firstByteEquals(in, (byte) (1 << prefix)); + final int length = decodePrefixedIntegerAsInt(in, prefix); + assert length >= 0; + if (huffmanEncoded) { + return huffmanDecoder.decode(in, length); + } + byte[] buf = new byte[length]; + in.readBytes(buf); + return new AsciiString(buf, false); + } + + // Visible for testing + int decodeRequiredInsertCount(QpackAttributes qpackAttributes, ByteBuf buf) throws QpackException { + final long encodedInsertCount = QpackUtil.decodePrefixedInteger(buf, 8); + assert encodedInsertCount >= 0; + // https://www.rfc-editor.org/rfc/rfc9204.html#name-required-insert-count + // FullRange = 2 * MaxEntries + // if EncodedInsertCount == 0: + // ReqInsertCount = 0 + // else: + // if EncodedInsertCount > FullRange: + // Error + // MaxValue = TotalNumberOfInserts + MaxEntries + // + // # MaxWrapped is the largest possible value of + // # ReqInsertCount that is 0 mod 2 * MaxEntries + // MaxWrapped = floor(MaxValue / FullRange) * FullRange + // ReqInsertCount = MaxWrapped + EncodedInsertCount - 1 + // + // # If ReqInsertCount exceeds MaxValue, the Encoder's value + // # must have wrapped one fewer time + // if ReqInsertCount > MaxValue: + // if ReqInsertCount <= FullRange: + // Error + // ReqInsertCount -= FullRange + // + // # Value of 0 must be encoded as 0. + // if ReqInsertCount == 0: + // Error + if (encodedInsertCount == 0) { + return 0; + } + if (qpackAttributes.dynamicTableDisabled() || encodedInsertCount > fullRange) { + throw INVALID_REQUIRED_INSERT_COUNT; + } + + final long maxValue = dynamicTable.insertCount() + maxEntries; + final long maxWrapped = floorDiv(maxValue, fullRange) * fullRange; + long requiredInsertCount = maxWrapped + encodedInsertCount - 1; + + if (requiredInsertCount > maxValue) { + if (requiredInsertCount <= fullRange) { + throw INVALID_REQUIRED_INSERT_COUNT; + } + requiredInsertCount -= fullRange; + } + // requiredInsertCount can not be negative as encodedInsertCount read from the buffer can not be negative. + if (requiredInsertCount == 0) { + throw INVALID_REQUIRED_INSERT_COUNT; + } + return toIntOrThrow(requiredInsertCount); + } + + // Visible for testing + int decodeBase(ByteBuf buf, int requiredInsertCount) throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-encoded-field-section-prefi + // 0 1 2 3 4 5 6 7 + // +---+---------------------------+ + // | S | Delta Base (7+) | + // +---+---------------------------+ + final boolean s = (buf.getByte(buf.readerIndex()) & 0b1000_0000) == 0b1000_0000; + final int deltaBase = decodePrefixedIntegerAsInt(buf, 7); + assert deltaBase >= 0; + // https://www.rfc-editor.org/rfc/rfc9204.html#name-base + // if S == 0: + // Base = ReqInsertCount + DeltaBase + // else: + // Base = ReqInsertCount - DeltaBase - 1 + return s ? requiredInsertCount - deltaBase - 1 : requiredInsertCount + deltaBase; + } + + private boolean shouldWaitForDynamicTableUpdates(int requiredInsertCount) throws QpackException { + if (requiredInsertCount > dynamicTable.insertCount()) { + if (blockedStreamsCount == maxBlockedStreams - 1) { + throw MAX_BLOCKED_STREAMS_EXCEEDED; + } + return true; + } + return false; + } + + private void sendInsertCountIncrementIfRequired(QuicStreamChannel qpackDecoderStream) throws QpackException { + final int insertCount = dynamicTable.insertCount(); + final List runnables = this.blockedStreams.get(insertCount); + if (runnables != null) { + boolean failed = false; + for (Runnable runnable : runnables) { + try { + runnable.run(); + } catch (Exception e) { + failed = true; + logger.error("Failed to resume a blocked stream {}.", runnable, e); + } + } + if (failed) { + throw BLOCKED_STREAM_RESUMPTION_FAILED; + } + } + if (stateSyncStrategy.entryAdded(insertCount)) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-count-increment + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | Increment (6+) | + // +---+---+-----------------------+ + final ByteBuf incr = qpackDecoderStream.alloc().buffer(8); + encodePrefixedInteger(incr, (byte) 0b0, 6, insertCount - lastAckInsertCount); + lastAckInsertCount = insertCount; + closeOnFailure(qpackDecoderStream.writeAndFlush(incr)); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderDynamicTable.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderDynamicTable.java new file mode 100644 index 0000000..eba03fc --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderDynamicTable.java @@ -0,0 +1,170 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import java.util.Arrays; + +import static io.netty.handler.codec.http3.QpackHeaderField.ENTRY_OVERHEAD; +import static io.netty.handler.codec.http3.QpackUtil.MAX_HEADER_TABLE_SIZE; +import static io.netty.handler.codec.http3.QpackUtil.MIN_HEADER_TABLE_SIZE; +import static io.netty.handler.codec.http3.QpackUtil.toIntOrThrow; +import static java.lang.Math.floorDiv; + +final class QpackDecoderDynamicTable { + private static final QpackException GET_ENTRY_ILLEGAL_INDEX_VALUE = + QpackException.newStatic(QpackDecoderDynamicTable.class, "getEntry(...)", + "QPACK - illegal decoder dynamic table index value"); + private static final QpackException HEADER_TOO_LARGE = + QpackException.newStatic(QpackDecoderDynamicTable.class, "add(...)", "QPACK - header entry too large."); + + // a circular queue of header fields + private QpackHeaderField[] fields; + private int head; + private int tail; + private long size; + private long capacity = -1; // ensure setCapacity creates the array + private int insertCount; + + int length() { + return head < tail ? fields.length - tail + head : head - tail; + } + + long size() { + return size; + } + + int insertCount() { + return insertCount; + } + + QpackHeaderField getEntry(int index) throws QpackException { + if (index < 0 || fields == null || index >= fields.length) { + throw GET_ENTRY_ILLEGAL_INDEX_VALUE; + } + QpackHeaderField entry = fields[index]; + if (entry == null) { + throw GET_ENTRY_ILLEGAL_INDEX_VALUE; + } + return entry; + } + + QpackHeaderField getEntryRelativeEncodedField(int index) throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-relative-indexing + return getEntry(moduloIndex(index)); + } + + QpackHeaderField getEntryRelativeEncoderInstructions(int index) throws QpackException { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-relative-indexing + // Name index is the relative index, relative to the last added entry. + return getEntry(index > tail ? fields.length - index + tail : tail - index); + } + + void add(QpackHeaderField header) throws QpackException { + long headerSize = header.size(); + if (headerSize > capacity) { + throw HEADER_TOO_LARGE; + } + while (capacity - size < headerSize) { + remove(); + } + insertCount++; + fields[getAndIncrementHead()] = header; + size += headerSize; + } + + private void remove() { + QpackHeaderField removed = fields[tail]; + if (removed == null) { + return; + } + size -= removed.size(); + fields[getAndIncrementTail()] = null; + } + + void clear() { + if (fields != null) { + Arrays.fill(fields, null); + } + head = 0; + tail = 0; + size = 0; + } + + void setCapacity(long capacity) throws QpackException { + if (capacity < MIN_HEADER_TABLE_SIZE || capacity > MAX_HEADER_TABLE_SIZE) { + throw new IllegalArgumentException("capacity is invalid: " + capacity); + } + // initially capacity will be -1 so init won't return here + if (this.capacity == capacity) { + return; + } + this.capacity = capacity; + + if (capacity == 0) { + clear(); + } else { + // initially size will be 0 so remove won't be called + while (size > capacity) { + remove(); + } + } + + int maxEntries = toIntOrThrow(2 * floorDiv(capacity, ENTRY_OVERHEAD)); + + // check if capacity change requires us to reallocate the array + if (fields != null && fields.length == maxEntries) { + return; + } + + QpackHeaderField[] tmp = new QpackHeaderField[maxEntries]; + + // initially length will be 0 so there will be no copy + int len = length(); + if (fields != null && tail != head) { + if (head > tail) { + System.arraycopy(fields, tail, tmp, 0, head - tail); + } else { + System.arraycopy(fields, 0, tmp, 0, head); + System.arraycopy(fields, tail, tmp, head, fields.length - tail); + } + } + + tail = 0; + head = tail + len; + fields = tmp; + } + + private int getAndIncrementHead() { + int val = this.head; + this.head = safeIncrementIndex(val); + return val; + } + + private int getAndIncrementTail() { + int val = this.tail; + this.tail = safeIncrementIndex(val); + return val; + } + + private int safeIncrementIndex(int index) { + return ++index % fields.length; + } + + private int moduloIndex(int index) { + return fields == null ? index : index % fields.length; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderHandler.java new file mode 100644 index 0000000..7d0d48f --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderHandler.java @@ -0,0 +1,152 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.handler.codec.ByteToMessageDecoder; + +import java.util.List; + +import static io.netty.handler.codec.http3.Http3CodecUtils.connectionError; +import static io.netty.handler.codec.http3.Http3ErrorCode.QPACK_DECODER_STREAM_ERROR; +import static io.netty.handler.codec.http3.QpackUtil.decodePrefixedIntegerAsInt; + +final class QpackDecoderHandler extends ByteToMessageDecoder { + + private boolean discard; + private final QpackEncoder qpackEncoder; + + QpackDecoderHandler(QpackEncoder qpackEncoder) { + this.qpackEncoder = qpackEncoder; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List out) throws Exception { + if (!in.isReadable()) { + return; + } + if (discard) { + in.skipBytes(in.readableBytes()); + return; + } + + byte b = in.getByte(in.readerIndex()); + + // 4.4.1. Section Acknowledgment + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | Stream ID (7+) | + // +---+---------------------------+ + if ((b & 0b1000_0000) == 0b1000_0000) { + long streamId = QpackUtil.decodePrefixedInteger(in, 7); + if (streamId < 0) { + // Not enough readable bytes + return; + } + try { + qpackEncoder.sectionAcknowledgment(streamId); + } catch (QpackException e) { + connectionError(ctx, new Http3Exception(QPACK_DECODER_STREAM_ERROR, + "Section acknowledgment decode failed.", e), true); + } + return; + } + + // 4.4.2. Stream Cancellation + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | Stream ID (6+) | + // +---+---+-----------------------+ + if ((b & 0b1100_0000) == 0b0100_0000) { + long streamId = QpackUtil.decodePrefixedInteger(in, 6); + if (streamId < 0) { + // Not enough readable bytes + return; + } + try { + qpackEncoder.streamCancellation(streamId); + } catch (QpackException e) { + connectionError(ctx, new Http3Exception(QPACK_DECODER_STREAM_ERROR, + "Stream cancellation decode failed.", e), true); + } + return; + } + + // 4.4.3. Insert Count Increment + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | Increment (6+) | + // +---+---+-----------------------+ + if ((b & 0b1100_0000) == 0b0000_0000) { + int increment = decodePrefixedIntegerAsInt(in, 6); + if (increment == 0) { + discard = true; + // Zero is not allowed as an increment + // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-count-increment + // Increment is an unsigned integer, so only 0 is the invalid value. + // https://www.rfc-editor.org/rfc/rfc7541#section-5 + connectionError(ctx, QPACK_DECODER_STREAM_ERROR, + "Invalid increment '" + increment + "'.", false); + return; + } + if (increment < 0) { + // Not enough readable bytes + return; + } + try { + qpackEncoder.insertCountIncrement(increment); + } catch (QpackException e) { + connectionError(ctx, new Http3Exception(QPACK_DECODER_STREAM_ERROR, + "Insert count increment decode failed.", e), true); + } + return; + } + // unknown frame + discard = true; + connectionError(ctx, QPACK_DECODER_STREAM_ERROR, + "Unknown decoder instruction '" + b + "'.", false); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.fireChannelReadComplete(); + + // QPACK streams should always be processed, no matter what the user is doing in terms of configuration + // and AUTO_READ. + Http3CodecUtils.readIfNoAutoRead(ctx); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof ChannelInputShutdownEvent) { + // See https://www.rfc-editor.org/rfc/rfc9204.html#name-encoder-and-decoder-streams + Http3CodecUtils.criticalStreamClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) { + // See https://www.rfc-editor.org/rfc/rfc9204.html#name-encoder-and-decoder-streams + Http3CodecUtils.criticalStreamClosed(ctx); + ctx.fireChannelInactive(); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderStateSyncStrategy.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderStateSyncStrategy.java new file mode 100644 index 0000000..dd7752a --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackDecoderStateSyncStrategy.java @@ -0,0 +1,75 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +/** + * A strategy that determines when to send acknowledgment of new table + * entries on the QPACK decoder stream. + */ +public interface QpackDecoderStateSyncStrategy { + + /** + * Callback when an + * encoded header field section is decoded successfully by the decoder. + * + * @param requiredInsertCount for the encoded field section. + */ + void sectionAcknowledged(int requiredInsertCount); + + /** + * When a header field entry is added to the decoder dynamic table. + * + * @param insertCount for the entry. + * @return {@code true} if an insert count + * increment decoder instruction should be sent. + */ + boolean entryAdded(int insertCount); + + /** + * Returns a {@link QpackDecoderStateSyncStrategy} that will acknowledge each entry added via + * {@link #entryAdded(int)} unless a prior {@link #sectionAcknowledged(int)} call has implicitly acknowledged the + * addition. + * + * @return A {@link QpackDecoderStateSyncStrategy} that will acknowledge each entry added via + * {@link #entryAdded(int)} unless a prior {@link #sectionAcknowledged(int)} call has implicitly acknowledged the + * addition. + */ + static QpackDecoderStateSyncStrategy ackEachInsert() { + return new QpackDecoderStateSyncStrategy() { + private int lastCountAcknowledged; + + @Override + public void sectionAcknowledged(int requiredInsertCount) { + if (lastCountAcknowledged < requiredInsertCount) { + lastCountAcknowledged = requiredInsertCount; + } + } + + @Override + public boolean entryAdded(int insertCount) { + if (lastCountAcknowledged < insertCount) { + lastCountAcknowledged = insertCount; + return true; + } + return false; + } + }; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java new file mode 100644 index 0000000..79b2714 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoder.java @@ -0,0 +1,544 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.collection.LongObjectHashMap; + +import java.util.ArrayDeque; +import java.util.Arrays; +import java.util.Map; +import java.util.Queue; + +import static io.netty.handler.codec.http3.Http3CodecUtils.closeOnFailure; +import static io.netty.handler.codec.http3.QpackHeaderField.sizeOf; +import static io.netty.handler.codec.http3.QpackUtil.encodePrefixedInteger; + +/** + * A QPACK encoder. + */ +final class QpackEncoder { + private static final QpackException INVALID_SECTION_ACKNOWLEDGMENT = + QpackException.newStatic(QpackDecoder.class, "sectionAcknowledgment(...)", + "QPACK - section acknowledgment received for unknown stream."); + private static final int DYNAMIC_TABLE_ENCODE_NOT_DONE = -1; + private static final int DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE = -2; + + private final QpackHuffmanEncoder huffmanEncoder; + private final QpackEncoderDynamicTable dynamicTable; + private int maxBlockedStreams; + private int blockedStreams; + private LongObjectHashMap> streamSectionTrackers; + + QpackEncoder() { + this(new QpackEncoderDynamicTable()); + } + + QpackEncoder(QpackEncoderDynamicTable dynamicTable) { + huffmanEncoder = new QpackHuffmanEncoder(); + this.dynamicTable = dynamicTable; + } + + /** + * Encode the header field into the header block. + * + * TODO: do we need to support sensitivity detector? + */ + void encodeHeaders(QpackAttributes qpackAttributes, ByteBuf out, ByteBufAllocator allocator, long streamId, + Http3Headers headers) { + final int base = dynamicTable.insertCount(); + // Allocate a new buffer as we have to go back and write a variable length base and required insert count + // later. + ByteBuf tmp = allocator.buffer(); + try { + int maxDynamicTblIdx = -1; + int requiredInsertCount = 0; + Indices dynamicTableIndices = null; + for (Map.Entry header : headers) { + CharSequence name = header.getKey(); + CharSequence value = header.getValue(); + int dynamicTblIdx = encodeHeader(qpackAttributes, tmp, base, name, value); + if (dynamicTblIdx >= 0) { + int req = dynamicTable.addReferenceToEntry(name, value, dynamicTblIdx); + if (dynamicTblIdx > maxDynamicTblIdx) { + maxDynamicTblIdx = dynamicTblIdx; + requiredInsertCount = req; + } + if (dynamicTableIndices == null) { + dynamicTableIndices = new Indices(); + } + dynamicTableIndices.add(dynamicTblIdx); + } + } + + // Track all the indices that we need to ack later. + if (dynamicTableIndices != null) { + assert streamSectionTrackers != null; + streamSectionTrackers.computeIfAbsent(streamId, __ -> new ArrayDeque<>()) + .add(dynamicTableIndices); + } + + // https://www.rfc-editor.org/rfc/rfc9204.html#name-encoded-field-section-prefi + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | Required Insert Count (8+) | + // +---+---------------------------+ + // | S | Delta Base (7+) | + // +---+---------------------------+ + encodePrefixedInteger(out, (byte) 0b0, 8, dynamicTable.encodedRequiredInsertCount(requiredInsertCount)); + if (base >= requiredInsertCount) { + encodePrefixedInteger(out, (byte) 0b0, 7, base - requiredInsertCount); + } else { + encodePrefixedInteger(out, (byte) 0b1000_0000, 7, requiredInsertCount - base - 1); + } + out.writeBytes(tmp); + } finally { + tmp.release(); + } + } + + void configureDynamicTable(QpackAttributes attributes, long maxTableCapacity, int blockedStreams) + throws QpackException { + if (maxTableCapacity > 0) { + assert attributes.encoderStreamAvailable(); + final QuicStreamChannel encoderStream = attributes.encoderStream(); + dynamicTable.maxTableCapacity(maxTableCapacity); + final ByteBuf tableCapacity = encoderStream.alloc().buffer(8); + // https://www.rfc-editor.org/rfc/rfc9204.html#name-set-dynamic-table-capacity + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 1 | Capacity (5+) | + // +---+---+---+-------------------+ + encodePrefixedInteger(tableCapacity, (byte) 0b0010_0000, 5, maxTableCapacity); + closeOnFailure(encoderStream.writeAndFlush(tableCapacity)); + + streamSectionTrackers = new LongObjectHashMap<>(); + maxBlockedStreams = blockedStreams; + } + } + + /** + * + * Section acknowledgment for the passed {@code streamId}. + * + * @param streamId For which the header fields section is acknowledged. + */ + void sectionAcknowledgment(long streamId) throws QpackException { + assert streamSectionTrackers != null; + final Queue tracker = streamSectionTrackers.get(streamId); + if (tracker == null) { + throw INVALID_SECTION_ACKNOWLEDGMENT; + } + + Indices dynamicTableIndices = tracker.poll(); + + if (tracker.isEmpty()) { + streamSectionTrackers.remove(streamId); + } + + if (dynamicTableIndices == null) { + throw INVALID_SECTION_ACKNOWLEDGMENT; + } + + dynamicTableIndices.forEach(dynamicTable::acknowledgeInsertCountOnAck); + } + + /** + * + * Stream cancellation for the passed {@code streamId}. + * + * @param streamId which is cancelled. + */ + void streamCancellation(long streamId) throws QpackException { + // If a configureDynamicTable(...) was called with a maxTableCapacity of 0 we will have not instanced + // streamSectionTrackers. The remote peer might still send a stream cancellation for a stream, while it + // is optional. See https://www.rfc-editor.org/rfc/rfc9204.html#section-2.2.2.2 + if (streamSectionTrackers == null) { + return; + } + final Queue tracker = streamSectionTrackers.remove(streamId); + if (tracker != null) { + for (;;) { + Indices dynamicTableIndices = tracker.poll(); + if (dynamicTableIndices == null) { + break; + } + dynamicTableIndices.forEach(dynamicTable::acknowledgeInsertCountOnCancellation); + } + } + } + + /** + * + * Insert count increment. + * + * @param increment for the known received count. + */ + void insertCountIncrement(int increment) throws QpackException { + dynamicTable.incrementKnownReceivedCount(increment); + } + + /** + * Encode the header field into the header block. + * @param qpackAttributes {@link QpackAttributes} for the channel. + * @param out {@link ByteBuf} to which encoded header field is to be written. + * @param base Base for the dynamic table index. + * @param name for the header field. + * @param value for the header field. + * @return Index in the dynamic table if the header field was encoded as a reference to the dynamic table, + * {@link #DYNAMIC_TABLE_ENCODE_NOT_DONE } otherwise. + */ + private int encodeHeader(QpackAttributes qpackAttributes, ByteBuf out, int base, CharSequence name, + CharSequence value) { + int index = QpackStaticTable.findFieldIndex(name, value); + if (index == QpackStaticTable.NOT_FOUND) { + if (qpackAttributes.dynamicTableDisabled()) { + encodeLiteral(out, name, value); + return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE; + } + return encodeWithDynamicTable(qpackAttributes, out, base, name, value); + } else if ((index & QpackStaticTable.MASK_NAME_REF) == QpackStaticTable.MASK_NAME_REF) { + int dynamicTblIdx = tryEncodeWithDynamicTable(qpackAttributes, out, base, name, value); + if (dynamicTblIdx >= 0) { + return dynamicTblIdx; + } + final int nameIdx = index ^ QpackStaticTable.MASK_NAME_REF; + dynamicTblIdx = tryAddToDynamicTable(qpackAttributes, true, nameIdx, name, value); + if (dynamicTblIdx >= 0) { + if (dynamicTblIdx >= base) { + encodePostBaseIndexed(out, base, dynamicTblIdx); + } else { + encodeIndexedDynamicTable(out, base, dynamicTblIdx); + } + return dynamicTblIdx; + } + encodeLiteralWithNameRefStaticTable(out, nameIdx, value); + } else { + encodeIndexedStaticTable(out, index); + } + return qpackAttributes.dynamicTableDisabled() ? DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE : + DYNAMIC_TABLE_ENCODE_NOT_DONE; + } + + /** + * Encode the header field using dynamic table, if possible. + * + * @param qpackAttributes {@link QpackAttributes} for the channel. + * @param out {@link ByteBuf} to which encoded header field is to be written. + * @param base Base for the dynamic table index. + * @param name for the header field. + * @param value for the header field. + * @return Index in the dynamic table if the header field was encoded as a reference to the dynamic table, + * {@link #DYNAMIC_TABLE_ENCODE_NOT_DONE } otherwise. + */ + private int encodeWithDynamicTable(QpackAttributes qpackAttributes, ByteBuf out, int base, CharSequence name, + CharSequence value) { + int idx = tryEncodeWithDynamicTable(qpackAttributes, out, base, name, value); + if (idx >= 0) { + return idx; + } + + if (idx == DYNAMIC_TABLE_ENCODE_NOT_DONE) { + idx = tryAddToDynamicTable(qpackAttributes, false, -1, name, value); + if (idx >= 0) { + if (idx >= base) { + encodePostBaseIndexed(out, base, idx); + } else { + encodeIndexedDynamicTable(out, base, idx); + } + return idx; + } + } + encodeLiteral(out, name, value); + return idx; + } + + /** + * Try to encode the header field using dynamic table, otherwise do not encode. + * + * @param qpackAttributes {@link QpackAttributes} for the channel. + * @param out {@link ByteBuf} to which encoded header field is to be written. + * @param base Base for the dynamic table index. + * @param name for the header field. + * @param value for the header field. + * @return Index in the dynamic table if the header field was encoded as a reference to the dynamic table. + * {@link #DYNAMIC_TABLE_ENCODE_NOT_DONE } if encoding was not done. {@link #DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE } + * if dynamic table encoding is not possible (size constraint) and hence should not be tried for this header. + */ + private int tryEncodeWithDynamicTable(QpackAttributes qpackAttributes, ByteBuf out, int base, CharSequence name, + CharSequence value) { + if (qpackAttributes.dynamicTableDisabled()) { + return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE; + } + assert qpackAttributes.encoderStreamAvailable(); + final QuicStreamChannel encoderStream = qpackAttributes.encoderStream(); + + int idx = dynamicTable.getEntryIndex(name, value); + if (idx == QpackEncoderDynamicTable.NOT_FOUND) { + return DYNAMIC_TABLE_ENCODE_NOT_DONE; + } + if (idx >= 0) { + if (dynamicTable.requiresDuplication(idx, sizeOf(name, value))) { + idx = dynamicTable.add(name, value, sizeOf(name, value)); + assert idx >= 0; + // https://www.rfc-editor.org/rfc/rfc9204.html#section-4.3.4 + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | Index (5+) | + // +---+---+---+-------------------+ + ByteBuf duplicate = encoderStream.alloc().buffer(8); + encodePrefixedInteger(duplicate, (byte) 0b0000_0000, 5, + dynamicTable.relativeIndexForEncoderInstructions(idx)); + closeOnFailure(encoderStream.writeAndFlush(duplicate)); + if (mayNotBlockStream()) { + // Add to the table but do not use the entry in the header block to avoid blocking. + return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE; + } + } + if (idx >= base) { + encodePostBaseIndexed(out, base, idx); + } else { + encodeIndexedDynamicTable(out, base, idx); + } + } else { // name match + idx = -(idx + 1); + int addIdx = tryAddToDynamicTable(qpackAttributes, false, + dynamicTable.relativeIndexForEncoderInstructions(idx), name, value); + if (addIdx < 0) { + return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE; + } + idx = addIdx; + + if (idx >= base) { + encodeLiteralWithPostBaseNameRef(out, base, idx, value); + } else { + encodeLiteralWithNameRefDynamicTable(out, base, idx, value); + } + } + return idx; + } + + /** + * Try adding the header field to the dynamic table. + * + * @param qpackAttributes {@link QpackAttributes} for the channel. + * @param staticTableNameRef if {@code nameIdx} is an index in the static table. + * @param nameIdx Index of the name if {@code > 0}. + * @param name for the header field. + * @param value for the header field. + * @return Index in the dynamic table if the header field was encoded as a reference to the dynamic table, + * {@link #DYNAMIC_TABLE_ENCODE_NOT_DONE} otherwise. + */ + private int tryAddToDynamicTable(QpackAttributes qpackAttributes, boolean staticTableNameRef, int nameIdx, + CharSequence name, CharSequence value) { + if (qpackAttributes.dynamicTableDisabled()) { + return DYNAMIC_TABLE_ENCODE_NOT_POSSIBLE; + } + assert qpackAttributes.encoderStreamAvailable(); + final QuicStreamChannel encoderStream = qpackAttributes.encoderStream(); + + int idx = dynamicTable.add(name, value, sizeOf(name, value)); + if (idx >= 0) { + ByteBuf insert = null; + try { + if (nameIdx >= 0) { + // 2 prefixed integers (name index and value length) each requires a maximum of 8 bytes + insert = encoderStream.alloc().buffer(value.length() + 16); + // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-with-name-reference + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Name Index (6+) | + // +---+---+-----------------------+ + encodePrefixedInteger(insert, (byte) (staticTableNameRef ? 0b1100_0000 : 0b1000_0000), 6, nameIdx); + } else { + // 2 prefixed integers (name and value length) each requires a maximum of 8 bytes + insert = encoderStream.alloc().buffer(name.length() + value.length() + 16); + // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-with-literal-name + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | H | Name Length (5+) | + // +---+---+---+-------------------+ + // | Name String (Length bytes) | + // +---+---------------------------+ + // TODO: Force H = 1 till we support sensitivity detector + encodeLengthPrefixedHuffmanEncodedLiteral(insert, (byte) 0b0110_0000, 5, name); + } + // 0 1 2 3 4 5 6 7 + // +---+---+-----------------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + encodeStringLiteral(insert, value); + } catch (Exception e) { + ReferenceCountUtil.release(insert); + return DYNAMIC_TABLE_ENCODE_NOT_DONE; + } + closeOnFailure(encoderStream.writeAndFlush(insert)); + if (mayNotBlockStream()) { + // Add to the table but do not use the entry in the header block to avoid blocking. + return DYNAMIC_TABLE_ENCODE_NOT_DONE; + } + blockedStreams++; + } + return idx; + } + + private void encodeIndexedStaticTable(ByteBuf out, int index) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Index (6+) | + // +---+---+-----------------------+ + encodePrefixedInteger(out, (byte) 0b1100_0000, 6, index); + } + + private void encodeIndexedDynamicTable(ByteBuf out, int base, int index) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Index (6+) | + // +---+---+-----------------------+ + encodePrefixedInteger(out, (byte) 0b1000_0000, 6, base - index - 1); + } + + private void encodePostBaseIndexed(ByteBuf out, int base, int index) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-indexed-field-line-with-pos + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 1 | Index (4+) | + // +---+---+---+---+---------------+ + encodePrefixedInteger(out, (byte) 0b0001_0000, 4, index - base); + } + + private void encodeLiteralWithNameRefStaticTable(ByteBuf out, int nameIndex, CharSequence value) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-nam + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | N | T |Name Index (4+)| + // +---+---+---+---+---------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + // TODO: Force N = 0 till we support sensitivity detector + encodePrefixedInteger(out, (byte) 0b0101_0000, 4, nameIndex); + encodeStringLiteral(out, value); + } + + private void encodeLiteralWithNameRefDynamicTable(ByteBuf out, int base, int nameIndex, CharSequence value) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-nam + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | N | T |Name Index (4+)| + // +---+---+---+---+---------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + // TODO: Force N = 0 till we support sensitivity detector + encodePrefixedInteger(out, (byte) 0b0101_0000, 4, base - nameIndex - 1); + encodeStringLiteral(out, value); + } + + private void encodeLiteralWithPostBaseNameRef(ByteBuf out, int base, int nameIndex, CharSequence value) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-pos + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | 0 | N |NameIdx(3+)| + // +---+---+---+---+---+-----------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + // TODO: Force N = 0 till we support sensitivity detector + encodePrefixedInteger(out, (byte) 0b0000_0000, 4, nameIndex - base); + encodeStringLiteral(out, value); + } + + private void encodeLiteral(ByteBuf out, CharSequence name, CharSequence value) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-literal-field-line-with-lit + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 1 | N | H |NameLen(3+)| + // +---+---+---+---+---+-----------+ + // | Name String (Length bytes) | + // +---+---------------------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + // TODO: Force N = 0 & H = 1 till we support sensitivity detector + encodeLengthPrefixedHuffmanEncodedLiteral(out, (byte) 0b0010_1000, 3, name); + encodeStringLiteral(out, value); + } + + /** + * Encode string literal according to Section 5.2. + * Section 5.2. + */ + private void encodeStringLiteral(ByteBuf out, CharSequence value) { + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | H | String Length (7+) | + // +---+---------------------------+ + // | String Data (Length octets) | + // +-------------------------------+ + // TODO: Force H = 1 till we support sensitivity detector + encodeLengthPrefixedHuffmanEncodedLiteral(out, (byte) 0b1000_0000, 7, value); + } + + /** + * Encode a string literal. + */ + private void encodeLengthPrefixedHuffmanEncodedLiteral(ByteBuf out, byte mask, int prefix, CharSequence value) { + int huffmanLength = huffmanEncoder.getEncodedLength(value); + encodePrefixedInteger(out, mask, prefix, huffmanLength); + huffmanEncoder.encode(out, value); + } + + private boolean mayNotBlockStream() { + return blockedStreams >= maxBlockedStreams - 1; + } + + private static final class Indices { + private int idx; + // Let's just assume 4 indices for now that we will store here as max. + private int[] array = new int[4]; + + void add(int index) { + if (idx == array.length) { + // Double it if needed. + array = Arrays.copyOf(array, array.length << 1); + } + array[idx++] = index; + } + + void forEach(IndexConsumer consumer) throws QpackException { + for (int i = 0; i < idx; i++) { + consumer.accept(array[i]); + } + } + + @FunctionalInterface + interface IndexConsumer { + void accept(int idx) throws QpackException; + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java new file mode 100644 index 0000000..29e3dbb --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderDynamicTable.java @@ -0,0 +1,489 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.AsciiString; + +import static io.netty.handler.codec.http3.QpackHeaderField.ENTRY_OVERHEAD; +import static io.netty.handler.codec.http3.QpackUtil.MAX_HEADER_TABLE_SIZE; +import static io.netty.handler.codec.http3.QpackUtil.MIN_HEADER_TABLE_SIZE; +import static io.netty.handler.codec.http3.QpackUtil.equalsVariableTime; +import static io.netty.util.AsciiString.EMPTY_STRING; +import static io.netty.util.internal.MathUtil.findNextPositivePowerOfTwo; +import static java.lang.Math.max; +import static java.lang.Math.min; +import static java.lang.Math.toIntExact; + +final class QpackEncoderDynamicTable { + private static final QpackException INVALID_KNOW_RECEIVED_COUNT_INCREMENT = + QpackException.newStatic(QpackDecoder.class, "incrementKnownReceivedCount(...)", + "QPACK - invalid known received count increment."); + private static final QpackException INVALID_REQUIRED_INSERT_COUNT_INCREMENT = + QpackException.newStatic(QpackDecoder.class, "acknowledgeInsertCount(...)", + "QPACK - invalid required insert count acknowledgment."); + private static final QpackException INVALID_TABLE_CAPACITY = + QpackException.newStatic(QpackDecoder.class, "validateCapacity(...)", + "QPACK - dynamic table capacity is invalid."); + private static final QpackException CAPACITY_ALREADY_SET = + QpackException.newStatic(QpackDecoder.class, "maxTableCapacity(...)", + "QPACK - dynamic table capacity is already set."); + /** + * Special return value of {@link #getEntryIndex(CharSequence, CharSequence)} when the entry is not found. + */ + public static final int NOT_FOUND = Integer.MIN_VALUE; + + /** + * A hashmap of header entries. + */ + private final HeaderEntry[] fields; + + /** + * Percentage of capacity that we expect to be free after eviction of old entries. + */ + private final int expectedFreeCapacityPercentage; + + /** + * Hash mask for all entries in the hashmap. + */ + private final byte hashMask; + + /** + * Current size of the table. + */ + private long size; + + /** + * + * Maximum capacity of the table. This is set once based on the + * {@link Http3SettingsFrame#HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY} received by the remote peer. + */ + private long maxTableCapacity = -1; + + /* + * The below indexes follow the suggested heuristics in Section 2.1.1.1 Avoiding Prohibited insertions + * https://www.rfc-editor.org/rfc/rfc9204.html#name-avoiding-prohibited-inserti + * + * Tail Drain Head + * | | | + * v v v + * +--------+---------------------------------+----------+ + * | Unused | Referenceable | Draining | + * | Space | Entries | Entries | + * +--------+---------------------------------+----------+ + * ^ ^ ^ + * | | | + * Insertion Index Draining Index Dropping Index + */ + + /** + * Head of the entries, such that {@link HeaderEntry#index} is the {@code droppingIndex}. + */ + private final HeaderEntry head; + + /** + * Pointer before which entries are marked for eviction post {@link #incrementKnownReceivedCount(int)}. + * {@link HeaderEntry#index} is the {@code drainingIndex}. + */ + private HeaderEntry drain; + + /** + * Pointer to the entry representing the + * known received count. + */ + private HeaderEntry knownReceived; + + /** + * Tail of the entries, such that {@link HeaderEntry#index} is the {@code insertionIndex}. + */ + private HeaderEntry tail; + + QpackEncoderDynamicTable() { + this(16, 10); + } + + QpackEncoderDynamicTable(int arraySizeHint, int expectedFreeCapacityPercentage) { + // Enforce a bound of [2, 128] because hashMask is a byte. The max possible value of hashMask is one less + // than the length of this array, and we want the mask to be > 0. + fields = new HeaderEntry[findNextPositivePowerOfTwo(max(2, min(arraySizeHint, 128)))]; + hashMask = (byte) (fields.length - 1); + // Start with index -1 so the first added header will have the index of 0. + // See https://www.rfc-editor.org/rfc/rfc9204.html#name-absolute-indexing + head = new HeaderEntry(-1, EMPTY_STRING, EMPTY_STRING, -1, null); + this.expectedFreeCapacityPercentage = expectedFreeCapacityPercentage; + resetIndicesToHead(); + } + + /** + * Add a name - value pair to the dynamic table and returns the index. + * + * @param name the name. + * @param value the value. + * @param headerSize the size of the header. + * @return the absolute index or {@code -1) if it could not be added. + */ + int add(CharSequence name, CharSequence value, long headerSize) { + if (maxTableCapacity - size < headerSize) { + return -1; + } + + if (tail.index == Integer.MAX_VALUE) { + // Wait for all entries to evict before we restart indexing from zero + evictUnreferencedEntries(); + return -1; + } + int h = AsciiString.hashCode(name); + int i = index(h); + HeaderEntry old = fields[i]; + HeaderEntry e = new HeaderEntry(h, name, value, tail.index + 1, old); + fields[i] = e; + e.addNextTo(tail); + tail = e; + size += headerSize; + + ensureFreeCapacity(); + return e.index; + } + + /** + * Callback when a header block which had a {@link #insertCount()}} greater than {@code 0} is + * acknowledged + * by the decoder. + * + * @param entryIndex For the entry corresponding to the {@link #insertCount()}. + * @throws QpackException If the count is invalid. + */ + void acknowledgeInsertCountOnAck(int entryIndex) throws QpackException { + acknowledgeInsertCount(entryIndex, true); + } + + /** + * Callback when a header block which had a {@link #insertCount()}} greater than {@code 0} is still not processed + * and the stream is cancelled + * by the decoder. + * + * @param entryIndex For the entry corresponding to the {@link #insertCount()}. + * @throws QpackException If the count is invalid. + */ + void acknowledgeInsertCountOnCancellation(int entryIndex) throws QpackException { + acknowledgeInsertCount(entryIndex, false); + } + + private void acknowledgeInsertCount(int entryIndex, boolean updateKnownReceived) throws QpackException { + if (entryIndex < 0) { + throw INVALID_REQUIRED_INSERT_COUNT_INCREMENT; + } + for (HeaderEntry e = head.next; e != null; e = e.next) { + if (e.index == entryIndex) { + assert e.refCount > 0; + e.refCount--; + if (updateKnownReceived && e.index > knownReceived.index) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-known-received-count + // If the Required Insert Count of the acknowledged field section is greater than the current Known + // Received Count, Known Received Count is updated to that Required Insert Count value. + knownReceived = e; + } + evictUnreferencedEntries(); + return; + } + } + // We have reached the end of the linked list so the index was invalid and hence the connection should + // be closed. + // https://www.rfc-editor.org/rfc/rfc9204.html#section-4.4 + throw INVALID_REQUIRED_INSERT_COUNT_INCREMENT; + } + + /** + * Callback when a decoder increments its + * insert count. + * + * @param knownReceivedCountIncr Increment count. + * @throws QpackException If the increment count is invalid. + */ + void incrementKnownReceivedCount(int knownReceivedCountIncr) throws QpackException { + if (knownReceivedCountIncr <= 0) { + throw INVALID_KNOW_RECEIVED_COUNT_INCREMENT; + } + while (knownReceived.next != null && knownReceivedCountIncr > 0) { + knownReceived = knownReceived.next; + knownReceivedCountIncr--; + } + if (knownReceivedCountIncr == 0) { + evictUnreferencedEntries(); + return; + } + // We have reached the end of the linked list so the index was invalid and hence the connection should be + // closed. + // https://www.rfc-editor.org/rfc/rfc9204.html#name-decoder-instructions + throw INVALID_KNOW_RECEIVED_COUNT_INCREMENT; + } + + /** + * Returns the number of entries inserted to this dynamic table. + * + * @return number the added entries. + */ + int insertCount() { + return tail.index + 1; + } + + /** + * + * Encodes the required insert count. + * @param reqInsertCount the required insert count. + * @return the encoded count. + */ + int encodedRequiredInsertCount(int reqInsertCount) { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-required-insert-count + // if ReqInsertCount == 0: + // EncInsertCount = 0 + // else: + // EncInsertCount = (ReqInsertCount mod (2 * MaxEntries)) + 1 + // + return reqInsertCount == 0 ? 0 : reqInsertCount % toIntExact(2 * QpackUtil.maxEntries(maxTableCapacity)) + 1; + } + + // Visible for tests + int encodedKnownReceivedCount() { + // https://www.rfc-editor.org/rfc/rfc9204.html#name-known-received-count + return encodedRequiredInsertCount(knownReceived.index + 1); + } + + /** + * Set the maximum capacity of the dynamic table. This can only be set once. + * @param capacity the capacity + * @throws QpackException if capacity was set before. + */ + void maxTableCapacity(long capacity) throws QpackException { + validateCapacity(capacity); + if (this.maxTableCapacity >= 0) { + throw CAPACITY_ALREADY_SET; + } + this.maxTableCapacity = capacity; + } + + /** + * Transforms the passed {@code entryIndex} as a relative index for + * encoder instructions. + * + * @param entryIndex to transform. + * @return Relative index for the passed {@code entryIndex}. + */ + int relativeIndexForEncoderInstructions(int entryIndex) { + assert entryIndex >= 0; + assert entryIndex <= tail.index; + return tail.index - entryIndex; + } + + /** + * Finds an entry with the passed {@code name} and {@code value} in this dynamic table. + * + * @param name of the entry to find. + * @param value of the entry to find. + * @return {@link #NOT_FOUND} if the entry does not exist. If an entry with matching {@code name} and {@code value} + * exists, then the index is returned. If an entry with only matching name exists then {@code -index-1} is + * returned. + */ + int getEntryIndex(CharSequence name, CharSequence value) { + if (tail != head && name != null && value != null) { + int h = AsciiString.hashCode(name); + int i = index(h); + HeaderEntry firstNameMatch = null; + HeaderEntry entry = null; + for (HeaderEntry e = fields[i]; e != null; e = e.nextSibling) { + if (e.hash == h && equalsVariableTime(value, e.value)) { + if (equalsVariableTime(name, e.name)) { + entry = e; + break; + } + } else if (firstNameMatch == null && equalsVariableTime(name, e.name)) { + firstNameMatch = e; + } + } + if (entry != null) { + return entry.index; + } + if (firstNameMatch != null) { + return -firstNameMatch.index - 1; + } + } + return NOT_FOUND; + } + + /** + * Adds a reference to an entry at the passed {@code idx}. + * + * @param name of the entry for lookups, not verified for the entry at the pased {@code idx} + * @param value of the entry for lookups, not verified for the entry at the pased {@code idx} + * @param idx of the entry. + * @return Required + * insert count if the passed entry has to be referenced in a header block. + */ + int addReferenceToEntry(CharSequence name, CharSequence value, int idx) { + if (tail != head && name != null && value != null) { + int h = AsciiString.hashCode(name); + int i = index(h); + for (HeaderEntry e = fields[i]; e != null; e = e.nextSibling) { + if (e.hash == h && idx == e.index) { + e.refCount++; + return e.index + 1; + } + } + } + throw new IllegalArgumentException("Index " + idx + " not found"); + } + + boolean requiresDuplication(int idx, long size) { + assert head != tail; + + if (this.size + size > maxTableCapacity || head == drain) { + return false; + } + return idx >= head.next.index && idx <= drain.index; + } + + private void evictUnreferencedEntries() { + if (head == knownReceived || head == drain) { + return; + } + + while (head.next != null && head.next != knownReceived.next && head.next != drain.next) { + if (!removeIfUnreferenced()) { + return; + } + } + } + + private boolean removeIfUnreferenced() { + final HeaderEntry toRemove = head.next; + if (toRemove.refCount != 0) { + return false; + } + size -= toRemove.size(); + + // Remove from the hash map + final int i = index(toRemove.hash); + HeaderEntry e = fields[i]; + HeaderEntry prev = null; + while (e != null && e != toRemove) { + prev = e; + e = e.nextSibling; + } + if (e == toRemove) { + if (prev == null) { + fields[i] = e.nextSibling; + } else { + prev.nextSibling = e.nextSibling; + } + } + + // Remove from the linked list + toRemove.remove(head); + if (toRemove == tail) { + resetIndicesToHead(); + } + if (toRemove == drain) { + drain = head; + } + if (toRemove == knownReceived) { + knownReceived = head; + } + return true; + } + + private void resetIndicesToHead() { + tail = head; + drain = head; + knownReceived = head; + } + + private void ensureFreeCapacity() { + long maxDesiredSize = max(ENTRY_OVERHEAD, ((100 - expectedFreeCapacityPercentage) * maxTableCapacity) / 100); + long cSize = size; + HeaderEntry nDrain; + for (nDrain = head; nDrain.next != null && cSize > maxDesiredSize; nDrain = nDrain.next) { + cSize -= nDrain.next.size(); + } + if (cSize != size) { + drain = nDrain; + evictUnreferencedEntries(); + } + } + + private int index(int h) { + return h & hashMask; + } + + private static void validateCapacity(long capacity) throws QpackException { + if (capacity < MIN_HEADER_TABLE_SIZE || capacity > MAX_HEADER_TABLE_SIZE) { + throw INVALID_TABLE_CAPACITY; + } + } + + /** + * An entry for the {@link #fields} HashMap. This entry provides insertion order iteration using {@link #next}. + */ + private static final class HeaderEntry extends QpackHeaderField { + /** + * Pointer to the next entry in insertion order with a different {@link #hash} than this entry. + */ + HeaderEntry next; + + /** + * Pointer to the next entry in insertion order with the same {@link #hash} as this entry, a.k.a hash collisions + */ + HeaderEntry nextSibling; + + /** + * Number of header blocks that refer to this entry as the value for its + * required insert count + */ + int refCount; + + /** + * Hashcode for this entry. + */ + final int hash; + + /** + * Insertion index for this entry. + */ + final int index; + + HeaderEntry(int hash, CharSequence name, CharSequence value, int index, HeaderEntry nextSibling) { + super(name, value); + this.index = index; + this.hash = hash; + this.nextSibling = nextSibling; + } + + void remove(HeaderEntry prev) { + assert prev != this; + prev.next = next; + next = null; // null references to prevent nepotism in generational GC. + nextSibling = null; + } + + void addNextTo(HeaderEntry prev) { + assert prev != this; + this.next = prev.next; + prev.next = this; + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderHandler.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderHandler.java new file mode 100644 index 0000000..291e214 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackEncoderHandler.java @@ -0,0 +1,245 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.handler.codec.ByteToMessageDecoder; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.AsciiString; + +import java.util.List; + +import static io.netty.handler.codec.http3.Http3CodecUtils.connectionError; +import static io.netty.handler.codec.http3.Http3ErrorCode.QPACK_ENCODER_STREAM_ERROR; +import static io.netty.handler.codec.http3.QpackUtil.MAX_UNSIGNED_INT; +import static io.netty.handler.codec.http3.QpackUtil.decodePrefixedIntegerAsInt; +import static io.netty.util.internal.ObjectUtil.checkInRange; + +final class QpackEncoderHandler extends ByteToMessageDecoder { + + private final QpackHuffmanDecoder huffmanDecoder; + private final QpackDecoder qpackDecoder; + private boolean discard; + + QpackEncoderHandler(Long maxTableCapacity, QpackDecoder qpackDecoder) { + checkInRange(maxTableCapacity == null ? 0 : maxTableCapacity, 0, MAX_UNSIGNED_INT, "maxTableCapacity"); + huffmanDecoder = new QpackHuffmanDecoder(); + this.qpackDecoder = qpackDecoder; + } + + @Override + protected void decode(ChannelHandlerContext ctx, ByteBuf in, List __) throws Exception { + if (!in.isReadable()) { + return; + } + if (discard) { + in.skipBytes(in.readableBytes()); + return; + } + + byte b = in.getByte(in.readerIndex()); + + // 4.3.1. Set Dynamic Table Capacity + // + // 0 1 2 3 4 5 6 7 + //+---+---+---+---+---+---+---+---+ + //| 0 | 0 | 1 | Capacity (5+) | + //+---+---+---+-------------------+ + if ((b & 0b1110_0000) == 0b0010_0000) { + // new capacity + long capacity = QpackUtil.decodePrefixedInteger(in, 5); + if (capacity < 0) { + // Not enough readable bytes + return; + } + + try { + qpackDecoder.setDynamicTableCapacity(capacity); + } catch (QpackException e) { + handleDecodeFailure(ctx, e, "setDynamicTableCapacity failed."); + } + return; + } + + final QpackAttributes qpackAttributes = Http3.getQpackAttributes(ctx.channel().parent()); + assert qpackAttributes != null; + if (!qpackAttributes.dynamicTableDisabled() && !qpackAttributes.decoderStreamAvailable()) { + // We need the decoder stream to update the decoder with these instructions. + return; + } + final QuicStreamChannel decoderStream = qpackAttributes.decoderStream(); + + // 4.3.2. Insert With Name Reference + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | T | Name Index (6+) | + // +---+---+-----------------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + if ((b & 0b1000_0000) == 0b1000_0000) { + int readerIndex = in.readerIndex(); + // T == 1 implies static table index. + // https://www.rfc-editor.org/rfc/rfc9204.html#name-insert-with-name-reference + final boolean isStaticTableIndex = QpackUtil.firstByteEquals(in, (byte) 0b1100_0000); + final int nameIdx = decodePrefixedIntegerAsInt(in, 6); + if (nameIdx < 0) { + // Not enough readable bytes + return; + } + + CharSequence value = decodeLiteralValue(in); + if (value == null) { + // Reset readerIndex + in.readerIndex(readerIndex); + // Not enough readable bytes + return; + } + try { + qpackDecoder.insertWithNameReference(decoderStream, isStaticTableIndex, nameIdx, + value); + } catch (QpackException e) { + handleDecodeFailure(ctx, e, "insertWithNameReference failed."); + } + return; + } + // 4.3.3. Insert With Literal Name + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | H | Name Length (5+) | + // +---+---+---+-------------------+ + // | Name String (Length bytes) | + // +---+---------------------------+ + // | H | Value Length (7+) | + // +---+---------------------------+ + // | Value String (Length bytes) | + // +-------------------------------+ + if ((b & 0b1100_0000) == 0b0100_0000) { + int readerIndex = in.readerIndex(); + final boolean nameHuffEncoded = QpackUtil.firstByteEquals(in, (byte) 0b0110_0000); + int nameLength = decodePrefixedIntegerAsInt(in, 5); + if (nameLength < 0) { + // Reset readerIndex + in.readerIndex(readerIndex); + // Not enough readable bytes + return; + } + if (in.readableBytes() < nameLength) { + // Reset readerIndex + in.readerIndex(readerIndex); + // Not enough readable bytes + return; + } + + CharSequence name = decodeStringLiteral(in, nameHuffEncoded, nameLength); + CharSequence value = decodeLiteralValue(in); + if (value == null) { + // Reset readerIndex + in.readerIndex(readerIndex); + // Not enough readable bytes + return; + } + try { + qpackDecoder.insertLiteral(decoderStream, name, value); + } catch (QpackException e) { + handleDecodeFailure(ctx, e, "insertLiteral failed."); + } + return; + } + // 4.3.4. Duplicate + // + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | 0 | Index (5+) | + // +---+---+---+-------------------+ + if ((b & 0b1110_0000) == 0b0000_0000) { + int readerIndex = in.readerIndex(); + int index = decodePrefixedIntegerAsInt(in, 5); + if (index < 0) { + // Reset readerIndex + in.readerIndex(readerIndex); + // Not enough readable bytes + return; + } + try { + qpackDecoder.duplicate(decoderStream, index); + } catch (QpackException e) { + handleDecodeFailure(ctx, e, "duplicate failed."); + } + return; + } + + discard = true; + Http3CodecUtils.connectionError(ctx, Http3ErrorCode.QPACK_ENCODER_STREAM_ERROR, + "Unknown encoder instruction '" + b + "'.", false); + } + + @Override + public void channelReadComplete(ChannelHandlerContext ctx) { + ctx.fireChannelReadComplete(); + + // QPACK streams should always be processed, no matter what the user is doing in terms of configuration + // and AUTO_READ. + Http3CodecUtils.readIfNoAutoRead(ctx); + } + + @Override + public void userEventTriggered(ChannelHandlerContext ctx, Object evt) { + if (evt instanceof ChannelInputShutdownEvent) { + // See https://www.rfc-editor.org/rfc/rfc9204.html#name-encoder-and-decoder-streams + Http3CodecUtils.criticalStreamClosed(ctx); + } + ctx.fireUserEventTriggered(evt); + } + + @Override + public void channelInactive(ChannelHandlerContext ctx) { + // See https://www.rfc-editor.org/rfc/rfc9204.html#name-encoder-and-decoder-streams + Http3CodecUtils.criticalStreamClosed(ctx); + ctx.fireChannelInactive(); + } + + private void handleDecodeFailure(ChannelHandlerContext ctx, QpackException cause, String message) { + discard = true; + connectionError(ctx, new Http3Exception(QPACK_ENCODER_STREAM_ERROR, message, cause), true); + } + + private CharSequence decodeLiteralValue(ByteBuf in) throws QpackException { + final boolean valueHuffEncoded = QpackUtil.firstByteEquals(in, (byte) 0b1000_0000); + int valueLength = decodePrefixedIntegerAsInt(in, 7); + if (valueLength < 0 || in.readableBytes() < valueLength) { + // Not enough readable bytes + return null; + } + + return decodeStringLiteral(in, valueHuffEncoded, valueLength); + } + + private CharSequence decodeStringLiteral(ByteBuf in, boolean huffmanEncoded, int length) + throws QpackException { + if (huffmanEncoded) { + return huffmanDecoder.decode(in, length); + } + byte[] buf = new byte[length]; + in.readBytes(buf); + return new AsciiString(buf, false); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackException.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackException.java new file mode 100644 index 0000000..3f118aa --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackException.java @@ -0,0 +1,32 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.util.internal.ThrowableUtil; + +/** + * Exception thrown if an error happens during QPACK processing. + */ +public final class QpackException extends Exception { + + private QpackException(String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace) { + super(message, cause, enableSuppression, writableStackTrace); + } + + static QpackException newStatic(Class clazz, String method, String message) { + return ThrowableUtil.unknownStackTrace(new QpackException(message, null, false, false), clazz, method); + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHeaderField.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHeaderField.java new file mode 100644 index 0000000..f2ab262 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHeaderField.java @@ -0,0 +1,51 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import static io.netty.util.internal.ObjectUtil.checkNotNull; + +class QpackHeaderField { + + /** + * + * Section 3.2.1 Dynamic Table Size. + * The size of an entry is the sum of its name's length in bytes, its + * value's length in bytes, and 32. + */ + static final int ENTRY_OVERHEAD = 32; + + static long sizeOf(CharSequence name, CharSequence value) { + return name.length() + value.length() + ENTRY_OVERHEAD; + } + + final CharSequence name; + final CharSequence value; + + // This constructor can only be used if name and value are ISO-8859-1 encoded. + QpackHeaderField(CharSequence name, CharSequence value) { + this.name = checkNotNull(name, "name"); + this.value = checkNotNull(value, "value"); + } + + long size() { + return sizeOf(name, value); + } + + @Override + public String toString() { + return name + ": " + value; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java new file mode 100644 index 0000000..649f743 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanDecoder.java @@ -0,0 +1,4717 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.util.AsciiString; +import io.netty.util.ByteProcessor; + +final class QpackHuffmanDecoder implements ByteProcessor { + + /* Scroll to the bottom! */ + + private static final byte HUFFMAN_COMPLETE = 1; + private static final byte HUFFMAN_EMIT_SYMBOL = 1 << 1; + private static final byte HUFFMAN_FAIL = 1 << 2; + + private static final int HUFFMAN_COMPLETE_SHIFT = HUFFMAN_COMPLETE << 8; + private static final int HUFFMAN_EMIT_SYMBOL_SHIFT = HUFFMAN_EMIT_SYMBOL << 8; + private static final int HUFFMAN_FAIL_SHIFT = HUFFMAN_FAIL << 8; + + /** + * A table of byte tuples (state, flags, output). They are packed together as: + *

+ * state<<16 + flags<<8 + output + */ + private static final int[] HUFFS = new int[] { + // Node 0 (Root Node, never emits symbols.) + 4 << 16, + 5 << 16, + 7 << 16, + 8 << 16, + 11 << 16, + 12 << 16, + 16 << 16, + 19 << 16, + 25 << 16, + 28 << 16, + 32 << 16, + 35 << 16, + 42 << 16, + 49 << 16, + 57 << 16, + (64 << 16) + (HUFFMAN_COMPLETE << 8), + + // Node 1 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116, + 13 << 16, + 14 << 16, + 17 << 16, + 18 << 16, + 20 << 16, + 21 << 16, + + // Node 2 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111, + + // Node 3 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97, + + // Node 4 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 48, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 48, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 49, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 49, + + // Node 5 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 50, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 50, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 97, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 97, + + // Node 6 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111, + + // Node 7 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 99, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 99, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 101, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 101, + + // Node 8 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 105, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 105, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 111, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 111, + + // Node 9 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 32, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 37, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 45, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 46, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 47, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 51, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 52, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 53, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 54, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 55, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 56, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 57, + + // Node 10 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 32, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 37, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 45, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 46, + + // Node 11 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 115, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 115, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 116, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 116, + + // Node 12 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 32, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 37, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 45, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 46, + + // Node 13 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 32, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 32, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 37, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 37, + + // Node 14 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 45, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 45, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 46, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 46, + + // Node 15 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 47, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 51, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 52, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 53, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 54, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 55, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 56, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 57, + + // Node 16 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 47, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 51, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 52, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 53, + + // Node 17 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 47, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 47, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 51, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 51, + + // Node 18 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 52, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 52, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 53, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 53, + + // Node 19 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 54, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 55, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 56, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 57, + + // Node 20 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 54, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 54, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 55, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 55, + + // Node 21 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 56, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 56, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 57, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 57, + + // Node 22 + 26 << 16, + 27 << 16, + 29 << 16, + 30 << 16, + 33 << 16, + 34 << 16, + 36 << 16, + 37 << 16, + 43 << 16, + 46 << 16, + 50 << 16, + 53 << 16, + 58 << 16, + 61 << 16, + 65 << 16, + (68 << 16) + (HUFFMAN_COMPLETE << 8), + + // Node 23 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 61, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 65, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 95, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 98, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 100, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 102, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 103, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 104, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 108, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 109, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 110, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 112, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 114, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 117, + 38 << 16, + 39 << 16, + + // Node 24 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 61, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 65, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 95, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 98, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 100, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 102, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 103, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 104, + + // Node 25 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 61, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 65, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 95, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 98, + + // Node 26 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 61, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 61, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 65, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 65, + + // Node 27 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 95, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 95, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 98, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 98, + + // Node 28 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 100, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 102, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 103, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 104, + + // Node 29 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 100, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 100, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 102, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 102, + + // Node 30 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 103, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 103, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 104, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 104, + + // Node 31 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 108, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 109, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 110, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 112, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 114, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 117, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 58, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 66, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 67, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 68, + + // Node 32 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 108, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 109, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 110, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 112, + + // Node 33 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 108, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 108, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 109, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 109, + + // Node 34 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 110, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 110, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 112, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 112, + + // Node 35 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 114, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 117, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 58, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 66, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 67, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 68, + + // Node 36 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 114, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 114, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 117, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 117, + + // Node 37 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 58, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 66, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 67, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 68, + + // Node 38 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 58, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 58, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 66, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 66, + + // Node 39 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 67, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 67, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 68, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 68, + + // Node 40 + 44 << 16, + 45 << 16, + 47 << 16, + 48 << 16, + 51 << 16, + 52 << 16, + 54 << 16, + 55 << 16, + 59 << 16, + 60 << 16, + 62 << 16, + 63 << 16, + 66 << 16, + 67 << 16, + 69 << 16, + (72 << 16) + (HUFFMAN_COMPLETE << 8), + + // Node 41 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 69, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 70, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 71, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 72, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 73, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 74, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 75, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 76, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 77, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 78, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 79, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 80, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 81, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 82, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 83, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 84, + + // Node 42 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 69, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 70, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 71, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 72, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 73, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 74, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 75, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 76, + + // Node 43 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 69, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 70, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 71, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 72, + + // Node 44 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 69, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 69, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 70, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 70, + + // Node 45 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 71, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 71, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 72, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 72, + + // Node 46 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 73, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 74, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 75, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 76, + + // Node 47 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 73, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 73, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 74, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 74, + + // Node 48 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 75, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 75, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 76, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 76, + + // Node 49 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 77, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 78, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 79, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 80, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 81, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 82, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 83, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 84, + + // Node 50 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 77, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 78, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 79, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 80, + + // Node 51 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 77, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 77, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 78, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 78, + + // Node 52 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 79, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 79, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 80, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 80, + + // Node 53 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 81, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 82, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 83, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 84, + + // Node 54 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 81, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 81, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 82, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 82, + + // Node 55 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 83, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 83, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 84, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 84, + + // Node 56 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 85, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 86, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 87, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 89, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 106, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 107, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 113, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 118, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 119, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 120, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 121, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 122, + 70 << 16, + 71 << 16, + 73 << 16, + (74 << 16) + (HUFFMAN_COMPLETE << 8), + + // Node 57 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 85, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 86, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 87, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 89, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 106, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 107, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 113, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 118, + + // Node 58 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 85, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 86, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 87, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 89, + + // Node 59 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 85, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 85, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 86, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 86, + + // Node 60 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 87, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 87, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 89, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 89, + + // Node 61 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 106, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 107, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 113, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 118, + + // Node 62 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 106, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 106, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 107, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 107, + + // Node 63 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 113, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 113, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 118, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 118, + + // Node 64 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 119, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 120, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 121, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 122, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 38, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 42, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 44, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 59, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 88, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 90, + 75 << 16, + 78 << 16, + + // Node 65 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 119, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 120, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 121, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 122, + + // Node 66 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 119, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 119, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 120, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 120, + + // Node 67 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 121, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 121, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 122, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 122, + + // Node 68 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 38, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 42, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 44, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 59, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 88, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 90, + 76 << 16, + 77 << 16, + 79 << 16, + 81 << 16, + + // Node 69 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 38, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 42, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 44, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 59, + + // Node 70 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 38, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 38, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 42, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 42, + + // Node 71 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 44, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 44, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 59, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 59, + + // Node 72 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 88, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 90, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 33, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 34, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 40, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 41, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 63, + 80 << 16, + 82 << 16, + 84 << 16, + + // Node 73 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 88, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 88, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 90, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 90, + + // Node 74 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 33, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 34, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 40, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 41, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 63, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 39, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 43, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 124, + 83 << 16, + 85 << 16, + 88 << 16, + + // Node 75 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 33, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 34, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 40, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 41, + + // Node 76 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 33, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 33, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 34, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 34, + + // Node 77 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 40, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 40, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 41, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 41, + + // Node 78 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 63, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 39, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 43, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 124, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 35, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 62, + 86 << 16, + 87 << 16, + 89 << 16, + 90 << 16, + + // Node 79 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 63, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 63, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 39, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 43, + + // Node 80 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 39, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 39, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 43, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 43, + + // Node 81 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 124, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 35, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 62, + (HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 36, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 64, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 91, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 93, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 126, + 91 << 16, + 92 << 16, + + // Node 82 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 124, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 124, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 35, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 62, + + // Node 83 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 35, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 35, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 62, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 62, + + // Node 84 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8), + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 36, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 64, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 91, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 93, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 126, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 94, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 125, + 93 << 16, + 94 << 16, + + // Node 85 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8), + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 36, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 64, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 91, + + // Node 86 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8), + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8), + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 36, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 36, + + // Node 87 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 64, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 64, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 91, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 91, + + // Node 88 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 93, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 126, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 94, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 125, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 60, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 96, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 123, + 95 << 16, + + // Node 89 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 93, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 93, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 126, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 126, + + // Node 90 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 94, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 125, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 60, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 96, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 123, + 96 << 16, + 110 << 16, + + // Node 91 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 94, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 94, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 125, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 125, + + // Node 92 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 60, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 96, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 123, + 97 << 16, + 101 << 16, + 111 << 16, + 133 << 16, + + // Node 93 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 60, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 60, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 96, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 96, + + // Node 94 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 123, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 123, + 98 << 16, + 99 << 16, + 102 << 16, + 105 << 16, + 112 << 16, + 119 << 16, + 134 << 16, + 153 << 16, + + // Node 95 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 92, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 195, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 208, + 100 << 16, + 103 << 16, + 104 << 16, + 106 << 16, + 107 << 16, + 113 << 16, + 116 << 16, + 120 << 16, + 126 << 16, + 135 << 16, + 142 << 16, + 154 << 16, + 169 << 16, + + // Node 96 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 92, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 195, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 208, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 128, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 130, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 131, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 162, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 184, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 194, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 224, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 226, + 108 << 16, + 109 << 16, + + // Node 97 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 92, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 195, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 208, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 128, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 130, + + // Node 98 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 92, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 92, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 195, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 195, + + // Node 99 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 208, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 208, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 128, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 130, + + // Node 100 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 128, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 128, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 130, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 130, + + // Node 101 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 131, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 162, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 184, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 194, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 224, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 226, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 153, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 161, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 167, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 172, + + // Node 102 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 131, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 162, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 184, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 194, + + // Node 103 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 131, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 131, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 162, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 162, + + // Node 104 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 184, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 184, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 194, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 194, + + // Node 105 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 224, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 226, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 153, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 161, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 167, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 172, + + // Node 106 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 224, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 224, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 226, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 226, + + // Node 107 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 153, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 161, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 167, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 172, + + // Node 108 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 153, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 153, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 161, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 161, + + // Node 109 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 167, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 167, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 172, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 172, + + // Node 110 + 114 << 16, + 115 << 16, + 117 << 16, + 118 << 16, + 121 << 16, + 123 << 16, + 127 << 16, + 130 << 16, + 136 << 16, + 139 << 16, + 143 << 16, + 146 << 16, + 155 << 16, + 162 << 16, + 170 << 16, + 180 << 16, + + // Node 111 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 176, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 177, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 179, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 209, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 216, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 217, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 227, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 229, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 230, + 122 << 16, + 124 << 16, + 125 << 16, + 128 << 16, + 129 << 16, + 131 << 16, + 132 << 16, + + // Node 112 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 176, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 177, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 179, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 209, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 216, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 217, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 227, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 229, + + // Node 113 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 176, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 177, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 179, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 209, + + // Node 114 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 176, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 176, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 177, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 177, + + // Node 115 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 179, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 179, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 209, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 209, + + // Node 116 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 216, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 217, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 227, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 229, + + // Node 117 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 216, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 216, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 217, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 217, + + // Node 118 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 227, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 227, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 229, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 229, + + // Node 119 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 230, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 129, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 132, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 133, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 134, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 136, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 146, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 154, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 156, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 160, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 163, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 164, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 169, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 170, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 173, + + // Node 120 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 230, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 129, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 132, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 133, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 134, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 136, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 146, + + // Node 121 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 230, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 230, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 129, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 132, + + // Node 122 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 129, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 129, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 132, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 132, + + // Node 123 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 133, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 134, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 136, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 146, + + // Node 124 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 133, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 133, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 134, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 134, + + // Node 125 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 136, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 136, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 146, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 146, + + // Node 126 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 154, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 156, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 160, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 163, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 164, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 169, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 170, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 173, + + // Node 127 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 154, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 156, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 160, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 163, + + // Node 128 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 154, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 154, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 156, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 156, + + // Node 129 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 160, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 160, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 163, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 163, + + // Node 130 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 164, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 169, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 170, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 173, + + // Node 131 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 164, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 164, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 169, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 169, + + // Node 132 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 170, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 170, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 173, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 173, + + // Node 133 + 137 << 16, + 138 << 16, + 140 << 16, + 141 << 16, + 144 << 16, + 145 << 16, + 147 << 16, + 150 << 16, + 156 << 16, + 159 << 16, + 163 << 16, + 166 << 16, + 171 << 16, + 174 << 16, + 181 << 16, + 190 << 16, + + // Node 134 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 178, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 181, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 185, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 186, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 187, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 189, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 190, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 196, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 198, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 228, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 232, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 233, + 148 << 16, + 149 << 16, + 151 << 16, + 152 << 16, + + // Node 135 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 178, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 181, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 185, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 186, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 187, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 189, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 190, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 196, + + // Node 136 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 178, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 181, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 185, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 186, + + // Node 137 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 178, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 178, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 181, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 181, + + // Node 138 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 185, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 185, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 186, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 186, + + // Node 139 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 187, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 189, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 190, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 196, + + // Node 140 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 187, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 187, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 189, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 189, + + // Node 141 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 190, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 190, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 196, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 196, + + // Node 142 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 198, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 228, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 232, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 233, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 1, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 135, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 137, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 138, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 139, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 140, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 141, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 143, + + // Node 143 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 198, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 228, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 232, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 233, + + // Node 144 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 198, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 198, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 228, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 228, + + // Node 145 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 232, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 232, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 233, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 233, + + // Node 146 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 1, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 135, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 137, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 138, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 139, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 140, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 141, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 143, + + // Node 147 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 1, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 135, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 137, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 138, + + // Node 148 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 1, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 1, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 135, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 135, + + // Node 149 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 137, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 137, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 138, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 138, + + // Node 150 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 139, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 140, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 141, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 143, + + // Node 151 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 139, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 139, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 140, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 140, + + // Node 152 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 141, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 141, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 143, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 143, + + // Node 153 + 157 << 16, + 158 << 16, + 160 << 16, + 161 << 16, + 164 << 16, + 165 << 16, + 167 << 16, + 168 << 16, + 172 << 16, + 173 << 16, + 175 << 16, + 177 << 16, + 182 << 16, + 185 << 16, + 191 << 16, + 207 << 16, + + // Node 154 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 147, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 149, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 150, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 151, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 152, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 155, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 157, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 158, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 165, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 166, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 168, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 174, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 175, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 180, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 182, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 183, + + // Node 155 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 147, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 149, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 150, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 151, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 152, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 155, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 157, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 158, + + // Node 156 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 147, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 149, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 150, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 151, + + // Node 157 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 147, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 147, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 149, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 149, + + // Node 158 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 150, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 150, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 151, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 151, + + // Node 159 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 152, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 155, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 157, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 158, + + // Node 160 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 152, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 152, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 155, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 155, + + // Node 161 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 157, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 157, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 158, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 158, + + // Node 162 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 165, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 166, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 168, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 174, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 175, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 180, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 182, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 183, + + // Node 163 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 165, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 166, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 168, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 174, + + // Node 164 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 165, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 165, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 166, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 166, + + // Node 165 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 168, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 168, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 174, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 174, + + // Node 166 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 175, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 180, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 182, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 183, + + // Node 167 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 175, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 175, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 180, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 180, + + // Node 168 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 182, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 182, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 183, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 183, + + // Node 169 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 188, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 191, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 197, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 231, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 239, + 176 << 16, + 178 << 16, + 179 << 16, + 183 << 16, + 184 << 16, + 186 << 16, + 187 << 16, + 192 << 16, + 199 << 16, + 208 << 16, + 223 << 16, + + // Node 170 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 188, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 191, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 197, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 231, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 239, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 9, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 142, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 144, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 145, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 148, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 159, + + // Node 171 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 188, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 191, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 197, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 231, + + // Node 172 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 188, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 188, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 191, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 191, + + // Node 173 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 197, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 197, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 231, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 231, + + // Node 174 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 239, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 9, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 142, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 144, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 145, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 148, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 159, + + // Node 175 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 239, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 239, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 9, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 142, + + // Node 176 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 9, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 9, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 142, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 142, + + // Node 177 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 144, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 145, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 148, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 159, + + // Node 178 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 144, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 144, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 145, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 145, + + // Node 179 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 148, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 148, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 159, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 159, + + // Node 180 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 171, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 206, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 215, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 225, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 236, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 237, + 188 << 16, + 189 << 16, + 193 << 16, + 196 << 16, + 200 << 16, + 203 << 16, + 209 << 16, + 216 << 16, + 224 << 16, + 238 << 16, + + // Node 181 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 171, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 206, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 215, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 225, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 236, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 237, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 199, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 207, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 234, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 235, + + // Node 182 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 171, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 206, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 215, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 225, + + // Node 183 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 171, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 171, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 206, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 206, + + // Node 184 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 215, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 215, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 225, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 225, + + // Node 185 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 236, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 237, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 199, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 207, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 234, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 235, + + // Node 186 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 236, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 236, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 237, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 237, + + // Node 187 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 199, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 207, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 234, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 235, + + // Node 188 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 199, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 199, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 207, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 207, + + // Node 189 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 234, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 234, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 235, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 235, + + // Node 190 + 194 << 16, + 195 << 16, + 197 << 16, + 198 << 16, + 201 << 16, + 202 << 16, + 204 << 16, + 205 << 16, + 210 << 16, + 213 << 16, + 217 << 16, + 220 << 16, + 225 << 16, + 231 << 16, + 239 << 16, + 246 << 16, + + // Node 191 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 192, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 193, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 200, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 201, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 202, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 205, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 210, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 213, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 218, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 219, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 238, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 240, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 242, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 243, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 255, + 206 << 16, + + // Node 192 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 192, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 193, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 200, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 201, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 202, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 205, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 210, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 213, + + // Node 193 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 192, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 193, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 200, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 201, + + // Node 194 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 192, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 192, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 193, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 193, + + // Node 195 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 200, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 200, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 201, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 201, + + // Node 196 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 202, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 205, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 210, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 213, + + // Node 197 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 202, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 202, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 205, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 205, + + // Node 198 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 210, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 210, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 213, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 213, + + // Node 199 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 218, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 219, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 238, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 240, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 242, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 243, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 255, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 203, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 204, + + // Node 200 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 218, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 219, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 238, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 240, + + // Node 201 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 218, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 218, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 219, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 219, + + // Node 202 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 238, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 238, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 240, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 240, + + // Node 203 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 242, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 243, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 255, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 203, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 204, + + // Node 204 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 242, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 242, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 243, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 243, + + // Node 205 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 255, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 255, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 203, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 204, + + // Node 206 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 203, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 203, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 204, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 204, + + // Node 207 + 211 << 16, + 212 << 16, + 214 << 16, + 215 << 16, + 218 << 16, + 219 << 16, + 221 << 16, + 222 << 16, + 226 << 16, + 228 << 16, + 232 << 16, + 235 << 16, + 240 << 16, + 243 << 16, + 247 << 16, + 250 << 16, + + // Node 208 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 211, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 212, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 214, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 221, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 222, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 223, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 241, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 244, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 245, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 246, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 247, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 248, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 250, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 251, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 252, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 253, + + // Node 209 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 211, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 212, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 214, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 221, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 222, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 223, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 241, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 244, + + // Node 210 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 211, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 212, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 214, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 221, + + // Node 211 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 211, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 211, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 212, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 212, + + // Node 212 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 214, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 214, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 221, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 221, + + // Node 213 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 222, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 223, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 241, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 244, + + // Node 214 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 222, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 222, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 223, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 223, + + // Node 215 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 241, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 241, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 244, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 244, + + // Node 216 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 245, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 246, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 247, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 248, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 250, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 251, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 252, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 253, + + // Node 217 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 245, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 246, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 247, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 248, + + // Node 218 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 245, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 245, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 246, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 246, + + // Node 219 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 247, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 247, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 248, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 248, + + // Node 220 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 250, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 251, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 252, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 253, + + // Node 221 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 250, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 250, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 251, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 251, + + // Node 222 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 252, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 252, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 253, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 253, + + // Node 223 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 254, + 227 << 16, + 229 << 16, + 230 << 16, + 233 << 16, + 234 << 16, + 236 << 16, + 237 << 16, + 241 << 16, + 242 << 16, + 244 << 16, + 245 << 16, + 248 << 16, + 249 << 16, + 251 << 16, + 252 << 16, + + // Node 224 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 254, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 2, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 3, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 4, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 5, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 6, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 7, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 8, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 11, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 12, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 14, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 15, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 16, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 17, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 18, + + // Node 225 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 254, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 2, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 3, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 4, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 5, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 6, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 7, + + // Node 226 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 254, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 254, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 2, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 3, + + // Node 227 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 2, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 2, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 3, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 3, + + // Node 228 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 4, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 5, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 6, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 7, + + // Node 229 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 4, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 4, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 5, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 5, + + // Node 230 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 6, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 6, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 7, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 7, + + // Node 231 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 8, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 11, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 12, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 14, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 15, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 16, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 17, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 18, + + // Node 232 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 8, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 11, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 12, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 14, + + // Node 233 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 8, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 8, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 11, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 11, + + // Node 234 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 12, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 12, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 14, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 14, + + // Node 235 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 15, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 16, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 17, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 18, + + // Node 236 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 15, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 15, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 16, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 16, + + // Node 237 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 17, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 17, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 18, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 18, + + // Node 238 + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 19, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 20, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 21, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 23, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 24, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 25, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 26, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 27, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 28, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 29, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 30, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 31, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 127, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 220, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 249, + 253 << 16, + + // Node 239 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 19, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 20, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 21, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 23, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 24, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 25, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 26, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 27, + + // Node 240 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 19, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 20, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 21, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 23, + + // Node 241 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 19, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 19, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 20, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 20, + + // Node 242 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 21, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 21, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 23, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 23, + + // Node 243 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 24, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 25, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 26, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 27, + + // Node 244 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 24, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 24, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 25, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 25, + + // Node 245 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 26, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 26, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 27, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 27, + + // Node 246 + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 28, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 29, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 30, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 31, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 127, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 220, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 249, + 254 << 16, + 255 << 16, + + // Node 247 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 28, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 29, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 30, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 31, + + // Node 248 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 28, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 28, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 29, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 29, + + // Node 249 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 30, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 30, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 31, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 31, + + // Node 250 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 127, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 220, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 249, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 10, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 13, + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 22, + HUFFMAN_FAIL << 8, + + // Node 251 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 127, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 127, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 220, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 220, + + // Node 252 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 249, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 249, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 10, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 13, + (1 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (22 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 22, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + + // Node 253 + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 10, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 13, + (2 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (9 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (23 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (40 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 22, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + + // Node 254 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 10, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 10, + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 13, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 13, + + // Node 255 + (3 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (6 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (10 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (15 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (24 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (31 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (41 << 16) + (HUFFMAN_EMIT_SYMBOL << 8) + 22, + (56 << 16) + ((HUFFMAN_COMPLETE | HUFFMAN_EMIT_SYMBOL) << 8) + 22, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + HUFFMAN_FAIL << 8, + }; + + private static final QpackException BAD_ENCODING = QpackException.newStatic(QpackHuffmanDecoder.class, + "decode(...)", "QPACK - Bad Encoding"); + + private byte[] dest; + private int k; + private int state; + + QpackHuffmanDecoder() { } + + /** + * Decompresses the given Huffman coded string literal. + * + * @param buf the string literal to be decoded + * @return the output stream for the compressed data + * @throws QpackException EOS Decoded + */ + public AsciiString decode(ByteBuf buf, int length) throws QpackException { + if (length == 0) { + return AsciiString.EMPTY_STRING; + } + dest = new byte[length * 8 / 5]; + try { + int readerIndex = buf.readerIndex(); + // Using ByteProcessor to reduce bounds-checking and reference-count checking during byte-by-byte + // processing of the ByteBuf. + int endIndex = buf.forEachByte(readerIndex, length, this); + if (endIndex == -1) { + // We did consume the requested length + buf.readerIndex(readerIndex + length); + if ((state & HUFFMAN_COMPLETE_SHIFT) != HUFFMAN_COMPLETE_SHIFT) { + throw BAD_ENCODING; + } + return new AsciiString(dest, 0, k, false); + } + + // The process(...) method returned before the requested length was requested. This means there + // was a bad encoding detected. + buf.readerIndex(endIndex); + throw BAD_ENCODING; + } finally { + dest = null; + k = 0; + state = 0; + } + } + + /** + * This should never be called from anything but this class itself! + */ + @Override + public boolean process(byte input) { + return processNibble(input >> 4) && processNibble(input); + } + + private boolean processNibble(int input) { + // The high nibble of the flags byte of each row is always zero + // (low nibble after shifting row by 12), since there are only 3 flag bits + int index = state >> 12 | (input & 0x0F); + state = HUFFS[index]; + if ((state & HUFFMAN_FAIL_SHIFT) != 0) { + return false; + } + if ((state & HUFFMAN_EMIT_SYMBOL_SHIFT) != 0) { + // state is always positive so can cast without mask here + dest[k++] = (byte) state; + } + return true; + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java new file mode 100644 index 0000000..6df0de5 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackHuffmanEncoder.java @@ -0,0 +1,176 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.util.AsciiString; +import io.netty.util.ByteProcessor; +import io.netty.util.internal.ObjectUtil; + +final class QpackHuffmanEncoder { + + private final int[] codes; + private final byte[] lengths; + private final EncodedLengthProcessor encodedLengthProcessor = new EncodedLengthProcessor(); + private final EncodeProcessor encodeProcessor = new EncodeProcessor(); + + QpackHuffmanEncoder() { + this(QpackUtil.HUFFMAN_CODES, QpackUtil.HUFFMAN_CODE_LENGTHS); + } + + /** + * Creates a new Huffman encoder with the specified Huffman coding. + * + * @param codes the Huffman codes indexed by symbol + * @param lengths the length of each Huffman code + */ + private QpackHuffmanEncoder(int[] codes, byte[] lengths) { + this.codes = codes; + this.lengths = lengths; + } + + /** + * Compresses the input string literal using the Huffman coding. + * + * @param out the output stream for the compressed data + * @param data the string literal to be Huffman encoded + */ + public void encode(ByteBuf out, CharSequence data) { + ObjectUtil.checkNotNull(out, "out"); + if (data instanceof AsciiString) { + AsciiString string = (AsciiString) data; + try { + encodeProcessor.out = out; + string.forEachByte(encodeProcessor); + } catch (Exception e) { + throw new IllegalStateException(e); + } finally { + encodeProcessor.end(); + } + } else { + encodeSlowPath(out, data); + } + } + + private void encodeSlowPath(ByteBuf out, CharSequence data) { + long current = 0; + int n = 0; + + for (int i = 0; i < data.length(); i++) { + int b = data.charAt(i) & 0xFF; + int code = codes[b]; + int nbits = lengths[b]; + + current <<= nbits; + current |= code; + n += nbits; + + while (n >= 8) { + n -= 8; + out.writeByte((int) (current >> n)); + } + } + + if (n > 0) { + current <<= 8 - n; + current |= 0xFF >>> n; // this should be EOS symbol + out.writeByte((int) current); + } + } + + /** + * Returns the number of bytes required to Huffman encode the input string literal. + * + * @param data the string literal to be Huffman encoded + * @return the number of bytes required to Huffman encode {@code data} + */ + int getEncodedLength(CharSequence data) { + if (data instanceof AsciiString) { + AsciiString string = (AsciiString) data; + try { + encodedLengthProcessor.reset(); + string.forEachByte(encodedLengthProcessor); + return encodedLengthProcessor.length(); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } else { + return getEncodedLengthSlowPath(data); + } + } + + private int getEncodedLengthSlowPath(CharSequence data) { + long len = 0; + for (int i = 0; i < data.length(); i++) { + len += lengths[data.charAt(i) & 0xFF]; + } + return (int) ((len + 7) >> 3); + } + + private final class EncodeProcessor implements ByteProcessor { + ByteBuf out; + private long current; + private int n; + + @Override + public boolean process(byte value) { + int b = value & 0xFF; + int nbits = lengths[b]; + + current <<= nbits; + current |= codes[b]; + n += nbits; + + while (n >= 8) { + n -= 8; + out.writeByte((int) (current >> n)); + } + return true; + } + + void end() { + try { + if (n > 0) { + current <<= 8 - n; + current |= 0xFF >>> n; // this should be EOS symbol + out.writeByte((int) current); + } + } finally { + out = null; + current = 0; + n = 0; + } + } + } + + private final class EncodedLengthProcessor implements ByteProcessor { + private long len; + + @Override + public boolean process(byte value) { + len += lengths[value & 0xFF]; + return true; + } + + void reset() { + len = 0; + } + + int length() { + return (int) ((len + 7) >> 3); + } + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackStaticTable.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackStaticTable.java new file mode 100644 index 0000000..c9aa866 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackStaticTable.java @@ -0,0 +1,227 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.UnsupportedValueConverter; +import io.netty.util.AsciiString; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +final class QpackStaticTable { + + static final int NOT_FOUND = -1; + + /** + * Special mask used to disambiguate exact pair index from + * name only index and avoid executing lookup twice. Supposed + * to be used internally. The value should be large enough + * not to override bits from static table index (current size + * of the table is 99 elements). + */ + static final int MASK_NAME_REF = 1 << 10; + + /** + * > STATIC_INDEX_BY_NAME = createMap(length); + + private static QpackHeaderField newEmptyHeaderField(String name) { + return new QpackHeaderField(AsciiString.cached(name), AsciiString.EMPTY_STRING); + } + + private static QpackHeaderField newHeaderField(String name, String value) { + return new QpackHeaderField(AsciiString.cached(name), AsciiString.cached(value)); + } + + /** + * Return the header field at the given index value. + * Note that QPACK uses 0-based indexing when HPACK is using 1-based. + */ + static QpackHeaderField getField(int index) { + return STATIC_TABLE.get(index); + } + + /** + * Returns the lowest index value for the given header field name in the static + * table. Returns -1 if the header field name is not in the static table. + */ + static int getIndex(CharSequence name) { + List index = STATIC_INDEX_BY_NAME.get(name); + if (index == null) { + return NOT_FOUND; + } + + return index.get(0); + } + + /** + * Returns: + * a) the index value for the given header field in the static table (when found); + * b) the index value for a given name with a single bit masked (no exact match); + * c) -1 if name was not found in the static table. + */ + static int findFieldIndex(CharSequence name, CharSequence value) { + final List nameIndex = STATIC_INDEX_BY_NAME.get(name); + + // Early return if name not found in the table. + if (nameIndex == null) { + return NOT_FOUND; + } + + // If name was found, check all subsequence elements of the table for exact match. + for (int index: nameIndex) { + QpackHeaderField field = STATIC_TABLE.get(index); + if (QpackUtil.equalsVariableTime(value, field.value)) { + return index; + } + } + + // No exact match was found but we still can reference the name. + return nameIndex.get(0) | MASK_NAME_REF; + } + + /** + * Creates a map CharSequenceMap header name to index value to allow quick lookup. + */ + @SuppressWarnings("unchecked") + private static CharSequenceMap> createMap(int length) { + CharSequenceMap> mapping = + new CharSequenceMap>(true, UnsupportedValueConverter.>instance(), length); + for (int index = 0; index < length; index++) { + final QpackHeaderField field = getField(index); + final List cursor = mapping.get(field.name); + if (cursor == null) { + final List holder = new ArrayList<>(16); + holder.add(index); + mapping.set(field.name, holder); + } else { + cursor.add(index); + } + } + return mapping; + } + + private QpackStaticTable() { + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackUtil.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackUtil.java new file mode 100644 index 0000000..541748e --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/QpackUtil.java @@ -0,0 +1,468 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.util.AsciiString; +import io.netty.util.internal.ConstantTimeUtils; +import io.netty.util.internal.PlatformDependent; + +import static io.netty.util.internal.ObjectUtil.checkInRange; +import static java.lang.Math.floorDiv; + +final class QpackUtil { + private static final QpackException PREFIXED_INTEGER_TOO_LONG = + QpackException.newStatic(QpackDecoder.class, "toIntOrThrow(...)", + "QPACK - invalid prefixed integer"); + + /** + * Encode integer according to + * Section 5.1. + */ + static void encodePrefixedInteger(ByteBuf out, byte mask, int prefixLength, long toEncode) { + checkInRange(toEncode, 0, MAX_UNSIGNED_INT, "toEncode"); + int nbits = (1 << prefixLength) - 1; + if (toEncode < nbits) { + out.writeByte((byte) (mask | toEncode)); + } else { + out.writeByte((byte) (mask | nbits)); + long remainder = toEncode - nbits; + while (remainder > 128) { + byte next = (byte) ((remainder % 128) | 0x80); + out.writeByte(next); + remainder = remainder / 128; + } + out.writeByte((byte) remainder); + } + } + + /** + * Decode the integer or return {@code -1} if not enough bytes are readable. + * This method increases the readerIndex when the integer could be decoded. + * + * @param in the input {@link ByteBuf} + * @param prefixLength the prefix length + * @return the integer or {@code -1} if not enough readable bytes are in the {@link ByteBuf). + */ + static int decodePrefixedIntegerAsInt(ByteBuf in, int prefixLength) throws QpackException { + return toIntOrThrow(decodePrefixedInteger(in, prefixLength)); + } + + /** + * Converts the passed {@code aLong} to an {@code int} if the value can fit an {@code int}, otherwise throws a + * {@link QpackException}. + * + * @param aLong to convert. + * @throws QpackException If the value does not fit an {@code int}. + */ + static int toIntOrThrow(long aLong) throws QpackException { + if ((int) aLong != aLong) { + throw PREFIXED_INTEGER_TOO_LONG; + } + return (int) aLong; + } + + /** + * Decode the integer or return {@code -1} if not enough bytes are readable. + * This method increases the readerIndex when the integer could be decoded. + * + * @param in the input {@link ByteBuf} + * @param prefixLength the prefix length + * @return the integer or {@code -1} if not enough readable bytes are in the {@link ByteBuf). + */ + static long decodePrefixedInteger(ByteBuf in, int prefixLength) { + int readerIndex = in.readerIndex(); + int writerIndex = in.writerIndex(); + if (readerIndex == writerIndex) { + return -1; + } + + int nbits = (1 << prefixLength) - 1; + int first = in.readByte() & nbits; + if (first < nbits) { + return first; + } + + int idx = readerIndex + 1; + long i = first; + int factor = 0; + byte next; + do { + if (idx == writerIndex) { + in.readerIndex(readerIndex); + return -1; + } + next = in.getByte(idx++); + i += (next & 0x7fL) << factor; + factor += 7; + } while ((next & 0x80) == 0x80); + in.readerIndex(idx); + return i; + } + + static boolean firstByteEquals(ByteBuf in, byte mask) { + return (in.getByte(in.readerIndex()) & mask) == mask; + } + + /** + * Compare two {@link CharSequence} objects without leaking timing information. + *

+ * The {@code int} return type is intentional and is designed to allow cascading of constant time operations: + *

+     *     String s1 = "foo";
+     *     String s2 = "foo";
+     *     String s3 = "foo";
+     *     String s4 = "goo";
+     *     boolean equals = (equalsConstantTime(s1, s2) & equalsConstantTime(s3, s4)) != 0;
+     * 
+ * @param s1 the first value. + * @param s2 the second value. + * @return {@code 0} if not equal. {@code 1} if equal. + */ + static int equalsConstantTime(CharSequence s1, CharSequence s2) { + if (s1 instanceof AsciiString && s2 instanceof AsciiString) { + if (s1.length() != s2.length()) { + return 0; + } + AsciiString s1Ascii = (AsciiString) s1; + AsciiString s2Ascii = (AsciiString) s2; + return PlatformDependent.equalsConstantTime(s1Ascii.array(), s1Ascii.arrayOffset(), + s2Ascii.array(), s2Ascii.arrayOffset(), s1.length()); + } + + return ConstantTimeUtils.equalsConstantTime(s1, s2); + } + + /** + * Compare two {@link CharSequence}s. + * @param s1 the first value. + * @param s2 the second value. + * @return {@code false} if not equal. {@code true} if equal. + */ + static boolean equalsVariableTime(CharSequence s1, CharSequence s2) { + return AsciiString.contentEquals(s1, s2); + } + + /** + * Calculate the MaxEntries based on + * RFC9204 Section 4.5.1.1. + * + * @param maxTableCapacity the maximum table capacity. + * @return maxEntries. + */ + static long maxEntries(long maxTableCapacity) { + // MaxEntries = floor( MaxTableCapacity / 32 ) + return floorDiv(maxTableCapacity, 32); + } + + // Section 6.2. Literal Header Field Representation + enum IndexType { + INCREMENTAL, // Section 6.2.1. Literal Header Field with Incremental Indexing + NONE, // Section 6.2.2. Literal Header Field without Indexing + NEVER // Section 6.2.3. Literal Header Field never Indexed + } + + // Appendix B: Huffman Codes + // https://tools.ietf.org/html/rfc7541#appendix-B + static final int[] HUFFMAN_CODES = { + 0x1ff8, + 0x7fffd8, + 0xfffffe2, + 0xfffffe3, + 0xfffffe4, + 0xfffffe5, + 0xfffffe6, + 0xfffffe7, + 0xfffffe8, + 0xffffea, + 0x3ffffffc, + 0xfffffe9, + 0xfffffea, + 0x3ffffffd, + 0xfffffeb, + 0xfffffec, + 0xfffffed, + 0xfffffee, + 0xfffffef, + 0xffffff0, + 0xffffff1, + 0xffffff2, + 0x3ffffffe, + 0xffffff3, + 0xffffff4, + 0xffffff5, + 0xffffff6, + 0xffffff7, + 0xffffff8, + 0xffffff9, + 0xffffffa, + 0xffffffb, + 0x14, + 0x3f8, + 0x3f9, + 0xffa, + 0x1ff9, + 0x15, + 0xf8, + 0x7fa, + 0x3fa, + 0x3fb, + 0xf9, + 0x7fb, + 0xfa, + 0x16, + 0x17, + 0x18, + 0x0, + 0x1, + 0x2, + 0x19, + 0x1a, + 0x1b, + 0x1c, + 0x1d, + 0x1e, + 0x1f, + 0x5c, + 0xfb, + 0x7ffc, + 0x20, + 0xffb, + 0x3fc, + 0x1ffa, + 0x21, + 0x5d, + 0x5e, + 0x5f, + 0x60, + 0x61, + 0x62, + 0x63, + 0x64, + 0x65, + 0x66, + 0x67, + 0x68, + 0x69, + 0x6a, + 0x6b, + 0x6c, + 0x6d, + 0x6e, + 0x6f, + 0x70, + 0x71, + 0x72, + 0xfc, + 0x73, + 0xfd, + 0x1ffb, + 0x7fff0, + 0x1ffc, + 0x3ffc, + 0x22, + 0x7ffd, + 0x3, + 0x23, + 0x4, + 0x24, + 0x5, + 0x25, + 0x26, + 0x27, + 0x6, + 0x74, + 0x75, + 0x28, + 0x29, + 0x2a, + 0x7, + 0x2b, + 0x76, + 0x2c, + 0x8, + 0x9, + 0x2d, + 0x77, + 0x78, + 0x79, + 0x7a, + 0x7b, + 0x7ffe, + 0x7fc, + 0x3ffd, + 0x1ffd, + 0xffffffc, + 0xfffe6, + 0x3fffd2, + 0xfffe7, + 0xfffe8, + 0x3fffd3, + 0x3fffd4, + 0x3fffd5, + 0x7fffd9, + 0x3fffd6, + 0x7fffda, + 0x7fffdb, + 0x7fffdc, + 0x7fffdd, + 0x7fffde, + 0xffffeb, + 0x7fffdf, + 0xffffec, + 0xffffed, + 0x3fffd7, + 0x7fffe0, + 0xffffee, + 0x7fffe1, + 0x7fffe2, + 0x7fffe3, + 0x7fffe4, + 0x1fffdc, + 0x3fffd8, + 0x7fffe5, + 0x3fffd9, + 0x7fffe6, + 0x7fffe7, + 0xffffef, + 0x3fffda, + 0x1fffdd, + 0xfffe9, + 0x3fffdb, + 0x3fffdc, + 0x7fffe8, + 0x7fffe9, + 0x1fffde, + 0x7fffea, + 0x3fffdd, + 0x3fffde, + 0xfffff0, + 0x1fffdf, + 0x3fffdf, + 0x7fffeb, + 0x7fffec, + 0x1fffe0, + 0x1fffe1, + 0x3fffe0, + 0x1fffe2, + 0x7fffed, + 0x3fffe1, + 0x7fffee, + 0x7fffef, + 0xfffea, + 0x3fffe2, + 0x3fffe3, + 0x3fffe4, + 0x7ffff0, + 0x3fffe5, + 0x3fffe6, + 0x7ffff1, + 0x3ffffe0, + 0x3ffffe1, + 0xfffeb, + 0x7fff1, + 0x3fffe7, + 0x7ffff2, + 0x3fffe8, + 0x1ffffec, + 0x3ffffe2, + 0x3ffffe3, + 0x3ffffe4, + 0x7ffffde, + 0x7ffffdf, + 0x3ffffe5, + 0xfffff1, + 0x1ffffed, + 0x7fff2, + 0x1fffe3, + 0x3ffffe6, + 0x7ffffe0, + 0x7ffffe1, + 0x3ffffe7, + 0x7ffffe2, + 0xfffff2, + 0x1fffe4, + 0x1fffe5, + 0x3ffffe8, + 0x3ffffe9, + 0xffffffd, + 0x7ffffe3, + 0x7ffffe4, + 0x7ffffe5, + 0xfffec, + 0xfffff3, + 0xfffed, + 0x1fffe6, + 0x3fffe9, + 0x1fffe7, + 0x1fffe8, + 0x7ffff3, + 0x3fffea, + 0x3fffeb, + 0x1ffffee, + 0x1ffffef, + 0xfffff4, + 0xfffff5, + 0x3ffffea, + 0x7ffff4, + 0x3ffffeb, + 0x7ffffe6, + 0x3ffffec, + 0x3ffffed, + 0x7ffffe7, + 0x7ffffe8, + 0x7ffffe9, + 0x7ffffea, + 0x7ffffeb, + 0xffffffe, + 0x7ffffec, + 0x7ffffed, + 0x7ffffee, + 0x7ffffef, + 0x7fffff0, + 0x3ffffee, + 0x3fffffff // EOS + }; + + static final byte[] HUFFMAN_CODE_LENGTHS = { + 13, 23, 28, 28, 28, 28, 28, 28, 28, 24, 30, 28, 28, 30, 28, 28, + 28, 28, 28, 28, 28, 28, 30, 28, 28, 28, 28, 28, 28, 28, 28, 28, + 6, 10, 10, 12, 13, 6, 8, 11, 10, 10, 8, 11, 8, 6, 6, 6, + 5, 5, 5, 6, 6, 6, 6, 6, 6, 6, 7, 8, 15, 6, 12, 10, + 13, 6, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, + 7, 7, 7, 7, 7, 7, 7, 7, 8, 7, 8, 13, 19, 13, 14, 6, + 15, 5, 6, 5, 6, 5, 6, 6, 6, 5, 7, 7, 6, 6, 6, 5, + 6, 7, 6, 5, 5, 6, 7, 7, 7, 7, 7, 15, 11, 14, 13, 28, + 20, 22, 20, 20, 22, 22, 22, 23, 22, 23, 23, 23, 23, 23, 24, 23, + 24, 24, 22, 23, 24, 23, 23, 23, 23, 21, 22, 23, 22, 23, 23, 24, + 22, 21, 20, 22, 22, 23, 23, 21, 23, 22, 22, 24, 21, 22, 23, 23, + 21, 21, 22, 21, 23, 22, 23, 23, 20, 22, 22, 22, 23, 22, 22, 23, + 26, 26, 20, 19, 22, 23, 22, 25, 26, 26, 26, 27, 27, 26, 24, 25, + 19, 21, 26, 27, 27, 26, 27, 24, 21, 21, 26, 26, 28, 27, 27, 27, + 20, 24, 20, 21, 22, 21, 21, 23, 22, 22, 25, 25, 24, 24, 26, 23, + 26, 27, 26, 26, 27, 27, 27, 27, 27, 28, 27, 27, 27, 27, 27, 26, + 30 // EOS + }; + + static final int HUFFMAN_EOS = 256; + + static final long MIN_HEADER_TABLE_SIZE = 0; + static final long MAX_UNSIGNED_INT = 0xffffffffL; + static final long MAX_HEADER_TABLE_SIZE = MAX_UNSIGNED_INT; + + private QpackUtil() { + } +} diff --git a/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/package-info.java b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/package-info.java new file mode 100644 index 0000000..bd71447 --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/io/netty/handler/codec/http3/package-info.java @@ -0,0 +1,20 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +/** + * HTTP/3 implementation. + */ +package io.netty.handler.codec.http3; diff --git a/netty-handler-codec-http3/src/main/java/module-info.java b/netty-handler-codec-http3/src/main/java/module-info.java new file mode 100644 index 0000000..3a59c6e --- /dev/null +++ b/netty-handler-codec-http3/src/main/java/module-info.java @@ -0,0 +1,9 @@ +module org.xbib.io.netty.handler.codec.httpthree { + exports io.netty.handler.codec.http3; + requires org.xbib.io.netty.buffer; + requires org.xbib.io.netty.channel; + requires org.xbib.io.netty.handler.codec; + requires org.xbib.io.netty.handler.codec.http; + requires org.xbib.io.netty.handler.codec.quic; + requires org.xbib.io.netty.util; +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbstractHttp3FrameTypeValidationHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbstractHttp3FrameTypeValidationHandlerTest.java new file mode 100644 index 0000000..4f4f01d --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbstractHttp3FrameTypeValidationHandlerTest.java @@ -0,0 +1,180 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import static io.netty.handler.codec.http3.Http3.getQpackAttributes; +import static io.netty.handler.codec.http3.Http3.setQpackAttributes; +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +public abstract class AbstractHttp3FrameTypeValidationHandlerTest { + + private final QuicStreamType defaultStreamType; + private final boolean isOutbound; + private final boolean isInbound; + protected EmbeddedQuicChannel parent; + protected QpackAttributes qpackAttributes; + + protected abstract ChannelHandler newHandler(boolean server); + + protected abstract List newValidFrames(); + + protected abstract List newInvalidFrames(); + + protected AbstractHttp3FrameTypeValidationHandlerTest(QuicStreamType defaultStreamType, + boolean isInbound, boolean isOutbound) { + this.defaultStreamType = defaultStreamType; + this.isInbound = isInbound; + this.isOutbound = isOutbound; + } + + static Collection data() { + return Arrays.asList(true, false); + } + + protected void setUp(boolean server) { + parent = new EmbeddedQuicChannel(server); + qpackAttributes = new QpackAttributes(parent, false); + setQpackAttributes(parent, qpackAttributes); + } + + @AfterEach + public void tearDown() { + if (parent != null) { + final QpackAttributes qpackAttributes = getQpackAttributes(parent); + if (qpackAttributes.decoderStreamAvailable()) { + assertFalse(((EmbeddedQuicStreamChannel) qpackAttributes.decoderStream()).finish()); + } + if (qpackAttributes.encoderStreamAvailable()) { + assertFalse(((EmbeddedQuicStreamChannel) qpackAttributes.encoderStream()).finish()); + } + assertFalse(parent.finish()); + } + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testValidTypeInbound(boolean server) throws Exception { + assumeTrue(isInbound); + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(defaultStreamType, newHandler(server)); + List validFrames = newValidFrames(); + for (T valid : validFrames) { + assertTrue(channel.writeInbound(valid)); + T read = channel.readInbound(); + Http3TestUtils.assertFrameSame(valid, read); + if (valid instanceof Http3SettingsFrame) { + afterSettingsFrameRead((Http3SettingsFrame) valid); + } + } + assertFalse(channel.finish()); + } + + protected void afterSettingsFrameRead(Http3SettingsFrame settingsFrame) { + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testValidTypeOutbound(boolean server) throws Exception { + assumeTrue(isOutbound); + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(defaultStreamType, newHandler(server)); + List validFrames = newValidFrames(); + for (T valid : validFrames) { + assertTrue(channel.writeOutbound(valid)); + T read = channel.readOutbound(); + Http3TestUtils.assertFrameSame(valid, read); + } + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidTypeInbound(boolean server) throws Exception { + assumeTrue(isInbound); + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(defaultStreamType, newHandler(server)); + + Http3ErrorCode errorCode = inboundErrorCodeInvalid(); + List invalidFrames = newInvalidFrames(); + for (Http3Frame invalid : invalidFrames) { + Exception e = assertThrows(Exception.class, () -> channel.writeInbound(invalid)); + Http3TestUtils.assertException(errorCode, e); + + Http3TestUtils.assertFrameReleased(invalid); + } + Http3TestUtils.verifyClose(invalidFrames.size(), errorCode, parent); + assertFalse(channel.finish()); + } + + protected Http3ErrorCode inboundErrorCodeInvalid() { + return Http3ErrorCode.H3_FRAME_UNEXPECTED; + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidTypeOutbound(boolean server) throws Exception { + assumeTrue(isOutbound); + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(defaultStreamType, newHandler(server)); + + List invalidFrames = newInvalidFrames(); + for (Http3Frame invalid : invalidFrames) { + Exception e = assertThrows(Exception.class, () -> channel.writeOutbound(invalid)); + Http3TestUtils.assertException(Http3ErrorCode.H3_FRAME_UNEXPECTED, e); + + Http3TestUtils.assertFrameReleased(invalid); + } + assertFalse(channel.finish()); + } + + protected EmbeddedQuicStreamChannel qPACKEncoderStream() { + assertTrue(qpackAttributes.encoderStreamAvailable()); + return (EmbeddedQuicStreamChannel) qpackAttributes.encoderStream(); + } + + protected EmbeddedQuicStreamChannel qPACKDecoderStream() { + assertTrue(qpackAttributes.decoderStreamAvailable()); + return (EmbeddedQuicStreamChannel) qpackAttributes.decoderStream(); + } + + protected void readAndReleaseStreamHeader(EmbeddedQuicStreamChannel stream) { + ByteBuf streamType = stream.readOutbound(); + assertEquals(streamType.readableBytes(), 1); + ReferenceCountUtil.release(streamType); + } + + protected EmbeddedQuicStreamChannel newStream(QuicStreamType streamType, ChannelHandler handler) + throws Exception { + return (EmbeddedQuicStreamChannel) parent.createStream(streamType, handler).get(); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbtractHttp3ConnectionHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbtractHttp3ConnectionHandlerTest.java new file mode 100644 index 0000000..80ccdd2 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/AbtractHttp3ConnectionHandlerTest.java @@ -0,0 +1,113 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public abstract class AbtractHttp3ConnectionHandlerTest { + + private final boolean server; + + protected abstract Http3ConnectionHandler newConnectionHandler(); + + protected abstract void assertBidirectionalStreamHandled(EmbeddedQuicChannel channel, + QuicStreamChannel streamChannel); + + public AbtractHttp3ConnectionHandlerTest(boolean server) { + this.server = server; + } + + @Test + public void testOpenLocalControlStream() throws Exception { + EmbeddedQuicChannel quicChannel = new EmbeddedQuicChannel(server, new ChannelDuplexHandler()); + ChannelHandlerContext ctx = quicChannel.pipeline().firstContext(); + + Http3ConnectionHandler handler = newConnectionHandler(); + handler.handlerAdded(ctx); + handler.channelRegistered(ctx); + handler.channelActive(ctx); + + final EmbeddedQuicStreamChannel localControlStream = quicChannel.localControlStream(); + assertNotNull(localControlStream); + + assertNotNull(Http3.getLocalControlStream(quicChannel)); + + handler.channelInactive(ctx); + handler.channelUnregistered(ctx); + handler.handlerRemoved(ctx); + + assertTrue(localControlStream.finishAndReleaseAll()); + } + + @Test + public void testBidirectionalStream() throws Exception { + EmbeddedQuicChannel quicChannel = new EmbeddedQuicChannel(server, new ChannelDuplexHandler()); + final EmbeddedQuicStreamChannel bidirectionalStream = + (EmbeddedQuicStreamChannel) quicChannel.createStream(QuicStreamType.BIDIRECTIONAL, + new ChannelDuplexHandler()).get(); + ChannelHandlerContext ctx = quicChannel.pipeline().firstContext(); + + Http3ConnectionHandler handler = newConnectionHandler(); + handler.handlerAdded(ctx); + handler.channelRegistered(ctx); + handler.channelActive(ctx); + + final EmbeddedQuicStreamChannel localControlStream = quicChannel.localControlStream(); + assertNotNull(localControlStream); + + handler.channelRead(ctx, bidirectionalStream); + + assertBidirectionalStreamHandled(quicChannel, bidirectionalStream); + handler.channelInactive(ctx); + handler.channelUnregistered(ctx); + handler.handlerRemoved(ctx); + + assertTrue(localControlStream.finishAndReleaseAll()); + } + + @Test + public void testUnidirectionalStream() throws Exception { + EmbeddedQuicChannel quicChannel = new EmbeddedQuicChannel(server, new ChannelDuplexHandler()); + final QuicStreamChannel unidirectionalStream = + quicChannel.createStream(QuicStreamType.UNIDIRECTIONAL, new ChannelDuplexHandler()).get(); + ChannelHandlerContext ctx = quicChannel.pipeline().firstContext(); + + Http3ConnectionHandler handler = newConnectionHandler(); + handler.handlerAdded(ctx); + handler.channelRegistered(ctx); + handler.channelActive(ctx); + + final EmbeddedQuicStreamChannel localControlStream = quicChannel.localControlStream(); + assertNotNull(localControlStream); + + handler.channelRead(ctx, unidirectionalStream); + + assertNotNull(unidirectionalStream.pipeline().get(Http3UnidirectionalStreamInboundHandler.class)); + + handler.channelInactive(ctx); + handler.channelUnregistered(ctx); + handler.handlerRemoved(ctx); + + assertTrue(localControlStream.finishAndReleaseAll()); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java new file mode 100644 index 0000000..ad06b56 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicChannel.java @@ -0,0 +1,313 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelPromise; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicChannelConfig; +import io.netty.handler.codec.quic.QuicConnectionStats; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.handler.codec.quic.QuicTransportParameters; +import io.netty.util.AttributeKey; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; + +import javax.net.ssl.SSLEngine; +import java.util.Collection; +import java.util.EnumMap; +import java.util.Map; +import java.util.concurrent.ConcurrentLinkedQueue; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicLong; +import java.util.function.Consumer; + +import static io.netty.util.AttributeKey.valueOf; +import static java.lang.System.arraycopy; +import static java.util.Collections.unmodifiableCollection; + +final class EmbeddedQuicChannel extends EmbeddedChannel implements QuicChannel { + private static final AttributeKey streamIdGeneratorKey = + valueOf("embedded_channel_stream_id_generator"); + private final Map peerAllowedStreams = new EnumMap<>(QuicStreamType.class); + private final AtomicBoolean closed = new AtomicBoolean(); + private final ConcurrentLinkedQueue closeErrorCodes = new ConcurrentLinkedQueue<>(); + private QuicChannelConfig config; + + EmbeddedQuicChannel(boolean server) { + this(server, new ChannelHandler[0]); + } + + EmbeddedQuicChannel(boolean server, ChannelHandler... handlers) { + super(prependChannelConsumer(channel -> channel.attr(streamIdGeneratorKey).set(new AtomicLong(server ? 1 : 0)), + handlers)); + } + + static ChannelHandler[] prependChannelConsumer(Consumer channelConsumer, + ChannelHandler... handlers) { + ChannelHandler[] toReturn = new ChannelHandler[handlers.length + 1]; + toReturn[0] = new ChannelInboundHandlerAdapter() { + @Override + public void handlerAdded(ChannelHandlerContext ctx) throws Exception { + channelConsumer.accept(ctx.channel()); + super.handlerAdded(ctx); + } + }; + arraycopy(handlers, 0, toReturn, 1, handlers.length); + return toReturn; + } + + @Override + public boolean isTimedOut() { + return false; + } + + @Override + public SSLEngine sslEngine() { + return null; + } + + @Override + public QuicChannelConfig config() { + if (config == null) { + config = new EmbeddedQuicChannelConfig(super.config()); + } + return config; + } + + @Override + public QuicChannel flush() { + super.flush(); + return this; + } + + @Override + public QuicChannel read() { + super.read(); + return this; + } + + @Override + public long peerAllowedStreams(QuicStreamType type) { + return peerAllowedStreams.getOrDefault(type, Long.MAX_VALUE); + } + + public void peerAllowedStreams(QuicStreamType type, long peerAllowedStreams) { + this.peerAllowedStreams.put(type, peerAllowedStreams); + } + + @Override + public Future createStream(QuicStreamType type, ChannelHandler handler, + Promise promise) { + final AtomicLong streamIdGenerator = attr(streamIdGeneratorKey).get(); + return promise.setSuccess(new EmbeddedQuicStreamChannel(this, true, type, + streamIdGenerator.getAndAdd(2), handler)); + } + + @Override + public ChannelFuture close(boolean applicationClose, int error, ByteBuf reason, ChannelPromise promise) { + closeErrorCodes.add(error); + if (closed.compareAndSet(false, true)) { + promise.addListener(__ -> reason.release()); + } else { + reason.release(); + } + return close(promise); + } + + @Override + public Future collectStats(Promise promise) { + return promise.setFailure( + new UnsupportedOperationException("Collect stats not supported for embedded channel.")); + } + + public EmbeddedQuicStreamChannel localControlStream() { + return (EmbeddedQuicStreamChannel) Http3.getLocalControlStream(this); + } + + @Override + public QuicTransportParameters peerTransportParameters() { + return null; + } + + Collection closeErrorCodes() { + return unmodifiableCollection(closeErrorCodes); + } + + private static final class EmbeddedQuicChannelConfig implements QuicChannelConfig { + private final ChannelConfig delegate; + + EmbeddedQuicChannelConfig(ChannelConfig delegate) { + this.delegate = delegate; + } + + @Override + public Map, Object> getOptions() { + return delegate.getOptions(); + } + + @Override + public boolean setOptions(Map, ?> map) { + return delegate.setOptions(map); + } + + @Override + public T getOption(ChannelOption channelOption) { + return delegate.getOption(channelOption); + } + + @Override + public boolean setOption(ChannelOption channelOption, T t) { + return delegate.setOption(channelOption, t); + } + + @Override + public int getConnectTimeoutMillis() { + return delegate.getConnectTimeoutMillis(); + } + + @Override + public QuicChannelConfig setConnectTimeoutMillis(int i) { + delegate.setConnectTimeoutMillis(i); + return this; + } + + @Override + @Deprecated + public int getMaxMessagesPerRead() { + return delegate.getMaxMessagesPerRead(); + } + + @Override + @Deprecated + public QuicChannelConfig setMaxMessagesPerRead(int i) { + delegate.setMaxMessagesPerRead(i); + return this; + } + + @Override + public int getWriteSpinCount() { + return delegate.getWriteSpinCount(); + } + + @Override + public QuicChannelConfig setWriteSpinCount(int i) { + delegate.setWriteSpinCount(i); + return this; + } + + @Override + public ByteBufAllocator getAllocator() { + return delegate.getAllocator(); + } + + @Override + public QuicChannelConfig setAllocator(ByteBufAllocator byteBufAllocator) { + delegate.setAllocator(byteBufAllocator); + return this; + } + + @Override + public T getRecvByteBufAllocator() { + return delegate.getRecvByteBufAllocator(); + } + + @Override + public QuicChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator recvByteBufAllocator) { + delegate.setRecvByteBufAllocator(recvByteBufAllocator); + return this; + } + + @Override + public boolean isAutoRead() { + return delegate.isAutoRead(); + } + + @Override + public QuicChannelConfig setAutoRead(boolean b) { + delegate.setAutoRead(b); + return this; + } + + @Override + public boolean isAutoClose() { + return delegate.isAutoClose(); + } + + @Override + public QuicChannelConfig setAutoClose(boolean b) { + delegate.setAutoClose(b); + return this; + } + + @Override + public int getWriteBufferHighWaterMark() { + return delegate.getWriteBufferHighWaterMark(); + } + + @Override + public QuicChannelConfig setWriteBufferHighWaterMark(int i) { + delegate.setWriteBufferHighWaterMark(i); + return this; + } + + @Override + public int getWriteBufferLowWaterMark() { + return delegate.getWriteBufferLowWaterMark(); + } + + @Override + public QuicChannelConfig setWriteBufferLowWaterMark(int i) { + delegate.setWriteBufferLowWaterMark(i); + return this; + } + + @Override + public MessageSizeEstimator getMessageSizeEstimator() { + return delegate.getMessageSizeEstimator(); + } + + @Override + public QuicChannelConfig setMessageSizeEstimator(MessageSizeEstimator messageSizeEstimator) { + delegate.setMessageSizeEstimator(messageSizeEstimator); + return this; + } + + @Override + public WriteBufferWaterMark getWriteBufferWaterMark() { + return delegate.getWriteBufferWaterMark(); + } + + @Override + public QuicChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + delegate.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicStreamChannel.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicStreamChannel.java new file mode 100644 index 0000000..c6f70ef --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/EmbeddedQuicStreamChannel.java @@ -0,0 +1,466 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelConfig; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPromise; +import io.netty.channel.DefaultChannelId; +import io.netty.channel.EventLoop; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicStreamAddress; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamChannelConfig; +import io.netty.handler.codec.quic.QuicStreamFrame; +import io.netty.handler.codec.quic.QuicStreamPriority; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.AttributeKey; + +import java.net.SocketAddress; +import java.util.Map; + +import static io.netty.util.AttributeKey.valueOf; + +final class EmbeddedQuicStreamChannel extends EmbeddedChannel implements QuicStreamChannel { + private static final AttributeKey streamIdKey = valueOf("embedded_channel_stream_id"); + private static final AttributeKey streamTypeKey = valueOf("embedded_channel_stream_type"); + private static final AttributeKey localCreatedKey = valueOf("embedded_channel_stream_local_created"); + private QuicStreamChannelConfig config; + private Integer inputShutdown; + private Integer outputShutdown; + + EmbeddedQuicStreamChannel(ChannelHandler... handlers) { + this(null, false, QuicStreamType.BIDIRECTIONAL, 0, handlers); + } + + EmbeddedQuicStreamChannel(QuicChannel parent, boolean localCreated, QuicStreamType type, + long id, ChannelHandler... handlers) { + super(parent, DefaultChannelId.newInstance(), true, false, + EmbeddedQuicChannel.prependChannelConsumer(channel -> { + channel.attr(streamIdKey).set(id); + channel.attr(streamTypeKey).set(type); + channel.attr(localCreatedKey).set(localCreated); + }, handlers)); + } + + boolean writeInboundWithFin(Object... msgs) { + shutdownInput(); + boolean written = writeInbound(msgs); + fireInputShutdownEvents(); + return written; + } + + void writeInboundFin() { + shutdownInput(); + fireInputShutdownEvents(); + } + + private void fireInputShutdownEvents() { + pipeline().fireUserEventTriggered(ChannelInputShutdownEvent.INSTANCE); + pipeline().fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + } + + @Override + public QuicStreamChannel flush() { + super.flush(); + return this; + } + + @Override + public QuicStreamChannel read() { + super.read(); + return this; + } + + @Override + public QuicStreamPriority priority() { + return null; + } + + @Override + public ChannelFuture updatePriority(QuicStreamPriority priority, ChannelPromise promise) { + return promise.setFailure(new UnsupportedOperationException()); + } + + @Override + public QuicStreamAddress localAddress() { + return null; + } + + @Override + public QuicStreamAddress remoteAddress() { + return null; + } + + @Override + public QuicChannel parent() { + return (QuicChannel) super.parent(); + } + + @Override + public QuicStreamChannelConfig config() { + if (config == null) { + config = new EmbeddedQuicStreamChannelConfig(super.config()); + } + return config; + } + + @Override + public boolean isLocalCreated() { + return attr(localCreatedKey).get(); + } + + @Override + public QuicStreamType type() { + return attr(streamTypeKey).get(); + } + + @Override + public long streamId() { + return attr(streamIdKey).get(); + } + + @Override + public boolean isInputShutdown() { + return inputShutdown != null; + } + + @Override + public boolean isOutputShutdown() { + return outputShutdown != null; + } + + @Override + public ChannelFuture shutdown(int i, ChannelPromise channelPromise) { + if (inputShutdown == null) { + inputShutdown = i; + } + if (outputShutdown == null) { + outputShutdown = i; + } + return channelPromise.setSuccess(); + } + + @Override + public ChannelFuture shutdownInput(int i, ChannelPromise channelPromise) { + if (inputShutdown == null) { + inputShutdown = i; + } + return channelPromise.setSuccess(); + } + + @Override + public ChannelFuture shutdownOutput(int i, ChannelPromise channelPromise) { + if (outputShutdown == null) { + outputShutdown = i; + } + return channelPromise.setSuccess(); + } + + @Override + public boolean isShutdown() { + return isInputShutdown() && isOutputShutdown(); + } + + @Override + public ChannelFuture shutdown(ChannelPromise promise) { + return shutdown(0, promise); + } + + @Override + public ChannelFuture shutdownOutput(ChannelPromise promise) { + return shutdownOutput(0, promise); + } + + Integer outputShutdownError() { + return outputShutdown; + } + + Integer inputShutdownError() { + return inputShutdown; + } + + private Unsafe unsafe; + + @Override + public Unsafe unsafe() { + if (unsafe == null) { + Unsafe superUnsafe = super.unsafe(); + unsafe = new Unsafe() { + @Override + public RecvByteBufAllocator.Handle recvBufAllocHandle() { + return superUnsafe.recvBufAllocHandle(); + } + + @Override + public SocketAddress localAddress() { + return superUnsafe.localAddress(); + } + + @Override + public SocketAddress remoteAddress() { + return superUnsafe.remoteAddress(); + } + + @Override + public void register(EventLoop eventLoop, ChannelPromise promise) { + superUnsafe.register(eventLoop, promise); + } + + @Override + public void bind(SocketAddress localAddress, ChannelPromise promise) { + superUnsafe.bind(localAddress, promise); + } + + @Override + public void connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) { + superUnsafe.connect(remoteAddress, localAddress, promise); + } + + @Override + public void disconnect(ChannelPromise promise) { + superUnsafe.disconnect(promise); + } + + @Override + public void close(ChannelPromise promise) { + superUnsafe.close(promise); + } + + @Override + public void closeForcibly() { + superUnsafe.closeForcibly(); + } + + @Override + public void deregister(ChannelPromise promise) { + superUnsafe.deregister(promise); + } + + @Override + public void beginRead() { + superUnsafe.beginRead(); + } + + @Override + public void write(Object msg, ChannelPromise promise) { + if (msg instanceof QuicStreamFrame && ((QuicStreamFrame) msg).hasFin()) { + // Mimic the API. + promise = promise.unvoid().addListener(f -> outputShutdown = 0); + } + superUnsafe.write(msg, promise); + } + + @Override + public void flush() { + superUnsafe.flush(); + } + + @Override + public ChannelPromise voidPromise() { + return superUnsafe.voidPromise(); + } + + @Override + public ChannelOutboundBuffer outboundBuffer() { + return superUnsafe.outboundBuffer(); + } + }; + } + return unsafe; + } + + private static final class EmbeddedQuicStreamChannelConfig implements QuicStreamChannelConfig { + private final ChannelConfig config; + private boolean allowHalfClosure; + + EmbeddedQuicStreamChannelConfig(ChannelConfig config) { + this.config = config; + } + + @Override + public QuicStreamChannelConfig setReadFrames(boolean readFrames) { + return this; + } + + @Override + public boolean isReadFrames() { + return false; + } + + @Override + public QuicStreamChannelConfig setAllowHalfClosure(boolean allowHalfClosure) { + this.allowHalfClosure = allowHalfClosure; + return this; + } + + @Override + public QuicStreamChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + config.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteSpinCount(int writeSpinCount) { + config.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public QuicStreamChannelConfig setAllocator(ByteBufAllocator allocator) { + config.setAllocator(allocator); + return this; + } + + @Override + public QuicStreamChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + config.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public QuicStreamChannelConfig setAutoRead(boolean autoRead) { + config.setAutoRead(autoRead); + return this; + } + + @Override + public QuicStreamChannelConfig setAutoClose(boolean autoClose) { + config.setAutoClose(autoClose); + return this; + } + + @Override + public QuicStreamChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + config.setMessageSizeEstimator(estimator); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + config.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public QuicStreamChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + config.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + config.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + config.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public boolean isAllowHalfClosure() { + return allowHalfClosure; + } + + @Override + public Map, Object> getOptions() { + return config.getOptions(); + } + + @Override + public boolean setOptions(Map, ?> options) { + return config.setOptions(options); + } + + @Override + public T getOption(ChannelOption option) { + return config.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + return config.setOption(option, value); + } + + @Override + public int getConnectTimeoutMillis() { + return config.getConnectTimeoutMillis(); + } + + @Override + public int getMaxMessagesPerRead() { + return config.getMaxMessagesPerRead(); + } + + @Override + public int getWriteSpinCount() { + return config.getWriteSpinCount(); + } + + @Override + public ByteBufAllocator getAllocator() { + return config.getAllocator(); + } + + @Override + public T getRecvByteBufAllocator() { + return config.getRecvByteBufAllocator(); + } + + @Override + public boolean isAutoRead() { + return config.isAutoRead(); + } + + @Override + public boolean isAutoClose() { + return config.isAutoClose(); + } + + @Override + public int getWriteBufferHighWaterMark() { + return config.getWriteBufferHighWaterMark(); + } + + @Override + public int getWriteBufferLowWaterMark() { + return config.getWriteBufferLowWaterMark(); + } + + @Override + public MessageSizeEstimator getMessageSizeEstimator() { + return config.getMessageSizeEstimator(); + } + + @Override + public WriteBufferWaterMark getWriteBufferWaterMark() { + return config.getWriteBufferWaterMark(); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ClientConnectionHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ClientConnectionHandlerTest.java new file mode 100644 index 0000000..141b1fd --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ClientConnectionHandlerTest.java @@ -0,0 +1,35 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.quic.QuicStreamChannel; + +public class Http3ClientConnectionHandlerTest extends AbtractHttp3ConnectionHandlerTest { + + public Http3ClientConnectionHandlerTest() { + super(false); + } + + @Override + protected Http3ConnectionHandler newConnectionHandler() { + return new Http3ClientConnectionHandler(); + } + + @Override + protected void assertBidirectionalStreamHandled(EmbeddedQuicChannel channel, QuicStreamChannel streamChannel) { + Http3TestUtils.verifyClose(Http3ErrorCode.H3_STREAM_CREATION_ERROR, channel); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidatorTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidatorTest.java new file mode 100644 index 0000000..44f72e7 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamFrameTypeValidatorTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +public class Http3ControlStreamFrameTypeValidatorTest extends Http3FrameTypeValidatorTest { + + @Override + protected long[] invalidFramesTypes() { + return new long[] { + Http3CodecUtils.HTTP3_DATA_FRAME_TYPE, + Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE, + Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE + }; + } + + @Override + protected long[] validFrameTypes() { + return new long[] { + Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE, + Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE, + Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE, + Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE + }; + } + + @Override + protected Http3FrameTypeValidator newValidator() { + return Http3ControlStreamFrameTypeValidator.INSTANCE; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandlerTest.java new file mode 100644 index 0000000..5159e37 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamInboundHandlerTest.java @@ -0,0 +1,269 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class Http3ControlStreamInboundHandlerTest extends + AbstractHttp3FrameTypeValidationHandlerTest { + + private QpackEncoder qpackEncoder; + private Http3ControlStreamOutboundHandler remoteControlStreamHandler; + + public Http3ControlStreamInboundHandlerTest() { + super(QuicStreamType.UNIDIRECTIONAL, false, false); + } + + static Collection testData() { + List config = new ArrayList<>(); + for (int a = 0; a < 2; a++) { + for (int b = 0; b < 2; b++) { + config.add(new Object[] { a == 0, b == 0 }); + } + } + return config; + } + + @Override + protected void setUp(boolean server) { + super.setUp(server); + qpackEncoder = new QpackEncoder(); + remoteControlStreamHandler = new Http3ControlStreamOutboundHandler(server, new DefaultHttp3SettingsFrame(), + new ChannelInboundHandlerAdapter()); + } + + @Override + protected void afterSettingsFrameRead(Http3SettingsFrame settingsFrame) { + if (!qpackAttributes.dynamicTableDisabled()) { + // settings frame initialize QPACK streams + readAndReleaseStreamHeader(qPACKEncoderStream()); + readAndReleaseStreamHeader(qPACKDecoderStream()); + } + } + + @Override + protected ChannelHandler newHandler(boolean server) { + return new Http3ControlStreamInboundHandler(server, new ChannelInboundHandlerAdapter(), qpackEncoder, + remoteControlStreamHandler); + } + + @Override + protected List newValidFrames() { + return Arrays.asList(new DefaultHttp3SettingsFrame(), new DefaultHttp3GoAwayFrame(0), + new DefaultHttp3MaxPushIdFrame(0), new DefaultHttp3CancelPushFrame(0)); + } + + @Override + protected List newInvalidFrames() { + return Arrays.asList(Http3TestUtils.newHttp3RequestStreamFrame(), Http3TestUtils.newHttp3PushStreamFrame()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testInvalidFirstFrameHttp3GoAwayFrame(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + testInvalidFirstFrame(server, forwardControlFrames, new DefaultHttp3GoAwayFrame(0)); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testInvalidFirstFrameHttp3MaxPushIdFrame(boolean server, boolean forwardControlFrames) + throws Exception { + setUp(server); + testInvalidFirstFrame(server, forwardControlFrames, new DefaultHttp3MaxPushIdFrame(0)); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testInvalidFirstFrameHttp3CancelPushFrame(boolean server, boolean forwardControlFrames) + throws Exception { + setUp(server); + testInvalidFirstFrame(server, forwardControlFrames, new DefaultHttp3CancelPushFrame(0)); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testInvalidFirstFrameNonControlFrame(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + testInvalidFirstFrame(server, forwardControlFrames, () -> 9999); + } + + private void testInvalidFirstFrame(boolean server, boolean forwardControlFrames, Http3Frame frame) + throws Exception { + final EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.BIDIRECTIONAL, + new Http3ControlStreamInboundHandler(server, + forwardControlFrames ? new ChannelInboundHandlerAdapter() : null, + qpackEncoder, remoteControlStreamHandler)); + + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_MISSING_SETTINGS, channel, frame); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_MISSING_SETTINGS, parent); + + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testValidGoAwayFrame(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(server, forwardControlFrames); + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3GoAwayFrame(0)); + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3GoAwayFrame(0)); + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testSecondGoAwayFrameFailsWithHigherId(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(server, forwardControlFrames); + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3GoAwayFrame(0)); + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3GoAwayFrame(4)); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_ID_ERROR, parent); + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testGoAwayFrameIdNonRequestStream(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(server, forwardControlFrames); + if (server) { + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3GoAwayFrame(3)); + } else { + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_FRAME_UNEXPECTED, channel, + new DefaultHttp3GoAwayFrame(3)); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_FRAME_UNEXPECTED, parent); + } + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testHttp3MaxPushIdFrames(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(server, forwardControlFrames); + if (server) { + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3MaxPushIdFrame(0)); + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3MaxPushIdFrame(4)); + } else { + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_FRAME_UNEXPECTED, channel, + new DefaultHttp3MaxPushIdFrame(4)); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_FRAME_UNEXPECTED, parent); + } + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: forwardControlFrames = {0}") + @ValueSource(booleans = { true, false }) + public void testSecondHttp3MaxPushIdFrameFailsWithSmallerId(boolean forwardControlFrames) + throws Exception { + setUp(true); + EmbeddedChannel channel = newStream(true, forwardControlFrames); + writeValidFrame(forwardControlFrames, channel, new DefaultHttp3MaxPushIdFrame(4)); + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3MaxPushIdFrame(0)); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_ID_ERROR, parent); + assertFalse(channel.finish()); + } + + private EmbeddedQuicStreamChannel newStream(boolean server, boolean forwardControlFrames) throws Exception { + EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.UNIDIRECTIONAL, + new Http3ControlStreamInboundHandler(server, + forwardControlFrames ? new ChannelInboundHandlerAdapter() : null, + qpackEncoder, remoteControlStreamHandler)); + + // We always need to start with a settings frame. + Http3SettingsFrame settingsFrame = new DefaultHttp3SettingsFrame(); + assertEquals(forwardControlFrames, channel.writeInbound(settingsFrame)); + if (forwardControlFrames) { + Http3TestUtils.assertFrameSame(settingsFrame, channel.readInbound()); + } else { + Http3TestUtils.assertFrameReleased(settingsFrame); + } + Object streamType = qPACKEncoderStream().readOutbound(); + assertNotNull(streamType); + ReferenceCountUtil.release(streamType); + + streamType = qPACKDecoderStream().readOutbound(); + assertNotNull(streamType); + ReferenceCountUtil.release(streamType); + return channel; + } + + private void writeValidFrame(boolean forwardControlFrames, EmbeddedChannel channel, + Http3ControlStreamFrame controlStreamFrame) { + assertEquals(forwardControlFrames, channel.writeInbound(controlStreamFrame)); + if (forwardControlFrames) { + Http3TestUtils.assertFrameSame(controlStreamFrame, channel.readInbound()); + } else { + Http3TestUtils.assertFrameReleased(controlStreamFrame); + } + } + + private void writeInvalidFrame(boolean forwardControlFrames, Http3ErrorCode expectedCode, EmbeddedChannel channel, + Http3Frame frame) { + if (forwardControlFrames) { + Exception e = assertThrows(Exception.class, () -> channel.writeInbound(frame)); + Http3TestUtils.assertException(expectedCode, e); + } else { + assertFalse(channel.writeInbound(frame)); + } + Http3TestUtils.assertFrameReleased(frame); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testSecondSettingsFrameFails(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(server, forwardControlFrames); + writeInvalidFrame(forwardControlFrames, Http3ErrorCode.H3_FRAME_UNEXPECTED, channel, + new DefaultHttp3SettingsFrame()); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_FRAME_UNEXPECTED, parent); + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}, forwardControlFrames = {1}") + @MethodSource("testData") + public void testControlStreamClosed(boolean server, boolean forwardControlFrames) throws Exception { + setUp(server); + EmbeddedQuicStreamChannel channel = newStream(server, forwardControlFrames); + channel.writeInboundFin(); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_CLOSED_CRITICAL_STREAM, parent); + assertFalse(channel.finish()); + } + + @Override + protected Http3ErrorCode inboundErrorCodeInvalid() { + return Http3ErrorCode.H3_MISSING_SETTINGS; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandlerTest.java new file mode 100644 index 0000000..f2f9d05 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ControlStreamOutboundHandlerTest.java @@ -0,0 +1,202 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.List; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Http3ControlStreamOutboundHandlerTest extends + AbstractHttp3FrameTypeValidationHandlerTest { + private final Http3SettingsFrame settingsFrame = new DefaultHttp3SettingsFrame(); + + public Http3ControlStreamOutboundHandlerTest() { + super(QuicStreamType.UNIDIRECTIONAL, false, true); + } + + @Override + protected Http3ControlStreamOutboundHandler newHandler(boolean server) { + return new Http3ControlStreamOutboundHandler(server, settingsFrame, new ChannelInboundHandlerAdapter()); + } + + @Override + protected List newValidFrames() { + return Arrays.asList(new DefaultHttp3SettingsFrame(), new DefaultHttp3GoAwayFrame(0), + new DefaultHttp3MaxPushIdFrame(0), new DefaultHttp3CancelPushFrame(0)); + } + + @Override + protected List newInvalidFrames() { + return Arrays.asList(Http3TestUtils.newHttp3RequestStreamFrame(), Http3TestUtils.newHttp3PushStreamFrame()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testStreamClosedWhileParentStillActive(boolean server) throws Exception { + setUp(server); + EmbeddedChannel channel = newStream(newHandler(server)); + assertFalse(channel.finish()); + Http3TestUtils.verifyClose(1, Http3ErrorCode.H3_CLOSED_CRITICAL_STREAM, parent); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testGoAwayIdDecreaseWorks(boolean server) throws Exception { + setUp(server); + parent.close().get(); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + EmbeddedChannel channel = newStream(newHandler(server)); + + if (server) { + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(8)); + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(4)); + } else { + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(9)); + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(5)); + } + + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testGoAwayIdIncreaseFails(boolean server) throws Exception { + setUp(server); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + parent.close().get(); + EmbeddedChannel channel = newStream(newHandler(server)); + + if (server) { + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(4)); + writeInvalidFrame(Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3GoAwayFrame(8)); + } else { + writeValidFrame(channel, new DefaultHttp3GoAwayFrame(1)); + writeInvalidFrame(Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3GoAwayFrame(3)); + } + + assertFalse(channel.finish()); + } + + @Test + public void testGoAwayIdUseInvalidId() throws Exception { + setUp(true); + parent.close().get(); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + EmbeddedChannel channel = newStream(newHandler(true)); + + writeInvalidFrame(Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3GoAwayFrame(2)); + + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testPassesUnknownFrame(boolean server) throws Exception { + setUp(server); + parent.close().get(); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + EmbeddedChannel channel = newStream(newHandler(server)); + + writeValidFrame(channel, new DefaultHttp3UnknownFrame(Http3CodecUtils.MIN_RESERVED_FRAME_TYPE, + Unpooled.buffer().writeLong(8))); + + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMaxPushIdFailsWhenReduced(boolean server) throws Exception { + setUp(server); + parent.close().get(); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + EmbeddedChannel channel = newStream(newHandler(server)); + + writeValidFrame(channel, new DefaultHttp3MaxPushIdFrame(8)); + writeInvalidFrame(Http3ErrorCode.H3_ID_ERROR, channel, new DefaultHttp3MaxPushIdFrame(4)); + + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMaxPushIdCanBeIncreased(boolean server) throws Exception { + setUp(server); + parent.close().get(); + // Let's mark the parent as inactive before we close as otherwise we will send a close frame. + Http3ControlStreamOutboundHandler handler = newHandler(server); + EmbeddedChannel channel = newStream(handler); + + writeValidFrame(channel, new DefaultHttp3MaxPushIdFrame(4)); + writeValidFrame(channel, new DefaultHttp3MaxPushIdFrame(8)); + assertEquals(Long.valueOf(8), handler.sentMaxPushId()); + + assertFalse(channel.finish()); + } + + @Override + protected EmbeddedQuicStreamChannel newStream(QuicStreamType streamType, ChannelHandler handler) + throws Exception { + return newStream(handler); + } + + private EmbeddedQuicStreamChannel newStream(ChannelHandler handler) + throws Exception { + EmbeddedQuicStreamChannel channel = super.newStream(QuicStreamType.UNIDIRECTIONAL, handler); + ByteBuf buffer = channel.readOutbound(); + // Verify that we did write the control stream prefix + int len = Http3CodecUtils.numBytesForVariableLengthInteger(buffer.getByte(0)); + assertEquals(Http3CodecUtils.HTTP3_CONTROL_STREAM_TYPE, Http3CodecUtils.readVariableLengthInteger(buffer, len)); + assertFalse(buffer.isReadable()); + buffer.release(); + + Http3SettingsFrame settings = channel.readOutbound(); + assertEquals(settingsFrame, settings); + + assertNull(channel.readOutbound()); + return channel; + } + + private void writeInvalidFrame(Http3ErrorCode expectedCode, + EmbeddedChannel channel, + Http3Frame frame) { + Exception e = assertThrows(Exception.class, () -> channel.writeOutbound(frame)); + Http3TestUtils.assertException(expectedCode, e); + } + + private void writeValidFrame(EmbeddedChannel channel, Http3Frame frame) { + try { + assertTrue(channel.writeOutbound(frame)); + } finally { + ReferenceCountUtil.release(channel.readOutbound()); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameCodecTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameCodecTest.java new file mode 100644 index 0000000..c7a13df --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameCodecTest.java @@ -0,0 +1,838 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufHolder; +import io.netty.buffer.CompositeByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Collection; +import java.util.Collections; +import java.util.concurrent.ThreadLocalRandom; + +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_GO_AWAY_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_SETTINGS_FRAME_MAX_LEN; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.writeVariableLengthInteger; +import static io.netty.handler.codec.http3.Http3TestUtils.assertException; +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static java.util.Arrays.asList; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +public class Http3FrameCodecTest { + private static final int MAX_HEADER_SIZE = 1024; + private QpackEncoder encoder; + private QpackDecoder decoder; + private EmbeddedQuicStreamChannel encoderStream; + private EmbeddedQuicStreamChannel decoderStream; + private EmbeddedQuicChannel parent; + private QpackEncoderHandler qpackEncoderHandler; + private QpackDecoderHandler qpackDecoderHandler; + private QpackAttributes qpackAttributes; + private long maxTableCapacity; + + public static Collection data() { + return asList( + new Object[]{true, 0, false}, + new Object[]{true, 0, true}, + new Object[]{true, 100, false}, + new Object[]{true, 100, true}, + new Object[]{false, 0, false}, + new Object[]{false, 0, true}, + new Object[]{false, 100, false}, + new Object[]{false, 100, true} + ); + } + + public static Collection dataNoFragment() { + return asList( + new Object[]{0, false}, + new Object[]{0, true}, + new Object[]{100, false}, + new Object[]{100, true} + ); + } + + private EmbeddedQuicStreamChannel codecChannel; + + private void setUp(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + parent = new EmbeddedQuicChannel(true); + qpackAttributes = new QpackAttributes(parent, false); + Http3.setQpackAttributes(parent, qpackAttributes); + final Http3SettingsFrame settings = new DefaultHttp3SettingsFrame(); + maxTableCapacity = 1024L; + settings.put(Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, maxTableCapacity); + settings.put(Http3SettingsFrame.HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS, (long) maxBlockedStreams); + decoder = new QpackDecoder(maxTableCapacity, maxBlockedStreams); + decoder.setDynamicTableCapacity(maxTableCapacity); + qpackEncoderHandler = new QpackEncoderHandler(maxTableCapacity, decoder); + encoderStream = (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new ChannelOutboundHandlerAdapter()).get(); + encoder = new QpackEncoder(); + qpackDecoderHandler = new QpackDecoderHandler(encoder); + decoderStream = (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new ChannelOutboundHandlerAdapter()).get(); + qpackAttributes.whenEncoderStreamAvailable(future -> { + if (future.isSuccess()) { + encoder.configureDynamicTable(qpackAttributes, maxTableCapacity, maxBlockedStreams); + } + }); + if (!delayQpackStreams) { + setQpackStreams(); + } + codecChannel = (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.BIDIRECTIONAL, + new ChannelInitializer() { + @Override + protected void initChannel(QuicStreamChannel ch) { + Http3RequestStreamEncodeStateValidator encStateValidator = + new Http3RequestStreamEncodeStateValidator(); + Http3RequestStreamDecodeStateValidator decStateValidator = + new Http3RequestStreamDecodeStateValidator(); + ch.pipeline().addLast(new Http3FrameCodec(Http3FrameTypeValidator.NO_VALIDATION, decoder, + MAX_HEADER_SIZE, encoder, encStateValidator, decStateValidator)); + ch.pipeline().addLast(encStateValidator); + ch.pipeline().addLast(decStateValidator); + } + }).get(); + } + + private void setQpackStreams() { + setQpackEncoderStream(); + setQpackDecoderStream(); + } + + private void setQpackEncoderStream() { + qpackAttributes.encoderStream(encoderStream); + final Object written = encoderStream.readOutbound(); + assertNotNull(written); + ReferenceCountUtil.release(written); + } + + private void setQpackDecoderStream() { + qpackAttributes.decoderStream(decoderStream); + } + + @AfterEach + public void tearDown() { + assertFalse(codecChannel.finish()); + assertFalse(decoderStream.finish()); + assertFalse(encoderStream.finish()); + assertFalse(parent.finish()); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3CancelPushFrame_63(boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3CancelPushFrame(63)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3CancelPushFrame_16383(boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3CancelPushFrame(16383)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3CancelPushFrame_1073741823( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3CancelPushFrame(1073741823)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3CancelPushFrame_4611686018427387903( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, + new DefaultHttp3CancelPushFrame(4611686018427387903L)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3DataFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + byte[] bytes = new byte[1024]; + ThreadLocalRandom.current().nextBytes(bytes); + final DefaultHttp3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(new DefaultHttp3Headers()); + addRequestHeaders(headersFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, headersFrame); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, + new DefaultHttp3DataFrame(Unpooled.wrappedBuffer(bytes))); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3GoAwayFrame_63( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3GoAwayFrame(63)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3GoAwayFrame_16383( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3GoAwayFrame(16383)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3GoAwayFrame_1073741823(boolean fragmented, + int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3GoAwayFrame(1073741823)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3MaxPushIdFrame_63( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3MaxPushIdFrame(63)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3MaxPushIdFrame_16383( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3MaxPushIdFrame(16383)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3MaxPushIdFrame_1073741823( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, new DefaultHttp3MaxPushIdFrame(1073741823)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3SettingsFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3SettingsFrame settingsFrame = new DefaultHttp3SettingsFrame(); + settingsFrame.put(Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, 100L); + settingsFrame.put(Http3SettingsFrame.HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS, 1L); + settingsFrame.put(Http3SettingsFrame.HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE, 128L); + // Ensure we can encode and decode all sizes correctly. + settingsFrame.put(63, 63L); + settingsFrame.put(16383, 16383L); + settingsFrame.put(1073741823, 1073741823L); + settingsFrame.put(4611686018427387903L, 4611686018427387903L); + testFrameEncodedAndDecoded( + fragmented, maxBlockedStreams, delayQpackStreams, settingsFrame); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3HeadersFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + addRequestHeaders(headersFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, headersFrame); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3HeadersFrameWithTrailers( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + addRequestHeaders(headersFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, headersFrame); + + final DefaultHttp3HeadersFrame trailers = new DefaultHttp3HeadersFrame(); + // add an extra header to block decoding if dynamic table enabled. + trailers.headers().add("foo", "bar"); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, trailers); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3HeadersFrameWithInvalidTrailers( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + addRequestHeaders(headersFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, headersFrame); + + final DefaultHttp3HeadersFrame trailer = new DefaultHttp3HeadersFrame(); + trailer.headers().add(":method", "GET"); + assertThrows(Http3HeadersValidationException.class, + () -> testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, trailer)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3PushPromiseFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3PushPromiseFrame pushPromiseFrame = new DefaultHttp3PushPromiseFrame(9); + addRequestHeaders(pushPromiseFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, pushPromiseFrame); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testMultipleHttp3PushPromiseFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3PushPromiseFrame pushPromiseFrame = new DefaultHttp3PushPromiseFrame(9); + addRequestHeaders(pushPromiseFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, pushPromiseFrame); + + Http3PushPromiseFrame pushPromiseFrame2 = new DefaultHttp3PushPromiseFrame(10); + addRequestHeaders(pushPromiseFrame2.headers()); + // add an extra header to block decoding if dynamic table enabled. + pushPromiseFrame2.headers().add("foo", "bar"); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, pushPromiseFrame2); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testMultipleHttp3PushPromiseFrameWithInvalidHeaders( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3PushPromiseFrame pushPromiseFrame = new DefaultHttp3PushPromiseFrame(9); + addRequestHeaders(pushPromiseFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, pushPromiseFrame); + + Http3PushPromiseFrame pushPromiseFrame2 = new DefaultHttp3PushPromiseFrame(10); + assertThrows(Http3HeadersValidationException.class, + () -> testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, pushPromiseFrame2)); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testHttp3UnknownFrame( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, + new DefaultHttp3UnknownFrame(Http3CodecUtils.MIN_RESERVED_FRAME_TYPE, Unpooled.buffer().writeLong(8))); + } + + // Reserved types that were used in HTTP/2 and should close the connection with an error + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testDecodeReservedFrameType0x2(boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedFrameType(fragmented, 0x2); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testDecodeReservedFrameType0x6(boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedFrameType(fragmented, 0x6); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testDecodeReservedFrameType0x8(boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedFrameType(fragmented, 0x8); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeReservedFrameType0x9(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedFrameType(delayQpackStreams, 0x9); + } + + private void testDecodeReservedFrameType(boolean delayQpackStreams, long type) { + ByteBuf buffer = Unpooled.buffer(); + Http3CodecUtils.writeVariableLengthInteger(buffer, type); + + try { + assertFalse(codecChannel.writeInbound(buffer)); + if (delayQpackStreams) { + setQpackStreams(); + codecChannel.checkException(); + } + fail(); + } catch (Exception e) { + assertException(Http3ErrorCode.H3_FRAME_UNEXPECTED, e); + } + verifyClose(Http3ErrorCode.H3_FRAME_UNEXPECTED, parent); + assertEquals(0, buffer.refCnt()); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedFrameType0x2(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedFrameType(delayQpackStreams, 0x2); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedFrameType0x6(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedFrameType(delayQpackStreams, 0x6); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedFrameType0x8(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedFrameType(delayQpackStreams, 0x8); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedFrameType0x9(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedFrameType(delayQpackStreams, 0x9); + } + + private void testEncodeReservedFrameType(boolean delayQpackStreams, long type) { + Http3UnknownFrame frame = mock(Http3UnknownFrame.class); + when(frame.type()).thenReturn(type); + when(frame.touch()).thenReturn(frame); + when(frame.touch(any())).thenReturn(frame); + try { + assertFalse(codecChannel.writeOutbound(frame)); + if (delayQpackStreams) { + setQpackStreams(); + codecChannel.checkException(); + } + fail(); + } catch (Exception e) { + assertException(Http3ErrorCode.H3_FRAME_UNEXPECTED, e); + } + // should have released the frame as well + verify(frame, times(1)).release(); + verifyClose(Http3ErrorCode.H3_FRAME_UNEXPECTED, parent); + } + + // Reserved types that were used in HTTP/2 and should close the connection with an error + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeReservedSettingsKey0x2(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedSettingsKey(delayQpackStreams, 0x2); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeReservedSettingsKey0x3(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedSettingsKey(delayQpackStreams, 0x3); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeReservedSettingsKey0x4(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedSettingsKey(delayQpackStreams, 0x4); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeReservedSettingsKey0x5(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testDecodeReservedSettingsKey(delayQpackStreams, 0x5); + } + + private void testDecodeReservedSettingsKey(boolean delayQpackStreams, long key) { + ByteBuf buffer = Unpooled.buffer(); + Http3CodecUtils.writeVariableLengthInteger(buffer, Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE); + Http3CodecUtils.writeVariableLengthInteger(buffer, 2); + // Write the key and some random value... Both should be only 1 byte long each. + Http3CodecUtils.writeVariableLengthInteger(buffer, key); + Http3CodecUtils.writeVariableLengthInteger(buffer, 1); + testDecodeInvalidSettings(delayQpackStreams, buffer); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testDecodeSettingsWithSameKey(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + ByteBuf buffer = Unpooled.buffer(); + Http3CodecUtils.writeVariableLengthInteger(buffer, Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE); + Http3CodecUtils.writeVariableLengthInteger(buffer, 4); + // Write the key and some random value... Both should be only 1 byte long each. + Http3CodecUtils.writeVariableLengthInteger(buffer, Http3SettingsFrame.HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE); + Http3CodecUtils.writeVariableLengthInteger(buffer, 1); + Http3CodecUtils.writeVariableLengthInteger(buffer, Http3SettingsFrame.HTTP3_SETTINGS_MAX_FIELD_SECTION_SIZE); + Http3CodecUtils.writeVariableLengthInteger(buffer, 1); + + testDecodeInvalidSettings(delayQpackStreams, buffer); + } + + private void testDecodeInvalidSettings(boolean delayQpackStreams, ByteBuf buffer) { + try { + assertFalse(codecChannel.writeInbound(buffer)); + if (delayQpackStreams) { + setQpackStreams(); + codecChannel.checkException(); + } + fail(); + } catch (Exception e) { + assertException(Http3ErrorCode.H3_SETTINGS_ERROR, e); + } + verifyClose(Http3ErrorCode.H3_SETTINGS_ERROR, parent); + assertEquals(0, buffer.refCnt()); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedSettingsKey0x2(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedSettingsKey(delayQpackStreams, 0x2); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedSettingsKey0x3(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedSettingsKey(delayQpackStreams, 0x3); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedSettingsKey0x4(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedSettingsKey(delayQpackStreams, 0x4); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testEncodeReservedSettingsKey0x5(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testEncodeReservedSettingsKey(delayQpackStreams, 0x5); + } + + private void testEncodeReservedSettingsKey(boolean delayQpackStreams, long key) { + Http3SettingsFrame frame = mock(Http3SettingsFrame.class); + when(frame.iterator()).thenReturn(Collections.singletonMap(key, 0L).entrySet().iterator()); + try { + assertFalse(codecChannel.writeOutbound(frame)); + if (delayQpackStreams) { + setQpackStreams(); + codecChannel.checkException(); + } + fail(); + } catch (Exception e) { + assertException(Http3ErrorCode.H3_SETTINGS_ERROR, e); + } + verifyClose(Http3ErrorCode.H3_SETTINGS_ERROR, parent); + } + + private static void addPseudoRequestHeaders(Http3Headers headers) { + headers.add(":authority", "netty.quic"); // name only + headers.add(":path", "/"); // name & value + headers.add(":method", "GET"); // name & value with few options per name + headers.add(":scheme", "https"); + } + + private static void addRequestHeaders(Http3Headers headers) { + addPseudoRequestHeaders(headers); + headers.add("x-qpack-draft", "19"); + } + + private void testFrameEncodedAndDecoded( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams, Http3Frame frame) throws Exception { + final boolean isDataFrame = frame instanceof Http3DataFrame; + final boolean isHeaderFrame = frameContainsHeaders(frame); + + encodeFrame(delayQpackStreams, frame, isHeaderFrame); + + if (isWriteBuffered(delayQpackStreams, isHeaderFrame)) { + setQpackStreams(); + codecChannel.checkException(); + } + ByteBuf buffer = codecChannel.readOutbound(); + + if (fragmented) { + try { + do { + ByteBuf slice = buffer.readRetainedSlice( + ThreadLocalRandom.current().nextInt(buffer.readableBytes() + 1)); + boolean producedData = codecChannel.writeInbound(slice); + if (!isDataFrame) { + if (buffer.isReadable() || (isHeaderFrame && maxBlockedStreams > 0)) { + assertFalse(producedData); + } else { + assertTrue(producedData); + } + } + } while (buffer.isReadable()); + } catch (Exception e) { + if (isDataFrame) { + ReferenceCountUtil.release(frame); + } + throw e; + } finally { + buffer.release(); + } + } else { + if (maxBlockedStreams > 0 && isHeaderFrame) { + assertFalse(codecChannel.writeInbound(buffer)); + } else { + assertTrue(codecChannel.writeInbound(buffer)); + } + } + + relayQPACKEncoderInstructions(); + + final Http3Frame actualFrame; + if (isDataFrame) { + CompositeByteBuf composite = Unpooled.compositeBuffer(); + for (;;) { + Http3DataFrame dataFrame = codecChannel.readInbound(); + if (dataFrame == null) { + break; + } + composite.addComponent(true, dataFrame.content()); + } + actualFrame = new DefaultHttp3DataFrame(composite); + } else { + actualFrame = codecChannel.readInbound(); + } + Http3TestUtils.assertFrameEquals(frame, actualFrame); + } + + private boolean isWriteBuffered(boolean delayQpackStreams, boolean isHeaderFrame) { + return delayQpackStreams && !qpackAttributes.encoderStreamAvailable() && isHeaderFrame; + } + + private void encodeFrame(boolean delayQpackStreams, Http3Frame frame, boolean isHeaderFrame) { + boolean wroteData = codecChannel.writeOutbound(retainAndDuplicate(frame)); + assertEquals(!isWriteBuffered(delayQpackStreams, isHeaderFrame), wroteData); + } + + private static Http3Frame retainAndDuplicate(Http3Frame frame) { + if (frame instanceof ByteBufHolder) { + return (Http3Frame) ((ByteBufHolder) frame).retainedDuplicate(); + } + return frame; + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testMultipleFramesEncodedAndDecodedInOneBufferHeaders(int maxBlockedStreams, boolean delayQpackStreams) + throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + addRequestHeaders(headersFrame.headers()); + testMultipleFramesEncodedAndDecodedInOneBuffer(maxBlockedStreams, delayQpackStreams, headersFrame, + new DefaultHttp3DataFrame(Unpooled.buffer().writeLong(1))); + } + + @ParameterizedTest(name = "{index}: fragmented = {0}, maxBlockedStreams = {1}, delayQpackStreams = {2}") + @MethodSource("data") + public void testMultipleFramesEncodedAndDecodedInOneBufferPushPromise( + boolean fragmented, int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + final DefaultHttp3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(new DefaultHttp3Headers()); + addPseudoRequestHeaders(headersFrame.headers()); + testFrameEncodedAndDecoded(fragmented, maxBlockedStreams, delayQpackStreams, headersFrame); + + Http3PushPromiseFrame pushPromiseFrame = new DefaultHttp3PushPromiseFrame(9); + addRequestHeaders(pushPromiseFrame.headers()); + testMultipleFramesEncodedAndDecodedInOneBuffer(maxBlockedStreams, delayQpackStreams, pushPromiseFrame, + new DefaultHttp3DataFrame(Unpooled.buffer().writeLong(1))); + } + + private void testMultipleFramesEncodedAndDecodedInOneBuffer( + int maxBlockedStreams, boolean delayQpackStreams, Http3Frame first, Http3Frame second) throws Exception { + final boolean hasHeaderFrame = frameContainsHeaders(first) || frameContainsHeaders(second); + final boolean writeBuffered = isWriteBuffered(delayQpackStreams, hasHeaderFrame); + + assertEquals(!writeBuffered, codecChannel.writeOutbound(retainAndDuplicate(first))); + assertEquals(!writeBuffered, codecChannel.writeOutbound(retainAndDuplicate(second))); + + if (writeBuffered) { + setQpackStreams(); + codecChannel.checkException(); + } + + ByteBuf mergedBuffer = Unpooled.buffer(); + for (;;) { + ByteBuf buffer = codecChannel.readOutbound(); + if (buffer == null) { + break; + } + mergedBuffer.writeBytes(buffer); + buffer.release(); + } + + if (maxBlockedStreams > 0 && hasHeaderFrame) { + assertFalse(codecChannel.writeInbound(mergedBuffer)); + } else { + assertTrue(codecChannel.writeInbound(mergedBuffer)); + } + relayQPACKEncoderInstructions(); + + Http3Frame readFrame = codecChannel.readInbound(); + Http3TestUtils.assertFrameEquals(first, readFrame); + readFrame = codecChannel.readInbound(); + Http3TestUtils.assertFrameEquals(second, readFrame); + + assertFalse(codecChannel.finish()); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3MaxPushIdFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_MAX_PUSH_ID_FRAME_TYPE, + HTTP3_CANCEL_PUSH_FRAME_MAX_LEN + 1, Http3ErrorCode.H3_FRAME_ERROR); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3GoAwayFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_GO_AWAY_FRAME_TYPE, + HTTP3_GO_AWAY_FRAME_MAX_LEN + 1, Http3ErrorCode.H3_FRAME_ERROR); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3SettingsFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_SETTINGS_FRAME_TYPE, + HTTP3_SETTINGS_FRAME_MAX_LEN + 1, Http3ErrorCode.H3_EXCESSIVE_LOAD); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3CancelPushFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_CANCEL_PUSH_FRAME_TYPE, + HTTP3_CANCEL_PUSH_FRAME_MAX_LEN + 1, Http3ErrorCode.H3_FRAME_ERROR); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3HeadersFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_HEADERS_FRAME_TYPE, + MAX_HEADER_SIZE + 1, Http3ErrorCode.H3_EXCESSIVE_LOAD); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testInvalidHttp3PushPromiseFrame(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + testInvalidHttp3Frame0(delayQpackStreams, HTTP3_PUSH_PROMISE_FRAME_TYPE, + MAX_HEADER_SIZE + 9, Http3ErrorCode.H3_EXCESSIVE_LOAD); + } + + @ParameterizedTest(name = "{index}: maxBlockedStreams = {0}, delayQpackStreams = {1}") + @MethodSource("dataNoFragment") + public void testSkipUnknown(int maxBlockedStreams, boolean delayQpackStreams) throws Exception { + setUp(maxBlockedStreams, delayQpackStreams); + ByteBuf buffer = Unpooled.buffer(); + writeVariableLengthInteger(buffer, 4611686018427387903L); + writeVariableLengthInteger(buffer, 10); + buffer.writeZero(10); + + assertFalse(codecChannel.writeInbound(buffer)); + } + + private void testInvalidHttp3Frame0(boolean delayQpackStreams, int type, int length, Http3ErrorCode code) { + ByteBuf buffer = Unpooled.buffer(); + writeVariableLengthInteger(buffer, type); + writeVariableLengthInteger(buffer, length); + + try { + assertFalse(codecChannel.writeInbound(buffer)); + if (delayQpackStreams) { + setQpackStreams(); + codecChannel.checkException(); + } + fail(); + } catch (Exception e) { + assertException(code, e); + } + verifyClose(code, parent); + } + + private void relayQPACKEncoderInstructions() throws Exception { + Object msg; + while ((msg = encoderStream.readOutbound()) != null) { + qpackEncoderHandler.channelRead(encoderStream.pipeline().firstContext(), msg); + } + while ((msg = decoderStream.readOutbound()) != null) { + qpackDecoderHandler.channelRead(decoderStream.pipeline().firstContext(), msg); + } + } + + private static boolean frameContainsHeaders(Http3Frame frame) { + return frame instanceof Http3HeadersFrame || frame instanceof Http3PushPromiseFrame; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodecTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodecTest.java new file mode 100644 index 0000000..937d434 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameToHttpObjectCodecTest.java @@ -0,0 +1,1049 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.channel.EventLoopGroup; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.DuplexChannel; +import io.netty.channel.socket.nio.NioDatagramChannel; +import io.netty.handler.codec.EncoderException; +import io.netty.handler.codec.http.DefaultFullHttpRequest; +import io.netty.handler.codec.http.DefaultFullHttpResponse; +import io.netty.handler.codec.http.DefaultHttpContent; +import io.netty.handler.codec.http.DefaultHttpHeaders; +import io.netty.handler.codec.http.DefaultHttpRequest; +import io.netty.handler.codec.http.DefaultHttpResponse; +import io.netty.handler.codec.http.DefaultLastHttpContent; +import io.netty.handler.codec.http.FullHttpRequest; +import io.netty.handler.codec.http.FullHttpResponse; +import io.netty.handler.codec.http.HttpContent; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpObject; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpResponse; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.handler.codec.http.HttpScheme; +import io.netty.handler.codec.http.HttpUtil; +import io.netty.handler.codec.http.HttpVersion; +import io.netty.handler.codec.http.LastHttpContent; +import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import io.netty.handler.ssl.util.SelfSignedCertificate; +import io.netty.handler.codec.quic.InsecureQuicTokenHandler; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicSslContextBuilder; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.CharsetUtil; +import org.junit.jupiter.api.Test; + +import java.nio.CharBuffer; +import java.nio.charset.StandardCharsets; +import java.security.cert.CertificateException; +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.ExecutionException; +import java.util.concurrent.LinkedBlockingQueue; +import java.util.concurrent.TimeUnit; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.CoreMatchers.nullValue; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.not; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Http3FrameToHttpObjectCodecTest { + + @Test + public void testUpgradeEmptyFullResponse() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + assertTrue(ch.writeOutbound(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK))); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("200")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void encode100ContinueAsHttp2HeadersFrameThatIsNotEndStream() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + assertTrue(ch.writeOutbound(new DefaultFullHttpResponse( + HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE))); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("100")); + assertFalse(ch.isOutputShutdown()); + + assertThat(ch.readOutbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void encodeNonFullHttpResponse100ContinueIsRejected() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + assertThrows(EncoderException.class, () -> ch.writeOutbound(new DefaultHttpResponse( + HttpVersion.HTTP_1_1, HttpResponseStatus.CONTINUE))); + ch.finishAndReleaseAll(); + } + + @Test + public void testUpgradeNonEmptyFullResponse() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeOutbound(new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, hello))); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("200")); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeEmptyFullResponseWithTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + HttpHeaders trailers = response.trailingHeaders(); + trailers.set("key", "value"); + assertTrue(ch.writeOutbound(response)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("200")); + + Http3HeadersFrame trailersFrame = ch.readOutbound(); + assertThat(trailersFrame.headers().get("key").toString(), is("value")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeNonEmptyFullResponseWithTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + FullHttpResponse response = new DefaultFullHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK, hello); + HttpHeaders trailers = response.trailingHeaders(); + trailers.set("key", "value"); + assertTrue(ch.writeOutbound(response)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("200")); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + Http3HeadersFrame trailersFrame = ch.readOutbound(); + assertThat(trailersFrame.headers().get("key").toString(), is("value")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeHeaders() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + HttpResponse response = new DefaultHttpResponse(HttpVersion.HTTP_1_1, HttpResponseStatus.OK); + assertTrue(ch.writeOutbound(response)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().status().toString(), is("200")); + assertFalse(ch.isOutputShutdown()); + + assertThat(ch.readOutbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeChunk() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + HttpContent content = new DefaultHttpContent(hello); + assertTrue(ch.writeOutbound(content)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + assertFalse(ch.isOutputShutdown()); + } finally { + dataFrame.release(); + } + + assertThat(ch.readOutbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeEmptyEnd() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ch.writeOutbound(LastHttpContent.EMPTY_LAST_CONTENT); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeDataEnd() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + LastHttpContent end = new DefaultLastHttpContent(hello, true); + assertTrue(ch.writeOutbound(end)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testUpgradeDataEndWithTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + LastHttpContent trailers = new DefaultLastHttpContent(hello, true); + HttpHeaders headers = trailers.trailingHeaders(); + headers.set("key", "value"); + assertTrue(ch.writeOutbound(trailers)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + Http3HeadersFrame headerFrame = ch.readOutbound(); + assertThat(headerFrame.headers().get("key").toString(), is("value")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testDowngradeHeaders() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.path("/"); + headers.method("GET"); + + assertTrue(ch.writeInbound(new DefaultHttp3HeadersFrame(headers))); + + HttpRequest request = ch.readInbound(); + assertThat(request.uri(), is("/")); + assertThat(request.method(), is(HttpMethod.GET)); + assertThat(request.protocolVersion(), is(HttpVersion.HTTP_1_1)); + assertFalse(request instanceof FullHttpRequest); + assertTrue(HttpUtil.isTransferEncodingChunked(request)); + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDowngradeHeadersWithContentLength() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.path("/"); + headers.method("GET"); + headers.setInt("content-length", 0); + + assertTrue(ch.writeInbound(new DefaultHttp3HeadersFrame(headers))); + + HttpRequest request = ch.readInbound(); + assertThat(request.uri(), is("/")); + assertThat(request.method(), is(HttpMethod.GET)); + assertThat(request.protocolVersion(), is(HttpVersion.HTTP_1_1)); + assertFalse(request instanceof FullHttpRequest); + assertFalse(HttpUtil.isTransferEncodingChunked(request)); + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDowngradeTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.set("key", "value"); + + assertTrue(ch.writeInboundWithFin(new DefaultHttp3HeadersFrame(headers))); + + LastHttpContent trailers = ch.readInbound(); + try { + assertThat(trailers.content().readableBytes(), is(0)); + assertThat(trailers.trailingHeaders().get("key"), is("value")); + assertFalse(trailers instanceof FullHttpRequest); + } finally { + trailers.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDowngradeData() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeInbound(new DefaultHttp3DataFrame(hello))); + + HttpContent content = ch.readInbound(); + try { + assertThat(content.content().toString(CharsetUtil.UTF_8), is("hello world")); + assertFalse(content instanceof LastHttpContent); + } finally { + content.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDowngradeEndData() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(true)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeInboundWithFin(new DefaultHttp3DataFrame(hello))); + + HttpContent content = ch.readInbound(); + try { + assertThat(content.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + content.release(); + } + + LastHttpContent last = ch.readInbound(); + try { + assertFalse(last.content().isReadable()); + assertTrue(last.trailingHeaders().isEmpty()); + } finally { + last.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + // client-specific tests + @Test + public void testEncodeEmptyFullRequest() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + assertTrue(ch.writeOutbound(new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world"))); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeNonEmptyFullRequest() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeOutbound(new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.PUT, "/hello/world", hello))); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("PUT")); + assertThat(headers.path().toString(), is("/hello/world")); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeEmptyFullRequestWithTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + FullHttpRequest request = new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.PUT, "/hello/world"); + + HttpHeaders trailers = request.trailingHeaders(); + trailers.set("key", "value"); + assertTrue(ch.writeOutbound(request)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("PUT")); + assertThat(headers.path().toString(), is("/hello/world")); + + Http3HeadersFrame trailersFrame = ch.readOutbound(); + assertThat(trailersFrame.headers().get("key").toString(), is("value")); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeNonEmptyFullRequestWithTrailers() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + FullHttpRequest request = new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.PUT, "/hello/world", hello); + + HttpHeaders trailers = request.trailingHeaders(); + trailers.set("key", "value"); + assertTrue(ch.writeOutbound(request)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("PUT")); + assertThat(headers.path().toString(), is("/hello/world")); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + Http3HeadersFrame trailersFrame = ch.readOutbound(); + assertThat(trailersFrame.headers().get("key").toString(), is("value")); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeRequestHeaders() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + HttpRequest request = new DefaultHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world"); + assertTrue(ch.writeOutbound(request)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertFalse(ch.isOutputShutdown()); + + assertThat(ch.readOutbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeChunkAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + HttpContent content = new DefaultHttpContent(hello); + assertTrue(ch.writeOutbound(content)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + assertFalse(ch.isOutputShutdown()); + assertThat(ch.readOutbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeEmptyEndAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ch.writeOutbound(LastHttpContent.EMPTY_LAST_CONTENT); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeDataEndAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + LastHttpContent end = new DefaultLastHttpContent(hello, true); + assertTrue(ch.writeOutbound(end)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeTrailersAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + LastHttpContent trailers = new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER, true); + HttpHeaders headers = trailers.trailingHeaders(); + headers.set("key", "value"); + assertTrue(ch.writeOutbound(trailers)); + + Http3HeadersFrame headerFrame = ch.readOutbound(); + assertThat(headerFrame.headers().get("key").toString(), is("value")); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeDataEndWithTrailersAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + LastHttpContent trailers = new DefaultLastHttpContent(hello, true); + HttpHeaders headers = trailers.trailingHeaders(); + headers.set("key", "value"); + assertTrue(ch.writeOutbound(trailers)); + + Http3DataFrame dataFrame = ch.readOutbound(); + try { + assertThat(dataFrame.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + dataFrame.release(); + } + + Http3HeadersFrame headerFrame = ch.readOutbound(); + assertThat(headerFrame.headers().get("key").toString(), is("value")); + + assertTrue(ch.isOutputShutdown()); + assertFalse(ch.finish()); + } + + @Test + public void testEncodeFullPromiseCompletes() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ChannelFuture writeFuture = ch.writeOneOutbound(new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world")); + ch.flushOutbound(); + assertTrue(writeFuture.isSuccess()); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeEmptyLastPromiseCompletes() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ChannelFuture f1 = ch.writeOneOutbound(new DefaultHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world")); + ChannelFuture f2 = ch.writeOneOutbound(new DefaultLastHttpContent()); + ch.flushOutbound(); + assertTrue(f1.isSuccess()); + assertTrue(f2.isSuccess()); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeMultiplePromiseCompletes() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ChannelFuture f1 = ch.writeOneOutbound(new DefaultHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world")); + ChannelFuture f2 = ch.writeOneOutbound(new DefaultLastHttpContent( + Unpooled.wrappedBuffer("foo".getBytes(StandardCharsets.UTF_8)))); + ch.flushOutbound(); + assertTrue(f1.isSuccess()); + assertTrue(f2.isSuccess()); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + Http3DataFrame dataFrame = ch.readOutbound(); + assertEquals("foo", dataFrame.content().toString(StandardCharsets.UTF_8)); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeTrailersCompletes() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ChannelFuture f1 = ch.writeOneOutbound(new DefaultHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world")); + LastHttpContent last = new DefaultLastHttpContent( + Unpooled.wrappedBuffer("foo".getBytes(StandardCharsets.UTF_8))); + last.trailingHeaders().add("foo", "bar"); + ChannelFuture f2 = ch.writeOneOutbound(last); + ch.flushOutbound(); + assertTrue(f1.isSuccess()); + assertTrue(f2.isSuccess()); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("GET")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + Http3DataFrame dataFrame = ch.readOutbound(); + assertEquals("foo", dataFrame.content().toString(StandardCharsets.UTF_8)); + + Http3HeadersFrame trailingHeadersFrame = ch.readOutbound(); + assertEquals("bar", trailingHeadersFrame.headers().get("foo").toString()); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeVoidPromise() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ch.writeOneOutbound(new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.POST, "/hello/world", Unpooled.wrappedBuffer(new byte[1])), + ch.voidPromise()); + ch.flushOutbound(); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + Http3DataFrame data = ch.readOutbound(); +data.release(); + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.method().toString(), is("POST")); + assertThat(headers.path().toString(), is("/hello/world")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void testEncodeCombinations() { + // this test goes through all the branches of Http3FrameToHttpObjectCodec and ensures right functionality + + for (boolean headers : new boolean[]{false, true}) { + for (boolean last : new boolean[]{false, true}) { + for (boolean nonEmptyContent : new boolean[]{false, true}) { + for (boolean hasTrailers : new boolean[]{false, true}) { + for (boolean voidPromise : new boolean[]{false, true}) { + testEncodeCombination(headers, last, nonEmptyContent, hasTrailers, voidPromise); + } + } + } + } + } + } + + /** + * @param headers Should this be an initial message, with headers ({@link HttpRequest})? + * @param last Should this be a last message ({@link LastHttpContent})? + * @param nonEmptyContent Should this message have non-empty content? + * @param hasTrailers Should this {@code last} message have trailers? + * @param voidPromise Should the write operation use a void promise? + */ + private static void testEncodeCombination( + boolean headers, + boolean last, + boolean nonEmptyContent, + boolean hasTrailers, + boolean voidPromise + ) { + ByteBuf content = nonEmptyContent ? Unpooled.wrappedBuffer(new byte[1]) : Unpooled.EMPTY_BUFFER; + HttpHeaders trailers = new DefaultHttpHeaders(); + if (hasTrailers) { + trailers.add("foo", "bar"); + } + HttpObject msg; + if (headers) { + if (last) { + msg = new DefaultFullHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.POST, "/foo", content, new DefaultHttpHeaders(), trailers); + } else { + if (hasTrailers || nonEmptyContent) { + // not supported by the netty HTTP/1 model + content.release(); + return; + } + msg = new DefaultHttpRequest( + HttpVersion.HTTP_1_1, HttpMethod.POST, "/foo", new DefaultHttpHeaders()); + } + } else { + if (last) { + msg = new DefaultLastHttpContent(content, trailers); + } else { + if (hasTrailers) { + // makes no sense + content.release(); + return; + } + msg = new DefaultHttpContent(content); + } + } + + List framePromises = new ArrayList<>(); + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel( + new ChannelOutboundHandlerAdapter() { + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + framePromises.add(promise); + ctx.write(msg, ctx.voidPromise()); + } + }, + new Http3FrameToHttpObjectCodec(false) + ); + + ChannelFuture fullPromise = ch.writeOneOutbound(msg, voidPromise ? ch.voidPromise() : ch.newPromise()); + ch.flushOutbound(); + + if (headers) { + Http3HeadersFrame headersFrame = ch.readOutbound(); + assertThat(headersFrame.headers().scheme().toString(), is("https")); + assertThat(headersFrame.headers().method().toString(), is("POST")); + assertThat(headersFrame.headers().path().toString(), is("/foo")); + } + if (nonEmptyContent) { + Http3DataFrame dataFrame = ch.readOutbound(); + assertThat(dataFrame.content().readableBytes(), is(1)); + dataFrame.release(); + } else if (!headers && !hasTrailers && !last) { + ch.readOutbound().release(); + } + if (hasTrailers) { + Http3HeadersFrame trailersFrame = ch.readOutbound(); + assertThat(trailersFrame.headers().get("foo"), is("bar")); + } + // empty LastHttpContent has no data written and will complete the promise immediately + boolean anyData = hasTrailers || nonEmptyContent || headers || !last; + if (!voidPromise) { + if (anyData) { + assertFalse(fullPromise.isDone()); + } else { + // nothing to write, immediately complete + assertTrue(fullPromise.isDone()); + } + } + if (!last || anyData) { + assertFalse(ch.isOutputShutdown()); + } + for (ChannelPromise framePromise : framePromises) { + framePromise.trySuccess(); + } + if (last) { + assertTrue(ch.isOutputShutdown()); + } + if (!voidPromise) { + assertTrue(fullPromise.isDone()); + } + assertFalse(ch.finish()); + } + + @Test + public void decode100ContinueHttp2HeadersAsFullHttpResponse() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.scheme(HttpScheme.HTTP.name()); + headers.status(HttpResponseStatus.CONTINUE.codeAsText()); + + assertTrue(ch.writeInbound(new DefaultHttp3HeadersFrame(headers))); + + final FullHttpResponse response = ch.readInbound(); + try { + assertThat(response.status(), is(HttpResponseStatus.CONTINUE)); + assertThat(response.protocolVersion(), is(HttpVersion.HTTP_1_1)); + } finally { + response.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDecodeResponseHeaders() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.scheme(HttpScheme.HTTP.name()); + headers.status(HttpResponseStatus.OK.codeAsText()); + + assertTrue(ch.writeInbound(new DefaultHttp3HeadersFrame(headers))); + + HttpResponse response = ch.readInbound(); + assertThat(response.status(), is(HttpResponseStatus.OK)); + assertThat(response.protocolVersion(), is(HttpVersion.HTTP_1_1)); + assertFalse(response instanceof FullHttpResponse); + assertTrue(HttpUtil.isTransferEncodingChunked(response)); + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDecodeResponseHeadersWithContentLength() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.scheme(HttpScheme.HTTP.name()); + headers.status(HttpResponseStatus.OK.codeAsText()); + headers.setInt("content-length", 0); + + assertTrue(ch.writeInbound(new DefaultHttp3HeadersFrame(headers))); + + HttpResponse response = ch.readInbound(); + assertThat(response.status(), is(HttpResponseStatus.OK)); + assertThat(response.protocolVersion(), is(HttpVersion.HTTP_1_1)); + assertFalse(response instanceof FullHttpResponse); + assertFalse(HttpUtil.isTransferEncodingChunked(response)); + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDecodeResponseTrailersAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + Http3Headers headers = new DefaultHttp3Headers(); + headers.set("key", "value"); + assertTrue(ch.writeInboundWithFin(new DefaultHttp3HeadersFrame(headers))); + + LastHttpContent trailers = ch.readInbound(); + try { + assertThat(trailers.content().readableBytes(), is(0)); + assertThat(trailers.trailingHeaders().get("key"), is("value")); + assertFalse(trailers instanceof FullHttpRequest); + } finally { + trailers.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDecodeDataAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeInbound(new DefaultHttp3DataFrame(hello))); + + HttpContent content = ch.readInbound(); + try { + assertThat(content.content().toString(CharsetUtil.UTF_8), is("hello world")); + assertFalse(content instanceof LastHttpContent); + } finally { + content.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testDecodeEndDataAsClient() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + ByteBuf hello = Unpooled.copiedBuffer("hello world", CharsetUtil.UTF_8); + assertTrue(ch.writeInboundWithFin(new DefaultHttp3DataFrame(hello))); + + HttpContent content = ch.readInbound(); + try { + assertThat(content.content().toString(CharsetUtil.UTF_8), is("hello world")); + } finally { + content.release(); + } + + LastHttpContent last = ch.readInbound(); + try { + assertFalse(last.content().isReadable()); + assertTrue(last.trailingHeaders().isEmpty()); + } finally { + last.release(); + } + + assertThat(ch.readInbound(), is(nullValue())); + assertFalse(ch.finish()); + } + + @Test + public void testHostTranslated() { + EmbeddedQuicStreamChannel ch = new EmbeddedQuicStreamChannel(new Http3FrameToHttpObjectCodec(false)); + FullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/hello/world"); + request.headers().add(HttpHeaderNames.HOST, "example.com"); + assertTrue(ch.writeOutbound(request)); + + Http3HeadersFrame headersFrame = ch.readOutbound(); + Http3Headers headers = headersFrame.headers(); + + assertThat(headers.scheme().toString(), is("https")); + assertThat(headers.authority().toString(), is("example.com")); + assertTrue(ch.isOutputShutdown()); + + assertFalse(ch.finish()); + } + + @Test + public void multipleFramesInFin() throws InterruptedException, CertificateException, ExecutionException { + EventLoopGroup group = new NioEventLoopGroup(1); + try { + Bootstrap bootstrap = new Bootstrap() + .channel(NioDatagramChannel.class) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(Channel ch) throws Exception { + // initialized below + } + }) + .group(group); + + SelfSignedCertificate cert = new SelfSignedCertificate(); + + Channel server = bootstrap.bind("127.0.0.1", 0).sync().channel(); + server.pipeline().addLast(Http3.newQuicServerCodecBuilder() + .initialMaxData(10000000) + .initialMaxStreamDataBidirectionalLocal(1000000) + .initialMaxStreamDataBidirectionalRemote(1000000) + .initialMaxStreamsBidirectional(100) + .sslContext(QuicSslContextBuilder.forServer(cert.key(), null, cert.cert()) + .applicationProtocols(Http3.supportedApplicationProtocols()).build()) + .tokenHandler(InsecureQuicTokenHandler.INSTANCE) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(Channel ch) throws Exception { + ch.pipeline().addLast(new Http3ServerConnectionHandler(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + if (msg instanceof Http3HeadersFrame) { + DefaultHttp3HeadersFrame responseHeaders = new DefaultHttp3HeadersFrame(); + responseHeaders.headers().status(HttpResponseStatus.OK.codeAsText()); + ctx.write(responseHeaders, ctx.voidPromise()); + ctx.write(new DefaultHttp3DataFrame(ByteBufUtil.encodeString( + ctx.alloc(), CharBuffer.wrap("foo"), CharsetUtil.UTF_8)), + ctx.voidPromise()); + // send a fin, this also flushes + ((DuplexChannel) ctx.channel()).shutdownOutput(); + } else { + super.channelRead(ctx, msg); + } + } + })); + } + }) + .build()); + + Channel client = bootstrap.bind("127.0.0.1", 0).sync().channel(); + client.config().setAutoRead(true); + client.pipeline().addLast(Http3.newQuicClientCodecBuilder() + .initialMaxData(10000000) + .initialMaxStreamDataBidirectionalLocal(1000000) + .sslContext(QuicSslContextBuilder.forClient() + .trustManager(InsecureTrustManagerFactory.INSTANCE) + .applicationProtocols(Http3.supportedApplicationProtocols()) + .build()) + .build()); + + QuicChannel quicChannel = QuicChannel.newBootstrap(client) + .handler(new ChannelInitializer() { + @Override + protected void initChannel(QuicChannel ch) throws Exception { + ch.pipeline().addLast(new Http3ClientConnectionHandler()); + } + }) + .remoteAddress(server.localAddress()) + .localAddress(client.localAddress()) + .connect().get(); + + BlockingQueue received = new LinkedBlockingQueue<>(); + QuicStreamChannel stream = Http3.newRequestStream(quicChannel, new Http3RequestStreamInitializer() { + @Override + protected void initRequestStream(QuicStreamChannel ch) { + ch.pipeline() + .addLast(new Http3FrameToHttpObjectCodec(false)) + .addLast(new ChannelInboundHandlerAdapter() { + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + received.put(msg); + } + }); + } + }).get(); + DefaultFullHttpRequest request = new DefaultFullHttpRequest(HttpVersion.HTTP_1_1, HttpMethod.GET, "/"); + request.headers().add(HttpHeaderNames.HOST, "localhost"); + stream.writeAndFlush(request); + + HttpResponse respHeaders = (HttpResponse) received.poll(20, TimeUnit.SECONDS); + assertThat(respHeaders.status(), is(HttpResponseStatus.OK)); + assertThat(respHeaders, not(instanceOf(LastHttpContent.class))); + HttpContent respBody = (HttpContent) received.poll(20, TimeUnit.SECONDS); + assertThat(respBody.content().toString(CharsetUtil.UTF_8), is("foo")); + respBody.release(); + + LastHttpContent last = (LastHttpContent) received.poll(20, TimeUnit.SECONDS); + last.release(); + } finally { + group.shutdownGracefully(); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidationHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidationHandlerTest.java new file mode 100644 index 0000000..f546f37 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidationHandlerTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.handler.codec.quic.QuicStreamType; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; + +abstract class Http3FrameTypeValidationHandlerTest extends + AbstractHttp3FrameTypeValidationHandlerTest { + + Http3FrameTypeValidationHandlerTest(boolean isInbound, boolean isOutbound) { + super(QuicStreamType.BIDIRECTIONAL, isInbound, isOutbound); + } + + @Override + protected ChannelHandler newHandler(boolean server) { + return new Http3FrameTypeDuplexValidationHandler<>(Http3RequestStreamFrame.class); + } + + @Override + protected List newValidFrames() { + return Collections.singletonList(Http3TestUtils.newHttp3RequestStreamFrame()); + } + + @Override + protected List newInvalidFrames() { + return Arrays.asList(Http3TestUtils.newHttp3ControlStreamFrame(), Http3TestUtils.newHttp3PushStreamFrame()); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidatorTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidatorTest.java new file mode 100644 index 0000000..31f3ce3 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3FrameTypeValidatorTest.java @@ -0,0 +1,42 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +public abstract class Http3FrameTypeValidatorTest { + + protected abstract long[] invalidFramesTypes(); + protected abstract long[] validFrameTypes(); + + protected abstract Http3FrameTypeValidator newValidator(); + + @Test + public void testValidFrameTypes() throws Exception { + for (long validFrameType: validFrameTypes()) { + newValidator().validate(validFrameType, true); + } + } + + @Test + public void testInvalidFrameTypes() { + for (long invalidFrameType: invalidFramesTypes()) { + assertThrows(Http3Exception.class, () -> newValidator().validate(invalidFrameType, true)); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3HeadersSinkTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3HeadersSinkTest.java new file mode 100644 index 0000000..1386d5a --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3HeadersSinkTest.java @@ -0,0 +1,146 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class Http3HeadersSinkTest { + + @Test + public void testHeaderSizeExceeded() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 32, false, false); + addMandatoryPseudoHeaders(sink, false); + + Http3Exception e = assertThrows(Http3Exception.class, () -> sink.finish()); + Http3TestUtils.assertException(Http3ErrorCode.H3_EXCESSIVE_LOAD, e); + } + + @Test + public void testHeaderSizeNotExceed() throws Exception { + Http3Headers headers = new DefaultHttp3Headers(); + Http3HeadersSink sink = new Http3HeadersSink(headers, 64, false, false); + addMandatoryPseudoHeaders(sink, false); + sink.finish(); + } + + @Test + public void testPseudoHeaderFollowsNormalHeader() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept("name", "value"); + sink.accept(Http3Headers.PseudoHeaderName.AUTHORITY.value(), "value"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testInvalidatePseudoHeader() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept(":invalid", "value"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testMixRequestResponsePseudoHeaders() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "value"); + sink.accept(Http3Headers.PseudoHeaderName.STATUS.value(), "value"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testValidPseudoHeadersRequest() throws Exception { + Http3Headers headers = new DefaultHttp3Headers(); + Http3HeadersSink sink = new Http3HeadersSink(headers, 512, true, false); + addMandatoryPseudoHeaders(sink, true); + sink.finish(); + } + + @Test + public void testValidPseudoHeadersResponse() throws Exception { + Http3Headers headers = new DefaultHttp3Headers(); + Http3HeadersSink sink = new Http3HeadersSink(headers, 512, true, false); + addMandatoryPseudoHeaders(sink, false); + sink.finish(); + } + + @Test + public void testDuplicatePseudoHeader() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + addMandatoryPseudoHeaders(sink, false); + sink.accept(Http3Headers.PseudoHeaderName.AUTHORITY.value(), "value"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testMandatoryPseudoHeaderMissingRequest() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "GET"); + sink.accept(Http3Headers.PseudoHeaderName.PATH.value(), "/"); + sink.accept(Http3Headers.PseudoHeaderName.SCHEME.value(), "https"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testMandatoryPseudoHeaderMissingResponse() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testInvalidPseudoHeadersForConnect() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "CONNECT"); + sink.accept(Http3Headers.PseudoHeaderName.PATH.value(), "/"); + sink.accept(Http3Headers.PseudoHeaderName.SCHEME.value(), "https"); + sink.accept(Http3Headers.PseudoHeaderName.AUTHORITY.value(), "value"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testValidPseudoHeadersForConnect() throws Exception { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, false); + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "CONNECT"); + sink.accept(Http3Headers.PseudoHeaderName.AUTHORITY.value(), "value"); + sink.finish(); + } + + @Test + public void testTrailersWithRequestPseudoHeaders() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, true); + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "CONNECT"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + @Test + public void testTrailersWithResponsePseudoHeaders() { + Http3HeadersSink sink = new Http3HeadersSink(new DefaultHttp3Headers(), 512, true, true); + sink.accept(Http3Headers.PseudoHeaderName.STATUS.value(), "200"); + assertThrows(Http3HeadersValidationException.class, () -> sink.finish()); + } + + private static void addMandatoryPseudoHeaders(Http3HeadersSink sink, boolean req) { + if (req) { + sink.accept(Http3Headers.PseudoHeaderName.METHOD.value(), "GET"); + sink.accept(Http3Headers.PseudoHeaderName.PATH.value(), "/"); + sink.accept(Http3Headers.PseudoHeaderName.SCHEME.value(), "https"); + sink.accept(Http3Headers.PseudoHeaderName.AUTHORITY.value(), "value"); + } else { + sink.accept(Http3Headers.PseudoHeaderName.STATUS.value(), "200"); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidatorTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidatorTest.java new file mode 100644 index 0000000..9b33770 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamFrameTypeValidatorTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +public class Http3PushStreamFrameTypeValidatorTest extends Http3FrameTypeValidatorTest { + + @Override + protected long[] invalidFramesTypes() { + return new long[] { + Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE, + Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE, + Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE, + Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE, + Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE + }; + } + + @Override + protected long[] validFrameTypes() { + return new long[] { + Http3CodecUtils.HTTP3_DATA_FRAME_TYPE, + Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE + }; + } + + @Override + protected Http3FrameTypeValidator newValidator() { + return Http3PushStreamFrameTypeValidator.INSTANCE; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandlerTest.java new file mode 100644 index 0000000..35dea6e --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamServerValidationHandlerTest.java @@ -0,0 +1,46 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.handler.codec.quic.QuicStreamType; + +import java.util.Arrays; +import java.util.List; + +public class Http3PushStreamServerValidationHandlerTest extends + AbstractHttp3FrameTypeValidationHandlerTest { + + public Http3PushStreamServerValidationHandlerTest() { + super(QuicStreamType.UNIDIRECTIONAL, false, true); + } + + @Override + protected ChannelHandler newHandler(boolean server) { + return Http3PushStreamServerValidationHandler.INSTANCE; + } + + @Override + protected List newValidFrames() { + return Arrays.asList(new DefaultHttp3HeadersFrame(), new DefaultHttp3DataFrame(Unpooled.EMPTY_BUFFER)); + } + + @Override + protected List newInvalidFrames() { + return Arrays.asList(Http3TestUtils.newHttp3RequestStreamFrame(), Http3TestUtils.newHttp3ControlStreamFrame()); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamTest.java new file mode 100644 index 0000000..c320a1c --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3PushStreamTest.java @@ -0,0 +1,212 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.ExecutionException; + +import static io.netty.channel.ChannelFutureListener.CLOSE_ON_FAILURE; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_ID_ERROR; +import static io.netty.handler.codec.http3.Http3TestUtils.assertFrameEquals; +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static io.netty.handler.codec.quic.QuicStreamType.UNIDIRECTIONAL; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class Http3PushStreamTest { + private Http3ServerConnectionHandler serverConnectionHandler; + private EmbeddedQuicChannel serverChannel; + private Http3ServerPushStreamManager pushStreamManager; + private Http3ClientConnectionHandler clientConnectionHandler; + private EmbeddedQuicChannel clientChannel; + private int maxPushId; + private ChannelHandlerContext serverControlStreamHandlerCtx; + private EmbeddedQuicStreamChannel serverLocalControlStream; + private EmbeddedQuicStreamChannel clientLocalControlStream; + + @BeforeEach + public void setUp() throws Exception { + serverConnectionHandler = new Http3ServerConnectionHandler(new ChannelDuplexHandler(), null, null, null, true); + serverChannel = new EmbeddedQuicChannel(true, serverConnectionHandler); + serverLocalControlStream = (EmbeddedQuicStreamChannel) Http3.getLocalControlStream(serverChannel); + assertNotNull(serverLocalControlStream); + serverControlStreamHandlerCtx = mock(ChannelHandlerContext.class); + when(serverControlStreamHandlerCtx.channel()).thenReturn(serverLocalControlStream); + + serverConnectionHandler.localControlStreamHandler.channelRead(serverControlStreamHandlerCtx, + new DefaultHttp3SettingsFrame()); + pushStreamManager = new Http3ServerPushStreamManager(serverChannel); + + clientConnectionHandler = new Http3ClientConnectionHandler(null, null, null, null, true); + clientChannel = new EmbeddedQuicChannel(false, clientConnectionHandler); + clientLocalControlStream = (EmbeddedQuicStreamChannel) Http3.getLocalControlStream(clientChannel); + assertNotNull(clientLocalControlStream); + + assertTrue(serverLocalControlStream.releaseOutbound()); + assertTrue(clientLocalControlStream.releaseOutbound()); + maxPushId = 0; // allow 1 push + sendMaxPushId(maxPushId); + } + + private void sendMaxPushId(int maxPushId) throws QpackException { + final DefaultHttp3MaxPushIdFrame maxPushIdFrame = new DefaultHttp3MaxPushIdFrame(maxPushId); + serverConnectionHandler.localControlStreamHandler.channelRead(serverControlStreamHandlerCtx, maxPushIdFrame); + assertTrue(serverChannel.isActive()); + + clientLocalControlStream.writeAndFlush(maxPushIdFrame).addListener(CLOSE_ON_FAILURE); + assertTrue(clientChannel.isActive()); + assertTrue(clientLocalControlStream.releaseOutbound()); + } + + @AfterEach + public void tearDown() { + assertFalse(serverLocalControlStream.finish()); + assertFalse(serverChannel.finish()); + assertFalse(clientLocalControlStream.finish()); + assertFalse(clientChannel.finish()); + } + + @Test + public void headersData() throws Exception { + testWriteAndReadFrames(Http3TestUtils.newHeadersFrameWithPseudoHeaders(), newDataFrame()); + } + + @Test + public void headersDataTrailers() throws Exception { + testWriteAndReadFrames(Http3TestUtils.newHeadersFrameWithPseudoHeaders(), newDataFrame(), + new DefaultHttp3HeadersFrame()); + } + + @Test + public void pushPromise() throws Exception { + final EmbeddedQuicStreamChannel serverStream = newServerStream(); + readStreamHeader(serverStream).release(); + try { + assertThrows(Http3Exception.class, () -> serverStream.writeOutbound(new DefaultHttp3PushPromiseFrame(1))); + } finally { + assertFalse(serverStream.finish()); + } + } + + @Test + public void invalidPushId() throws Exception { + final EmbeddedQuicStreamChannel serverStream = + (EmbeddedQuicStreamChannel) serverChannel.createStream(UNIDIRECTIONAL, + new Http3PushStreamServerInitializer(maxPushId + 1) { + @Override + protected void initPushStream(QuicStreamChannel ch) { + // noop + } + }).get(); + final EmbeddedQuicStreamChannel clientStream = newClientStreamUninitialized(); + try { + final ByteBuf streamHeader = readStreamHeader(serverStream); + assertFalse(clientStream.writeInbound(streamHeader)); + verifyClose(H3_ID_ERROR, clientChannel); + } finally { + assertFalse(serverStream.finish()); + assertFalse(clientStream.finish()); + } + } + + @Test + public void updateMaxPushId() throws Exception { + testWriteAndReadFrames(Http3TestUtils.newHeadersFrameWithPseudoHeaders(), newDataFrame()); + assertFalse(pushStreamManager.isPushAllowed()); + + sendMaxPushId(maxPushId + 1); + testWriteAndReadFrames(Http3TestUtils.newHeadersFrameWithPseudoHeaders(), newDataFrame()); + } + + private void testWriteAndReadFrames(Http3RequestStreamFrame... frames) throws Exception { + final EmbeddedQuicStreamChannel serverStream = newServerStream(); + final EmbeddedQuicStreamChannel clientStream = newClientStream(serverStream); + try { + for (Http3RequestStreamFrame frame : frames) { + writeAndReadFrame(serverStream, clientStream, frame); + } + } finally { + assertFalse(serverStream.finish()); + assertFalse(clientStream.finish()); + } + } + + private static void writeAndReadFrame(EmbeddedQuicStreamChannel serverStream, + EmbeddedQuicStreamChannel clientStream, Http3RequestStreamFrame frame) { + ReferenceCountUtil.retain(frame); // retain so that we can compare later + assertTrue(serverStream.writeOutbound(frame)); + final ByteBuf encodedFrame = serverStream.readOutbound(); + assertNotNull(encodedFrame); + assertTrue(clientStream.writeInbound(encodedFrame)); + final Http3RequestStreamFrame readFrame = clientStream.readInbound(); + assertFrameEquals(frame, readFrame); // releases both the frames. + + assertTrue(serverStream.isActive()); + assertTrue(clientStream.isActive()); + } + + private DefaultHttp3DataFrame newDataFrame() { + return new DefaultHttp3DataFrame(serverChannel.alloc().buffer(1).writeByte(1)); + } + + private EmbeddedQuicStreamChannel newServerStream() throws InterruptedException, ExecutionException { + assertTrue(pushStreamManager.isPushAllowed()); + final long pushId = pushStreamManager.reserveNextPushId(); + return (EmbeddedQuicStreamChannel) pushStreamManager.newPushStream(pushId, null).get(); + } + + private EmbeddedQuicStreamChannel newClientStream(EmbeddedQuicStreamChannel serverStream) throws Exception { + final EmbeddedQuicStreamChannel clientStream = newClientStreamUninitialized(); + ByteBuf streamHeader = readStreamHeader(serverStream); + assertFalse(clientStream.writeInbound(streamHeader)); + assertTrue(clientChannel.isActive()); + return clientStream; + } + + private EmbeddedQuicStreamChannel newClientStreamUninitialized() throws InterruptedException, ExecutionException { + return (EmbeddedQuicStreamChannel) clientChannel.createStream(UNIDIRECTIONAL, + new Http3UnidirectionalStreamInboundClientHandler( + (__, encodeState, decodeState) -> clientConnectionHandler.newCodec(encodeState, decodeState), + clientConnectionHandler.localControlStreamHandler, + clientConnectionHandler.remoteControlStreamHandler, null, + __ -> new Http3PushStreamClientInitializer() { + @Override + protected void initPushStream(QuicStreamChannel ch) { + // noop + } + }, ChannelDuplexHandler::new, ChannelDuplexHandler::new)).get(); + } + + private ByteBuf readStreamHeader(EmbeddedQuicStreamChannel serverStream) { + serverStream.flushOutbound(); // flush the stream header + ByteBuf streamHeader = serverStream.readOutbound(); + assertNotNull(streamHeader); + return streamHeader; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidatorTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidatorTest.java new file mode 100644 index 0000000..fe4e584 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamFrameTypeValidatorTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +public class Http3RequestStreamFrameTypeValidatorTest extends Http3FrameTypeValidatorTest { + + @Override + protected long[] invalidFramesTypes() { + return new long[] { + Http3CodecUtils.HTTP3_CANCEL_PUSH_FRAME_TYPE, + Http3CodecUtils.HTTP3_GO_AWAY_FRAME_TYPE, + Http3CodecUtils.HTTP3_MAX_PUSH_ID_FRAME_TYPE, + Http3CodecUtils.HTTP3_SETTINGS_FRAME_TYPE + }; + } + + @Override + protected long[] validFrameTypes() { + return new long[] { + Http3CodecUtils.HTTP3_DATA_FRAME_TYPE, + Http3CodecUtils.HTTP3_HEADERS_FRAME_TYPE, + Http3CodecUtils.HTTP3_PUSH_PROMISE_FRAME_TYPE + }; + } + + @Override + protected Http3FrameTypeValidator newValidator() { + return Http3RequestStreamFrameTypeValidator.INSTANCE; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandlerTest.java new file mode 100644 index 0000000..60a4d1f --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamInboundHandlerTest.java @@ -0,0 +1,69 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Http3RequestStreamInboundHandlerTest { + + @Test + public void testDetectLastViaUserEvent() { + EmbeddedQuicStreamChannel channel = new EmbeddedQuicStreamChannel(new TestHttp3RequestStreamInboundHandler()); + assertTrue(channel.writeInbound(new DefaultHttp3HeadersFrame())); + assertTrue(channel.writeInbound(new DefaultHttp3DataFrame(Unpooled.buffer()))); + assertTrue(channel.writeInbound(new DefaultHttp3DataFrame(Unpooled.buffer()))); + channel.pipeline().fireUserEventTriggered(ChannelInputShutdownEvent.INSTANCE); + assertFrame(channel); + assertFrame(channel); + assertFrame(channel); + assertEquals(true, channel.readInbound()); + assertFalse(channel.finish()); + } + + private void assertFrame(EmbeddedChannel channel) { + Http3Frame frame = channel.readInbound(); + assertNotNull(frame); + ReferenceCountUtil.release(frame); + } + + private static final class TestHttp3RequestStreamInboundHandler extends Http3RequestStreamInboundHandler { + + @Override + public void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame) { + ctx.fireChannelRead(frame); + } + + @Override + public void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) { + ctx.fireChannelRead(frame); + } + + @Override + protected void channelInputClosed(ChannelHandlerContext ctx) { + ctx.fireChannelRead(true); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandlerTest.java new file mode 100644 index 0000000..bc1e9b0 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3RequestStreamValidationHandlerTest.java @@ -0,0 +1,544 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; +import io.netty.handler.codec.http.HttpHeaderNames; +import io.netty.handler.codec.http.HttpHeaderValues; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpResponseStatus; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.function.BooleanSupplier; + +import static io.netty.handler.codec.http.HttpResponseStatus.CONTINUE; +import static io.netty.handler.codec.http.HttpResponseStatus.OK; +import static io.netty.handler.codec.http3.Http3ErrorCode.H3_FRAME_UNEXPECTED; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationHandler.newClientValidator; +import static io.netty.handler.codec.http3.Http3RequestStreamValidationHandler.newServerValidator; +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static io.netty.util.ReferenceCountUtil.release; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.junit.jupiter.api.Assertions.fail; + + +public class Http3RequestStreamValidationHandlerTest extends Http3FrameTypeValidationHandlerTest { + private final QpackDecoder decoder; + + public Http3RequestStreamValidationHandlerTest() { + super(true, true); + decoder = new QpackDecoder(0, 0); + } + + @Override + protected ChannelHandler newHandler(boolean server) { + return new ChannelInitializer() { + @Override + protected void initChannel(QuicStreamChannel ch) { + Http3RequestStreamEncodeStateValidator encStateValidator = new Http3RequestStreamEncodeStateValidator(); + Http3RequestStreamDecodeStateValidator decStateValidator = new Http3RequestStreamDecodeStateValidator(); + ch.pipeline().addLast(encStateValidator); + ch.pipeline().addLast(decStateValidator); + ch.pipeline().addLast(newServerValidator(qpackAttributes, decoder, encStateValidator, + decStateValidator)); + } + }; + } + + @Override + protected List newValidFrames() { + return Arrays.asList(new DefaultHttp3HeadersFrame(), new DefaultHttp3DataFrame(Unpooled.directBuffer()), + new DefaultHttp3UnknownFrame(Http3CodecUtils.MAX_RESERVED_FRAME_TYPE, Unpooled.buffer())); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidFrameSequenceStartInbound(boolean server) throws Exception { + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.BIDIRECTIONAL, newHandler(server)); + Http3DataFrame dataFrame = new DefaultHttp3DataFrame(Unpooled.buffer()); + + Exception e = assertThrows(Exception.class, () -> channel.writeInbound(dataFrame)); + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + + Http3TestUtils.verifyClose(H3_FRAME_UNEXPECTED, parent); + assertEquals(0, dataFrame.refCnt()); + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidFrameSequenceEndInbound(boolean server) throws Exception { + setUp(server); + final EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.BIDIRECTIONAL, newHandler(server)); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + Http3DataFrame dataFrame = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3DataFrame dataFrame2 = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3DataFrame dataFrame3 = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3HeadersFrame trailersFrame = new DefaultHttp3HeadersFrame(); + + assertTrue(channel.writeInbound(headersFrame)); + assertTrue(channel.writeInbound(dataFrame.retainedDuplicate())); + assertTrue(channel.writeInbound(dataFrame2.retainedDuplicate())); + assertTrue(channel.writeInbound(trailersFrame)); + + Exception e = assertThrows(Exception.class, () -> channel.writeInbound(dataFrame3)); + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + + Http3TestUtils.verifyClose(H3_FRAME_UNEXPECTED, parent); + assertTrue(channel.finish()); + assertEquals(0, dataFrame3.refCnt()); + + Http3TestUtils.assertFrameEquals(headersFrame, channel.readInbound()); + Http3TestUtils.assertFrameEquals(dataFrame, channel.readInbound()); + Http3TestUtils.assertFrameEquals(dataFrame2, channel.readInbound()); + Http3TestUtils.assertFrameEquals(trailersFrame, channel.readInbound()); + assertNull(channel.readInbound()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidFrameSequenceStartOutbound(boolean server) throws Exception { + setUp(server); + EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.BIDIRECTIONAL, newHandler(server)); + + Http3DataFrame dataFrame = new DefaultHttp3DataFrame(Unpooled.buffer()); + + Exception e = assertThrows(Exception.class, () -> channel.writeOutbound(dataFrame)); + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + + assertFalse(channel.finish()); + assertEquals(0, dataFrame.refCnt()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInvalidFrameSequenceEndOutbound(boolean server) throws Exception { + setUp(server); + EmbeddedQuicStreamChannel channel = newStream(QuicStreamType.BIDIRECTIONAL, newHandler(server)); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + Http3DataFrame dataFrame = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3DataFrame dataFrame2 = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3DataFrame dat3Frame3 = new DefaultHttp3DataFrame(Unpooled.buffer()); + Http3HeadersFrame trailersFrame = new DefaultHttp3HeadersFrame(); + assertTrue(channel.writeOutbound(headersFrame)); + assertTrue(channel.writeOutbound(dataFrame.retainedDuplicate())); + assertTrue(channel.writeOutbound(dataFrame2.retainedDuplicate())); + assertTrue(channel.writeOutbound(trailersFrame)); + + Exception e = assertThrows(Exception.class, () -> channel.writeOutbound(dat3Frame3)); + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + + assertTrue(channel.finish()); + assertEquals(0, dat3Frame3.refCnt()); + + Http3TestUtils.assertFrameEquals(headersFrame, channel.readOutbound()); + Http3TestUtils.assertFrameEquals(dataFrame, channel.readOutbound()); + Http3TestUtils.assertFrameEquals(dataFrame2, channel.readOutbound()); + Http3TestUtils.assertFrameEquals(trailersFrame, channel.readOutbound()); + assertNull(channel.readOutbound()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testGoawayReceivedBeforeWritingHeaders(boolean server) throws Exception { + setUp(server); + EmbeddedQuicStreamChannel channel = newClientStream(() -> true); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + Exception e = assertThrows(Exception.class, () -> channel.writeOutbound(headersFrame)); + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + + // We should have closed the channel. + assertFalse(channel.isActive()); + assertFalse(channel.finish()); + assertNull(channel.readOutbound()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testGoawayReceivedAfterWritingHeaders(boolean server) throws Exception { + setUp(server); + AtomicBoolean goAway = new AtomicBoolean(); + EmbeddedQuicStreamChannel channel = newClientStream(goAway::get); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + Http3DataFrame dataFrame = new DefaultHttp3DataFrame(Unpooled.buffer()); + assertTrue(channel.writeOutbound(headersFrame)); + goAway.set(true); + assertTrue(channel.writeOutbound(dataFrame.retainedDuplicate())); + assertTrue(channel.finish()); + Http3TestUtils.assertFrameEquals(headersFrame, channel.readOutbound()); + Http3TestUtils.assertFrameEquals(dataFrame, channel.readOutbound()); + + assertNull(channel.readOutbound()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testClientHeadRequestWithContentLength(boolean server) throws Exception { + setUp(server); + EmbeddedQuicStreamChannel channel = newClientStream(() -> false); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().method(HttpMethod.HEAD.asciiName()); + assertTrue(channel.writeOutbound(headersFrame)); + + Http3HeadersFrame responseHeadersFrame = new DefaultHttp3HeadersFrame(); + responseHeadersFrame.headers().setLong(HttpHeaderNames.CONTENT_LENGTH, 10); + + assertTrue(channel.writeInbound(responseHeadersFrame)); + channel.pipeline().fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + + assertTrue(channel.finishAndReleaseAll()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testClientNonHeadRequestWithContentLengthNoData(boolean server) throws Exception { + setUp(server); + testClientNonHeadRequestWithContentLength(true, false); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testClientNonHeadRequestWithContentLengthNoDataAndTrailers(boolean server) throws Exception { + setUp(server); + testClientNonHeadRequestWithContentLength(true, true); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testClientNonHeadRequestWithContentLengthNotEnoughData(boolean server) throws Exception { + setUp(server); + testClientNonHeadRequestWithContentLength(false, false); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testClientNonHeadRequestWithContentLengthNotEnoughDataAndTrailer(boolean server) throws Exception { + setUp(server); + testClientNonHeadRequestWithContentLength(false, true); + } + + private void testClientNonHeadRequestWithContentLength(boolean noData, boolean trailers) throws Exception { + EmbeddedQuicStreamChannel channel = newClientStream(() -> false); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().method(HttpMethod.GET.asciiName()); + assertTrue(channel.writeOutbound(headersFrame)); + + Http3HeadersFrame responseHeadersFrame = new DefaultHttp3HeadersFrame(); + responseHeadersFrame.headers().setLong(HttpHeaderNames.CONTENT_LENGTH, 10); + + assertTrue(channel.writeInbound(responseHeadersFrame)); + if (!noData) { + assertTrue(channel.writeInbound(new DefaultHttp3DataFrame(Unpooled.buffer().writeZero(9)))); + } + try { + if (trailers) { + channel.writeInbound(new DefaultHttp3HeadersFrame()); + } else { + channel.pipeline().fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + channel.checkException(); + } + } catch (Exception e) { + Http3TestUtils.assertException(Http3ErrorCode.H3_MESSAGE_ERROR, e); + } + assertTrue(channel.finishAndReleaseAll()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testServerWithContentLengthNoData(boolean server) throws Exception { + setUp(server); + testServerWithContentLength(true, false); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testServerWithContentLengthNoDataAndTrailers(boolean server) throws Exception { + setUp(server); + testServerWithContentLength(true, true); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testServerWithContentLengthNotEnoughData(boolean server) throws Exception { + setUp(server); + testServerWithContentLength(false, false); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testServerWithContentLengthNotEnoughDataAndTrailer(boolean server) throws Exception { + setUp(server); + testServerWithContentLength(false, true); + } + + private void testServerWithContentLength(boolean noData, boolean trailers) throws Exception { + EmbeddedQuicStreamChannel channel = newServerStream(); + + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().setLong(HttpHeaderNames.CONTENT_LENGTH, 10); + headersFrame.headers().method(HttpMethod.POST.asciiName()); + assertTrue(channel.writeInbound(headersFrame)); + + if (!noData) { + assertTrue(channel.writeInbound(new DefaultHttp3DataFrame(Unpooled.buffer().writeZero(9)))); + } + try { + if (trailers) { + channel.writeInbound(new DefaultHttp3HeadersFrame()); + } else { + channel.pipeline().fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + channel.checkException(); + } + } catch (Exception e) { + Http3TestUtils.assertException(Http3ErrorCode.H3_MESSAGE_ERROR, e); + } + assertTrue(channel.finishAndReleaseAll()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testHttp3HeadersFrameWithConnectionHeader(boolean server) throws Exception { + setUp(server); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().add(HttpHeaderNames.CONNECTION, "something"); + testHeadersFrame(headersFrame, Http3ErrorCode.H3_MESSAGE_ERROR); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testHttp3HeadersFrameWithTeHeaderAndInvalidValue(boolean server) throws Exception { + setUp(server); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().add(HttpHeaderNames.TE, "something"); + testHeadersFrame(headersFrame, Http3ErrorCode.H3_MESSAGE_ERROR); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testHttp3HeadersFrameWithTeHeaderAndValidValue(boolean server) throws Exception { + setUp(server); + Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame(); + headersFrame.headers().add(HttpHeaderNames.TE, HttpHeaderValues.TRAILERS); + testHeadersFrame(headersFrame, null); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseAfterActualResponseServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, true, newResponse(OK), newResponse(CONTINUE)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseAfterActualResponseClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, true, newResponse(OK), newResponse(CONTINUE)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMultiInformationalResponseServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, false, newResponse(CONTINUE), newResponse(CONTINUE), newResponse(OK)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMultiInformationalResponseClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, false, newResponse(CONTINUE), newResponse(CONTINUE), newResponse(OK)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMultiInformationalResponseAfterActualResponseServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, false, newResponse(CONTINUE), newResponse(CONTINUE), newResponse(OK)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testMultiInformationalResponseAfterActualResponseClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, false, newResponse(CONTINUE), newResponse(CONTINUE), newResponse(OK)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseWithDataAndTrailersServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, false, newResponse(CONTINUE), newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), + new DefaultHttp3HeadersFrame()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseWithDataAndTrailersClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, false, newResponse(CONTINUE), newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), + new DefaultHttp3HeadersFrame()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseWithDataServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, false, newResponse(CONTINUE), newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer())); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponseWithDataClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, false, newResponse(CONTINUE), newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer())); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponsePostDataServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, true, newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), newResponse(CONTINUE)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponsePostDataClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, true, newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), newResponse(CONTINUE)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponsePostTrailersServer(boolean server) throws Exception { + setUp(server); + testInformationalResponse(true, true, newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), new DefaultHttp3HeadersFrame(), newResponse(CONTINUE)); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @MethodSource("data") + public void testInformationalResponsePostTrailersClient(boolean server) throws Exception { + setUp(server); + testInformationalResponse(false, true, newResponse(OK), + new DefaultHttp3DataFrame(Unpooled.buffer()), new DefaultHttp3HeadersFrame(), newResponse(CONTINUE)); + } + + private void testInformationalResponse(boolean server, boolean expectFail, Http3Frame... frames) throws Exception { + EmbeddedQuicStreamChannel channel = server ? newServerStream() : + newClientStream(() -> false); + + for (int i = 0; i < frames.length; i++) { + Http3Frame frame = frames[i]; + Http3Frame read = null; + try { + if (server) { + assertTrue(channel.writeOutbound(frame)); + if (expectFail && i == frames.length - 1) { + fail(); + } else { + read = channel.readOutbound(); + } + } else { + assertTrue(channel.writeInbound(frame)); + if (expectFail && i == frames.length - 1) { + fail(); + } else { + read = channel.readInbound(); + } + } + assertEquals(frame, read); + } catch (Exception e) { + Http3TestUtils.assertException(H3_FRAME_UNEXPECTED, e); + if (!server) { + Http3TestUtils.verifyClose(H3_FRAME_UNEXPECTED, parent); + } + } finally { + release(read); + } + } + assertFalse(parent.finish()); + assertFalse(channel.finish()); + } + + private void testHeadersFrame(Http3HeadersFrame headersFrame, Http3ErrorCode code) throws Exception { + EmbeddedQuicStreamChannel channel = newServerStream(); + try { + assertTrue(channel.writeInbound(headersFrame)); + if (code != null) { + fail(); + } + } catch (Throwable cause) { + if (code == null) { + throw cause; + } + Http3TestUtils.assertException(code, cause); + assertEquals((Integer) code.code, channel.outputShutdownError()); + } + // Only expect produced messages when there was no error. + assertEquals(code == null, channel.finishAndReleaseAll()); + } + + private EmbeddedQuicStreamChannel newClientStream(final BooleanSupplier goAwayReceivedSupplier) throws Exception { + return newStream(QuicStreamType.BIDIRECTIONAL, new ChannelInitializer() { + @Override + protected void initChannel(QuicStreamChannel ch) { + Http3RequestStreamEncodeStateValidator encStateValidator = new Http3RequestStreamEncodeStateValidator(); + Http3RequestStreamDecodeStateValidator decStateValidator = new Http3RequestStreamDecodeStateValidator(); + ch.pipeline().addLast(encStateValidator); + ch.pipeline().addLast(decStateValidator); + ch.pipeline().addLast(newClientValidator(goAwayReceivedSupplier, qpackAttributes, decoder, + encStateValidator, decStateValidator)); + } + }); + } + + private EmbeddedQuicStreamChannel newServerStream() throws Exception { + return newStream(QuicStreamType.BIDIRECTIONAL, newHandler(true)); + } + + private static Http3Frame newResponse(HttpResponseStatus status) { + Http3HeadersFrame frame = new DefaultHttp3HeadersFrame(); + frame.headers().status(status.codeAsText()); + return frame; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerConnectionHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerConnectionHandlerTest.java new file mode 100644 index 0000000..8a66f84 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerConnectionHandlerTest.java @@ -0,0 +1,45 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.handler.codec.quic.QuicStreamChannel; + +import static org.junit.jupiter.api.Assertions.assertNotNull; + +public class Http3ServerConnectionHandlerTest extends AbtractHttp3ConnectionHandlerTest { + private static final ChannelHandler REQUEST_HANDLER = new ChannelInboundHandlerAdapter() { + @Override + public boolean isSharable() { + return true; + } + }; + + public Http3ServerConnectionHandlerTest() { + super(true); + } + + @Override + protected Http3ConnectionHandler newConnectionHandler() { + return new Http3ServerConnectionHandler(REQUEST_HANDLER); + } + + @Override + protected void assertBidirectionalStreamHandled(EmbeddedQuicChannel channel, QuicStreamChannel streamChannel) { + assertNotNull(streamChannel.pipeline().context(REQUEST_HANDLER)); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerPushStreamManagerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerPushStreamManagerTest.java new file mode 100644 index 0000000..a6406d8 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3ServerPushStreamManagerTest.java @@ -0,0 +1,208 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandler; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.Promise; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import java.util.ArrayList; +import java.util.List; +import java.util.concurrent.Callable; + +import static java.util.function.UnaryOperator.identity; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class Http3ServerPushStreamManagerTest { + + private EmbeddedQuicChannel channel; + private Http3ServerPushStreamManager manager; + private Http3ServerConnectionHandler connectionHandler; + private ChannelHandlerContext controlStreamHandlerCtx; + private EmbeddedQuicStreamChannel localControlStream; + + @BeforeEach + public void setUp() throws Exception { + connectionHandler = new Http3ServerConnectionHandler(new Http3RequestStreamInboundHandler() { + @Override + protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelInputClosed(ChannelHandlerContext ctx) { + // NOOP + } + }, null, null, null, true); + channel = new EmbeddedQuicChannel(true, connectionHandler); + localControlStream = (EmbeddedQuicStreamChannel) Http3.getLocalControlStream(channel); + assertNotNull(localControlStream); + assertTrue(localControlStream.releaseOutbound()); // settings + + controlStreamHandlerCtx = mock(ChannelHandlerContext.class); + when(controlStreamHandlerCtx.channel()).thenReturn(localControlStream); + connectionHandler.localControlStreamHandler.channelRead(controlStreamHandlerCtx, + new DefaultHttp3SettingsFrame()); + manager = new Http3ServerPushStreamManager(channel); + } + + @AfterEach + public void tearDown() { + assertFalse(localControlStream.finish()); + assertFalse(channel.finish()); + } + + @Test + public void pushAllowed() throws Exception { + assertFalse(manager.isPushAllowed()); + sendMaxPushId(1); + assertTrue(manager.isPushAllowed()); + } + + @Test + public void reserveWhenPushNotAllowed() { + assertThrows(IllegalStateException.class, () -> manager.reserveNextPushId()); + } + + @Test + public void reserveWhenPushAllowed() throws Exception { + sendMaxPushId(2); + assertEquals(0, manager.reserveNextPushId()); + } + + @Test + public void reservesAfterRefreshMaxId() throws Exception { + sendMaxPushId(0); + assertEquals(0, manager.reserveNextPushId()); + assertFalse(manager.isPushAllowed()); + sendMaxPushId(1); + assertEquals(1, manager.reserveNextPushId()); + } + + @Test + public void pushStreamNoHandler() throws Exception { + pushStreamCreateAndClose(pushId -> newPushStream(null, pushId)); + } + + @Test + public void pushStreamWithHandler() throws Exception { + final PushStreamListener pushStreamHandler = new PushStreamListener(); + pushStreamCreateAndClose(pushId -> newPushStream(pushStreamHandler, pushId)); + assertEquals(1, pushStreamHandler.framesWritten.size()); + assertTrue(pushStreamHandler.framesWritten.get(0) instanceof Http3HeadersFrame); + } + + @Test + public void pushStreamWithBootstrapNoHandler() throws Exception { + pushStreamWithBootstrapCreateAndClose(null); + } + + @Test + public void pushStreamWithBootstrapWithHandler() throws Exception { + final PushStreamListener pushStreamHandler = new PushStreamListener(); + pushStreamWithBootstrapCreateAndClose(pushStreamHandler); + assertEquals(1, pushStreamHandler.framesWritten.size()); + assertTrue(pushStreamHandler.framesWritten.get(0) instanceof Http3HeadersFrame); + } + + private void pushStreamWithBootstrapCreateAndClose(ChannelHandler pushStreamHandler) throws Exception { + pushStreamCreateAndClose(pushId -> newPushStreamWithBootstrap(pushStreamHandler, pushId)); + } + + private void pushStreamCreateAndClose(PushStreamFactory pushStreamFactory) throws Exception { + sendMaxPushId(1); + final long pushId = manager.reserveNextPushId(); + final EmbeddedQuicStreamChannel pushStream = pushStreamFactory.createPushStream(pushId); + + final DefaultHttp3HeadersFrame headerFrame = Http3TestUtils.newHeadersFrameWithPseudoHeaders(); + assertTrue(pushStream.writeOutbound(headerFrame)); + final ByteBuf encodedHeaders = pushStream.readOutbound(); + assertNotNull(encodedHeaders); + encodedHeaders.release(); + + final ChannelInboundHandler controlStreamListener = manager.controlStreamListener(); + controlStreamListener.channelRead(controlStreamHandlerCtx, new DefaultHttp3CancelPushFrame(pushId)); + assertFalse(pushStream.isActive()); + } + + private EmbeddedQuicStreamChannel newPushStream(ChannelHandler pushStreamHandler, long pushId) throws Exception { + return newPushStream(() -> (EmbeddedQuicStreamChannel) manager.newPushStream(pushId, pushStreamHandler).get()); + } + + private EmbeddedQuicStreamChannel newPushStreamWithBootstrap(ChannelHandler pushStreamHandler, long pushId) + throws Exception { + return newPushStream(() -> { + final Promise promise = channel.eventLoop().newPromise(); + manager.newPushStream(pushId, pushStreamHandler, identity(), promise); + return (EmbeddedQuicStreamChannel) promise.get(); + }); + } + + private EmbeddedQuicStreamChannel newPushStream(Callable pushStreamFactory) + throws Exception { + final EmbeddedQuicStreamChannel pushStream = pushStreamFactory.call(); + assertTrue(pushStream.isActive()); + pushStream.flushOutbound(); // flush the stream header + ByteBuf streamHeader = pushStream.readOutbound(); + assertNotNull(streamHeader); + streamHeader.release(); + return pushStream; + } + + private void sendMaxPushId(int maxPushId) throws QpackException { + final DefaultHttp3MaxPushIdFrame maxPushIdFrame = new DefaultHttp3MaxPushIdFrame(maxPushId); + connectionHandler.localControlStreamHandler.channelRead(controlStreamHandlerCtx, maxPushIdFrame); + assertTrue(channel.isActive()); + } + + private static class PushStreamListener extends ChannelOutboundHandlerAdapter { + final List framesWritten = new ArrayList<>(); + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (msg instanceof Http3PushStreamFrame) { + framesWritten.add((Http3PushStreamFrame) msg); + } + super.write(ctx, msg, promise); + } + } + + @FunctionalInterface + private interface PushStreamFactory { + EmbeddedQuicStreamChannel createPushStream(long pushId) throws Exception; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3SpecTestServer.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3SpecTestServer.java new file mode 100644 index 0000000..ab47fb0 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3SpecTestServer.java @@ -0,0 +1,115 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +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.handler.codec.quic.InsecureQuicTokenHandler; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicSslContext; +import io.netty.handler.codec.quic.QuicSslContextBuilder; +import io.netty.handler.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 Http3SpecTestServer { + private static final byte[] CONTENT = "Hello World!\r\n".getBytes(CharsetUtil.US_ASCII); + static final int PORT = 9999; + + private Http3SpecTestServer() { } + + 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() { + @Override + protected void initChannel(QuicChannel ch) { + // Called for each connection + ch.pipeline().addLast(new Http3ServerConnectionHandler( + new ChannelInitializer() { + // Called for each request-stream, + @Override + protected void initChannel(QuicStreamChannel ch) { + ch.pipeline().addLast(new Http3RequestStreamInboundHandler() { + + @Override + protected void channelRead( + ChannelHandlerContext ctx, Http3HeadersFrame frame) { + + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelRead( + ChannelHandlerContext ctx, Http3DataFrame frame) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelInputClosed(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); + } + }); + } + }, null, null, null, true)); + } + }).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(); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3TestUtils.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3TestUtils.java new file mode 100644 index 0000000..37f4b13 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3TestUtils.java @@ -0,0 +1,103 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.ReferenceCounted; +import org.hamcrest.CoreMatchers; +import org.hamcrest.MatcherAssert; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertSame; + +final class Http3TestUtils { + + private Http3TestUtils() { } + + static void assertException(Http3ErrorCode code, Throwable e) { + MatcherAssert.assertThat(e, CoreMatchers.instanceOf(Http3Exception.class)); + Http3Exception exception = (Http3Exception) e; + assertEquals(code, exception.errorCode()); + } + + static void verifyClose(int times, Http3ErrorCode expectedCode, EmbeddedQuicChannel channel) { + assertEquals(times, channel.closeErrorCodes().stream().filter(integer -> integer == expectedCode.code).count(), + "Close not invoked with expected times with error code: " + expectedCode.code); + } + + static void verifyClose(Http3ErrorCode expectedCode, EmbeddedQuicChannel channel) { + verifyClose(1, expectedCode, channel); + } + + static void assertBufferEquals(ByteBuf expected, ByteBuf actual) { + try { + assertEquals(expected, actual); + } finally { + ReferenceCountUtil.release(expected); + ReferenceCountUtil.release(actual); + } + } + + static void assertFrameEquals(Http3Frame expected, Http3Frame actual) { + try { + assertEquals(expected, actual); + } finally { + ReferenceCountUtil.release(expected); + ReferenceCountUtil.release(actual); + } + } + + static void assertFrameSame(Http3Frame expected, Http3Frame actual) { + try { + assertSame(expected, actual); + } finally { + // as both frames are the same we only want to release once. + ReferenceCountUtil.release(actual); + } + } + + static void assertFrameReleased(Http3Frame frame) { + if (frame instanceof ReferenceCounted) { + assertEquals(0, ((ReferenceCounted) frame).refCnt()); + } + } + + static Http3Frame newHttp3Frame() { + return () -> 0; + } + + static Http3PushStreamFrame newHttp3PushStreamFrame() { + return () -> 0; + } + + static Http3RequestStreamFrame newHttp3RequestStreamFrame() { + return () -> 0; + } + + static Http3ControlStreamFrame newHttp3ControlStreamFrame() { + return () -> 0; + } + + static DefaultHttp3HeadersFrame newHeadersFrameWithPseudoHeaders() { + final DefaultHttp3HeadersFrame headers = new DefaultHttp3HeadersFrame(); + headers.headers().add(":authority", "netty.quic"); // name only + headers.headers().add(":path", "/"); // name & value + headers.headers().add(":method", "GET"); // name & value with few options per name + headers.headers().add(":scheme", "https"); + return headers; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandlerTest.java new file mode 100644 index 0000000..9d14ea1 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/Http3UnidirectionalStreamInboundHandlerTest.java @@ -0,0 +1,283 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerAdapter; +import io.netty.channel.ChannelInboundHandlerAdapter; +import io.netty.channel.DefaultChannelId; +import io.netty.channel.embedded.EmbeddedChannel; +import io.netty.handler.codec.quic.QuicStreamChannel; +import io.netty.handler.codec.quic.QuicStreamType; +import io.netty.util.ReferenceCountUtil; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.ValueSource; + +import java.util.function.LongFunction; + +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_CONTROL_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_PUSH_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_QPACK_DECODER_STREAM_TYPE; +import static io.netty.handler.codec.http3.Http3CodecUtils.HTTP3_QPACK_ENCODER_STREAM_TYPE; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class Http3UnidirectionalStreamInboundHandlerTest { + + private EmbeddedQuicChannel parent; + private Http3ControlStreamOutboundHandler remoteControlStreamHandler; + private Http3ControlStreamInboundHandler localControlStreamHandler; + private QpackEncoder qpackEncoder; + private QpackDecoder qpackDecoder; + + private void setup(boolean server) { + parent = new EmbeddedQuicChannel(server); + qpackEncoder = new QpackEncoder(); + qpackDecoder = new QpackDecoder(0, 0); + localControlStreamHandler = new Http3ControlStreamInboundHandler(server, null, qpackEncoder, + remoteControlStreamHandler); + remoteControlStreamHandler = new Http3ControlStreamOutboundHandler(server, new DefaultHttp3SettingsFrame(), + new CodecHandler()); + } + + @AfterEach + public void tearDown() { + assertFalse(parent.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testUnkownStream(boolean server) throws Exception { + setup(server); + EmbeddedChannel channel = newChannel(server); + ByteBuf buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, 0x06); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + assertNull(channel.pipeline().context(Http3UnidirectionalStreamInboundHandler.class)); + assertTrue(channel.isActive()); + + // Write some buffer to the stream. This should be just released. + ByteBuf someBuffer = Unpooled.buffer(); + assertFalse(channel.writeInbound(someBuffer)); + assertEquals(0, someBuffer.refCnt()); + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testUnknownStreamWithCustomHandler(boolean server) throws Exception { + setup(server); + long streamType = 0x06; + EmbeddedChannel channel = newChannel(server, v -> { + assertEquals(streamType, v); + // Add an handler that will just forward the received bytes. + return new ChannelInboundHandlerAdapter(); + }); + ByteBuf buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, streamType); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + assertNull(channel.pipeline().context(Http3UnidirectionalStreamInboundHandler.class)); + assertTrue(channel.isActive()); + + // Write some buffer to the stream. This should be just released. + ByteBuf someBuffer = Unpooled.buffer().writeLong(9); + assertTrue(channel.writeInbound(someBuffer.retainedDuplicate())); + assertTrue(channel.finish()); + + Http3TestUtils.assertBufferEquals(someBuffer, channel.readInbound()); + assertNull(channel.readInbound()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testPushStream(boolean server) throws Exception { + setup(server); + EmbeddedChannel channel = newChannel(server); + ByteBuf buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, HTTP3_PUSH_STREAM_TYPE); + Http3CodecUtils.writeVariableLengthInteger(buffer, 2); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + if (server) { + Http3TestUtils.verifyClose(Http3ErrorCode.H3_STREAM_CREATION_ERROR, (EmbeddedQuicChannel) channel.parent()); + } else { + ByteBuf b = Unpooled.buffer(); + assertFalse(channel.writeInbound(b)); + assertEquals(0, b.refCnt()); + } + assertFalse(channel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testPushStreamNoMaxPushIdFrameSent(boolean server) throws Exception { + testPushStream(server, -1); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testPushStreamMaxPushIdFrameSentWithSmallerId(boolean server) throws Exception { + testPushStream(server, 0); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testPushStreamMaxPushIdFrameSentWithSameId(boolean server) throws Exception { + testPushStream(server, 2); + } + + private void testPushStream(boolean server, long maxPushId) throws Exception { + setup(server); + assertFalse(parent.finish()); + parent = new EmbeddedQuicChannel(server, server ? + new Http3ServerConnectionHandler(new ChannelInboundHandlerAdapter()) : + new Http3ClientConnectionHandler()); + final EmbeddedQuicStreamChannel localControlStream = + (EmbeddedQuicStreamChannel) Http3.getLocalControlStream(parent); + assertNotNull(localControlStream); + assertTrue(localControlStream.releaseOutbound()); + EmbeddedQuicStreamChannel outboundControlChannel = + (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.BIDIRECTIONAL, + remoteControlStreamHandler).get(); + + // Let's drain everything that was written while channelActive(...) was called. + for (;;) { + Object written = outboundControlChannel.readOutbound(); + if (written == null) { + break; + } + ReferenceCountUtil.release(written); + } + + if (maxPushId >= 0) { + assertTrue(outboundControlChannel.writeOutbound(new DefaultHttp3MaxPushIdFrame(maxPushId))); + Object push = outboundControlChannel.readOutbound(); + ReferenceCountUtil.release(push); + } + + Http3UnidirectionalStreamInboundHandler handler = newUniStreamInboundHandler(server, null); + EmbeddedQuicStreamChannel channel = + (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, handler).get(); + + ByteBuf buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, HTTP3_PUSH_STREAM_TYPE); + final int pushId = 2; + Http3CodecUtils.writeVariableLengthInteger(buffer, pushId); + + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + if (server) { + Http3TestUtils.verifyClose(Http3ErrorCode.H3_STREAM_CREATION_ERROR, parent); + } else { + if (pushId > maxPushId) { + Http3TestUtils.verifyClose(Http3ErrorCode.H3_ID_ERROR, parent); + } else { + assertTrue(parent.isActive()); + assertNotNull(channel.pipeline().context(CodecHandler.class)); + } + } + assertFalse(channel.finish()); + assertFalse(outboundControlChannel.finish()); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testControlStream(boolean server) throws Exception { + testStreamSetup(server, HTTP3_CONTROL_STREAM_TYPE, Http3ControlStreamInboundHandler.class, true); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testQpackEncoderStream(boolean server) throws Exception { + testStreamSetup(server, HTTP3_QPACK_ENCODER_STREAM_TYPE, QpackEncoderHandler.class, false); + } + + @ParameterizedTest(name = "{index}: server = {0}") + @ValueSource(booleans = {false, true}) + public void testQpackDecoderStream(boolean server) throws Exception { + testStreamSetup(server, HTTP3_QPACK_DECODER_STREAM_TYPE, QpackDecoderHandler.class, false); + } + + private void testStreamSetup(boolean server, long type, + Class clazz, boolean hasCodec) throws Exception { + setup(server); + EmbeddedChannel channel = newChannel(server); + ByteBuf buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, type); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + assertNull(channel.pipeline().context(Http3UnidirectionalStreamInboundHandler.class)); + assertNotNull(channel.pipeline().context(clazz)); + if (hasCodec) { + assertNotNull(channel.pipeline().context(CodecHandler.class)); + } else { + assertNull(channel.pipeline().context(CodecHandler.class)); + } + assertFalse(channel.finish()); + + channel = new EmbeddedChannel(channel.parent(), DefaultChannelId.newInstance(), + true, false, newUniStreamInboundHandler(server, null)); + + // Try to create the stream a second time, this should fail + buffer = Unpooled.buffer(8); + Http3CodecUtils.writeVariableLengthInteger(buffer, type); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + Http3TestUtils.verifyClose(Http3ErrorCode.H3_STREAM_CREATION_ERROR, (EmbeddedQuicChannel) channel.parent()); + assertFalse(channel.finish()); + } + + private EmbeddedChannel newChannel(boolean server) throws Exception { + return newChannel(server, null); + } + + private EmbeddedChannel newChannel(boolean server, LongFunction unknownStreamHandlerFactory) + throws Exception { + Http3UnidirectionalStreamInboundHandler handler = + newUniStreamInboundHandler(server, unknownStreamHandlerFactory); + return (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.BIDIRECTIONAL, handler).get(); + } + + private Http3UnidirectionalStreamInboundHandler newUniStreamInboundHandler(boolean server, + LongFunction unknownStreamHandlerFactory) { + return server ? + new Http3UnidirectionalStreamInboundServerHandler((v, __, ___) -> new CodecHandler(), + localControlStreamHandler, remoteControlStreamHandler, unknownStreamHandlerFactory, + () -> new QpackEncoderHandler((long) Integer.MAX_VALUE, qpackDecoder), + () -> new QpackDecoderHandler(qpackEncoder)) : + new Http3UnidirectionalStreamInboundClientHandler((v, __, ___) -> new CodecHandler(), + localControlStreamHandler, remoteControlStreamHandler, + unknownStreamHandlerFactory, + pushId -> new Http3PushStreamClientInitializer() { + @Override + protected void initPushStream(QuicStreamChannel ch) { + ch.pipeline().addLast(new CodecHandler()); + } + }, + () -> new QpackEncoderHandler((long) Integer.MAX_VALUE, + qpackDecoder), () -> new QpackDecoderHandler(qpackEncoder)); + } + + private static final class CodecHandler extends ChannelHandlerAdapter { } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/HttpConversionUtilTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/HttpConversionUtilTest.java new file mode 100644 index 0000000..d377abe --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/HttpConversionUtilTest.java @@ -0,0 +1,228 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.handler.codec.http.DefaultHttpHeaders; +import io.netty.handler.codec.http.HttpHeaders; +import io.netty.handler.codec.http.HttpMethod; +import io.netty.handler.codec.http.HttpRequest; +import io.netty.handler.codec.http.HttpVersion; +import io.netty.util.AsciiString; +import org.junit.jupiter.api.Test; + +import static io.netty.handler.codec.http.HttpHeaderNames.CONNECTION; +import static io.netty.handler.codec.http.HttpHeaderNames.COOKIE; +import static io.netty.handler.codec.http.HttpHeaderNames.HOST; +import static io.netty.handler.codec.http.HttpHeaderNames.KEEP_ALIVE; +import static io.netty.handler.codec.http.HttpHeaderNames.PROXY_CONNECTION; +import static io.netty.handler.codec.http.HttpHeaderNames.TE; +import static io.netty.handler.codec.http.HttpHeaderNames.TRANSFER_ENCODING; +import static io.netty.handler.codec.http.HttpHeaderNames.UPGRADE; +import static io.netty.handler.codec.http.HttpHeaderValues.GZIP; +import static io.netty.handler.codec.http.HttpHeaderValues.TRAILERS; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +public class HttpConversionUtilTest { + + @Test + public void connectNoPath() throws Exception { + String authority = "netty.io:80"; + Http3Headers headers = new DefaultHttp3Headers(); + headers.authority(authority); + headers.method(HttpMethod.CONNECT.asciiName()); + HttpRequest request = HttpConversionUtil.toHttpRequest(0, headers, true); + assertNotNull(request); + assertEquals(authority, request.uri()); + assertEquals(authority, request.headers().get(HOST)); + } + + @Test + public void setHttp3AuthorityWithoutUserInfo() { + Http3Headers headers = new DefaultHttp3Headers(); + + HttpConversionUtil.setHttp3Authority("foo", headers); + assertEquals(new AsciiString("foo"), headers.authority()); + } + + @Test + public void setHttp3AuthorityWithUserInfo() { + Http3Headers headers = new DefaultHttp3Headers(); + + HttpConversionUtil.setHttp3Authority("info@foo", headers); + assertEquals(new AsciiString("foo"), headers.authority()); + + HttpConversionUtil.setHttp3Authority("@foo.bar", headers); + assertEquals(new AsciiString("foo.bar"), headers.authority()); + } + + @Test + public void setHttp3AuthorityNullOrEmpty() { + Http3Headers headers = new DefaultHttp3Headers(); + + HttpConversionUtil.setHttp3Authority(null, headers); + assertNull(headers.authority()); + + HttpConversionUtil.setHttp3Authority("", headers); + assertSame(AsciiString.EMPTY_STRING, headers.authority()); + } + + @Test + public void setHttp2AuthorityWithEmptyAuthority() { + assertThrows(IllegalArgumentException.class, + () -> HttpConversionUtil.setHttp3Authority("info@", new DefaultHttp3Headers())); + } + + @Test + public void stripTEHeaders() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(TE, GZIP); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertTrue(out.isEmpty()); + } + + @Test + public void stripTEHeadersExcludingTrailers() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(TE, GZIP); + inHeaders.add(TE, TRAILERS); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertSame(TRAILERS, out.get(TE)); + } + + @Test + public void stripTEHeadersCsvSeparatedExcludingTrailers() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(TE, GZIP + "," + TRAILERS); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertSame(TRAILERS, out.get(TE)); + } + + @Test + public void stripTEHeadersCsvSeparatedAccountsForValueSimilarToTrailers() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(TE, GZIP + "," + TRAILERS + "foo"); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertFalse(out.contains(TE)); + } + + @Test + public void stripTEHeadersAccountsForValueSimilarToTrailers() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(TE, TRAILERS + "foo"); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertFalse(out.contains(TE)); + } + + @Test + public void stripTEHeadersAccountsForOWS() { + HttpHeaders inHeaders = new DefaultHttpHeaders(false); + inHeaders.add(TE, " " + TRAILERS + " "); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertSame(TRAILERS, out.get(TE)); + } + + @Test + public void stripConnectionHeadersAndNominees() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(CONNECTION, "foo"); + inHeaders.add("foo", "bar"); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertTrue(out.isEmpty()); + } + + @Test + public void stripConnectionNomineesWithCsv() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(CONNECTION, "foo, bar"); + inHeaders.add("foo", "baz"); + inHeaders.add("bar", "qux"); + inHeaders.add("hello", "world"); + Http3Headers out = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, out); + assertEquals(1, out.size()); + assertSame("world", out.get("hello")); + } + + @Test + public void addHttp3ToHttpHeadersCombinesCookies() throws Http3Exception { + Http3Headers inHeaders = new DefaultHttp3Headers(); + inHeaders.add("yes", "no"); + inHeaders.add(COOKIE, "foo=bar"); + inHeaders.add(COOKIE, "bax=baz"); + + HttpHeaders outHeaders = new DefaultHttpHeaders(); + + HttpConversionUtil.addHttp3ToHttpHeaders(5, inHeaders, outHeaders, HttpVersion.HTTP_1_1, false, false); + assertEquals("no", outHeaders.get("yes")); + assertEquals("foo=bar; bax=baz", outHeaders.get(COOKIE.toString())); + } + + @Test + public void connectionSpecificHeadersShouldBeRemoved() { + HttpHeaders inHeaders = new DefaultHttpHeaders(); + inHeaders.add(CONNECTION, "keep-alive"); + inHeaders.add(HOST, "example.com"); + @SuppressWarnings("deprecation") + AsciiString keepAlive = KEEP_ALIVE; + inHeaders.add(keepAlive, "timeout=5, max=1000"); + @SuppressWarnings("deprecation") + AsciiString proxyConnection = PROXY_CONNECTION; + inHeaders.add(proxyConnection, "timeout=5, max=1000"); + inHeaders.add(TRANSFER_ENCODING, "chunked"); + inHeaders.add(UPGRADE, "h2c"); + + Http3Headers outHeaders = new DefaultHttp3Headers(); + HttpConversionUtil.toHttp3Headers(inHeaders, outHeaders); + + assertFalse(outHeaders.contains(CONNECTION)); + assertFalse(outHeaders.contains(HOST)); + assertFalse(outHeaders.contains(keepAlive)); + assertFalse(outHeaders.contains(proxyConnection)); + assertFalse(outHeaders.contains(TRANSFER_ENCODING)); + assertFalse(outHeaders.contains(UPGRADE)); + } + + @Test + public void http3ToHttpHeaderTest() throws Exception { + Http3Headers http3Headers = new DefaultHttp3Headers(); + http3Headers.status("200"); + http3Headers.path("/meow"); // HTTP/2 Header response should not contain 'path' in response. + http3Headers.set("cat", "meow"); + + HttpHeaders httpHeaders = new DefaultHttpHeaders(); + HttpConversionUtil.addHttp3ToHttpHeaders(3, http3Headers, httpHeaders, HttpVersion.HTTP_1_1, false, true); + assertFalse(httpHeaders.contains(HttpConversionUtil.ExtensionHeaderNames.PATH.text())); + assertEquals("meow", httpHeaders.get("cat")); + + httpHeaders.clear(); + HttpConversionUtil.addHttp3ToHttpHeaders(3, http3Headers, httpHeaders, HttpVersion.HTTP_1_1, false, false); + assertTrue(httpHeaders.contains(HttpConversionUtil.ExtensionHeaderNames.PATH.text())); + assertEquals("meow", httpHeaders.get("cat")); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderDynamicTableTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderDynamicTableTest.java new file mode 100644 index 0000000..ebd0473 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderDynamicTableTest.java @@ -0,0 +1,129 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class QpackDecoderDynamicTableTest { + + private final QpackHeaderField fooBar = new QpackHeaderField("foo", "bar"); + + @Test + public void length() throws Exception { + QpackDecoderDynamicTable table = newTable(100); + assertEquals(0, table.length()); + table.add(fooBar); + assertEquals(1, table.length()); + table.clear(); + assertEquals(0, table.length()); + } + + @Test + public void size() throws Exception { + QpackDecoderDynamicTable table = newTable(100); + assertEquals(0, table.size()); + QpackHeaderField entry = new QpackHeaderField("foo", "bar"); + table.add(entry); + assertEquals(entry.size(), table.size()); + table.clear(); + assertEquals(0, table.size()); + } + + @Test + public void getEntry() throws Exception { + QpackDecoderDynamicTable table = newTable(100); + QpackHeaderField entry = new QpackHeaderField("foo", "bar"); + table.add(entry); + assertEquals(entry, table.getEntry(0)); + table.clear(); + + assertThrows(QpackException.class, () -> table.getEntry(0)); + } + + @Test + public void getEntryExceptionally() throws Exception { + QpackDecoderDynamicTable table = newTable(1); + + assertThrows(QpackException.class, () -> table.getEntry(0)); + } + + @Test + public void setCapacity() throws Exception { + QpackHeaderField entry1 = new QpackHeaderField("foo", "bar"); + QpackHeaderField entry2 = new QpackHeaderField("hello", "world"); + final long size1 = entry1.size(); + final long size2 = entry2.size(); + QpackDecoderDynamicTable table = newTable(size1 + size2); + table.add(entry1); + table.add(entry2); + assertEquals(2, table.length()); + assertEquals(size1 + size2, table.size()); + assertEquals(entry1, table.getEntry(0)); + assertEquals(entry2, table.getEntry(1)); + + table.setCapacity((size1 + size2) * 2); //larger capacity + assertEquals(2, table.length()); + assertEquals(size1 + size2, table.size()); + + table.setCapacity(size2); //smaller capacity + //entry1 will be removed + assertEquals(1, table.length()); + assertEquals(size2, table.size()); + assertEquals(entry2, table.getEntry(0)); + table.setCapacity(0); //clear all + assertEquals(0, table.length()); + assertEquals(0, table.size()); + } + + @Test + public void add() throws Exception { + QpackDecoderDynamicTable table = newTable(100); + assertEquals(0, table.size()); + QpackHeaderField entry1 = new QpackHeaderField("foo", "bar"); //size:3+3+32=38 + QpackHeaderField entry2 = new QpackHeaderField("hello", "world"); + table.add(entry1); //success + assertEquals(entry1.size(), table.size()); + assertEquals(entry1, table.getEntry(0)); + table.setCapacity(32); //entry1 is removed from table + assertEquals(0, table.size()); + assertEquals(0, table.length()); + + table.setCapacity(64); + table.add(entry1); //success + assertEquals(entry1.size(), table.size()); + assertEquals(1, table.length()); + assertEquals(entry1, table.getEntry(0)); + table.add(entry2); //entry2 is added, but entry1 is removed from table + assertEquals(entry2.size(), table.size()); + assertEquals(1, table.length()); + assertEquals(entry2, table.getEntry(1)); + + table.setCapacity(128); + table.add(entry1); //success + assertEquals(entry2, table.getEntry(0)); + } + + private static QpackDecoderDynamicTable newTable(long capacity) throws QpackException { + QpackDecoderDynamicTable table = new QpackDecoderDynamicTable(); + table.setCapacity(capacity); + return table; + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderHandlerTest.java new file mode 100644 index 0000000..720327a --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderHandlerTest.java @@ -0,0 +1,359 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.handler.codec.quic.QuicStreamType; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import java.util.function.Consumer; + +import static io.netty.handler.codec.http3.Http3.setQpackAttributes; +import static io.netty.handler.codec.http3.Http3ErrorCode.QPACK_DECODER_STREAM_ERROR; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; +import static io.netty.handler.codec.http3.QpackUtil.encodePrefixedInteger; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.instanceOf; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assertions.assertFalse; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class QpackDecoderHandlerTest { + private static final QpackHeaderField fooBar = new QpackHeaderField("foo", "bar"); + private final QpackEncoderDynamicTable dynamicTable = new QpackEncoderDynamicTable(); + private EmbeddedQuicChannel parent; + private QpackEncoder encoder; + private EmbeddedQuicStreamChannel decoderStream; + private EmbeddedQuicStreamChannel encoderStream; + private int maxEntries; + private QpackAttributes attributes; + + @AfterEach + public void tearDown() { + assertFalse(encoderStream.finish()); + assertFalse(decoderStream.finish()); + } + + @Test + public void sectionAckNoIncrement() throws Exception { + setup(128L); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + + Http3Exception e = assertThrows(Http3Exception.class, () -> sendAckForStreamId(decoderStream.streamId())); + assertThat(e.getCause(), instanceOf(QpackException.class)); + + Http3TestUtils.verifyClose(QPACK_DECODER_STREAM_ERROR, parent); + finishStreams(); + } + + @Test + public void sectionAck() throws Exception { + setup(128L); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(1); + sendInsertCountIncrement(1); + verifyKnownReceivedCount(1); + + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendAckForStreamId(decoderStream.streamId()); + + finishStreams(); + + verifyRequiredInsertCount(1); + verifyKnownReceivedCount(1); + } + + @Test + public void sectionAckUnknownStream() throws Exception { + setup(128); + + Http3Exception e = assertThrows(Http3Exception.class, () -> sendAckForStreamId(1)); + assertThat(e.getCause(), instanceOf(QpackException.class)); + + Http3TestUtils.verifyClose(QPACK_DECODER_STREAM_ERROR, parent); + finishStreams(); + } + + @Test + public void sectionAckAlreadyAcked() throws Exception { + setup(128); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendInsertCountIncrement(1); + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendAckForStreamId(decoderStream.streamId()); + + Http3Exception e = assertThrows(Http3Exception.class, () -> sendAckForStreamId(decoderStream.streamId())); + assertThat(e.getCause(), instanceOf(QpackException.class)); + + Http3TestUtils.verifyClose(QPACK_DECODER_STREAM_ERROR, parent); + finishStreams(); + + verifyRequiredInsertCount(1); + verifyKnownReceivedCount(1); + } + + @Test + public void sectionAckMultiPending() throws Exception { + setup(128L); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendInsertCountIncrement(1); + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + + sendAckForStreamId(decoderStream.streamId()); + sendAckForStreamId(decoderStream.streamId()); + + finishStreams(); + + verifyRequiredInsertCount(1); + verifyKnownReceivedCount(1); + } + + @Test + public void sectionAckMultiPostAck() throws Exception { + setup(128L); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendInsertCountIncrement(1); + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendAckForStreamId(decoderStream.streamId()); + + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendAckForStreamId(decoderStream.streamId()); + + finishStreams(); + + verifyRequiredInsertCount(1); + verifyKnownReceivedCount(1); + } + + @Test + public void sectionAckCancelledStream() throws Exception { + setup(128L); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendInsertCountIncrement(1); + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + + sendStreamCancellation(decoderStream.streamId()); + + Http3Exception e = assertThrows(Http3Exception.class, () -> sendAckForStreamId(decoderStream.streamId())); + assertThat(e.getCause(), instanceOf(QpackException.class)); + + Http3TestUtils.verifyClose(QPACK_DECODER_STREAM_ERROR, parent); + finishStreams(); + } + + @Test + public void splitBufferForSectionAck() throws Exception { + setup(128); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(1); + sendInsertCountIncrement(1); + verifyKnownReceivedCount(1); + + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + final ByteBuf buf = encodeSectionAck(decoderStream.streamId()); + try { + while (buf.isReadable()) { + assertFalse(decoderStream.writeInbound(buf.readBytes(1))); + } + } finally { + buf.release(); + } + finishStreams(); + } + + @Test + public void splitBufferForInsertCountIncrement() throws Exception { + setup(128); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(1); + final ByteBuf buf = encodeInsertCountIncrement(1); + try { + while (buf.isReadable()) { + assertFalse(decoderStream.writeInbound(buf.readBytes(1))); + } + } finally { + buf.release(); + } + verifyKnownReceivedCount(1); + finishStreams(); + } + + @Test + public void splitBufferForStreamCancellation() throws Exception { + setup(128); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(1); + final ByteBuf buf = encodeStreamCancellation(decoderStream.streamId()); + try { + while (buf.isReadable()) { + assertFalse(decoderStream.writeInbound(buf.readBytes(1))); + } + } finally { + buf.release(); + } + finishStreams(); + } + + @Test + public void streamCancel() throws Exception { + setup(128); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(1); + sendInsertCountIncrement(1); + verifyKnownReceivedCount(1); + + // Refer now to dynamic table + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + sendStreamCancellation(decoderStream.streamId()); + verifyRequiredInsertCount(1); + verifyKnownReceivedCount(1); + finishStreams(); + } + + @Test + public void streamCancelUnknownStream() throws Exception { + setup(128); + sendStreamCancellation(decoderStream.streamId()); + verifyRequiredInsertCount(0); + verifyKnownReceivedCount(0); + finishStreams(); + } + + @Test + public void streamCancelDynamicTableWithMaxCapacity0() throws Exception { + setup(0); + encodeHeaders(headers -> headers.add(fooBar.name, fooBar.value)); + verifyRequiredInsertCount(0); + verifyKnownReceivedCount(0); + // Send a stream cancellation for a dynamic table of capacity 0. + // See https://www.rfc-editor.org/rfc/rfc9204.html#section-2.2.2.2 + sendStreamCancellation(decoderStream.streamId()); + finishStreams(false); + } + + @Test + public void invalidIncrement() throws Exception { + setup(128); + Http3Exception e = assertThrows(Http3Exception.class, () -> sendInsertCountIncrement(2)); + assertThat(e.getCause(), instanceOf(QpackException.class)); + + Http3TestUtils.verifyClose(QPACK_DECODER_STREAM_ERROR, parent); + finishStreams(); + } + + private void sendAckForStreamId(long streamId) throws Http3Exception { + assertFalse(decoderStream.writeInbound(encodeSectionAck(streamId))); + } + + private ByteBuf encodeSectionAck(long streamId) { + final ByteBuf ack = decoderStream.alloc().buffer(); + // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#name-section-acknowledgment + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 1 | Stream ID (7+) | + // +---+---------------------------+ + encodePrefixedInteger(ack, (byte) 0b1000_0000, 7, streamId); + return ack; + } + + private void sendInsertCountIncrement(long increment) throws Http3Exception { + assertFalse(decoderStream.writeInbound(encodeInsertCountIncrement(increment))); + } + + private ByteBuf encodeInsertCountIncrement(long increment) { + final ByteBuf incr = decoderStream.alloc().buffer(); + // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#name-insert-count-increment + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 0 | Increment (6+) | + // +---+---+-----------------------+ + encodePrefixedInteger(incr, (byte) 0b0000_0000, 6, increment); + return incr; + } + + private void sendStreamCancellation(long streamId) { + assertFalse(decoderStream.writeInbound(encodeStreamCancellation(streamId))); + } + + private ByteBuf encodeStreamCancellation(long streamId) { + final ByteBuf incr = decoderStream.alloc().buffer(); + // https://quicwg.org/base-drafts/draft-ietf-quic-qpack.html#name-stream-cancellation + // 0 1 2 3 4 5 6 7 + // +---+---+---+---+---+---+---+---+ + // | 0 | 1 | Stream ID (6+) | + // +---+---+-----------------------+ + encodePrefixedInteger(incr, (byte) 0b0100_0000, 6, streamId); + return incr; + } + + private void encodeHeaders(Consumer headersUpdater) { + Http3Headers headers = new DefaultHttp3Headers(); + headersUpdater.accept(headers); + final ByteBuf buf = decoderStream.alloc().buffer(); + try { + encoder.encodeHeaders(attributes, buf, decoderStream.alloc(), decoderStream.streamId(), headers); + } finally { + buf.release(); + } + } + + private void setup(long maxTableCapacity) throws Exception { + maxEntries = Math.toIntExact(QpackUtil.maxEntries(maxTableCapacity)); + parent = new EmbeddedQuicChannel(true); + attributes = new QpackAttributes(parent, false); + setQpackAttributes(parent, attributes); + Http3SettingsFrame settings = new DefaultHttp3SettingsFrame(); + settings.put(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, maxTableCapacity); + QpackDecoder decoder = new QpackDecoder(maxTableCapacity, 0); + encoderStream = (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new QpackEncoderHandler(maxTableCapacity, decoder)).get(); + attributes.encoderStream(encoderStream); + encoder = new QpackEncoder(dynamicTable); + encoder.configureDynamicTable(attributes, maxTableCapacity, 0); + decoderStream = (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new QpackDecoderHandler(encoder)).get(); + attributes.decoderStream(decoderStream); + } + + private void finishStreams() { + finishStreams(true); + } + + private void finishStreams(boolean encoderPendingMessage) { + assertThat("Unexpected decoder stream message", decoderStream.finishAndReleaseAll(), is(false)); + assertThat("Unexpected encoder stream message", encoderStream.finishAndReleaseAll(), is(encoderPendingMessage)); + assertThat("Unexpected parent stream message", parent.finishAndReleaseAll(), is(false)); + } + + private void verifyRequiredInsertCount(int insertCount) { + assertThat("Unexpected dynamic table insert count.", + dynamicTable.encodedRequiredInsertCount(dynamicTable.insertCount()), + is(insertCount == 0 ? 0 : insertCount % maxEntries + 1)); + } + + private void verifyKnownReceivedCount(int receivedCount) { + assertThat("Unexpected dynamic table known received count.", dynamicTable.encodedKnownReceivedCount(), + is(receivedCount == 0 ? 0 : receivedCount % maxEntries + 1)); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderTest.java new file mode 100644 index 0000000..19a1d86 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackDecoderTest.java @@ -0,0 +1,169 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.MethodSource; + +import java.util.Collection; + +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; +import static io.netty.handler.codec.http3.QpackDecoderStateSyncStrategy.ackEachInsert; +import static io.netty.handler.codec.http3.QpackUtil.MAX_UNSIGNED_INT; +import static java.lang.Math.toIntExact; +import static java.util.Arrays.asList; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.is; +import static org.junit.jupiter.api.Assumptions.assumeTrue; + +public class QpackDecoderTest { + private static final String FOO = "foo"; + private static final String BAR = "bar"; + private QpackDecoderDynamicTable table; + private EmbeddedQuicStreamChannel decoderStream; + + private QpackDecoder decoder; + private int inserted; + private int maxEntries; + private QpackAttributes attributes; + + public static Collection data() { + int capacity = 128; // maxEntries = 128/32 = 4, maxIndex = 2*4 = 8 + return asList( + new Object[]{capacity, 0}, + new Object[]{capacity, 1}, + new Object[]{capacity, 5}, + new Object[]{capacity, 8}, + new Object[]{capacity, 16}, + new Object[]{capacity, 25}, + new Object[]{capacity, 64}, + new Object[]{capacity, 89} + ); + } + + @ParameterizedTest(name = "capacity: {0}, inserts: {1}") + @MethodSource("data") + public void requiredInsertCountAsInserted(int capacity, int insertionCount) throws Exception { + setup(capacity); + + insertLiterals(insertionCount); + encodeDecodeVerifyRequiredInsertCount(inserted); + } + + @ParameterizedTest(name = "capacity: {0}, inserts: {1}") + @MethodSource("data") + public void requiredInsertCountLessThanInserted(int capacity, int insertionCount) throws Exception { + setup(capacity); + assumeTrue(insertionCount > 0); + + insertLiterals(insertionCount); + encodeDecodeVerifyRequiredInsertCount(insertionCount - 1); + } + + @ParameterizedTest(name = "capacity: {0}, inserts: {1}") + @MethodSource("data") + public void requiredInsertCountBehindMax(int capacity, int insertionCount) throws Exception { + setup(capacity); + assumeTrue(insertionCount > maxEntries); + + insertLiterals(insertionCount); + encodeDecodeVerifyRequiredInsertCount(insertionCount - maxEntries + 1); + } + + @ParameterizedTest(name = "capacity: {0}, inserts: {1}") + @MethodSource("data") + public void getWithRelativeIndex(int capacity, int insertionCount) throws Exception { + setup(capacity); + assumeTrue(insertionCount > 3); + + insertLiterals(insertionCount); + int requiredInsertCount = encodeDecodeRequiredInsertCount(insertionCount); + int base = encodeDecodeDeltaBase(requiredInsertCount, false, 1); + int relativeIndex = 1; + final QpackHeaderField entry = table.getEntryRelativeEncodedField(base - relativeIndex); + verifyField(entry, insertionCount - 2); + } + + @ParameterizedTest(name = "capacity: {0}, inserts: {1}") + @MethodSource("data") + public void getWithPostBaseRelativeIndex(int capacity, int insertionCount) throws Exception { + setup(capacity); + assumeTrue(insertionCount > 2); + + insertLiterals(insertionCount); + int requiredInsertCount = encodeDecodeRequiredInsertCount(insertionCount - 1); + int base = encodeDecodeDeltaBase(requiredInsertCount, true, 0); + int relativeIndex = 1; + final QpackHeaderField entry = table.getEntryRelativeEncodedField(base - relativeIndex); + verifyField(entry, insertionCount - 1); + } + + private void setup(long capacity) throws QpackException { + long maxTableCapacity = MAX_UNSIGNED_INT; + inserted = 0; + this.maxEntries = toIntExact(QpackUtil.maxEntries(maxTableCapacity)); + final DefaultHttp3SettingsFrame settings = new DefaultHttp3SettingsFrame(); + settings.put(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, maxTableCapacity); + table = new QpackDecoderDynamicTable(); + EmbeddedQuicChannel parent = new EmbeddedQuicChannel(true); + attributes = new QpackAttributes(parent, false); + decoderStream = new EmbeddedQuicStreamChannel(); + attributes.decoderStream(decoderStream); + decoder = new QpackDecoder(maxTableCapacity, 0, table, ackEachInsert()); + decoder.setDynamicTableCapacity(capacity); + } + + private void encodeDecodeVerifyRequiredInsertCount(int count) throws QpackException { + final int ric = encodeDecodeRequiredInsertCount(count); + assertThat(ric, is(count)); + } + + private int encodeDecodeDeltaBase(int requiredInsertCount, boolean postBase, int deltaBase) throws QpackException { + final ByteBuf buf = Unpooled.buffer(); + QpackUtil.encodePrefixedInteger(buf, (byte) (postBase ? 0b0 : 0b1000_0000), 8, deltaBase); + try { + return decoder.decodeBase(buf, requiredInsertCount); + } finally { + buf.release(); + } + } + + private int encodeDecodeRequiredInsertCount(int count) throws QpackException { + final ByteBuf buf = Unpooled.buffer(); + QpackUtil.encodePrefixedInteger(buf, (byte) 0b0, 8, count == 0 ? 0 : count % (2L * maxEntries) + 1); + try { + return decoder.decodeRequiredInsertCount(attributes, buf); + } finally { + buf.release(); + } + } + + private void insertLiterals(int count) throws QpackException { + for (int i = 1; i <= count; i++) { + inserted++; + decoder.insertLiteral(decoderStream, FOO + i, BAR + i); + } + assertThat(decoderStream.finishAndReleaseAll(), is(count > 0)); + } + + private void verifyField(QpackHeaderField field, int fieldIndexWhenInserted) { + assertThat(field.name, is(FOO + fieldIndexWhenInserted)); + assertThat(field.value, is(BAR + fieldIndexWhenInserted)); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDecoderTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDecoderTest.java new file mode 100644 index 0000000..c3d052f --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDecoderTest.java @@ -0,0 +1,541 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandler; +import io.netty.channel.ChannelOutboundHandlerAdapter; +import io.netty.channel.ChannelPromise; +import io.netty.util.AsciiString; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.Test; + +import java.util.concurrent.BlockingQueue; +import java.util.concurrent.Callable; +import java.util.concurrent.LinkedBlockingQueue; + +import static io.netty.buffer.UnpooledByteBufAllocator.DEFAULT; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS; +import static io.netty.handler.codec.http3.Http3SettingsFrame.HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY; +import static io.netty.handler.codec.quic.QuicStreamType.UNIDIRECTIONAL; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.notNullValue; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +public class QpackEncoderDecoderTest { + + private QpackEncoder encoder; + private QpackDecoder decoder; + private boolean stateSyncStrategyAckNextInsert = true; + private int headersAdded; + private int maxEntries; + private QpackEncoderDynamicTable encDynamicTable; + private QpackDecoderDynamicTable decDynamicTable; + private BlockingQueue> suspendedEncoderInstructions; + + private final QpackDecoderStateSyncStrategy syncStrategy = mock(QpackDecoderStateSyncStrategy.class); + private final Http3Headers encHeaders = new DefaultHttp3Headers(); + private final Http3Headers decHeaders = new DefaultHttp3Headers(); + private final ByteBuf out = Unpooled.buffer(); + private final EmbeddedQuicChannel parent = new EmbeddedQuicChannel(true); + private QpackAttributes attributes; + + @AfterEach + public void tearDown() { + out.release(); + } + + @Test + public void dynamicIndexed() throws Exception { + setup(128, 0); + headersAdded++; + testDynamicTableIndexed("foo", "bar"); + } + + @Test + public void dynamicIndexedWithBlockedStreams() throws Exception { + setup(128, 100); + headersAdded++; + testDynamicTableIndexedWithBlockedStreams("foo", "bar"); + } + + @Test + public void dynamicIndexedWithStaticTableNameRef() throws Exception { + setup(128, 0); + headersAdded++; + testDynamicTableIndexed(":authority", "netty.quic"); + } + + @Test + public void dynamicIndexedWithStaticTableNameRefWithBlockedStreams() throws Exception { + setup(128, 100); + headersAdded++; + testDynamicTableIndexedWithBlockedStreams(":authority", "netty.quic"); + } + + @Test + public void dynamicIndexedWithNameRef() throws Exception { + setup(128, 0); + + headersAdded++; + testDynamicTableIndexed("foo", "bar"); + + resetState(); + + headersAdded++; + testDynamicTableIndexed("foo", "bar2"); + + resetState(); + + testDynamicTableIndexed("foo", "bar"); + } + + @Test + public void dynamicIndexedWithNameRefWithBlockedStream() throws Exception { + setup(128, 100); + + headersAdded++; + testDynamicTableIndexedWithBlockedStreams("foo", "bar"); + + resetState(); + + headersAdded++; + testDynamicTableIndexedWithBlockedStreams("foo", "bar2"); + } + + @Test + public void indexWrapAround() throws Exception { + setup(128, 0); // maxEntries => 128/32 = 4, full range = 2*4 = 8 + + addEncodeHeader("foo", "bar", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(3); + verifyKnownReceivedCount(3); + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(3)); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("foo", "bar", 3); + + resetState(); + addEncodeHeader("boo", "far", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(6); + verifyKnownReceivedCount(6); + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(6)); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("boo", "far", 3); + + resetState(); + addEncodeHeader("zoo", "gar", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(9); + verifyKnownReceivedCount(9); + + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(9)); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("zoo", "gar", 3); + + // Now reuse the headers for encode to use dynamic table. + resetState(); + assertThat("Header not found in encoder dynamic table.", + encDynamicTable.getEntryIndex("zoo1", "gar"), greaterThanOrEqualTo(0)); + assertThat("Header not found in encoder dynamic table.", + encDynamicTable.getEntryIndex("zoo2", "gar"), greaterThanOrEqualTo(0)); + encHeaders.add("zoo1", "gar"); + encHeaders.add("zoo2", "gar"); + encode(out, encHeaders); + verifyRequiredInsertCount(9); // No new inserts + verifyKnownReceivedCount(9); // No new inserts + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(9)); + assertThat(decHeaders.size(), is(2)); + verifyDecodedHeader("zoo1", "gar"); + verifyDecodedHeader("zoo2", "gar"); + } + + @Test + public void indexWrapAroundWithBlockedStreams() throws Exception { + setup(128, 100); // maxEntries => 128/32 = 4, full range = 2*4 = 8 + + addEncodeHeader("foo", "bar", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(3); + verifyKnownReceivedCount(0); + assertThat(decDynamicTable.insertCount(), is(0)); + + drainNextSuspendedEncoderInstruction(); + decode(out, decHeaders); + drainAllSuspendedEncoderInstructions(); + assertThat(decDynamicTable.insertCount(), is(3)); + verifyKnownReceivedCount(3); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("foo", "bar", 3); + + resetState(); + addEncodeHeader("boo", "far", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(6); + verifyKnownReceivedCount(0); // All acknowledged entries were removed. + + decode(out, decHeaders); + drainAllSuspendedEncoderInstructions(); + assertThat(decDynamicTable.insertCount(), is(6)); + verifyKnownReceivedCount(6); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("boo", "far", 3); + + resetState(); + addEncodeHeader("zoo", "gar", 3); + encode(out, encHeaders); + verifyRequiredInsertCount(9); + verifyKnownReceivedCount(0); // All acknowledged entries were removed. + + decode(out, decHeaders); + drainAllSuspendedEncoderInstructions(); + verifyKnownReceivedCount(9); + assertThat(decDynamicTable.insertCount(), is(9)); + assertThat(decHeaders.size(), is(3)); + verifyDecodedHeaders("zoo", "gar", 3); + + // Now reuse the headers for encode to use dynamic table. + resetState(); + assertThat("Header not found in encoder dynamic table.", + encDynamicTable.getEntryIndex("zoo1", "gar"), greaterThanOrEqualTo(0)); + assertThat("Header not found in encoder dynamic table.", + encDynamicTable.getEntryIndex("zoo2", "gar"), greaterThanOrEqualTo(0)); + encHeaders.add("zoo1", "gar"); + encHeaders.add("zoo2", "gar"); + encode(out, encHeaders); + verifyRequiredInsertCount(9); // No new inserts + verifyKnownReceivedCount(9); // No new inserts + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(9)); + assertThat(decHeaders.size(), is(2)); + verifyDecodedHeader("zoo1", "gar"); + verifyDecodedHeader("zoo2", "gar"); + } + + @Test + public void duplicate() throws Exception { + setup(256, 0, 50); + // Do not ack any add so entries are not evicted from the table just marked for eviction hence leveraging + // duplicate path + stateSyncStrategyAckNextInsert = false; + + addEncodeHeader("foo", "bar", 5); + QpackHeaderField oldEntry = new QpackHeaderField("foo0", "bar"); + assertThat(encHeaders.get(oldEntry.name, oldEntry.value), is(notNullValue())); + + ByteBuf spareEncode = Unpooled.buffer(); + try { + encode(spareEncode, encHeaders); + } finally { + spareEncode.release(); + } + verifyRequiredInsertCount(5); + verifyKnownReceivedCount(0); + + final int idx = encDynamicTable.getEntryIndex(oldEntry.name, oldEntry.value); + assertThat(idx, greaterThanOrEqualTo(0)); + assertThat(encDynamicTable.requiresDuplication(idx, oldEntry.size()), is(true)); + + resetState(); + stateSyncStrategyAckNextInsert = true; + + encHeaders.add(oldEntry.name, oldEntry.value); + encode(out, encHeaders); // duplicate but not add to the header block + verifyRequiredInsertCount(6); + decode(out, decHeaders); + verifyKnownReceivedCount(6); + + assertThat(decDynamicTable.insertCount(), is(6)); + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(oldEntry.name, oldEntry.value); + + // Now encode again to refer to the duplicated entry + resetState(); + + encHeaders.add(oldEntry.name, oldEntry.value); + encode(out, encHeaders); + verifyRequiredInsertCount(6); + decode(out, decHeaders); + verifyKnownReceivedCount(6); + + assertThat(decDynamicTable.insertCount(), is(6)); + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(oldEntry.name, oldEntry.value); + } + + @Test + public void duplicateWithBlockedStreams() throws Exception { + setup(256, 100, 50); + // Do not ack any add so entries are not evicted from the table just marked for eviction hence leveraging + // duplicate path + stateSyncStrategyAckNextInsert = false; + + addEncodeHeader("foo", "bar", 5); + QpackHeaderField oldEntry = new QpackHeaderField("foo0", "bar"); + assertThat(encHeaders.get(oldEntry.name, oldEntry.value), is(notNullValue())); + + ByteBuf spareEncode = Unpooled.buffer(); + try { + encode(spareEncode, encHeaders); + } finally { + spareEncode.release(); + } + verifyRequiredInsertCount(5); + verifyKnownReceivedCount(0); + + final int idx = encDynamicTable.getEntryIndex(oldEntry.name, oldEntry.value); + assertThat(idx, greaterThanOrEqualTo(0)); + assertThat(encDynamicTable.requiresDuplication(idx, oldEntry.size()), is(true)); + + resetState(); + stateSyncStrategyAckNextInsert = true; + + encHeaders.add(oldEntry.name, oldEntry.value); + encode(out, encHeaders); + verifyRequiredInsertCount(6); + + drainNextSuspendedEncoderInstruction(); + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(0)); + verifyKnownReceivedCount(0); + + drainAllSuspendedEncoderInstructions(); + assertThat(decDynamicTable.insertCount(), is(6)); + verifyKnownReceivedCount(6); + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(oldEntry.name, oldEntry.value); + } + + private void testDynamicTableIndexed(CharSequence name, CharSequence value) throws Exception { + encHeaders.add(name, value); + encode(out, encHeaders); + verifyRequiredInsertCount(headersAdded); + verifyKnownReceivedCount(headersAdded); + + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(headersAdded)); + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(name, value); + + // Encode again to refer to dynamic table + out.clear(); + decHeaders.clear(); + + encode(out, encHeaders); + verifyRequiredInsertCount(headersAdded); + verifyKnownReceivedCount(headersAdded); + + decode(out, decHeaders); + assertThat(decDynamicTable.insertCount(), is(headersAdded)); + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(name, value); + } + + private void testDynamicTableIndexedWithBlockedStreams(CharSequence name, CharSequence value) throws Exception { + encHeaders.add(name, value); + encode(out, encHeaders); + verifyRequiredInsertCount(headersAdded); + + verifyKnownReceivedCount(headersAdded - 1); + assertThat(decDynamicTable.insertCount(), is(headersAdded - 1)); + + drainNextSuspendedEncoderInstruction(); + + decode(out, decHeaders); + drainAllSuspendedEncoderInstructions(); + assertThat(decDynamicTable.insertCount(), is(headersAdded)); + verifyKnownReceivedCount(headersAdded); + + assertThat(decHeaders.size(), is(1)); + verifyDecodedHeader(name, value); + } + + @Test + public void staticTableOnly() throws Exception { + setup(0, 0); + + encHeaders.add(":authority", "netty.quic"); // name only + encHeaders.add(":path", "/"); // name & value + encHeaders.add(":method", "GET"); // name & value with few options per name + encHeaders.add(":status", "417"); // name & multiple values but value is missing + encHeaders.add("x-qpack-draft", "19"); + + encode(out, encHeaders); + decode(out, decHeaders); + + assertThat(decHeaders.size(), is(5)); + verifyDecodedHeader(":authority", "netty.quic"); + verifyDecodedHeader(":path", "/"); + verifyDecodedHeader(":method", "GET"); + verifyDecodedHeader(":status", "417"); + verifyDecodedHeader("x-qpack-draft", "19"); + } + + @Test + public void decoderThrowsOnInvalidInput() throws Exception { + setup(0, 0); + + encHeaders.add(":authority", "netty.quic"); // name only + encode(out, encHeaders); + // Add empty byte to the end of the buffer. This should trigger an exception in the decoder. + out.writeByte(0); + + assertThrows(QpackException.class, () -> decode(out, decHeaders)); + } + + private void resetState() { + out.clear(); + encHeaders.clear(); + decHeaders.clear(); + } + + private void encode(ByteBuf buf, Http3Headers headers) { + encoder.encodeHeaders(attributes, buf, DEFAULT, 1, headers); + assertThat("Parent channel closed.", parent.isActive(), is(true)); + } + + private void decode(ByteBuf buf, Http3Headers headers) throws QpackException { + decoder.decode(attributes, 1, buf, buf.readableBytes(), + new Http3HeadersSink(headers, 1024, false, false), () -> { + try { + decoder.decode(attributes, 1, buf, buf.readableBytes(), + new Http3HeadersSink(headers, 1024, false, false), + () -> { + throw new IllegalStateException("Decode resumption suspended."); + }); + } catch (QpackException e) { + throw new AssertionError("Decode failed.", e); + } + }); + assertThat("Parent channel closed.", parent.isActive(), is(true)); + } + + private void verifyDecodedHeader(CharSequence name, CharSequence value) { + assertThat(decHeaders.get(name), is(new AsciiString(value))); + } + + private void drainAllSuspendedEncoderInstructions() throws Exception { + Callable next; + for (next = suspendedEncoderInstructions.poll(); next != null; next = suspendedEncoderInstructions.poll()) { + next.call(); + } + } + + private void drainNextSuspendedEncoderInstruction() throws Exception { + Callable next = suspendedEncoderInstructions.poll(); + assertThat(next, is(notNullValue())); // dynamic table size instruction + next.call(); + } + + private void setup(long dynamicTableSize, int maxBlockedStreams) throws Exception { + setup(dynamicTableSize, maxBlockedStreams, 10); + } + + private void setup(long maxTableCapacity, int maxBlockedStreams, int expectedTableFreePercentage) throws Exception { + attributes = new QpackAttributes(parent, false); + Http3.setQpackAttributes(parent, attributes); + maxEntries = Math.toIntExact(QpackUtil.maxEntries(maxTableCapacity)); + DefaultHttp3SettingsFrame localSettings = new DefaultHttp3SettingsFrame(); + localSettings.put(HTTP3_SETTINGS_QPACK_MAX_TABLE_CAPACITY, maxTableCapacity); + localSettings.put(HTTP3_SETTINGS_QPACK_BLOCKED_STREAMS, (long) maxBlockedStreams); + if (maxBlockedStreams > 0) { + // section acknowledgment will implicitly ack insert count. + stateSyncStrategyAckNextInsert = false; + } + when(syncStrategy.entryAdded(anyInt())).thenAnswer(__ -> stateSyncStrategyAckNextInsert); + encDynamicTable = new QpackEncoderDynamicTable(16, expectedTableFreePercentage); + decDynamicTable = new QpackDecoderDynamicTable(); + decoder = new QpackDecoder(maxTableCapacity, maxBlockedStreams, decDynamicTable, syncStrategy); + encoder = new QpackEncoder(encDynamicTable); + if (maxBlockedStreams > 0) { + suspendedEncoderInstructions = new LinkedBlockingQueue<>(); + } + EmbeddedQuicStreamChannel encoderStream = (EmbeddedQuicStreamChannel) parent.createStream(UNIDIRECTIONAL, + new ForwardWriteToReadOnOtherHandler(new QpackEncoderHandler(maxTableCapacity, decoder), + suspendedEncoderInstructions)).get(); + EmbeddedQuicStreamChannel decoderStream = (EmbeddedQuicStreamChannel) parent.createStream(UNIDIRECTIONAL, + new ForwardWriteToReadOnOtherHandler(new QpackDecoderHandler(encoder))).get(); + attributes.encoderStream(encoderStream); + attributes.decoderStream(decoderStream); + encoder.configureDynamicTable(attributes, maxTableCapacity, maxBlockedStreams); + } + + private void addEncodeHeader(String namePrefix, String value, int times) { + for (int i = 0; i < times; i++) { + encHeaders.add(namePrefix + i, value); + } + } + + private void verifyDecodedHeaders(String namePrefix, String value, int times) { + for (int i = 0; i < times; i++) { + verifyDecodedHeader(namePrefix + i, value); + } + } + + private void verifyRequiredInsertCount(int insertCount) { + assertThat("Unexpected dynamic table insert count.", + encDynamicTable.encodedRequiredInsertCount(encDynamicTable.insertCount()), + is(insertCount == 0 ? 0 : insertCount % (2 * maxEntries) + 1)); + } + + private void verifyKnownReceivedCount(int receivedCount) { + assertThat("Unexpected dynamic table known received count.", encDynamicTable.encodedKnownReceivedCount(), + is(receivedCount == 0 ? 0 : receivedCount % (2 * maxEntries) + 1)); + } + + private static final class ForwardWriteToReadOnOtherHandler extends ChannelOutboundHandlerAdapter { + + private final ChannelInboundHandler other; + private final BlockingQueue> suspendQueue; + + ForwardWriteToReadOnOtherHandler(ChannelInboundHandler other) { + this(other, null); + } + + ForwardWriteToReadOnOtherHandler(ChannelInboundHandler other, BlockingQueue> suspendQueue) { + this.other = other; + this.suspendQueue = suspendQueue; + } + + @Override + public void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) throws Exception { + if (msg instanceof ByteBuf) { + if (suspendQueue != null) { + suspendQueue.offer(() -> { + other.channelRead(ctx, msg); + return null; + }); + } else { + other.channelRead(ctx, msg); + } + } else { + super.write(ctx, msg, promise); + } + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDynamicTableTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDynamicTableTest.java new file mode 100644 index 0000000..2cea80d --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackEncoderDynamicTableTest.java @@ -0,0 +1,261 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import org.junit.jupiter.api.Test; + +import static io.netty.handler.codec.http3.QpackUtil.MAX_HEADER_TABLE_SIZE; +import static java.lang.Math.toIntExact; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.greaterThanOrEqualTo; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.lessThan; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; + +public class QpackEncoderDynamicTableTest { + private static final QpackHeaderField emptyHeader = new QpackHeaderField("", ""); + private static final QpackHeaderField fooBarHeader = new QpackHeaderField("foo", "bar"); + private static final QpackHeaderField fooBar2Header = new QpackHeaderField("foo", "bar2"); + private static final QpackHeaderField fooBar3Header = new QpackHeaderField("foo", "bar3"); + + private int insertCount; + private long maxCapacity; + + @Test + public void zeroCapacityIsAllowed() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(0); + + assertThat("Header addition passed.", addHeader(table, emptyHeader), + lessThan(0)); + } + + @Test + public void maxCapacityIsAllowed() throws Exception { + final QpackEncoderDynamicTable table = newDynamicTable(MAX_HEADER_TABLE_SIZE); + addAndValidateHeader(table, emptyHeader); + } + + @Test + public void negativeCapacityIsDisallowed() { + assertThrows(QpackException.class, () -> newDynamicTable(-1)); + } + + @Test + public void capacityTooLarge() { + assertThrows(QpackException.class, () -> newDynamicTable(Long.MAX_VALUE)); + } + + @Test + public void delayAck() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(16, 50, 128); + + addAndValidateHeader(table, emptyHeader); + addAndValidateHeader(table, fooBarHeader); + final int idx2 = addAndValidateHeader(table, fooBar2Header); + + assertThat("Header addition passed.", addHeader(table, fooBarHeader), lessThan(0)); + + table.incrementKnownReceivedCount(3); + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), lessThan(0)); + assertThat("Unexpected entry index.", getEntryIndex(table, fooBarHeader), lessThan(0)); + assertThat("Unexpected entry index.", getEntryIndex(table, fooBar2Header), is(idx2)); + + final int idx1 = addAndValidateHeader(table, emptyHeader); + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), is(idx1)); + assertThat("Unexpected entry index.", getEntryIndex(table, fooBar2Header), lessThan(0)); + } + + @Test + public void addAndGet() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(128); + + final int idx1 = addValidateAndAckHeader(table, emptyHeader); + assertEquals(0, idx1); + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), is(idx1)); + + final int idx2 = addValidateAndAckHeader(table, fooBarHeader); + assertEquals(1, idx2); + assertThat("Unexpected entry index.", getEntryIndex(table, fooBarHeader), is(idx2)); + + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), is(idx1)); + } + + @Test + public void nameOnlyMatch() throws Exception { + final QpackEncoderDynamicTable table = newDynamicTable(128); + addValidateAndAckHeader(table, fooBarHeader); + final int lastIdx = addValidateAndAckHeader(table, fooBar2Header); + + final int idx = table.getEntryIndex("foo", "baz"); + assertThat("Unexpected index.", idx, lessThan(0)); + assertThat("Unexpected index.", idx, is(-lastIdx - 1)); + } + + @Test + public void addDuplicateEntries() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(128); + + final int idx1 = addValidateAndAckHeader(table, emptyHeader); + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), is(idx1)); + + final int idx2 = addValidateAndAckHeader(table, fooBarHeader); + assertThat("Unexpected entry index.", getEntryIndex(table, fooBarHeader), is(idx2)); + + final int idx3 = addValidateAndAckHeader(table, emptyHeader); + // Return the most recent entry + assertThat("Unexpected entry index.", getEntryIndex(table, emptyHeader), is(idx3)); + } + + @Test + public void hashCollisionThenRemove() throws Exception { + // expected max size: 0.9*128 = 115 + QpackEncoderDynamicTable table = newDynamicTable(16, 10, 128); + addValidateAndAckHeader(table, fooBarHeader); // size = 38 + addValidateAndAckHeader(table, fooBar2Header); // size = 77 + + addValidateAndAckHeader(table, fooBar3Header); // size = 116, exceeds max threshold, should evict eldest + + assertThat("Entry found.", getEntryIndex(table, fooBarHeader), lessThan(0)); + assertThat("Entry not found.", getEntryIndex(table, fooBar2Header), greaterThanOrEqualTo(0)); + assertThat("Entry not found.", getEntryIndex(table, fooBar3Header), greaterThanOrEqualTo(0)); + } + + @Test + public void requiredInsertCountWrapsAround() throws Exception { + // maxIndex = 2 * maxEntries = 2 * 64/32 = 4 + QpackEncoderDynamicTable table = newDynamicTable(64); + + addValidateAndAckHeader(table, emptyHeader); + addValidateAndAckHeader(table, emptyHeader); + addValidateAndAckHeader(table, emptyHeader); + addValidateAndAckHeader(table, emptyHeader); + addValidateAndAckHeader(table, emptyHeader); + } + + @Test + public void indexWrapsAroundForSingleEntryCapacity() throws Exception { + // maxIndex = 2 * maxEntries = 2 * 39/32 = 2 + QpackEncoderDynamicTable table = newDynamicTable(fooBar2Header.size()); + addValidateAndAckHeader(table, fooBar2Header); + verifyTableEmpty(table); + addValidateAndAckHeader(table, fooBar2Header); + } + + @Test + public void sectionAck() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(128); + + final int idx = addAndValidateHeader(table, fooBarHeader); + table.addReferenceToEntry(fooBarHeader.name, fooBarHeader.value, idx); + table.acknowledgeInsertCountOnAck(idx); + + assertThat("Unexpected known received count.", table.encodedKnownReceivedCount(), is(2)); + } + + @Test + public void sectionAckOutOfOrder() throws Exception { + QpackEncoderDynamicTable table = newDynamicTable(128); + + final int idx1 = addAndValidateHeader(table, fooBarHeader); + table.addReferenceToEntry(fooBarHeader.name, fooBarHeader.value, idx1); + + final int idx2 = addAndValidateHeader(table, fooBarHeader); + table.addReferenceToEntry(fooBarHeader.name, fooBarHeader.value, idx2); + + table.acknowledgeInsertCountOnAck(idx2); + assertThat("Unexpected known received count.", table.encodedKnownReceivedCount(), is(3)); + + table.acknowledgeInsertCountOnAck(idx1); + assertThat("Unexpected known received count.", table.encodedKnownReceivedCount(), is(3)); // already acked + } + + @Test + public void multipleReferences() throws Exception { + // maxIndex = 2 * maxEntries = 2 * 39/32 = 2 + QpackEncoderDynamicTable table = newDynamicTable(fooBar3Header.size()); + + final int idx1 = addAndValidateHeader(table, fooBar3Header); + table.addReferenceToEntry(fooBar3Header.name, fooBar3Header.value, idx1); + table.addReferenceToEntry(fooBar3Header.name, fooBar3Header.value, idx1); + + table.acknowledgeInsertCountOnAck(idx1); + + // first entry still active + assertThat("Header added", addHeader(table, fooBar2Header), lessThan(0)); + + table.acknowledgeInsertCountOnAck(idx1); + verifyTableEmpty(table); + addAndValidateHeader(table, fooBarHeader); + } + + private void verifyTableEmpty(QpackEncoderDynamicTable table) { + assertThat(table.insertCount(), is(0)); + insertCount = 0; + } + + private int getEntryIndex(QpackEncoderDynamicTable table, QpackHeaderField emptyHeader) { + return table.getEntryIndex(emptyHeader.name, emptyHeader.value); + } + + private int addHeader(QpackEncoderDynamicTable table, QpackHeaderField header) { + final int idx = table.add(header.name, header.value, header.size()); + if (idx >= 0) { + insertCount++; + } + return idx; + } + + private int addAndValidateHeader(QpackEncoderDynamicTable table, QpackHeaderField header) { + final int addedIdx = addHeader(table, header); + assertThat("Header addition failed.", addedIdx, greaterThanOrEqualTo(0)); + verifyInsertCount(table); + return addedIdx; + } + + private int addValidateAndAckHeader(QpackEncoderDynamicTable table, QpackHeaderField header) throws Exception { + final int addedIdx = addAndValidateHeader(table, header); + table.addReferenceToEntry(header.name, header.value, addedIdx); + table.acknowledgeInsertCountOnAck(addedIdx); + return addedIdx; + } + + private QpackEncoderDynamicTable newDynamicTable(int arraySizeHint, int expectedFreeCapacityPercentage, + long maxCapacity) throws Exception { + return setMaxTableCapacity(maxCapacity, + new QpackEncoderDynamicTable(arraySizeHint, expectedFreeCapacityPercentage)); + } + + private QpackEncoderDynamicTable newDynamicTable(long maxCapacity) throws Exception { + return setMaxTableCapacity(maxCapacity, new QpackEncoderDynamicTable()); + } + + private QpackEncoderDynamicTable setMaxTableCapacity(long maxCapacity, QpackEncoderDynamicTable table) + throws Exception { + table.maxTableCapacity(maxCapacity); + this.maxCapacity = maxCapacity; + return table; + } + + private void verifyInsertCount(QpackEncoderDynamicTable table) { + assertThat("Unexpected required insert count.", + table.encodedRequiredInsertCount(table.insertCount()), is(expectedInsertCount())); + } + + private int expectedInsertCount() { + return insertCount == 0 ? 0 : toIntExact((insertCount % (2 * Math.floorDiv(maxCapacity, 32))) + 1); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStaticTableTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStaticTableTest.java new file mode 100644 index 0000000..9a0525f --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStaticTableTest.java @@ -0,0 +1,68 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; + + +public class QpackStaticTableTest { + @Test + public void testFieldNotFound() { + assertEquals(QpackStaticTable.NOT_FOUND, QpackStaticTable.findFieldIndex("x-netty-quic", "incubating")); + } + + @Test + public void testFieldNameAndValueMatch() { + // first in range + assertEquals(15, QpackStaticTable.findFieldIndex(":method", "CONNECT")); + // last in range + assertEquals(21, QpackStaticTable.findFieldIndex(":method", "PUT")); + // non-consequent range + assertEquals(24, QpackStaticTable.findFieldIndex(":status", "103")); + assertEquals(69, QpackStaticTable.findFieldIndex(":status", "421")); + } + + @Test + public void testFieldNameRefForEmptyField() { + int nameIndex1 = QpackStaticTable.findFieldIndex("cookie", "netty.io"); + int nameIndex2 = QpackStaticTable.findFieldIndex("cookie", "quic.io"); + + // should give the same name ref for any values + assertNotEquals(QpackStaticTable.NOT_FOUND, nameIndex1); + assertNotEquals(QpackStaticTable.NOT_FOUND, nameIndex2); + assertEquals(nameIndex1, nameIndex2); + + // index should be masked + assertEquals(nameIndex1 & QpackStaticTable.MASK_NAME_REF, QpackStaticTable.MASK_NAME_REF); + assertEquals(5, nameIndex1 ^ QpackStaticTable.MASK_NAME_REF); + } + + @Test + public void testFieldNameRefForSingleMatch() { + // note the value differs from static table ("1" rather than "0") + int nameIndex = QpackStaticTable.findFieldIndex("age", "1"); + assertEquals(2, nameIndex ^ QpackStaticTable.MASK_NAME_REF); + } + + @Test + public void testFieldNameRefForMultipleMatches() { + int nameIndex = QpackStaticTable.findFieldIndex(":method", "ALLTHETHINGS"); + assertEquals(15, nameIndex ^ QpackStaticTable.MASK_NAME_REF); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStreamHandlerTest.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStreamHandlerTest.java new file mode 100644 index 0000000..794bc4c --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/QpackStreamHandlerTest.java @@ -0,0 +1,64 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.handler.codec.quic.QuicStreamType; +import org.junit.jupiter.api.Test; + +import static io.netty.handler.codec.http3.Http3TestUtils.verifyClose; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertFalse; + +public class QpackStreamHandlerTest { + + @Test + public void testStreamClosedWhileParentStillActive() throws Exception { + EmbeddedQuicChannel parent = new EmbeddedQuicChannel(true); + + EmbeddedQuicStreamChannel channel = + (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new QpackDecoderHandler(new QpackEncoder())).get(); + assertFalse(channel.finish()); + Http3TestUtils.verifyClose(1, Http3ErrorCode.H3_CLOSED_CRITICAL_STREAM, parent); + } + + @Test + public void testStreamClosedWhileParentIsInactive() throws Exception { + EmbeddedQuicChannel parent = new EmbeddedQuicChannel(true); + parent.close().get(); + + EmbeddedQuicStreamChannel channel = + (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new QpackDecoderHandler(new QpackEncoder())).get(); + assertFalse(channel.finish()); + } + + @Test + public void testStreamDropsInboundData() throws Exception { + EmbeddedQuicChannel parent = new EmbeddedQuicChannel(true); + parent.close().get(); + + EmbeddedQuicStreamChannel channel = + (EmbeddedQuicStreamChannel) parent.createStream(QuicStreamType.UNIDIRECTIONAL, + new QpackDecoderHandler(new QpackEncoder())).get(); + ByteBuf buffer = Unpooled.buffer(); + assertFalse(channel.writeInbound(buffer)); + assertEquals(0, buffer.refCnt()); + assertFalse(channel.finish()); + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ClientExample.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ClientExample.java new file mode 100644 index 0000000..3647613 --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ClientExample.java @@ -0,0 +1,110 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3.example; + +import io.netty.bootstrap.Bootstrap; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioDatagramChannel; +import io.netty.handler.ssl.util.InsecureTrustManagerFactory; +import io.netty.handler.codec.http3.DefaultHttp3HeadersFrame; +import io.netty.handler.codec.http3.Http3; +import io.netty.handler.codec.http3.Http3ClientConnectionHandler; +import io.netty.handler.codec.http3.Http3DataFrame; +import io.netty.handler.codec.http3.Http3HeadersFrame; +import io.netty.handler.codec.http3.Http3RequestStreamInboundHandler; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicSslContext; +import io.netty.handler.codec.quic.QuicSslContextBuilder; +import io.netty.handler.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) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) { + System.err.print(frame.content().toString(CharsetUtil.US_ASCII)); + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelInputClosed(ChannelHandlerContext ctx) { + 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.close().sync(); + channel.close().sync(); + } finally { + group.shutdownGracefully(); + } + } +} diff --git a/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ServerExample.java b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ServerExample.java new file mode 100644 index 0000000..3b1c09e --- /dev/null +++ b/netty-handler-codec-http3/src/test/java/io/netty/handler/codec/http3/example/Http3ServerExample.java @@ -0,0 +1,121 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.http3.example; + +import io.netty.bootstrap.Bootstrap; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.nio.NioEventLoopGroup; +import io.netty.channel.socket.nio.NioDatagramChannel; +import io.netty.handler.ssl.util.SelfSignedCertificate; +import io.netty.handler.codec.http3.DefaultHttp3DataFrame; +import io.netty.handler.codec.http3.DefaultHttp3HeadersFrame; +import io.netty.handler.codec.http3.Http3; +import io.netty.handler.codec.http3.Http3DataFrame; +import io.netty.handler.codec.http3.Http3HeadersFrame; +import io.netty.handler.codec.http3.Http3RequestStreamInboundHandler; +import io.netty.handler.codec.http3.Http3ServerConnectionHandler; +import io.netty.handler.codec.quic.InsecureQuicTokenHandler; +import io.netty.handler.codec.quic.QuicChannel; +import io.netty.handler.codec.quic.QuicSslContext; +import io.netty.handler.codec.quic.QuicSslContextBuilder; +import io.netty.handler.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() { + @Override + protected void initChannel(QuicChannel ch) { + // Called for each connection + ch.pipeline().addLast(new Http3ServerConnectionHandler( + new ChannelInitializer() { + // Called for each request-stream, + @Override + protected void initChannel(QuicStreamChannel ch) { + ch.pipeline().addLast(new Http3RequestStreamInboundHandler() { + + @Override + protected void channelRead( + ChannelHandlerContext ctx, Http3HeadersFrame frame) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelRead( + ChannelHandlerContext ctx, Http3DataFrame frame) { + ReferenceCountUtil.release(frame); + } + + @Override + protected void channelInputClosed(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(); + } + } +} diff --git a/netty-handler-codec-http3/src/test/resources/logging.properties b/netty-handler-codec-http3/src/test/resources/logging.properties new file mode 100644 index 0000000..3cd7309 --- /dev/null +++ b/netty-handler-codec-http3/src/test/resources/logging.properties @@ -0,0 +1,7 @@ +handlers=java.util.logging.ConsoleHandler +.level=ALL +java.util.logging.SimpleFormatter.format=%1$tY-%1$tm-%1$td %1$tH:%1$tM:%1$tS.%1$tL %4$-7s [%3$s] %5$s %6$s%n +java.util.logging.ConsoleHandler.level=ALL +java.util.logging.ConsoleHandler.formatter=java.util.logging.SimpleFormatter +jdk.event.security.level=INFO +org.junit.jupiter.engine.execution.ConditionEvaluator.level=OFF diff --git a/netty-handler-codec-quic/build.gradle b/netty-handler-codec-quic/build.gradle new file mode 100644 index 0000000..8e88e18 --- /dev/null +++ b/netty-handler-codec-quic/build.gradle @@ -0,0 +1,5 @@ +dependencies { + api project(':netty-handler-ssl') + implementation project(':netty-channel-epoll') + implementation project(':netty-channel-unix') +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java new file mode 100644 index 0000000..46f0bc9 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSL.java @@ -0,0 +1,129 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.handler.ssl.util.LazyX509Certificate; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.security.cert.X509Certificate; + +final class BoringSSL { + private BoringSSL() { } + + static final int SSL_VERIFY_NONE = BoringSSLNativeStaticallyReferencedJniMethods.ssl_verify_none(); + static final int SSL_VERIFY_FAIL_IF_NO_PEER_CERT = BoringSSLNativeStaticallyReferencedJniMethods + .ssl_verify_fail_if_no_peer_cert(); + static final int SSL_VERIFY_PEER = BoringSSLNativeStaticallyReferencedJniMethods.ssl_verify_peer(); + static final int X509_V_OK = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_ok(); + static final int X509_V_ERR_CERT_HAS_EXPIRED = + BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_has_expired(); + static final int X509_V_ERR_CERT_NOT_YET_VALID = + BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_not_yet_valid(); + static final int X509_V_ERR_CERT_REVOKED = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_cert_revoked(); + static final int X509_V_ERR_UNSPECIFIED = BoringSSLNativeStaticallyReferencedJniMethods.x509_v_err_unspecified(); + + static long SSLContext_new(boolean server, String[] applicationProtocols, + BoringSSLHandshakeCompleteCallback handshakeCompleteCallback, + BoringSSLCertificateCallback certificateCallback, + BoringSSLCertificateVerifyCallback verifyCallback, + BoringSSLTlsextServernameCallback servernameCallback, + BoringSSLKeylogCallback keylogCallback, + BoringSSLSessionCallback sessionCallback, + BoringSSLPrivateKeyMethod privateKeyMethod, + BoringSSLSessionTicketCallback sessionTicketCallback, + int verifyMode, + byte[][] subjectNames) { + return SSLContext_new0(server, toWireFormat(applicationProtocols), + handshakeCompleteCallback, certificateCallback, verifyCallback, servernameCallback, + keylogCallback, sessionCallback, privateKeyMethod, sessionTicketCallback, verifyMode, subjectNames); + } + + private static byte[] toWireFormat(String[] applicationProtocols) { + if (applicationProtocols == null) { + return null; + } + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + for (String p : applicationProtocols) { + byte[] bytes = p.getBytes(StandardCharsets.US_ASCII); + out.write(bytes.length); + out.write(bytes); + } + return out.toByteArray(); + } catch (IOException e) { + throw new IllegalStateException(e); + } + } + + private static native long SSLContext_new0(boolean server, + byte[] applicationProtocols, Object handshakeCompleteCallback, + Object certificateCallback, Object verifyCallback, + Object servernameCallback, Object keylogCallback, + Object sessionCallback, + Object privateKeyMethod, + Object sessionTicketCallback, + int verifyDepth, byte[][] subjectNames); + static native void SSLContext_set_early_data_enabled(long context, boolean enabled); + static native long SSLContext_setSessionCacheSize(long context, long size); + static native long SSLContext_setSessionCacheTimeout(long context, long size); + + static native void SSLContext_setSessionTicketKeys(long context, boolean enableCallback); + + static native void SSLContext_free(long context); + static long SSL_new(long context, boolean server, String hostname) { + return SSL_new0(context, server, tlsExtHostName(hostname)); + } + static native long SSL_new0(long context, boolean server, String hostname); + static native void SSL_free(long ssl); + + static native Runnable SSL_getTask(long ssl); + + static native void SSL_cleanup(long ssl); + + static native long EVP_PKEY_parse(byte[] bytes, String pass); + static native void EVP_PKEY_free(long key); + + static native long CRYPTO_BUFFER_stack_new(long ssl, byte[][] bytes); + static native void CRYPTO_BUFFER_stack_free(long chain); + + static native String ERR_last_error(); + + private static String tlsExtHostName(String hostname) { + if (hostname != null && hostname.endsWith(".")) { + // Strip trailing dot if included. + // See https://github.com/netty/netty-tcnative/issues/400 + hostname = hostname.substring(0, hostname.length() - 1); + } + return hostname; + } + + static X509Certificate[] certificates(byte[][] chain) { + X509Certificate[] peerCerts = new X509Certificate[chain.length]; + for (int i = 0; i < peerCerts.length; i++) { + peerCerts[i] = new LazyX509Certificate(chain[i]); + } + return peerCerts; + } + + static byte[][] subjectNames(X509Certificate[] certificates) { + byte[][] subjectNames = new byte[certificates.length][]; + for (int i = 0; i < certificates.length; i++) { + subjectNames[i] = certificates[i].getSubjectX500Principal().getEncoded(); + } + return subjectNames; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLAsyncPrivateKeyMethod.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLAsyncPrivateKeyMethod.java new file mode 100644 index 0000000..c4a87b6 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLAsyncPrivateKeyMethod.java @@ -0,0 +1,57 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.concurrent.Future; + +import javax.net.ssl.SSLEngine; + +public interface BoringSSLAsyncPrivateKeyMethod { + int SSL_SIGN_RSA_PKCS1_SHA1 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PKCS1_SHA1; + int SSL_SIGN_RSA_PKCS1_SHA256 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PKCS1_SHA256; + int SSL_SIGN_RSA_PKCS1_SHA384 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PKCS1_SHA384; + int SSL_SIGN_RSA_PKCS1_SHA512 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PKCS1_SHA512; + int SSL_SIGN_ECDSA_SHA1 = BoringSSLPrivateKeyMethod.SSL_SIGN_ECDSA_SHA1; + int SSL_SIGN_ECDSA_SECP256R1_SHA256 = BoringSSLPrivateKeyMethod.SSL_SIGN_ECDSA_SECP256R1_SHA256; + int SSL_SIGN_ECDSA_SECP384R1_SHA384 = BoringSSLPrivateKeyMethod.SSL_SIGN_ECDSA_SECP384R1_SHA384; + int SSL_SIGN_ECDSA_SECP521R1_SHA512 = BoringSSLPrivateKeyMethod.SSL_SIGN_ECDSA_SECP521R1_SHA512; + int SSL_SIGN_RSA_PSS_RSAE_SHA256 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PSS_RSAE_SHA256; + int SSL_SIGN_RSA_PSS_RSAE_SHA384 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PSS_RSAE_SHA384; + int SSL_SIGN_RSA_PSS_RSAE_SHA512 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PSS_RSAE_SHA512; + int SSL_SIGN_ED25519 = BoringSSLPrivateKeyMethod.SSL_SIGN_ED25519; + int SSL_SIGN_RSA_PKCS1_MD5_SHA1 = BoringSSLPrivateKeyMethod.SSL_SIGN_RSA_PKCS1_MD5_SHA1; + + /** + * Signs the input with the given key and notifies the returned {@link Future} with the signed bytes. + * + * @param engine the {@link SSLEngine} + * @param signatureAlgorithm the algorithm to use for signing + * @param input the digest itself + * @return the {@link Future} that will be notified with the signed data + * (must not be {@code null}) when the operation completes. + */ + Future sign(SSLEngine engine, int signatureAlgorithm, byte[] input); + + /** + * Decrypts the input with the given key and notifies the returned {@link Future} with the decrypted bytes. + * + * @param engine the {@link SSLEngine} + * @param input the input which should be decrypted + * @return the {@link Future} that will be notified with the decrypted data + * (must not be {@code null}) when the operation completes. + */ + Future decrypt(SSLEngine engine, byte[] input); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallback.java new file mode 100644 index 0000000..d251676 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallback.java @@ -0,0 +1,276 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + + +import io.netty.util.CharsetUtil; + +import javax.net.ssl.SSLException; +import javax.net.ssl.SSLHandshakeException; +import javax.net.ssl.X509ExtendedKeyManager; +import javax.security.auth.x500.X500Principal; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.security.PrivateKey; +import java.security.cert.CertificateEncodingException; +import java.security.cert.X509Certificate; +import java.util.Arrays; +import java.util.Base64; +import java.util.Collections; +import java.util.HashMap; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.Map; +import java.util.Set; + +final class BoringSSLCertificateCallback { + private static final byte[] BEGIN_PRIVATE_KEY = "-----BEGIN PRIVATE KEY-----\n".getBytes(CharsetUtil.US_ASCII); + private static final byte[] END_PRIVATE_KEY = "\n-----END PRIVATE KEY-----\n".getBytes(CharsetUtil.US_ASCII); + + /** + * The types contained in the {@code keyTypeBytes} array. + */ + // Extracted from https://github.com/openssl/openssl/blob/master/include/openssl/tls1.h + private static final byte TLS_CT_RSA_SIGN = 1; + private static final byte TLS_CT_DSS_SIGN = 2; + private static final byte TLS_CT_RSA_FIXED_DH = 3; + private static final byte TLS_CT_DSS_FIXED_DH = 4; + private static final byte TLS_CT_ECDSA_SIGN = 64; + private static final byte TLS_CT_RSA_FIXED_ECDH = 65; + private static final byte TLS_CT_ECDSA_FIXED_ECDH = 66; + + // Code in this class is inspired by code of conscrypts: + // - https://android.googlesource.com/platform/external/ + // conscrypt/+/master/src/main/java/org/conscrypt/OpenSSLEngineImpl.java + // - https://android.googlesource.com/platform/external/ + // conscrypt/+/master/src/main/java/org/conscrypt/SSLParametersImpl.java + // + static final String KEY_TYPE_RSA = "RSA"; + static final String KEY_TYPE_DH_RSA = "DH_RSA"; + static final String KEY_TYPE_EC = "EC"; + static final String KEY_TYPE_EC_EC = "EC_EC"; + static final String KEY_TYPE_EC_RSA = "EC_RSA"; + + // key type mappings for types. + private static final Map KEY_TYPES = new HashMap(); + static { + KEY_TYPES.put("RSA", KEY_TYPE_RSA); + KEY_TYPES.put("DHE_RSA", KEY_TYPE_RSA); + KEY_TYPES.put("ECDHE_RSA", KEY_TYPE_RSA); + KEY_TYPES.put("ECDHE_ECDSA", KEY_TYPE_EC); + KEY_TYPES.put("ECDH_RSA", KEY_TYPE_EC_RSA); + KEY_TYPES.put("ECDH_ECDSA", KEY_TYPE_EC_EC); + KEY_TYPES.put("DH_RSA", KEY_TYPE_DH_RSA); + } + + private static final Set SUPPORTED_KEY_TYPES = Collections.unmodifiableSet(new LinkedHashSet<>( + Arrays.asList(KEY_TYPE_RSA, + KEY_TYPE_DH_RSA, + KEY_TYPE_EC, + KEY_TYPE_EC_RSA, + KEY_TYPE_EC_EC))); + + // Directly returning this is safe as we never modify it within our JNI code. + private static final long[] NO_KEY_MATERIAL_CLIENT_SIDE = new long[] { 0, 0 }; + + private final QuicheQuicSslEngineMap engineMap; + private final X509ExtendedKeyManager keyManager; + private final String password; + + BoringSSLCertificateCallback(QuicheQuicSslEngineMap engineMap, X509ExtendedKeyManager keyManager, String password) { + this.engineMap = engineMap; + this.keyManager = keyManager; + this.password = password; + } + + @SuppressWarnings("unused") + long[] handle(long ssl, byte[] keyTypeBytes, byte[][] asn1DerEncodedPrincipals, String[] authMethods) { + QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + return null; + } + + try { + if (keyManager == null) { + if (engine.getUseClientMode()) { + return NO_KEY_MATERIAL_CLIENT_SIDE; + } + return null; + } + if (engine.getUseClientMode()) { + final Set keyTypesSet = supportedClientKeyTypes(keyTypeBytes); + final String[] keyTypes = keyTypesSet.toArray(new String[0]); + final X500Principal[] issuers; + if (asn1DerEncodedPrincipals == null) { + issuers = null; + } else { + issuers = new X500Principal[asn1DerEncodedPrincipals.length]; + for (int i = 0; i < asn1DerEncodedPrincipals.length; i++) { + issuers[i] = new X500Principal(asn1DerEncodedPrincipals[i]); + } + } + return removeMappingIfNeeded(ssl, selectKeyMaterialClientSide(ssl, engine, keyTypes, issuers)); + } else { + // For now we just ignore the asn1DerEncodedPrincipals as this is kind of inline with what the + // OpenJDK SSLEngineImpl does. + return removeMappingIfNeeded(ssl, selectKeyMaterialServerSide(ssl, engine, authMethods)); + } + } catch (SSLException e) { + engineMap.remove(ssl); + return null; + } catch (Throwable cause) { + engineMap.remove(ssl); + throw cause; + } + } + + private long[] removeMappingIfNeeded(long ssl, long[] result) { + if (result == null) { + engineMap.remove(ssl); + } + return result; + } + + private long[] selectKeyMaterialServerSide(long ssl, QuicheQuicSslEngine engine, String[] authMethods) + throws SSLException { + if (authMethods.length == 0) { + throw new SSLHandshakeException("Unable to find key material"); + } + + // authMethods may contain duplicates or may result in the same type + // but call chooseServerAlias(...) may be expensive. So let's ensure + // we filter out duplicates. + Set typeSet = new HashSet(KEY_TYPES.size()); + for (String authMethod : authMethods) { + String type = KEY_TYPES.get(authMethod); + if (type != null && typeSet.add(type)) { + String alias = chooseServerAlias(engine, type); + if (alias != null) { + return selectMaterial(ssl, engine, alias) ; + } + } + } + throw new SSLHandshakeException("Unable to find key material for auth method(s): " + + Arrays.toString(authMethods)); + } + + private long[] selectKeyMaterialClientSide(long ssl, QuicheQuicSslEngine engine, String[] keyTypes, + X500Principal[] issuer) { + String alias = chooseClientAlias(engine, keyTypes, issuer); + // Only try to set the keymaterial if we have a match. This is also consistent with what OpenJDK does: + // https://hg.openjdk.java.net/jdk/jdk11/file/76072a077ee1/ + // src/java.base/share/classes/sun/security/ssl/CertificateRequest.java#l362 + if (alias != null) { + return selectMaterial(ssl, engine, alias) ; + } + return NO_KEY_MATERIAL_CLIENT_SIDE; + } + + private long[] selectMaterial(long ssl, QuicheQuicSslEngine engine, String alias) { + X509Certificate[] certificates = keyManager.getCertificateChain(alias); + if (certificates == null || certificates.length == 0) { + return null; + } + byte[][] certs = new byte[certificates.length][]; + + for (int i = 0; i < certificates.length; i++) { + try { + certs[i] = certificates[i].getEncoded(); + } catch (CertificateEncodingException e) { + return null; + } + } + + final long key; + PrivateKey privateKey = keyManager.getPrivateKey(alias); + if (privateKey == BoringSSLKeylessPrivateKey.INSTANCE) { + key = 0; + } else { + byte[] pemKey = toPemEncoded(privateKey); + if (pemKey == null) { + return null; + } + key = BoringSSL.EVP_PKEY_parse(pemKey, password); + } + long chain = BoringSSL.CRYPTO_BUFFER_stack_new(ssl, certs); + engine.setLocalCertificateChain(certificates); + + // Return and signal that the key and chain should be released as well. + return new long[] { key, chain }; + } + + private static byte[] toPemEncoded(PrivateKey key) { + try (ByteArrayOutputStream out = new ByteArrayOutputStream()) { + out.write(BEGIN_PRIVATE_KEY); + out.write(Base64.getEncoder().encode(key.getEncoded())); + out.write(END_PRIVATE_KEY); + return out.toByteArray(); + } catch (IOException e) { + return null; + } + } + private String chooseClientAlias(QuicheQuicSslEngine engine, + String[] keyTypes, X500Principal[] issuer) { + return keyManager.chooseEngineClientAlias(keyTypes, issuer, engine); + } + + private String chooseServerAlias(QuicheQuicSslEngine engine, String type) { + return keyManager.chooseEngineServerAlias(type, null, engine); + } + + /** + * Gets the supported key types for client certificates. + * + * @param clientCertificateTypes {@code ClientCertificateType} values provided by the server. + * See https://www.ietf.org/assignments/tls-parameters/tls-parameters.xml. + * @return supported key types that can be used in {@code X509KeyManager.chooseClientAlias} and + * {@code X509ExtendedKeyManager.chooseEngineClientAlias}. + */ + private static Set supportedClientKeyTypes(byte[] clientCertificateTypes) { + if (clientCertificateTypes == null) { + // Try all of the supported key types. + return SUPPORTED_KEY_TYPES; + } + Set result = new HashSet<>(clientCertificateTypes.length); + for (byte keyTypeCode : clientCertificateTypes) { + String keyType = clientKeyType(keyTypeCode); + if (keyType == null) { + // Unsupported client key type -- ignore + continue; + } + result.add(keyType); + } + return result; + } + + private static String clientKeyType(byte clientCertificateType) { + // See also https://www.ietf.org/assignments/tls-parameters/tls-parameters.xml + switch (clientCertificateType) { + case TLS_CT_RSA_SIGN: + return KEY_TYPE_RSA; // RFC rsa_sign + case TLS_CT_RSA_FIXED_DH: + return KEY_TYPE_DH_RSA; // RFC rsa_fixed_dh + case TLS_CT_ECDSA_SIGN: + return KEY_TYPE_EC; // RFC ecdsa_sign + case TLS_CT_RSA_FIXED_ECDH: + return KEY_TYPE_EC_RSA; // RFC rsa_fixed_ecdh + case TLS_CT_ECDSA_FIXED_ECDH: + return KEY_TYPE_EC_EC; // RFC ecdsa_fixed_ecdh + default: + return null; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallbackTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallbackTask.java new file mode 100644 index 0000000..7c57f6a --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateCallbackTask.java @@ -0,0 +1,73 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Execute {@link BoringSSLCertificateCallback#handle(long, byte[], byte[][], String[])}. + */ +final class BoringSSLCertificateCallbackTask extends BoringSSLTask { + private final byte[] keyTypeBytes; + private final byte[][] asn1DerEncodedPrincipals; + private final String[] authMethods; + private final BoringSSLCertificateCallback callback; + + // Accessed via JNI. + private long key; + private long chain; + + BoringSSLCertificateCallbackTask(long ssl, byte[] keyTypeBytes, byte[][] asn1DerEncodedPrincipals, String[] authMethods, + BoringSSLCertificateCallback callback) { + // It is important that this constructor never throws. Be sure to not change this! + super(ssl); + // It's ok to not clone the arrays as we create these in JNI and not-reuse. + this.keyTypeBytes = keyTypeBytes; + this.asn1DerEncodedPrincipals = asn1DerEncodedPrincipals; + this.authMethods = authMethods; + this.callback = callback; + } + + // See https://www.openssl.org/docs/man1.0.2/man3/SSL_set_cert_cb.html. + @Override + protected void runTask(long ssl, TaskCallback taskCallback) { + try { + long[] result = callback.handle(ssl, keyTypeBytes, asn1DerEncodedPrincipals, authMethods); + if (result == null) { + taskCallback.onResult(ssl, 0); + } else { + this.key = result[0]; + this.chain = result[1]; + taskCallback.onResult(ssl, 1); + } + } catch (Exception e) { + // Just catch the exception and return 0 to fail the handshake. + // The problem is that rethrowing here is really "useless" as we will process it as part of an openssl + // c callback which needs to return 0 for an error to abort the handshake. + taskCallback.onResult(ssl, 0); + } + } + + @Override + protected void destroy() { + if (key != 0) { + BoringSSL.EVP_PKEY_free(key); + key = 0; + } + if (chain != 0) { + BoringSSL.CRYPTO_BUFFER_stack_free(chain); + chain = 0; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallback.java new file mode 100644 index 0000000..509ba35 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallback.java @@ -0,0 +1,124 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.handler.ssl.OpenSslCertificateException; + +import javax.net.ssl.X509ExtendedTrustManager; +import javax.net.ssl.X509TrustManager; +import java.security.cert.CertPathValidatorException; +import java.security.cert.CertificateExpiredException; +import java.security.cert.CertificateNotYetValidException; +import java.security.cert.CertificateRevokedException; +import java.security.cert.X509Certificate; + +final class BoringSSLCertificateVerifyCallback { + + private static final boolean TRY_USING_EXTENDED_TRUST_MANAGER; + static { + boolean tryUsingExtendedTrustManager; + try { + Class.forName(X509ExtendedTrustManager.class.getName()); + tryUsingExtendedTrustManager = true; + } catch (Throwable cause) { + tryUsingExtendedTrustManager = false; + } + TRY_USING_EXTENDED_TRUST_MANAGER = tryUsingExtendedTrustManager; + } + + private final QuicheQuicSslEngineMap engineMap; + private final X509TrustManager manager; + + BoringSSLCertificateVerifyCallback(QuicheQuicSslEngineMap engineMap, X509TrustManager manager) { + this.engineMap = engineMap; + this.manager = manager; + } + + @SuppressWarnings("unused") + int verify(long ssl, byte[][] x509, String authAlgorithm) { + final QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + // May be null if it was destroyed in the meantime. + return BoringSSL.X509_V_ERR_UNSPECIFIED; + } + + if (manager == null) { + engineMap.remove(ssl); + return BoringSSL.X509_V_ERR_UNSPECIFIED; + } + + X509Certificate[] peerCerts = BoringSSL.certificates(x509); + try { + if (engine.getUseClientMode()) { + if (TRY_USING_EXTENDED_TRUST_MANAGER && manager instanceof X509ExtendedTrustManager) { + ((X509ExtendedTrustManager) manager).checkServerTrusted(peerCerts, authAlgorithm, engine); + } else { + manager.checkServerTrusted(peerCerts, authAlgorithm); + } + } else { + if (TRY_USING_EXTENDED_TRUST_MANAGER && manager instanceof X509ExtendedTrustManager) { + ((X509ExtendedTrustManager) manager).checkClientTrusted(peerCerts, authAlgorithm, engine); + } else { + manager.checkClientTrusted(peerCerts, authAlgorithm); + } + } + return BoringSSL.X509_V_OK; + } catch (Throwable cause) { + engineMap.remove(ssl); + // Try to extract the correct error code that should be used. + if (cause instanceof OpenSslCertificateException) { + // This will never return a negative error code as its validated when constructing the + // OpenSslCertificateException. + return ((OpenSslCertificateException) cause).errorCode(); + } + if (cause instanceof CertificateExpiredException) { + return BoringSSL.X509_V_ERR_CERT_HAS_EXPIRED; + } + if (cause instanceof CertificateNotYetValidException) { + return BoringSSL.X509_V_ERR_CERT_NOT_YET_VALID; + } + return translateToError(cause); + } + } + + private static int translateToError(Throwable cause) { + if (cause instanceof CertificateRevokedException) { + return BoringSSL.X509_V_ERR_CERT_REVOKED; + } + + // The X509TrustManagerImpl uses a Validator which wraps a CertPathValidatorException into + // an CertificateException. So we need to handle the wrapped CertPathValidatorException to be + // able to send the correct alert. + Throwable wrapped = cause.getCause(); + while (wrapped != null) { + if (wrapped instanceof CertPathValidatorException) { + CertPathValidatorException ex = (CertPathValidatorException) wrapped; + CertPathValidatorException.Reason reason = ex.getReason(); + if (reason == CertPathValidatorException.BasicReason.EXPIRED) { + return BoringSSL.X509_V_ERR_CERT_HAS_EXPIRED; + } + if (reason == CertPathValidatorException.BasicReason.NOT_YET_VALID) { + return BoringSSL.X509_V_ERR_CERT_NOT_YET_VALID; + } + if (reason == CertPathValidatorException.BasicReason.REVOKED) { + return BoringSSL.X509_V_ERR_CERT_REVOKED; + } + } + wrapped = wrapped.getCause(); + } + return BoringSSL.X509_V_ERR_UNSPECIFIED; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallbackTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallbackTask.java new file mode 100644 index 0000000..5a45dc0 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLCertificateVerifyCallbackTask.java @@ -0,0 +1,40 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + + +/** + * Execute {@link BoringSSLCertificateVerifyCallback#verify(long, byte[][], String)}. + */ +final class BoringSSLCertificateVerifyCallbackTask extends BoringSSLTask { + private final byte[][] x509; + private final String authAlgorithm; + private final BoringSSLCertificateVerifyCallback verifier; + + BoringSSLCertificateVerifyCallbackTask(long ssl, byte[][] x509, String authAlgorithm, + BoringSSLCertificateVerifyCallback verifier) { + super(ssl); + this.x509 = x509; + this.authAlgorithm = authAlgorithm; + this.verifier = verifier; + } + + @Override + protected void runTask(long ssl, TaskCallback callback) { + int result = verifier.verify(ssl, x509, authAlgorithm); + callback.onResult(ssl, result); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLHandshakeCompleteCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLHandshakeCompleteCallback.java new file mode 100644 index 0000000..b44ef71 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLHandshakeCompleteCallback.java @@ -0,0 +1,36 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +final class BoringSSLHandshakeCompleteCallback { + + private final QuicheQuicSslEngineMap map; + + BoringSSLHandshakeCompleteCallback(QuicheQuicSslEngineMap map) { + this.map = map; + } + + @SuppressWarnings("unused") + void handshakeComplete(long ssl, byte[] id, String cipher, String protocol, byte[] peerCertificate, + byte[][] peerCertificateChain, long creationTime, long timeout, byte[] applicationProtocol, + boolean sessionReused) { + QuicheQuicSslEngine engine = map.get(ssl); + if (engine != null) { + engine.handshakeFinished(id, cipher, protocol, peerCertificate, peerCertificateChain, creationTime, + timeout, applicationProtocol, sessionReused); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessManagerFactory.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessManagerFactory.java new file mode 100644 index 0000000..65cb430 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessManagerFactory.java @@ -0,0 +1,245 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.KeyManagerFactorySpi; +import javax.net.ssl.ManagerFactoryParameters; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.nio.file.Files; +import java.security.Key; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.KeyStoreSpi; +import java.security.NoSuchAlgorithmException; +import java.security.UnrecoverableKeyException; +import java.security.cert.Certificate; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.util.Collections; +import java.util.Date; +import java.util.Enumeration; + +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static java.util.Objects.requireNonNull; + +/** + * {@link KeyManagerFactory} that can be used to support custom key signing via {@link BoringSSLAsyncPrivateKeyMethod}. + */ +public final class BoringSSLKeylessManagerFactory extends KeyManagerFactory { + + final BoringSSLAsyncPrivateKeyMethod privateKeyMethod; + + private BoringSSLKeylessManagerFactory(KeyManagerFactory keyManagerFactory, + BoringSSLAsyncPrivateKeyMethod privateKeyMethod) { + super(new KeylessManagerFactorySpi(keyManagerFactory), + keyManagerFactory.getProvider(), keyManagerFactory.getAlgorithm()); + this.privateKeyMethod = requireNonNull(privateKeyMethod, "privateKeyMethod"); + } + + /** + * Creates a new factory instance. + * + * @param privateKeyMethod the {@link BoringSSLAsyncPrivateKeyMethod} that is used for key signing. + * @param chain the {@link File} that contains the {@link X509Certificate} chain. + * @return a new factory instance. + * @throws CertificateException on error. + * @throws IOException on error. + * @throws KeyStoreException on error. + * @throws NoSuchAlgorithmException on error. + * @throws UnrecoverableKeyException on error. + */ + public static BoringSSLKeylessManagerFactory newKeyless(BoringSSLAsyncPrivateKeyMethod privateKeyMethod, File chain) + throws CertificateException, IOException, + KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { + return newKeyless(privateKeyMethod, Files.newInputStream(chain.toPath())); + } + + /** + * Creates a new factory instance. + * + * @param privateKeyMethod the {@link BoringSSLAsyncPrivateKeyMethod} that is used for key signing. + * @param chain the {@link InputStream} that contains the {@link X509Certificate} chain. + * @return a new factory instance. + * @throws CertificateException on error. + * @throws IOException on error. + * @throws KeyStoreException on error. + * @throws NoSuchAlgorithmException on error. + * @throws UnrecoverableKeyException on error. + */ + public static BoringSSLKeylessManagerFactory newKeyless(BoringSSLAsyncPrivateKeyMethod privateKeyMethod, + InputStream chain) + throws CertificateException, IOException, + KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { + return newKeyless(privateKeyMethod, QuicSslContext.toX509Certificates0(chain)); + } + + /** + * Creates a new factory instance. + * + * @param privateKeyMethod the {@link BoringSSLAsyncPrivateKeyMethod} that is used for key signing. + * @param certificateChain the {@link X509Certificate} chain. + * @return a new factory instance. + * @throws CertificateException on error. + * @throws IOException on error. + * @throws KeyStoreException on error. + * @throws NoSuchAlgorithmException on error. + * @throws UnrecoverableKeyException on error. + */ + public static BoringSSLKeylessManagerFactory newKeyless(BoringSSLAsyncPrivateKeyMethod privateKeyMethod, + X509Certificate... certificateChain) + throws CertificateException, IOException, + KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { + checkNotNull(certificateChain, "certificateChain"); + KeyStore store = new KeylessKeyStore(certificateChain.clone()); + store.load(null, null); + BoringSSLKeylessManagerFactory factory = new BoringSSLKeylessManagerFactory( + KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm()), privateKeyMethod); + factory.init(store, null); + return factory; + } + + private static final class KeylessManagerFactorySpi extends KeyManagerFactorySpi { + + private final KeyManagerFactory keyManagerFactory; + + KeylessManagerFactorySpi(KeyManagerFactory keyManagerFactory) { + this.keyManagerFactory = requireNonNull(keyManagerFactory, "keyManagerFactory"); + } + + @Override + protected void engineInit(KeyStore ks, char[] password) + throws KeyStoreException, NoSuchAlgorithmException, UnrecoverableKeyException { + keyManagerFactory.init(ks, password); + } + + @Override + protected void engineInit(ManagerFactoryParameters spec) { + throw new UnsupportedOperationException("Not supported"); + } + + @Override + protected KeyManager[] engineGetKeyManagers() { + return keyManagerFactory.getKeyManagers(); + } + } + private static final class KeylessKeyStore extends KeyStore { + private static final String ALIAS = "key"; + private KeylessKeyStore(final X509Certificate[] certificateChain) { + super(new KeyStoreSpi() { + + private final Date creationDate = new Date(); + + @Override + public Key engineGetKey(String alias, char[] password) { + if (engineContainsAlias(alias)) { + return BoringSSLKeylessPrivateKey.INSTANCE; + } + return null; + } + + @Override + public Certificate[] engineGetCertificateChain(String alias) { + return engineContainsAlias(alias)? certificateChain.clone() : null; + } + + @Override + public Certificate engineGetCertificate(String alias) { + return engineContainsAlias(alias)? certificateChain[0] : null; + } + + @Override + public Date engineGetCreationDate(String alias) { + return engineContainsAlias(alias)? creationDate : null; + } + + @Override + public void engineSetKeyEntry(String alias, Key key, char[] password, Certificate[] chain) + throws KeyStoreException { + throw new KeyStoreException("Not supported"); + } + + @Override + public void engineSetKeyEntry(String alias, byte[] key, Certificate[] chain) throws KeyStoreException { + throw new KeyStoreException("Not supported"); + } + + @Override + public void engineSetCertificateEntry(String alias, Certificate cert) throws KeyStoreException { + throw new KeyStoreException("Not supported"); + } + + @Override + public void engineDeleteEntry(String alias) throws KeyStoreException { + throw new KeyStoreException("Not supported"); + } + + @Override + public Enumeration engineAliases() { + return Collections.enumeration(Collections.singleton(ALIAS)); + } + + @Override + public boolean engineContainsAlias(String alias) { + return ALIAS.equals(alias); + } + + @Override + public int engineSize() { + return 1; + } + + @Override + public boolean engineIsKeyEntry(String alias) { + return engineContainsAlias(alias); + } + + @Override + public boolean engineIsCertificateEntry(String alias) { + return engineContainsAlias(alias); + } + + @Override + public String engineGetCertificateAlias(Certificate cert) { + if (cert instanceof X509Certificate) { + for (X509Certificate x509Certificate : certificateChain) { + if (x509Certificate.equals(cert)) { + return ALIAS; + } + } + } + return null; + } + + @Override + public void engineStore(OutputStream stream, char[] password) { + throw new UnsupportedOperationException(); + } + + @Override + public void engineLoad(InputStream stream, char[] password) { + if (stream != null && password != null) { + throw new UnsupportedOperationException(); + } + } + }, null, "keyless"); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessPrivateKey.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessPrivateKey.java new file mode 100644 index 0000000..2a19eac --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylessPrivateKey.java @@ -0,0 +1,43 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.EmptyArrays; + +import java.security.PrivateKey; + +final class BoringSSLKeylessPrivateKey implements PrivateKey { + + static final BoringSSLKeylessPrivateKey INSTANCE = new BoringSSLKeylessPrivateKey(); + + private BoringSSLKeylessPrivateKey() { + } + + @Override + public String getAlgorithm() { + return "keyless"; + } + + @Override + public String getFormat() { + return "keyless"; + } + + @Override + public byte[] getEncoded() { + return EmptyArrays.EMPTY_BYTES; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylog.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylog.java new file mode 100644 index 0000000..7d8e356 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylog.java @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import javax.net.ssl.SSLEngine; + + +/** + * Allow to log keys, logging keys are following + * + * NSS Key Log Format. This is intended for debugging use with tools like Wireshark. + */ +public interface BoringSSLKeylog { + + /** + * Called when a key should be logged. + * + * @param engine the engine. + * @param key the key. + */ + void logKey(SSLEngine engine, String key); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylogCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylogCallback.java new file mode 100644 index 0000000..6ffdce2 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLKeylogCallback.java @@ -0,0 +1,38 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + + +import javax.net.ssl.SSLEngine; + +final class BoringSSLKeylogCallback { + + private final QuicheQuicSslEngineMap engineMap; + private final BoringSSLKeylog keylog; + + BoringSSLKeylogCallback(QuicheQuicSslEngineMap engineMap, BoringSSLKeylog keylog) { + this.engineMap = engineMap; + this.keylog = keylog; + } + + @SuppressWarnings("unused") + void logKey(long ssl, String key) { + SSLEngine engine = engineMap.get(ssl); + if (engine != null) { + keylog.logKey(engine, key); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLLoggingKeylog.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLLoggingKeylog.java new file mode 100644 index 0000000..3e78dce --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLLoggingKeylog.java @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import javax.net.ssl.SSLEngine; + +final class BoringSSLLoggingKeylog implements BoringSSLKeylog { + static final BoringSSLLoggingKeylog INSTANCE = new BoringSSLLoggingKeylog(); + + private BoringSSLLoggingKeylog() { + } + + private static final InternalLogger logger = InternalLoggerFactory.getInstance(BoringSSLLoggingKeylog.class); + + @Override + public void logKey(SSLEngine engine, String key) { + logger.debug(key); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLNativeStaticallyReferencedJniMethods.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLNativeStaticallyReferencedJniMethods.java new file mode 100644 index 0000000..771d0b8 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLNativeStaticallyReferencedJniMethods.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +final class BoringSSLNativeStaticallyReferencedJniMethods { + static native int ssl_verify_none(); + static native int ssl_verify_peer(); + static native int ssl_verify_fail_if_no_peer_cert(); + + static native int x509_v_ok(); + static native int x509_v_err_cert_has_expired(); + static native int x509_v_err_cert_not_yet_valid(); + static native int x509_v_err_cert_revoked(); + static native int x509_v_err_unspecified(); + static native int ssl_sign_rsa_pkcs_sha1(); + static native int ssl_sign_rsa_pkcs_sha256(); + static native int ssl_sign_rsa_pkcs_sha384(); + static native int ssl_sign_rsa_pkcs_sha512(); + static native int ssl_sign_ecdsa_pkcs_sha1(); + static native int ssl_sign_ecdsa_secp256r1_sha256(); + static native int ssl_sign_ecdsa_secp384r1_sha384(); + static native int ssl_sign_ecdsa_secp521r1_sha512(); + static native int ssl_sign_rsa_pss_rsae_sha256(); + static native int ssl_sign_rsa_pss_rsae_sha384(); + static native int ssl_sign_rsa_pss_rsae_sha512(); + static native int ssl_sign_ed25519(); + static native int ssl_sign_rsa_pkcs1_md5_sha1(); + + private BoringSSLNativeStaticallyReferencedJniMethods() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethod.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethod.java new file mode 100644 index 0000000..691d6fa --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethod.java @@ -0,0 +1,58 @@ +/* + * Copyright 2019 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.util.function.BiConsumer; + +/** + * Allows to customize private key signing / decrypt (when using RSA). + */ +interface BoringSSLPrivateKeyMethod { + int SSL_SIGN_RSA_PKCS1_SHA1 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pkcs_sha1(); + int SSL_SIGN_RSA_PKCS1_SHA256 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pkcs_sha256(); + int SSL_SIGN_RSA_PKCS1_SHA384 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pkcs_sha384(); + int SSL_SIGN_RSA_PKCS1_SHA512 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pkcs_sha512(); + int SSL_SIGN_ECDSA_SHA1 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_ecdsa_pkcs_sha1(); + int SSL_SIGN_ECDSA_SECP256R1_SHA256 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_ecdsa_secp256r1_sha256(); + int SSL_SIGN_ECDSA_SECP384R1_SHA384 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_ecdsa_secp384r1_sha384(); + int SSL_SIGN_ECDSA_SECP521R1_SHA512 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_ecdsa_secp521r1_sha512(); + int SSL_SIGN_RSA_PSS_RSAE_SHA256 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pss_rsae_sha256(); + int SSL_SIGN_RSA_PSS_RSAE_SHA384 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pss_rsae_sha384(); + int SSL_SIGN_RSA_PSS_RSAE_SHA512 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pss_rsae_sha512(); + int SSL_SIGN_ED25519 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_ed25519(); + int SSL_SIGN_RSA_PKCS1_MD5_SHA1 = BoringSSLNativeStaticallyReferencedJniMethods.ssl_sign_rsa_pkcs1_md5_sha1(); + + /** + * Sign the input with given EC key and returns the signed bytes. + * + * @param ssl the SSL instance + * @param signatureAlgorithm the algorithm to use for signing + * @param input the input itself + * @return the sign + * @throws Exception thrown if an error accours while signing. + */ + void sign(long ssl, int signatureAlgorithm, byte[] input, BiConsumer callback); + + /** + * Decrypts the input with the given RSA key and returns the decrypted bytes. + * + * @param ssl the SSL instance + * @param input the input which should be decrypted + * @return the decrypted data + * @throws Exception thrown if an error accours while decrypting. + */ + void decrypt(long ssl, byte[] input, BiConsumer callback); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodDecryptTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodDecryptTask.java new file mode 100644 index 0000000..de50246 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodDecryptTask.java @@ -0,0 +1,33 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.util.function.BiConsumer; + +final class BoringSSLPrivateKeyMethodDecryptTask extends BoringSSLPrivateKeyMethodTask { + private final byte[] input; + + BoringSSLPrivateKeyMethodDecryptTask(long ssl, byte[] input, BoringSSLPrivateKeyMethod method) { + super(ssl, method); + // It's OK to not clone the arrays as we create these in JNI and not reuse. + this.input = input; + } + + @Override + protected void runMethod(long ssl, BoringSSLPrivateKeyMethod method, BiConsumer consumer) { + method.decrypt(ssl, input, consumer); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodSignTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodSignTask.java new file mode 100644 index 0000000..d98952f --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodSignTask.java @@ -0,0 +1,35 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.util.function.BiConsumer; + +final class BoringSSLPrivateKeyMethodSignTask extends BoringSSLPrivateKeyMethodTask { + private final int signatureAlgorithm; + private final byte[] digest; + + BoringSSLPrivateKeyMethodSignTask(long ssl, int signatureAlgorithm, byte[] digest, BoringSSLPrivateKeyMethod method) { + super(ssl, method); + this.signatureAlgorithm = signatureAlgorithm; + // It's OK to not clone the arrays as we create these in JNI and not reuse. + this.digest = digest; + } + + @Override + protected void runMethod(long ssl, BoringSSLPrivateKeyMethod method, BiConsumer callback) { + method.sign(ssl, signatureAlgorithm, digest, callback); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodTask.java new file mode 100644 index 0000000..31ba8ab --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLPrivateKeyMethodTask.java @@ -0,0 +1,32 @@ +package io.netty.handler.codec.quic; + +import java.util.function.BiConsumer; + +abstract class BoringSSLPrivateKeyMethodTask extends BoringSSLTask { + + private final BoringSSLPrivateKeyMethod method; + + // Will be accessed via JNI. + private byte[] resultBytes; + + BoringSSLPrivateKeyMethodTask(long ssl, BoringSSLPrivateKeyMethod method) { + super(ssl); + this.method = method; + } + + + @Override + protected final void runTask(long ssl, TaskCallback callback) { + runMethod(ssl, method, (result, error) -> { + if (result == null || error != null) { + callback.onResult(ssl, -1); + } else { + resultBytes = result; + callback.onResult(ssl, 1); + } + }); + } + + protected abstract void runMethod(long ssl, BoringSSLPrivateKeyMethod method, + BiConsumer callback); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionCallback.java new file mode 100644 index 0000000..dab5f72 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionCallback.java @@ -0,0 +1,83 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.EmptyArrays; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.io.ByteArrayOutputStream; +import java.io.DataOutputStream; +import java.io.IOException; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +final class BoringSSLSessionCallback { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(BoringSSLSessionCallback.class); + private final QuicClientSessionCache sessionCache; + private final QuicheQuicSslEngineMap engineMap; + + BoringSSLSessionCallback(QuicheQuicSslEngineMap engineMap, QuicClientSessionCache sessionCache) { + this.engineMap = engineMap; + this.sessionCache = sessionCache; + } + + @SuppressWarnings("unused") + void newSession(long ssl, long creationTime, long timeout, byte[] session, boolean isSingleUse, byte[] peerParams) { + if (sessionCache == null) { + return; + } + + QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + logger.warn("engine is null ssl: {}", ssl); + return; + } + + if (peerParams == null) { + peerParams = EmptyArrays.EMPTY_BYTES; + } + if (logger.isDebugEnabled()) { + logger.debug("ssl: {}, session: {}, peerParams: {}", ssl, Arrays.toString(session), + Arrays.toString(peerParams)); + } + byte[] quicSession = toQuicheQuicSession(session, peerParams); + if (quicSession != null) { + logger.debug("save session host={}, port={}", + engine.getSession().getPeerHost(), engine.getSession().getPeerPort()); + sessionCache.saveSession(engine.getSession().getPeerHost(), engine.getSession().getPeerPort(), + TimeUnit.SECONDS.toMillis(creationTime), TimeUnit.SECONDS.toMillis(timeout), + quicSession, isSingleUse); + } + } + + // Mimic the encoding of quiche: https://github.com/cloudflare/quiche/blob/0.10.0/src/lib.rs#L1668 + private static byte[] toQuicheQuicSession(byte[] sslSession, byte[] peerParams) { + if (sslSession != null && peerParams != null) { + try (ByteArrayOutputStream bos = new ByteArrayOutputStream(); + DataOutputStream dos = new DataOutputStream(bos)) { + dos.writeLong(sslSession.length); + dos.write(sslSession); + dos.writeLong(peerParams.length); + dos.write(peerParams); + return bos.toByteArray(); + } catch (IOException e) { + return null; + } + } + return null; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionTicketCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionTicketCallback.java new file mode 100644 index 0000000..1395f94 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLSessionTicketCallback.java @@ -0,0 +1,65 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.PlatformDependent; + +final class BoringSSLSessionTicketCallback { + + // As we dont assume to have a lot of keys configured we will just use an array for now as a data store. + private volatile byte[][] sessionKeys; + + // Accessed via JNI. + byte[] findSessionTicket(byte[] keyname) { + byte[][] keys = this.sessionKeys; + if (keys == null || keys.length == 0) { + return null; + } + if (keyname == null) { + return keys[0]; + } + + for (int i = 0; i < keys.length; i++) { + byte[] key = keys[i]; + if (PlatformDependent.equals(keyname, 0, key, 1, keyname.length)) { + return key; + } + } + return null; + } + + void setSessionTicketKeys(SslSessionTicketKey[] keys) { + if (keys != null && keys.length != 0) { + byte[][] sessionKeys = new byte[keys.length][]; + for(int i = 0; i < keys.length; ++i) { + SslSessionTicketKey key = keys[i]; + byte[] binaryKey = new byte[49]; + // We mark the first key as preferred by using 1 as byte marker + binaryKey[0] = i == 0 ? (byte) 1 : (byte) 0; + int dstCurPos = 1; + System.arraycopy(key.name, 0, binaryKey, dstCurPos, 16); + dstCurPos += 16; + System.arraycopy(key.hmacKey, 0, binaryKey, dstCurPos, 16); + dstCurPos += 16; + System.arraycopy(key.aesKey, 0, binaryKey, dstCurPos, 16); + sessionKeys[i] = binaryKey; + } + this.sessionKeys = sessionKeys; + } else { + sessionKeys = null; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTask.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTask.java new file mode 100644 index 0000000..c739d88 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTask.java @@ -0,0 +1,60 @@ +/* + * Copyright 2022 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * A SSL related task that will be returned by {@link BoringSSL#SSL_getTask(long)}. + */ +abstract class BoringSSLTask implements Runnable { + private final long ssl; + protected boolean didRun; + + // These fields are accessed via JNI. + private int returnValue; + private volatile boolean complete; + + protected BoringSSLTask(long ssl) { + // It is important that this constructor never throws. Be sure to not change this! + this.ssl = ssl; + } + + @Override + public final void run() { + if (!didRun) { + didRun = true; + runTask(ssl, (long ssl, int result) -> { + returnValue = result; + complete = true; + }); + } + } + + /** + * Called once the task should be destroyed. + */ + protected void destroy() { + // Noop + } + + /** + * Run the task and return the return value that should be passed back to OpenSSL. + */ + protected abstract void runTask(long ssl, TaskCallback callback); + + interface TaskCallback { + void onResult(long ssl, int result); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTlsextServernameCallback.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTlsextServernameCallback.java new file mode 100644 index 0000000..324ca6d --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/BoringSSLTlsextServernameCallback.java @@ -0,0 +1,45 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.Mapping; + +final class BoringSSLTlsextServernameCallback { + + private final QuicheQuicSslEngineMap engineMap; + private final Mapping mapping; + + BoringSSLTlsextServernameCallback(QuicheQuicSslEngineMap engineMap, + Mapping mapping) { + this.engineMap = engineMap; + this.mapping = mapping; + } + + @SuppressWarnings("unused") + long selectCtx(long ssl, String serverName) { + final QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + // May be null if it was destroyed in the meantime. + return -1; + } + + QuicSslContext context = mapping.map(serverName); + if (context == null) { + return -1; + } + return engine.moveTo(serverName, (QuicheQuicSslContext) context); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DefaultQuicStreamFrame.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DefaultQuicStreamFrame.java new file mode 100644 index 0000000..ac78d13 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DefaultQuicStreamFrame.java @@ -0,0 +1,110 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.DefaultByteBufHolder; + +public final class DefaultQuicStreamFrame extends DefaultByteBufHolder implements QuicStreamFrame { + + private final boolean fin; + + public DefaultQuicStreamFrame(ByteBuf data, boolean fin) { + super(data); + this.fin = fin; + } + + @Override + public boolean hasFin() { + return fin; + } + + @Override + public QuicStreamFrame copy() { + return new DefaultQuicStreamFrame(content().copy(), fin); + } + + @Override + public QuicStreamFrame duplicate() { + return new DefaultQuicStreamFrame(content().duplicate(), fin); + } + + @Override + public QuicStreamFrame retainedDuplicate() { + return new DefaultQuicStreamFrame(content().retainedDuplicate(), fin); + } + + @Override + public QuicStreamFrame replace(ByteBuf content) { + return new DefaultQuicStreamFrame(content, fin); + } + + @Override + public QuicStreamFrame retain() { + super.retain(); + return this; + } + + @Override + public QuicStreamFrame retain(int increment) { + super.retain(increment); + return this; + } + + @Override + public QuicStreamFrame touch() { + super.touch(); + return this; + } + + @Override + public QuicStreamFrame touch(Object hint) { + super.touch(hint); + return this; + } + + @Override + public String toString() { + return "DefaultQuicStreamFrame{" + + "fin=" + fin + + ", content=" + contentToString() + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + DefaultQuicStreamFrame that = (DefaultQuicStreamFrame) o; + + if (fin != that.fin) { + return false; + } + + return super.equals(o); + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (fin ? 1 : 0); + return result; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DirectIoByteBufAllocator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DirectIoByteBufAllocator.java new file mode 100644 index 0000000..72a7fe6 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/DirectIoByteBufAllocator.java @@ -0,0 +1,136 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.CompositeByteBuf; + +final class DirectIoByteBufAllocator implements ByteBufAllocator { + + private final ByteBufAllocator wrapped; + + DirectIoByteBufAllocator(ByteBufAllocator wrapped) { + if (wrapped instanceof DirectIoByteBufAllocator) { + wrapped = ((DirectIoByteBufAllocator) wrapped).wrapped(); + } + this.wrapped = wrapped; + } + + ByteBufAllocator wrapped() { + return wrapped; + } + + @Override + public ByteBuf buffer() { + return wrapped.buffer(); + } + + @Override + public ByteBuf buffer(int initialCapacity) { + return wrapped.buffer(initialCapacity); + } + + @Override + public ByteBuf buffer(int initialCapacity, int maxCapacity) { + return wrapped.buffer(initialCapacity, maxCapacity); + } + + @Override + public ByteBuf ioBuffer() { + return directBuffer(); + } + + @Override + public ByteBuf ioBuffer(int initialCapacity) { + return directBuffer(initialCapacity); + } + + @Override + public ByteBuf ioBuffer(int initialCapacity, int maxCapacity) { + return directBuffer(initialCapacity, maxCapacity); + } + + @Override + public ByteBuf heapBuffer() { + return wrapped.heapBuffer(); + } + + @Override + public ByteBuf heapBuffer(int initialCapacity) { + return wrapped.heapBuffer(initialCapacity); + } + + @Override + public ByteBuf heapBuffer(int initialCapacity, int maxCapacity) { + return wrapped.heapBuffer(initialCapacity, maxCapacity); + } + + @Override + public ByteBuf directBuffer() { + return wrapped.directBuffer(); + } + + @Override + public ByteBuf directBuffer(int initialCapacity) { + return wrapped.directBuffer(initialCapacity); + } + + @Override + public ByteBuf directBuffer(int initialCapacity, int maxCapacity) { + return wrapped.directBuffer(initialCapacity, maxCapacity); + } + + @Override + public CompositeByteBuf compositeBuffer() { + return wrapped.compositeBuffer(); + } + + @Override + public CompositeByteBuf compositeBuffer(int maxNumComponents) { + return wrapped.compositeBuffer(maxNumComponents); + } + + @Override + public CompositeByteBuf compositeHeapBuffer() { + return wrapped.compositeHeapBuffer(); + } + + @Override + public CompositeByteBuf compositeHeapBuffer(int maxNumComponents) { + return wrapped.compositeHeapBuffer(maxNumComponents); + } + + @Override + public CompositeByteBuf compositeDirectBuffer() { + return wrapped.compositeDirectBuffer(); + } + + @Override + public CompositeByteBuf compositeDirectBuffer(int maxNumComponents) { + return wrapped.compositeDirectBuffer(maxNumComponents); + } + + @Override + public boolean isDirectBufferPooled() { + return wrapped.isDirectBufferPooled(); + } + + @Override + public int calculateNewCapacity(int minNewCapacity, int maxCapacity) { + return wrapped.calculateNewCapacity(minNewCapacity, maxCapacity); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/EpollQuicUtils.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/EpollQuicUtils.java new file mode 100644 index 0000000..2e8b94f --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/EpollQuicUtils.java @@ -0,0 +1,65 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.epoll.SegmentedDatagramPacket; +import io.netty.channel.socket.DatagramPacket; +import io.netty.util.internal.ObjectUtil; + +import java.net.InetSocketAddress; + +/** + * Class that provides utility methods to setup {@code QUIC} when using the {@code EPOLL} transport. + */ +public final class EpollQuicUtils { + + private EpollQuicUtils() { } + + /** + * Return a new {@link SegmentedDatagramPacketAllocator} that can be used while using + * {@link io.netty.channel.epoll.EpollDatagramChannel}. + * + * @param maxNumSegments the maximum number of segments that we try to send in one packet. + * @return a allocator. + */ + public static SegmentedDatagramPacketAllocator newSegmentedAllocator(int maxNumSegments) { + ObjectUtil.checkInRange(maxNumSegments, 1, 64, "maxNumSegments"); + if (SegmentedDatagramPacket.isSupported()) { + return new EpollSegmentedDatagramPacketAllocator(maxNumSegments); + } + return SegmentedDatagramPacketAllocator.NONE; + } + + private static final class EpollSegmentedDatagramPacketAllocator implements SegmentedDatagramPacketAllocator { + + private final int maxNumSegments; + + EpollSegmentedDatagramPacketAllocator(int maxNumSegments) { + this.maxNumSegments = maxNumSegments; + } + + @Override + public int maxNumSegments() { + return maxNumSegments; + } + + @Override + public DatagramPacket newPacket(ByteBuf buffer, int segmentSize, InetSocketAddress remoteAddress) { + return new io.netty.channel.unix.SegmentedDatagramPacket(buffer, segmentSize, remoteAddress); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/FlushStrategy.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/FlushStrategy.java new file mode 100644 index 0000000..e4a441c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/FlushStrategy.java @@ -0,0 +1,60 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.ObjectUtil; + +/** + * Allows to configure a strategy for when flushes should be happening. + */ +public interface FlushStrategy { + + /** + * Default {@link FlushStrategy} implementation. + */ + FlushStrategy DEFAULT = afterNumBytes(20 * Quic.MAX_DATAGRAM_SIZE); + + /** + * Returns {@code true} if a flush should happen now, {@code false} otherwise. + * + * @param numPackets the number of packets that were written since the last flush. + * @param numBytes the number of bytes that were written since the last flush. + * @return {@code true} if a flush should be done now, {@code false} otherwise. + */ + boolean shouldFlushNow(int numPackets, int numBytes); + + /** + * Implementation that flushes after a number of bytes. + * + * @param bytes the number of bytes after which we should issue a flush. + * @return the {@link FlushStrategy}. + */ + static FlushStrategy afterNumBytes(int bytes) { + ObjectUtil.checkPositive(bytes, "bytes"); + return (numPackets, numBytes) -> numBytes > bytes; + } + + /** + * Implementation that flushes after a number of packets. + * + * @param packets the number of packets after which we should issue a flush. + * @return the {@link FlushStrategy}. + */ + static FlushStrategy afterNumPackets(int packets) { + ObjectUtil.checkPositive(packets, "packets"); + return (numPackets, numBytes) -> numPackets > packets; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java new file mode 100644 index 0000000..cad5897 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Hmac.java @@ -0,0 +1,67 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.concurrent.FastThreadLocal; + +import javax.crypto.Mac; +import javax.crypto.spec.SecretKeySpec; +import java.nio.ByteBuffer; +import java.security.InvalidKeyException; +import java.security.NoSuchAlgorithmException; +import java.security.SecureRandom; +import java.util.Arrays; + +final class Hmac { + + private static final FastThreadLocal MACS = new FastThreadLocal() { + @Override + protected Mac initialValue() { + return newMac(); + } + }; + + private static final String ALGORITM = "HmacSHA256"; + private static final byte[] randomKey = new byte[16]; + + static { + new SecureRandom().nextBytes(randomKey); + } + + private static Mac newMac() { + try { + SecretKeySpec keySpec = new SecretKeySpec(randomKey, ALGORITM); + Mac mac = Mac.getInstance(ALGORITM); + mac.init(keySpec); + return mac; + } catch (NoSuchAlgorithmException | InvalidKeyException exception) { + throw new IllegalStateException(exception); + } + } + + static ByteBuffer sign(ByteBuffer input, int outLength) { + Mac mac = MACS.get(); + mac.reset(); + mac.update(input); + byte[] signBytes = mac.doFinal(); + if (signBytes.length != outLength) { + signBytes = Arrays.copyOf(signBytes, outLength); + } + return ByteBuffer.wrap(signBytes); + } + + private Hmac() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicConnectionIdGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicConnectionIdGenerator.java new file mode 100644 index 0000000..db7147b --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicConnectionIdGenerator.java @@ -0,0 +1,56 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.nio.ByteBuffer; + +import io.netty.util.internal.ObjectUtil; + +/** + * A {@link QuicConnectionIdGenerator} which creates new connection id by signing the given input + * using hmac algorithms. + */ +final class HmacSignQuicConnectionIdGenerator implements QuicConnectionIdGenerator { + static final QuicConnectionIdGenerator INSTANCE = new HmacSignQuicConnectionIdGenerator(); + + private HmacSignQuicConnectionIdGenerator() { + } + + @Override + public ByteBuffer newId(int length) { + throw new UnsupportedOperationException( + "HmacSignQuicConnectionIdGenerator should always have an input to sign with"); + } + + @Override + public ByteBuffer newId(ByteBuffer buffer, int length) { + ObjectUtil.checkNotNull(buffer, "buffer"); + ObjectUtil.checkPositive(buffer.remaining(), "buffer"); + ObjectUtil.checkInRange(length, 0, maxConnectionIdLength(), "length"); + + return Hmac.sign(buffer, length); + } + + @Override + public int maxConnectionIdLength() { + return Quiche.QUICHE_MAX_CONN_ID_LEN; + } + + @Override + public boolean isIdempotent() { + return true; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicResetTokenGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicResetTokenGenerator.java new file mode 100644 index 0000000..e52e6e5 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/HmacSignQuicResetTokenGenerator.java @@ -0,0 +1,39 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.ObjectUtil; + +import java.nio.ByteBuffer; + +/** + * A {@link QuicResetTokenGenerator} which creates new reset token by using the connection id by signing the given input + * using HMAC algorithms. + */ +final class HmacSignQuicResetTokenGenerator implements QuicResetTokenGenerator { + static final QuicResetTokenGenerator INSTANCE = new HmacSignQuicResetTokenGenerator(); + + private HmacSignQuicResetTokenGenerator() { + } + + + @Override + public ByteBuffer newResetToken(ByteBuffer cid) { + ObjectUtil.checkNotNull(cid, "cid"); + ObjectUtil.checkPositive(cid.remaining(), "cid"); + return Hmac.sign(cid, Quic.RESET_TOKEN_LEN); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/InsecureQuicTokenHandler.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/InsecureQuicTokenHandler.java new file mode 100644 index 0000000..278e08c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/InsecureQuicTokenHandler.java @@ -0,0 +1,84 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.util.CharsetUtil; +import io.netty.util.NetUtil; + +import java.net.InetSocketAddress; + +/** + * Insecure {@link QuicTokenHandler} which only does basic token generation / validation without any + * crypto. + * + * This shouldn't be used in production. + */ +public final class InsecureQuicTokenHandler implements QuicTokenHandler { + + private static final String SERVER_NAME = "netty"; + private static final byte[] SERVER_NAME_BYTES = SERVER_NAME.getBytes(CharsetUtil.US_ASCII); + private static final ByteBuf SERVER_NAME_BUFFER = Unpooled.unreleasableBuffer( + Unpooled.wrappedBuffer(SERVER_NAME_BYTES)).asReadOnly(); + + // Just package-private for unit tests + static final int MAX_TOKEN_LEN = Quiche.QUICHE_MAX_CONN_ID_LEN + + NetUtil.LOCALHOST6.getAddress().length + SERVER_NAME_BYTES.length; + + private InsecureQuicTokenHandler() { + Quic.ensureAvailability(); + } + + public static final InsecureQuicTokenHandler INSTANCE = new InsecureQuicTokenHandler(); + + @Override + public boolean writeToken(ByteBuf out, ByteBuf dcid, InetSocketAddress address) { + byte[] addr = address.getAddress().getAddress(); + out.writeBytes(SERVER_NAME_BYTES) + .writeBytes(addr) + .writeBytes(dcid, dcid.readerIndex(), dcid.readableBytes()); + return true; + } + + @Override + public int validateToken(ByteBuf token, InetSocketAddress address) { + final byte[] addr = address.getAddress().getAddress(); + + int minLength = SERVER_NAME_BYTES.length + address.getAddress().getAddress().length; + if (token.readableBytes() <= SERVER_NAME_BYTES.length + addr.length) { + return -1; + } + + if (!SERVER_NAME_BUFFER.equals(token.slice(0, SERVER_NAME_BYTES.length))) { + return -1; + } + ByteBuf addressBuffer = Unpooled.wrappedBuffer(addr); + try { + if (!addressBuffer.equals(token.slice(SERVER_NAME_BYTES.length, addr.length))) { + return -1; + } + } finally { + addressBuffer.release(); + } + return minLength; + } + + @Override + public int maxTokenLength() { + return MAX_TOKEN_LEN; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/NoQuicTokenHandler.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/NoQuicTokenHandler.java new file mode 100644 index 0000000..695dd23 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/NoQuicTokenHandler.java @@ -0,0 +1,48 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; + +import java.net.InetSocketAddress; + +/** + * {@link QuicTokenHandler} which will disable token generation / validation completely. + * This will reduce the round-trip for QUIC connection migration, but will also weaking the + * security during connection establishment. + */ +final class NoQuicTokenHandler implements QuicTokenHandler { + + public final static QuicTokenHandler INSTANCE = new NoQuicTokenHandler(); + + private NoQuicTokenHandler() { + } + + @Override + public boolean writeToken(ByteBuf out, ByteBuf dcid, InetSocketAddress address) { + return false; + } + + @Override + public int validateToken(ByteBuf token, InetSocketAddress address) { + return 0; + } + + @Override + public int maxTokenLength() { + return 0; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QLogConfiguration.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QLogConfiguration.java new file mode 100644 index 0000000..0c99db8 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QLogConfiguration.java @@ -0,0 +1,70 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.util.Objects; + +/** + * Configuration used for setup + * qlog. + */ +public final class QLogConfiguration { + + private final String path; + private final String logTitle; + private final String logDescription; + + /** + * Create a new configuration. + * + * @param path the path to the log file to use. This file must not exist yet. If the path is a + * directory the filename will be generated + * @param logTitle the title to use when logging. + * @param logDescription the description to use when logging. + */ + public QLogConfiguration(String path, String logTitle, String logDescription) { + this.path = Objects.requireNonNull(path, "path"); + this.logTitle = Objects.requireNonNull(logTitle, "logTitle"); + this.logDescription = Objects.requireNonNull(logDescription, "logDescription"); + } + + /** + * Return the path to the log file. + * + * @return the path. + */ + public String path() { + return path; + } + + /** + * Return the title. + * + * @return the title. + */ + public String logTitle() { + return logTitle; + } + + /** + * Return the description. + * + * @return the description. + */ + public String logDescription() { + return logDescription; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quic.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quic.java new file mode 100644 index 0000000..0e51d0d --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quic.java @@ -0,0 +1,167 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelOption; +import io.netty.util.AttributeKey; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.logging.InternalLogger; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +public final class Quic { + @SuppressWarnings("unchecked") + static final Map.Entry, Object>[] EMPTY_OPTION_ARRAY = new Map.Entry[0]; + @SuppressWarnings("unchecked") + static final Map.Entry, Object>[] EMPTY_ATTRIBUTE_ARRAY = new Map.Entry[0]; + + static final int MAX_DATAGRAM_SIZE = 1350; + + static final int RESET_TOKEN_LEN = 16; + + private static final Throwable UNAVAILABILITY_CAUSE; + + static { + Throwable cause = null; + + try { + String version = Quiche.quiche_version(); + assert version != null; + } catch (Throwable error) { + cause = error; + } + + UNAVAILABILITY_CAUSE = cause; + } + + /** + * Return if the given QUIC version is supported. + * + * @param version the version. + * @return {@code true} if supported, {@code false} otherwise. + */ + public static boolean isVersionSupported(int version) { + return isAvailable() && Quiche.quiche_version_is_supported(version); + } + + /** + * Returns {@code true} if and only if the QUIC implementation is usable on the running platform is available. + * + * @return {@code true} if this QUIC implementation can be used on the current platform, {@code false} otherwise. + */ + public static boolean isAvailable() { + return UNAVAILABILITY_CAUSE == null; + } + + /** + * Ensure that QUIC implementation is usable on the running platform is available. + * + * @throws UnsatisfiedLinkError if unavailable + */ + public static void ensureAvailability() { + if (UNAVAILABILITY_CAUSE != null) { + throw (Error) new UnsatisfiedLinkError( + "failed to load the required native library").initCause(UNAVAILABILITY_CAUSE); + } + } + + /** + * Returns the cause of unavailability. + * + * @return the cause if unavailable. {@code null} if available. + */ + public static Throwable unavailabilityCause() { + return UNAVAILABILITY_CAUSE; + } + + static Map.Entry, Object>[] toOptionsArray(Map, Object> opts) { + return new HashMap<>(opts).entrySet().toArray(EMPTY_OPTION_ARRAY); + } + + static Map.Entry, Object>[] toAttributesArray(Map, Object> attributes) { + return new LinkedHashMap<>(attributes).entrySet().toArray(EMPTY_ATTRIBUTE_ARRAY); + } + + private static void setAttributes(Channel channel, Map.Entry, Object>[] attrs) { + for (Map.Entry, Object> e: attrs) { + @SuppressWarnings("unchecked") + AttributeKey key = (AttributeKey) e.getKey(); + channel.attr(key).set(e.getValue()); + } + } + + private static void setChannelOptions( + Channel channel, Map.Entry, Object>[] options, InternalLogger logger) { + for (Map.Entry, Object> e: options) { + setChannelOption(channel, e.getKey(), e.getValue(), logger); + } + } + + @SuppressWarnings("unchecked") + private static void setChannelOption( + Channel channel, ChannelOption option, Object value, InternalLogger logger) { + try { + if (!channel.config().setOption((ChannelOption) option, value)) { + logger.warn("Unknown channel option '{}' for channel '{}'", option, channel); + } + } catch (Throwable t) { + logger.warn( + "Failed to set channel option '{}' with value '{}' for channel '{}'", option, value, channel, t); + } + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicStreamChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + */ + static void updateOptions(Map, Object> options, ChannelOption option, T value) { + ObjectUtil.checkNotNull(option, "option"); + if (value == null) { + options.remove(option); + } else { + options.put(option, value); + } + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicStreamChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + */ + static void updateAttributes(Map, Object> attributes, AttributeKey key, T value) { + ObjectUtil.checkNotNull(key, "key"); + if (value == null) { + attributes.remove(key); + } else { + attributes.put(key, value); + } + } + + static void setupChannel(Channel ch, Map.Entry, Object>[] options, + Map.Entry, Object>[] attrs, ChannelHandler handler, + InternalLogger logger) { + Quic.setChannelOptions(ch, options, logger); + Quic.setAttributes(ch, attrs); + if (handler != null) { + ch.pipeline().addLast(handler); + } + } + + private Quic() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannel.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannel.java new file mode 100644 index 0000000..a8394a1 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannel.java @@ -0,0 +1,274 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelProgressivePromise; +import io.netty.channel.ChannelPromise; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; + +import javax.net.ssl.SSLEngine; +import java.net.SocketAddress; + +/** + * A QUIC {@link Channel}. + */ +public interface QuicChannel extends Channel { + + @Override + default ChannelFuture bind(SocketAddress localAddress) { + return pipeline().bind(localAddress); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress) { + return pipeline().connect(remoteAddress); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) { + return pipeline().connect(remoteAddress, localAddress); + } + + @Override + default ChannelFuture disconnect() { + return pipeline().disconnect(); + } + + @Override + default ChannelFuture close() { + return pipeline().close(); + } + + @Override + default ChannelFuture deregister() { + return pipeline().deregister(); + } + + @Override + default ChannelFuture bind(SocketAddress localAddress, ChannelPromise promise) { + return pipeline().bind(localAddress, promise); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise promise) { + return pipeline().connect(remoteAddress, promise); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise promise) { + return pipeline().connect(remoteAddress, localAddress, promise); + } + + @Override + default ChannelFuture disconnect(ChannelPromise promise) { + return pipeline().disconnect(promise); + } + + @Override + default ChannelFuture close(ChannelPromise promise) { + return pipeline().close(promise); + } + + @Override + default ChannelFuture deregister(ChannelPromise promise) { + return pipeline().deregister(promise); + } + + @Override + default ChannelFuture write(Object msg) { + return pipeline().write(msg); + } + + @Override + default ChannelFuture write(Object msg, ChannelPromise promise) { + return pipeline().write(msg, promise); + } + + @Override + default ChannelFuture writeAndFlush(Object msg, ChannelPromise promise) { + return pipeline().writeAndFlush(msg, promise); + } + + @Override + default ChannelFuture writeAndFlush(Object msg) { + return pipeline().writeAndFlush(msg); + } + + @Override + default ChannelPromise newPromise() { + return pipeline().newPromise(); + } + + @Override + default ChannelProgressivePromise newProgressivePromise() { + return pipeline().newProgressivePromise(); + } + + @Override + default ChannelFuture newSucceededFuture() { + return pipeline().newSucceededFuture(); + } + + @Override + default ChannelFuture newFailedFuture(Throwable cause) { + return pipeline().newFailedFuture(cause); + } + + @Override + default ChannelPromise voidPromise() { + return pipeline().voidPromise(); + } + + @Override + QuicChannel read(); + + @Override + QuicChannel flush(); + + /** + * Returns the configuration of this channel. + */ + @Override + QuicChannelConfig config(); + + /** + * Returns the used {@link SSLEngine} or {@code null} if none is used (yet). + * + * @return the engine. + */ + SSLEngine sslEngine(); + + /** + * Returns the number of streams that can be created before stream creation will fail + * with {@link QuicError#STREAM_LIMIT} error. + * + * @param type the stream type. + * @return the number of streams left. + */ + long peerAllowedStreams(QuicStreamType type); + + /** + * Returns {@code true} if the connection was closed because of idle timeout. + * + * @return {@code true} if the connection was closed because of idle timeout, {@code false}. + */ + boolean isTimedOut(); + + /** + * Returns the {@link QuicTransportParameters} of the peer once received, or {@code null} if not known yet. + * + * @return peerTransportParams. + */ + QuicTransportParameters peerTransportParameters(); + + /** + * Creates a stream that is using this {@link QuicChannel} and notifies the {@link Future} once done. + * The {@link ChannelHandler} (if not {@code null}) is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicStreamChannel} automatically. + * + * @param type the {@link QuicStreamType} of the {@link QuicStreamChannel}. + * @param handler the {@link ChannelHandler} that will be added to the {@link QuicStreamChannel}s + * {@link io.netty.channel.ChannelPipeline} during the stream creation. + * @return the {@link Future} that will be notified once the operation completes. + */ + default Future createStream(QuicStreamType type, ChannelHandler handler) { + return createStream(type, handler, eventLoop().newPromise()); + } + + /** + * Creates a stream that is using this {@link QuicChannel} and notifies the {@link Promise} once done. + * The {@link ChannelHandler} (if not {@code null}) is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicStreamChannel} automatically. + * + * @param type the {@link QuicStreamType} of the {@link QuicStreamChannel}. + * @param handler the {@link ChannelHandler} that will be added to the {@link QuicStreamChannel}s + * {@link io.netty.channel.ChannelPipeline} during the stream creation. + * @param promise the {@link ChannelPromise} that will be notified once the operation completes. + * @return the {@link Future} that will be notified once the operation completes. + */ + Future createStream(QuicStreamType type, ChannelHandler handler, + Promise promise); + + /** + * Returns a new {@link QuicStreamChannelBootstrap} which makes it easy to bootstrap new {@link QuicStreamChannel}s + * with custom options and attributes. For simpler use-cases you may want to consider using + * {@link #createStream(QuicStreamType, ChannelHandler)} or + * {@link #createStream(QuicStreamType, ChannelHandler, Promise)} directly. + * + * @return {@link QuicStreamChannelBootstrap} that can be used to bootstrap a {@link QuicStreamChannel}. + */ + default QuicStreamChannelBootstrap newStreamBootstrap() { + return new QuicStreamChannelBootstrap(this); + } + + /** + * Close the {@link QuicChannel} + * + * @param applicationClose {@code true} if an application close should be used, + * {@code false} if a normal close should be used. + * @param error the application error number, or {@code 0} if no special error should be signaled. + * @param reason the reason for the closure (which may be an empty {@link ByteBuf}. + * @return the future that is notified. + */ + default ChannelFuture close(boolean applicationClose, int error, ByteBuf reason) { + return close(applicationClose, error, reason, newPromise()); + } + + /** + * Close the {@link QuicChannel} + * + * @param applicationClose {@code true} if an application close should be used, + * {@code false} if a normal close should be used. + * @param error the application error number, or {@code 0} if no special error should be signaled. + * @param reason the reason for the closure (which may be an empty {@link ByteBuf}. + * @param promise the {@link ChannelPromise} that will be notified. + * @return the future that is notified. + */ + ChannelFuture close(boolean applicationClose, int error, ByteBuf reason, ChannelPromise promise); + + /** + * Collects statistics about the connection and notifies the {@link Future} once done. + * + * @return the {@link Future} that is notified once the stats were collected. + */ + default Future collectStats() { + return collectStats(eventLoop().newPromise()); + } + + /** + * Collects statistics about the connection and notifies the {@link Promise} once done. + * + * @param promise the {@link ChannelPromise} that is notified once the stats were collected. + * @return the {@link Future} that is notified once the stats were collected. + */ + Future collectStats(Promise promise); + + /** + * Creates a new {@link QuicChannelBootstrap} that can be used to create and connect new {@link QuicChannel}s to + * endpoints using the given {@link Channel} as transport layer. + * + * @param channel the {@link Channel} that is used as transport layer. + * @return {@link QuicChannelBootstrap} that can be used to bootstrap a client side {@link QuicChannel}. + */ + static QuicChannelBootstrap newBootstrap(Channel channel) { + return new QuicChannelBootstrap(channel); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelBootstrap.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelBootstrap.java new file mode 100644 index 0000000..6976491 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelBootstrap.java @@ -0,0 +1,244 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelOption; +import io.netty.channel.EventLoop; +import io.netty.util.AttributeKey; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Bootstrap that helps to bootstrap {@link QuicChannel}s and connecting these to remote peers. + */ +public final class QuicChannelBootstrap { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(QuicChannelBootstrap.class); + + private final Channel parent; + // The order in which ChannelOptions are applied is important they may depend on each other for validation + // purposes. + private final Map, Object> options = new LinkedHashMap<>(); + private final Map, Object> attrs = new HashMap<>(); + private final Map, Object> streamOptions = new LinkedHashMap<>(); + private final Map, Object> streamAttrs = new HashMap<>(); + + private SocketAddress local; + private SocketAddress remote; + private QuicConnectionAddress connectionAddress = QuicConnectionAddress.EPHEMERAL; + private ChannelHandler handler; + private ChannelHandler streamHandler; + + /** + * Creates a new instance which uses the given {@link Channel} to bootstrap the {@link QuicChannel}. + * This {@link io.netty.channel.ChannelPipeline} of the {@link Channel} needs to have the quic codec in the + * pipeline. + * + * @param parent the {@link Channel} that is used as the transport layer. + */ + QuicChannelBootstrap(Channel parent) { + Quic.ensureAvailability(); + this.parent = ObjectUtil.checkNotNull(parent, "parent"); + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + * + * @param option the {@link ChannelOption} to apply to the {@link QuicChannel}. + * @param value the value of the option. + * @param the type of the value. + * @return this instance. + */ + public QuicChannelBootstrap option(ChannelOption option, T value) { + Quic.updateOptions(options, option, value); + return this; + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + * + * @param key the {@link AttributeKey} to apply to the {@link QuicChannel}. + * @param value the value of the attribute. + * @param the type of the value. + * @return this instance. + */ + public QuicChannelBootstrap attr(AttributeKey key, T value) { + Quic.updateAttributes(attrs, key, value); + return this; + } + + /** + * Set the {@link ChannelHandler} that is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicChannel} once created. + * + * @param handler the {@link ChannelHandler} that is added to the {@link QuicChannel}s + * {@link io.netty.channel.ChannelPipeline}. + * @return this instance. + */ + public QuicChannelBootstrap handler(ChannelHandler handler) { + this.handler = ObjectUtil.checkNotNull(handler, "handler"); + return this; + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicStreamChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + * + * @param option the {@link ChannelOption} to apply to the {@link QuicStreamChannel}s. + * @param value the value of the option. + * @param the type of the value. + * @return this instance. + */ + public QuicChannelBootstrap streamOption(ChannelOption option, T value) { + Quic.updateOptions(streamOptions, option, value); + return this; + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicStreamChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + * + * @param key the {@link AttributeKey} to apply to the {@link QuicStreamChannel}s. + * @param value the value of the attribute. + * @param the type of the value. + * @return this instance. + */ + public QuicChannelBootstrap streamAttr(AttributeKey key, T value) { + Quic.updateAttributes(streamAttrs, key, value); + return this; + } + + /** + * Set the {@link ChannelHandler} that is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicStreamChannel} once created. + * + * @param streamHandler the {@link ChannelHandler} that is added to the {@link QuicStreamChannel}s + * {@link io.netty.channel.ChannelPipeline}. + * @return this instance. + */ + public QuicChannelBootstrap streamHandler(ChannelHandler streamHandler) { + this.streamHandler = ObjectUtil.checkNotNull(streamHandler, "streamHandler"); + return this; + } + + /** + * Set the local address. + * + * @param local the {@link SocketAddress} of the local peer. + * @return this instance. + */ + public QuicChannelBootstrap localAddress(SocketAddress local) { + this.local = ObjectUtil.checkNotNull(local, "local"); + return this; + } + + /** + * Set the remote address of the host to talk to. + * + * @param remote the {@link SocketAddress} of the remote peer. + * @return this instance. + */ + public QuicChannelBootstrap remoteAddress(SocketAddress remote) { + this.remote = ObjectUtil.checkNotNull(remote, "remote"); + return this; + } + + /** + * Set the {@link QuicConnectionAddress} to use. If none is specified a random address is generated on your + * behalf. + * + * @param connectionAddress the {@link QuicConnectionAddress} to use. + * @return this instance. + */ + public QuicChannelBootstrap connectionAddress(QuicConnectionAddress connectionAddress) { + this.connectionAddress = ObjectUtil.checkNotNull(connectionAddress, "connectionAddress"); + return this; + } + + /** + * Connects a {@link QuicChannel} to the remote peer and notifies the future once done. + * + * @return {@link Future} which is notified once the operation completes. + */ + public Future connect() { + return connect(parent.eventLoop().newPromise()); + } + + /** + * Connects a {@link QuicChannel} to the remote peer and notifies the promise once done. + * + * @param promise the {@link Promise} which is notified once the operations completes. + * @return {@link Future} which is notified once the operation completes. + + */ + public Future connect(Promise promise) { + if (handler == null && streamHandler == null) { + throw new IllegalStateException("handler and streamHandler not set"); + } + SocketAddress local = this.local; + if (local == null) { + local = parent.localAddress(); + } + if (local == null) { + local = new InetSocketAddress(0); + } + + SocketAddress remote = this.remote; + if (remote == null) { + remote = parent.remoteAddress(); + } + if (remote == null) { + throw new IllegalStateException("remote not set"); + } + + final QuicConnectionAddress address = connectionAddress; + QuicChannel channel = QuicheQuicChannel.forClient(parent, (InetSocketAddress) local, + (InetSocketAddress) remote, + streamHandler, Quic.toOptionsArray(streamOptions), Quic.toAttributesArray(streamAttrs)); + + Quic.setupChannel(channel, Quic.toOptionsArray(options), Quic.toAttributesArray(attrs), handler, logger); + EventLoop eventLoop = parent.eventLoop(); + eventLoop.register(channel).addListener((ChannelFuture future) -> { + Throwable cause = future.cause(); + if (cause != null) { + promise.setFailure(cause); + } else { + channel.connect(address).addListener(f -> { + Throwable error = f.cause(); + if (error != null) { + promise.setFailure(error); + } else { + promise.setSuccess(channel); + } + }); + } + }); + return promise; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelConfig.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelConfig.java new file mode 100644 index 0000000..9e3336f --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelConfig.java @@ -0,0 +1,62 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelConfig; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; + +/** + * A QUIC {@link ChannelConfig}. + */ +public interface QuicChannelConfig extends ChannelConfig { + + @Override + @Deprecated + QuicChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead); + + @Override + QuicChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis); + + @Override + QuicChannelConfig setWriteSpinCount(int writeSpinCount); + + @Override + QuicChannelConfig setAllocator(ByteBufAllocator allocator); + + @Override + QuicChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator); + + @Override + QuicChannelConfig setAutoRead(boolean autoRead); + + @Override + QuicChannelConfig setAutoClose(boolean autoClose); + + @Override + QuicChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark); + + @Override + QuicChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark); + + @Override + QuicChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark); + + @Override + QuicChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelOption.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelOption.java new file mode 100644 index 0000000..41ebe4d --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicChannelOption.java @@ -0,0 +1,50 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelOption; + +/** + * {@link ChannelOption}s specific to QUIC. + */ +public final class QuicChannelOption extends ChannelOption { + + /** + * If set to {@code true} the {@link QuicStreamChannel} will read {@link QuicStreamFrame}s and fire it through + * the pipeline, if {@code false} it will read {@link io.netty.buffer.ByteBuf} and translate the FIN flag to + * events. + */ + public static final ChannelOption READ_FRAMES = + valueOf(QuicChannelOption.class, "READ_FRAMES"); + + /** + * Enable qlog + * for a {@link QuicChannel}. + */ + public static final ChannelOption QLOG = valueOf(QuicChannelOption.class, "QLOG"); + + /** + * Use GSO + * for QUIC packets if possible. + */ + public static final ChannelOption SEGMENTED_DATAGRAM_PACKET_ALLOCATOR = + valueOf(QuicChannelOption.class, "SEGMENTED_DATAGRAM_PACKET_ALLOCATOR"); + + @SuppressWarnings({ "deprecation" }) + private QuicChannelOption() { + super(null); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientCodecBuilder.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientCodecBuilder.java new file mode 100644 index 0000000..89df278 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientCodecBuilder.java @@ -0,0 +1,52 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelHandler; + +import java.util.concurrent.Executor; +import java.util.function.Function; + +/** + * {@link QuicCodecBuilder} that configures and builds a {@link ChannelHandler} that should be added to the + * {@link io.netty.channel.ChannelPipeline} of a {@code QUIC} client. + */ +public final class QuicClientCodecBuilder extends QuicCodecBuilder { + + /** + * Creates a new instance. + */ + public QuicClientCodecBuilder() { + super(false); + } + + private QuicClientCodecBuilder(QuicCodecBuilder builder) { + super(builder); + } + + @Override + public QuicClientCodecBuilder clone() { + return new QuicClientCodecBuilder(this); + } + + @Override + protected ChannelHandler build(QuicheConfig config, + Function sslEngineProvider, + Executor sslTaskExecutor, + int localConnIdLength, FlushStrategy flushStrategy) { + return new QuicheQuicClientCodec(config, sslEngineProvider, sslTaskExecutor, localConnIdLength, flushStrategy); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientSessionCache.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientSessionCache.java new file mode 100644 index 0000000..1ff5b91 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClientSessionCache.java @@ -0,0 +1,244 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.AsciiString; +import io.netty.util.internal.SystemPropertyUtil; + +import java.util.Iterator; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.atomic.AtomicInteger; + +final class QuicClientSessionCache { + + private static final int DEFAULT_CACHE_SIZE; + static { + // Respect the same system property as the JDK implementation to make it easy to switch between implementations. + int cacheSize = SystemPropertyUtil.getInt("javax.net.ssl.sessionCacheSize", 20480); + if (cacheSize >= 0) { + DEFAULT_CACHE_SIZE = cacheSize; + } else { + DEFAULT_CACHE_SIZE = 20480; + } + } + + private final AtomicInteger maximumCacheSize = new AtomicInteger(DEFAULT_CACHE_SIZE); + + // Let's use the same default value as OpenSSL does. + // See https://www.openssl.org/docs/man1.1.1/man3/SSL_get_default_timeout.html + private final AtomicInteger sessionTimeout = new AtomicInteger(300); + private int sessionCounter; + + private final Map sessions = + new LinkedHashMap() { + + private static final long serialVersionUID = -7773696788135734448L; + + @Override + protected boolean removeEldestEntry(Map.Entry eldest) { + int maxSize = maximumCacheSize.get(); + return maxSize >= 0 && size() > maxSize; + } + }; + + void saveSession(String host, int port, long creationTime, long timeout, byte[] session, boolean isSingleUse) { + HostPort hostPort = keyFor(host, port); + if (hostPort != null) { + synchronized (sessions) { + // Mimic what OpenSSL is doing and expunge every 255 new sessions + // See https://www.openssl.org/docs/man1.0.2/man3/SSL_CTX_flush_sessions.html + if (++sessionCounter == 255) { + sessionCounter = 0; + expungeInvalidSessions(); + } + + sessions.put(hostPort, new SessionHolder(creationTime, timeout, session, isSingleUse)); + } + } + } + + // Only used for testing. + boolean hasSession(String host, int port) { + HostPort hostPort = keyFor(host, port); + if (hostPort != null) { + synchronized (sessions) { + return sessions.containsKey(hostPort); + } + } + return false; + } + + byte[] getSession(String host, int port) { + HostPort hostPort = keyFor(host, port); + if (hostPort != null) { + SessionHolder sessionHolder; + synchronized (sessions) { + sessionHolder = sessions.get(hostPort); + if (sessionHolder == null) { + return null; + } + if (sessionHolder.isSingleUse()) { + // Remove session as it should only be re-used once. + sessions.remove(hostPort); + } + } + if (sessionHolder.isValid()) { + return sessionHolder.sessionBytes(); + } + } + return null; + } + + void removeSession(String host, int port) { + HostPort hostPort = keyFor(host, port); + if (hostPort != null) { + synchronized (sessions) { + sessions.remove(hostPort); + } + } + } + + void setSessionTimeout(int seconds) { + int oldTimeout = sessionTimeout.getAndSet(seconds); + if (oldTimeout > seconds) { + // Drain the whole cache as this way we can use the ordering of the LinkedHashMap to detect early + // if there are any other sessions left that are invalid. + clear(); + } + } + + int getSessionTimeout() { + return sessionTimeout.get(); + } + + void setSessionCacheSize(int size) { + long oldSize = maximumCacheSize.getAndSet(size); + if (oldSize > size || size == 0) { + // Just keep it simple for now and drain the whole cache. + clear(); + } + } + + int getSessionCacheSize() { + return maximumCacheSize.get(); + } + + /** + * Clear the cache and free all cached SSL_SESSION*. + */ + void clear() { + synchronized (sessions) { + sessions.clear(); + } + } + + + private void expungeInvalidSessions() { + assert Thread.holdsLock(sessions); + + if (sessions.isEmpty()) { + return; + } + long now = System.currentTimeMillis(); + Iterator> iterator = sessions.entrySet().iterator(); + while (iterator.hasNext()) { + SessionHolder sessionHolder = iterator.next().getValue(); + // As we use a LinkedHashMap we can break the while loop as soon as we find a valid session. + // This is true as we always drain the cache as soon as we change the timeout to a smaller value as + // it was set before. This way its true that the insertion order matches the timeout order. + if (sessionHolder.isValid(now)) { + break; + } + iterator.remove(); + } + } + + private static HostPort keyFor(String host, int port) { + if (host == null && port < 1) { + return null; + } + return new HostPort(host, port); + } + + private static final class SessionHolder { + private final long creationTime; + private final long timeout; + private final byte[] sessionBytes; + private final boolean isSingleUse; + + SessionHolder(long creationTime, long timeout, byte[] session, boolean isSingleUse) { + this.creationTime = creationTime; + this.timeout = timeout; + this.sessionBytes = session; + this.isSingleUse = isSingleUse; + } + + boolean isValid() { + return isValid(System.currentTimeMillis()); + } + + boolean isValid(long current) { + return current <= creationTime + timeout; + } + + boolean isSingleUse() { + return isSingleUse; + } + + byte[] sessionBytes() { + return sessionBytes; + } + } + + /** + * Host / Port tuple used to find a session in the cache. + */ + private static final class HostPort { + private final int hash; + private final String host; + private final int port; + + HostPort(String host, int port) { + this.host = host; + this.port = port; + // Calculate a hashCode that does ignore case. + this.hash = 31 * AsciiString.hashCode(host) + port; + } + + @Override + public int hashCode() { + return hash; + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof HostPort)) { + return false; + } + HostPort other = (HostPort) obj; + return port == other.port && host.equalsIgnoreCase(other.host); + } + + @Override + public String toString() { + return "HostPort{" + + "host='" + host + '\'' + + ", port=" + port + + '}'; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClosedChannelException.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClosedChannelException.java new file mode 100644 index 0000000..f665b67 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicClosedChannelException.java @@ -0,0 +1,40 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.nio.channels.ClosedChannelException; + +/** + * Special {@link QuicClosedChannelException} which also provides extra info if the close was a result of a + * {@link QuicConnectionCloseEvent} that was triggered by the remote peer. + */ +public final class QuicClosedChannelException extends ClosedChannelException { + + private final QuicConnectionCloseEvent event; + + QuicClosedChannelException(QuicConnectionCloseEvent event) { + this.event = event; + } + + /** + * Returns the {@link QuicConnectionCloseEvent} that caused the closure or {@code null} if none was received. + * + * @return the event. + */ + public QuicConnectionCloseEvent event() { + return event; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCodecBuilder.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCodecBuilder.java new file mode 100644 index 0000000..9c6a764 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCodecBuilder.java @@ -0,0 +1,508 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelHandler; + +import java.util.Objects; +import java.util.concurrent.Executor; +import java.util.concurrent.TimeUnit; +import java.util.function.Function; + +import static io.netty.util.internal.ObjectUtil.checkInRange; +import static io.netty.util.internal.ObjectUtil.checkPositive; +import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero; + +/** + * Abstract base class for {@code QUIC} codec builders. + * + * @param the type of the {@link QuicCodecBuilder}. + */ +public abstract class QuicCodecBuilder> { + private final boolean server; + private Boolean grease; + private Long maxIdleTimeout; + private Long maxRecvUdpPayloadSize; + private Long maxSendUdpPayloadSize; + private Long initialMaxData; + private Long initialMaxStreamDataBidiLocal; + private Long initialMaxStreamDataBidiRemote; + private Long initialMaxStreamDataUni; + private Long initialMaxStreamsBidi; + private Long initialMaxStreamsUni; + private Long ackDelayExponent; + private Long maxAckDelay; + private Boolean disableActiveMigration; + private Boolean enableHystart; + private QuicCongestionControlAlgorithm congestionControlAlgorithm; + private int localConnIdLength; + private Function sslEngineProvider; + private FlushStrategy flushStrategy = FlushStrategy.DEFAULT; + private Integer recvQueueLen; + private Integer sendQueueLen; + private Long activeConnectionIdLimit; + private byte[] statelessResetToken; + + private Executor sslTaskExecutor; + + // package-private for testing only + int version; + + QuicCodecBuilder(boolean server) { + Quic.ensureAvailability(); + this.version = Quiche.QUICHE_PROTOCOL_VERSION; + this.localConnIdLength = Quiche.QUICHE_MAX_CONN_ID_LEN; + this.server = server; + } + + QuicCodecBuilder(QuicCodecBuilder builder) { + Quic.ensureAvailability(); + this.server = builder.server; + this.grease = builder.grease; + this.maxIdleTimeout = builder.maxIdleTimeout; + this.maxRecvUdpPayloadSize = builder.maxRecvUdpPayloadSize; + this.maxSendUdpPayloadSize = builder.maxSendUdpPayloadSize; + this.initialMaxData = builder.initialMaxData; + this.initialMaxStreamDataBidiLocal = builder.initialMaxStreamDataBidiLocal; + this.initialMaxStreamDataBidiRemote = builder.initialMaxStreamDataBidiRemote; + this.initialMaxStreamDataUni = builder.initialMaxStreamDataUni; + this.initialMaxStreamsBidi = builder.initialMaxStreamsBidi; + this.initialMaxStreamsUni = builder.initialMaxStreamsUni; + this.ackDelayExponent = builder.ackDelayExponent; + this.maxAckDelay = builder.maxAckDelay; + this.disableActiveMigration = builder.disableActiveMigration; + this.enableHystart = builder.enableHystart; + this.congestionControlAlgorithm = builder.congestionControlAlgorithm; + this.localConnIdLength = builder.localConnIdLength; + this.sslEngineProvider = builder.sslEngineProvider; + this.flushStrategy = builder.flushStrategy; + this.recvQueueLen = builder.recvQueueLen; + this.sendQueueLen = builder.sendQueueLen; + this.activeConnectionIdLimit = builder.activeConnectionIdLimit; + this.statelessResetToken = builder.statelessResetToken; + this.sslTaskExecutor = builder.sslTaskExecutor; + this.version = builder.version; + } + + /** + * Returns itself. + * + * @return itself. + */ + @SuppressWarnings("unchecked") + protected final B self() { + return (B) this; + } + + /** + * Sets the {@link FlushStrategy} that will be used to detect when an automatic flush + * should happen. + * + * @param flushStrategy the strategy to use. + * @return the instance itself. + */ + public final B flushStrategy(FlushStrategy flushStrategy) { + this.flushStrategy = Objects.requireNonNull(flushStrategy, "flushStrategy"); + return self(); + } + + /** + * Sets the congestion control algorithm to use. + * + * The default is {@link QuicCongestionControlAlgorithm#CUBIC}. + * + * @param congestionControlAlgorithm the {@link QuicCongestionControlAlgorithm} to use. + * @return the instance itself. + */ + public final B congestionControlAlgorithm(QuicCongestionControlAlgorithm congestionControlAlgorithm) { + this.congestionControlAlgorithm = congestionControlAlgorithm; + return self(); + } + + /** + * Set if greasing should be enabled + * or not. + * + * The default value is {@code true}. + * + * @param enable {@code true} if enabled, {@code false} otherwise. + * @return the instance itself. + */ + public final B grease(boolean enable) { + grease = enable; + return self(); + } + + /** + * See + * set_max_idle_timeout. + * + * The default value is infinite, that is, no timeout is used. + * + * @param amount the maximum idle timeout. + * @param unit the {@link TimeUnit}. + * @return the instance itself. + */ + public final B maxIdleTimeout(long amount, TimeUnit unit) { + this.maxIdleTimeout = unit.toMillis(checkPositiveOrZero(amount, "amount")); + return self(); + } + + /** + * See + * set_max_send_udp_payload_size. + * + * The default and minimum value is 1200. + * + * @param size the maximum payload size that is advertised to the remote peer. + * @return the instance itself. + */ + public final B maxSendUdpPayloadSize(long size) { + this.maxSendUdpPayloadSize = checkPositiveOrZero(size, "value"); + return self(); + } + + /** + * See + * set_max_recv_udp_payload_size. + * + * The default value is 65527. + * + * @param size the maximum payload size that is advertised to the remote peer. + * @return the instance itself. + */ + public final B maxRecvUdpPayloadSize(long size) { + this.maxRecvUdpPayloadSize = checkPositiveOrZero(size, "value"); + return self(); + } + + /** + * See + * set_initial_max_data. + * + * The default value is 0. + * + * @param value the initial maximum data limit. + * @return the instance itself. + */ + public final B initialMaxData(long value) { + this.initialMaxData = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_initial_max_stream_data_bidi_local. + * + * The default value is 0. + * + * @param value the initial maximum data limit for local bidirectional streams. + * @return the instance itself. + */ + public final B initialMaxStreamDataBidirectionalLocal(long value) { + this.initialMaxStreamDataBidiLocal = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_initial_max_stream_data_bidi_remote. + * + * The default value is 0. + * + * @param value the initial maximum data limit for remote bidirectional streams. + * @return the instance itself. + */ + public final B initialMaxStreamDataBidirectionalRemote(long value) { + this.initialMaxStreamDataBidiRemote = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_initial_max_stream_data_uni. + * + * The default value is 0. + * + * @param value the initial maximum data limit for unidirectional streams. + * @return the instance itself. + */ + public final B initialMaxStreamDataUnidirectional(long value) { + this.initialMaxStreamDataUni = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_initial_max_streams_bidi. + * + * The default value is 0. + * + * @param value the initial maximum stream limit for bidirectional streams. + * @return the instance itself. + */ + public final B initialMaxStreamsBidirectional(long value) { + this.initialMaxStreamsBidi = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_initial_max_streams_uni. + * + * The default value is 0. + * + * @param value the initial maximum stream limit for unidirectional streams. + * @return the instance itself. + */ + public final B initialMaxStreamsUnidirectional(long value) { + this.initialMaxStreamsUni = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_ack_delay_exponent. + * + * The default value is 3. + * + * @param value the delay exponent used for ACKs. + * @return the instance itself. + */ + public final B ackDelayExponent(long value) { + this.ackDelayExponent = checkPositiveOrZero(value, "value"); + return self(); + } + + /** + * See + * + * set_max_ack_delay. + * + * The default value is 25 milliseconds. + * + * @param amount the max ack delay. + * @param unit the {@link TimeUnit}. + * @return the instance itself. + */ + public final B maxAckDelay(long amount, TimeUnit unit) { + this.maxAckDelay = unit.toMillis(checkPositiveOrZero(amount, "amount")); + return self(); + } + + /** + * See + * + * set_disable_active_migration. + * + * The default value is {@code true}. + * + * @param enable {@code true} if migration should be enabled, {@code false} otherwise. + * @return the instance itself. + */ + public final B activeMigration(boolean enable) { + this.disableActiveMigration = !enable; + return self(); + } + + /** + * See + * + * enable_hystart. + * + * The default value is {@code true}. + * + * @param enable {@code true} if Hystart should be enabled. + * @return the instance itself. + */ + public final B hystart(boolean enable) { + this.enableHystart = enable; + return self(); + } + + /** + * Sets the local connection id length that is used. + * + * The default is 20, which is also the maximum that is supported. + * + * @param value the length of local generated connections ids. + * @return the instance itself. + */ + public final B localConnectionIdLength(int value) { + this.localConnIdLength = checkInRange(value, 0, Quiche.QUICHE_MAX_CONN_ID_LEN, "value"); + return self(); + } + + /** + * Allows to configure the {@code QUIC version} that should be used. + * + * The default value is the latest supported version by the underlying library. + * + * @param version the {@code QUIC version} to use. + * @return the instance itself. + */ + public final B version(int version) { + this.version = version; + return self(); + } + + /** + * If configured this will enable + * Datagram support. + * @param recvQueueLen the RECV queue length. + * @param sendQueueLen the SEND queue length. + * @return the instance itself. + */ + public final B datagram(int recvQueueLen, int sendQueueLen) { + checkPositive(recvQueueLen, "recvQueueLen"); + checkPositive(sendQueueLen, "sendQueueLen"); + + this.recvQueueLen = recvQueueLen; + this.sendQueueLen = sendQueueLen; + return self(); + } + + /** + * The {@link QuicSslContext} that will be used to create {@link QuicSslEngine}s for {@link QuicChannel}s. + * + * If you need a more flexible way to provide {@link QuicSslEngine}s use {@link #sslEngineProvider(Function)}. + * + * @param sslContext the context. + * @return the instance itself. + */ + public final B sslContext(QuicSslContext sslContext) { + if (server != sslContext.isServer()) { + throw new IllegalArgumentException("QuicSslContext.isServer() " + sslContext.isServer() + + " isn't supported by this builder"); + } + return sslEngineProvider(q -> sslContext.newEngine(q.alloc())); + } + + /** + * The {@link Function} that will return the {@link QuicSslEngine} that should be used for the + * {@link QuicChannel}. + * + * @param sslEngineProvider the provider. + * @return the instance itself. + */ + public final B sslEngineProvider(Function sslEngineProvider) { + this.sslEngineProvider = sslEngineProvider; + return self(); + } + + /** + * Allow to configure a {@link Executor} that will be used to run expensive SSL operations. + * + * @param sslTaskExecutor the {@link Executor} that will be used to offload expensive SSL operations. + * @return the instance itself. + */ + public final B sslTaskExecutor(Executor sslTaskExecutor) { + this.sslTaskExecutor = sslTaskExecutor; + return self(); + } + + /** + * Allows to configure the {@code active connect id limit} that should be used. + * + * @param limit the limit to use. + * @return the instance itself. + */ + public final B activeConnectionIdLimit(long limit) { + checkPositive(limit, "limit"); + + this.activeConnectionIdLimit = limit; + return self(); + } + + + /** + * Allows to configure the {@code active connect id limit} that should be used. + * + * @param token the token to use. + * @return the instance itself. + */ + public final B statelessResetToken(byte[] token) { + if (token.length != 16) { + throw new IllegalArgumentException("token must be 16 bytes but was " + token.length); + } + + this.statelessResetToken = token.clone(); + return self(); + } + + private QuicheConfig createConfig() { + return new QuicheConfig(version, grease, + maxIdleTimeout, maxSendUdpPayloadSize, maxRecvUdpPayloadSize, initialMaxData, + initialMaxStreamDataBidiLocal, initialMaxStreamDataBidiRemote, + initialMaxStreamDataUni, initialMaxStreamsBidi, initialMaxStreamsUni, + ackDelayExponent, maxAckDelay, disableActiveMigration, enableHystart, + congestionControlAlgorithm, recvQueueLen, sendQueueLen, activeConnectionIdLimit, statelessResetToken); + } + + /** + * Validate the configuration before building the codec. + */ + protected void validate() { + if (sslEngineProvider == null) { + throw new IllegalStateException("sslEngineProvider can't be null"); + } + } + + /** + * Builds the QUIC codec that should be added to the {@link io.netty.channel.ChannelPipeline} of the underlying + * {@link io.netty.channel.Channel} which is used as transport for QUIC. + * + * @return the {@link ChannelHandler} which acts as QUIC codec. + */ + public final ChannelHandler build() { + validate(); + QuicheConfig config = createConfig(); + try { + return build(config, sslEngineProvider, sslTaskExecutor, localConnIdLength, flushStrategy); + } catch (Throwable cause) { + config.free(); + throw cause; + } + } + + /** + * Clone the builder + * + * @return the new instance that is a clone if this instance. + */ + public abstract B clone(); + + /** + * Builds the QUIC codec. + * + * @param config the {@link QuicheConfig} that should be used. + * @param sslContextProvider the context provider + * @param sslTaskExecutor the {@link Executor} to use. + * @param localConnIdLength the local connection id length. + * @param flushStrategy the {@link FlushStrategy} that should be used. + * @return the {@link ChannelHandler} which acts as codec. + */ + protected abstract ChannelHandler build(QuicheConfig config, + Function sslContextProvider, + Executor sslTaskExecutor, + int localConnIdLength, FlushStrategy flushStrategy); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCongestionControlAlgorithm.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCongestionControlAlgorithm.java new file mode 100644 index 0000000..2a4d41c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicCongestionControlAlgorithm.java @@ -0,0 +1,25 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Available congestion control algorithms to use. + */ +public enum QuicCongestionControlAlgorithm { + RENO, + CUBIC, + BBR +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionAddress.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionAddress.java new file mode 100644 index 0000000..8cdbc31 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionAddress.java @@ -0,0 +1,129 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufUtil; +import io.netty.buffer.Unpooled; + +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.util.Objects; + +/** + * A {@link QuicConnectionAddress} that can be used to connect too. + */ +public final class QuicConnectionAddress extends SocketAddress { + + /** + * Special {@link QuicConnectionAddress} that should be used when the connection address should be generated + * and chosen on the fly. + */ + public static final QuicConnectionAddress EPHEMERAL = new QuicConnectionAddress(null, false); + + private final String toStr; + + // Accessed by QuicheQuicheChannel + final ByteBuffer connId; + + /** + * Create a new instance + * + * @param connId the connection id to use. + */ + public QuicConnectionAddress(byte[] connId) { + this(ByteBuffer.wrap(connId.clone()), true); + } + + /** + * Create a new instance + * + * @param connId the connection id to use. + */ + public QuicConnectionAddress(ByteBuffer connId) { + this(connId, true); + } + + private QuicConnectionAddress(ByteBuffer connId, boolean validate) { + Quic.ensureAvailability(); + if (validate && connId.remaining() > Quiche.QUICHE_MAX_CONN_ID_LEN) { + throw new IllegalArgumentException("Connection ID can only be of max length " + + Quiche.QUICHE_MAX_CONN_ID_LEN); + } + this.connId = connId; + if (connId == null) { + toStr = "QuicConnectionAddress{EPHEMERAL}"; + } else { + ByteBuf buffer = Unpooled.wrappedBuffer(connId); + try { + toStr = "QuicConnectionAddress{" + + "connId=" + ByteBufUtil.hexDump(buffer) + '}'; + } finally { + buffer.release(); + } + } + } + + @Override + public String toString() { + return toStr; + } + + @Override + public int hashCode() { + if (this == EPHEMERAL) { + return System.identityHashCode(EPHEMERAL); + } + return Objects.hash(connId); + } + + @Override + public boolean equals(Object obj) { + if (!(obj instanceof QuicConnectionAddress)) { + return false; + } + QuicConnectionAddress address = (QuicConnectionAddress) obj; + if (obj == this) { + return true; + } + if (connId == null) { + return false; + } + return connId.equals(address.connId); + } + + /** + * Return a random generated {@link QuicConnectionAddress} of a given length + * that can be used to connect a {@link QuicChannel} + * + * @param length the length of the {@link QuicConnectionAddress} to generate. + * @return the generated address. + */ + public static QuicConnectionAddress random(int length) { + return new QuicConnectionAddress(QuicConnectionIdGenerator.randomGenerator().newId(length)); + } + + /** + * Return a random generated {@link QuicConnectionAddress} of maximum size + * that can be used to connect a {@link QuicChannel} + * + * @return the generated address. + */ + public static QuicConnectionAddress random() { + return random(Quiche.QUICHE_MAX_CONN_ID_LEN); + } + +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionCloseEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionCloseEvent.java new file mode 100644 index 0000000..c3a9905 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionCloseEvent.java @@ -0,0 +1,96 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.util.Arrays; + +/** + * Event that is generated if the remote peer sends a + * CLOSE_CONNECTION frame. + * This allows to inspect the various details of the cause of the close. + */ +public final class QuicConnectionCloseEvent implements QuicEvent { + + final boolean applicationClose; + final int error; + final byte[] reason; + + QuicConnectionCloseEvent(boolean applicationClose, int error, byte[] reason) { + this.applicationClose = applicationClose; + this.error = error; + this.reason = reason; + } + + /** + * Return {@code true} if this was an application close, {@code false} otherwise. + * + * @return if this is an application close. + */ + public boolean isApplicationClose() { + return applicationClose; + } + + /** + * Return the error that was provided for the close. + * + * @return the error. + */ + public int error() { + return error; + } + + /** + * Returns {@code true} if a TLS error + * is contained. + * @return {@code true} if this is an {@code TLS error}, {@code false} otherwise. + */ + public boolean isTlsError() { + return !applicationClose && error >= 0x0100; + } + + /** + * Returns the reason for the close, which may be empty if no reason was given as part of the close. + * + * @return the reason. + */ + public byte[] reason() { + return reason.clone(); + } + + @Override + public String toString() { + return "QuicConnectionCloseEvent{" + + "applicationClose=" + applicationClose + + ", error=" + error + + ", reason=" + Arrays.toString(reason) + + '}'; + } + + /** + * Extract the contained {@code TLS error} from the {@code QUIC error}. If the given {@code QUIC error} does not + * contain a {@code TLS error} it will return {@code -1}. + * + * @param error the {@code QUIC error} + * @return the {@code TLS error} or {@code -1} if there was no {@code TLS error} contained. + */ + public static int extractTlsError(int error) { + int tlsError = error - 0x0100; + if (tlsError < 0) { + return -1; + } + return tlsError; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionIdGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionIdGenerator.java new file mode 100644 index 0000000..fa62816 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionIdGenerator.java @@ -0,0 +1,77 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.nio.ByteBuffer; + +/** + * Creates new connection id instances. + */ +public interface QuicConnectionIdGenerator { + /** + * Creates a new connection id with the given length. This method may not be supported by + * a sign id generator implementation as a sign id generator should always have an input + * to sign with, otherwise this method may generate the same id which may cause some + * unpredictable issues when we use it. + * + * @param length the length of the id. + * @return the id. + */ + ByteBuffer newId(int length); + + /** + * Creates a new connection id with the given length. The given input may be used to sign or + * seed the id, or may be ignored (depending on the implementation). + * + * @param input the input which may be used to generate the id. + * @param length the length of the id. + * @return the id. + */ + ByteBuffer newId(ByteBuffer input, int length); + + /** + * Returns the maximum length of a connection id. + * + * @return the maximum length of a connection id that is supported. + */ + int maxConnectionIdLength(); + + /** + * Returns true if the implementation is idempotent, which means we will get the same id + * with the same input ByteBuffer. Otherwise, returns false. + * + * @return whether the implementation is idempotent. + */ + boolean isIdempotent(); + + /** + * Return a {@link QuicConnectionIdGenerator} which randomly generates new connection ids. + * + * @return a {@link QuicConnectionIdGenerator} which randomly generated ids. + */ + static QuicConnectionIdGenerator randomGenerator() { + return SecureRandomQuicConnectionIdGenerator.INSTANCE; + } + + /** + * Return a {@link QuicConnectionIdGenerator} which generates new connection ids by signing the given input. + * + * @return a {@link QuicConnectionIdGenerator} which generates ids by signing the given input. + */ + static QuicConnectionIdGenerator signGenerator() { + return HmacSignQuicConnectionIdGenerator.INSTANCE; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionStats.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionStats.java new file mode 100644 index 0000000..027d7e9 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicConnectionStats.java @@ -0,0 +1,67 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Statistics about the {@code QUIC} connection. If unknown by the implementation it might return {@code -1} values + * for the various methods. + */ +public interface QuicConnectionStats { + /** + * @return The number of QUIC packets received on the connection. + */ + long recv(); + + /** + * @return The number of QUIC packets sent on this connection. + */ + long sent(); + + /** + * @return The number of QUIC packets that were lost. + */ + long lost(); + + /** + * @return The number of sent QUIC packets with retransmitted data. + */ + long retrans(); + + /** + * @return The number of sent bytes. + */ + long sentBytes(); + + /** + * @return The number of received bytes. + */ + long recvBytes(); + + /** + * @return The number of bytes lost. + */ + long lostBytes(); + + /** + * @return The number of stream bytes retransmitted. + */ + long streamRetransBytes(); + + /** + * @return The number of known paths for the connection. + */ + long pathsCount(); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicDatagramExtensionEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicDatagramExtensionEvent.java new file mode 100644 index 0000000..6ad3300 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicDatagramExtensionEvent.java @@ -0,0 +1,48 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.ObjectUtil; + +/** + * Used when the remote peer supports the + * QUIC DATAGRAM extension. + */ +public final class QuicDatagramExtensionEvent implements QuicExtensionEvent { + + private final int maxLength; + + QuicDatagramExtensionEvent(int maxLength) { + this.maxLength = ObjectUtil.checkPositiveOrZero(maxLength, "maxLength"); + } + + /** + * The maximum datagram payload length the peer will accept. If you try to write bigger datagrams the write will + * fail. + * + * @return the max length. + */ + public int maxLength() { + return maxLength; + } + + @Override + public String toString() { + return "QuicDatagramExtensionEvent{" + + "maxLength=" + maxLength + + '}'; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicError.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicError.java new file mode 100644 index 0000000..0e8aec4 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicError.java @@ -0,0 +1,81 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.collection.IntObjectHashMap; +import io.netty.util.collection.IntObjectMap; + +/** + * All QUIC error codes identified by Quiche. + * See Error + */ +public enum QuicError { + BUFFER_TOO_SHORT(Quiche.QUICHE_ERR_BUFFER_TOO_SHORT, "QUICHE_ERR_BUFFER_TOO_SHORT"), + UNKNOWN_VERSION(Quiche.QUICHE_ERR_UNKNOWN_VERSION, "QUICHE_ERR_UNKNOWN_VERSION"), + INVALID_FRAME(Quiche.QUICHE_ERR_INVALID_FRAME, "QUICHE_ERR_INVALID_FRAME"), + INVALID_PACKET(Quiche.QUICHE_ERR_INVALID_PACKET, "QUICHE_ERR_INVALID_PACKET"), + INVALID_STATE(Quiche.QUICHE_ERR_INVALID_STATE, "QUICHE_ERR_INVALID_STATE"), + INVALID_STREAM_STATE(Quiche.QUICHE_ERR_INVALID_STREAM_STATE, "QUICHE_ERR_INVALID_STREAM_STATE"), + INVALID_TRANSPORT_PARAM(Quiche.QUICHE_ERR_INVALID_TRANSPORT_PARAM, "QUICHE_ERR_INVALID_TRANSPORT_PARAM"), + CRYPTO_FAIL(Quiche.QUICHE_ERR_CRYPTO_FAIL, "QUICHE_ERR_CRYPTO_FAIL"), + TLS_FAIL(Quiche.QUICHE_ERR_TLS_FAIL, "QUICHE_ERR_TLS_FAIL"), + FLOW_CONTROL(Quiche.QUICHE_ERR_FLOW_CONTROL, "QUICHE_ERR_FLOW_CONTROL"), + STREAM_LIMIT(Quiche.QUICHE_ERR_STREAM_LIMIT, "QUICHE_ERR_STREAM_LIMIT"), + FINAL_SIZE(Quiche.QUICHE_ERR_FINAL_SIZE, "QUICHE_ERR_FINAL_SIZE"), + CONGESTION_CONTROL(Quiche.QUICHE_ERR_CONGESTION_CONTROL, "QUICHE_ERR_CONGESTION_CONTROL"), + STREAM_RESET(Quiche.QUICHE_ERR_STREAM_RESET, "STREAM_RESET"), + STREAM_STOPPED(Quiche.QUICHE_ERR_STREAM_STOPPED, "STREAM_STOPPED"), + ID_LIMIT(Quiche.QUICHE_ERR_ID_LIMIT, "ID_LIMIT"), + QUT_OF_IDENTIFIERS(Quiche.QUICHE_ERR_OUT_OF_IDENTIFIERS, "OUT_OF_IDENTIFIERS"), + KEY_UPDATE(Quiche.QUICHE_ERR_KEY_UPDATE, "KEY_UPDATE"); + + private static final IntObjectMap ERROR_MAP = new IntObjectHashMap<>(); + + static { + for (QuicError errorCode : QuicError.values()) { + ERROR_MAP.put(errorCode.code(), errorCode); + } + } + + private final int code; + private final String message; + + QuicError(int code, String message) { + this.code = code; + this.message = message; + } + + final int code() { + return code; + } + + final String message() { + return message; + } + + @Override + public final String toString() { + return String.format("QuicError{code=%d, message=%s}", code, message); + } + + static QuicError valueOf(int code) { + final QuicError errorCode = ERROR_MAP.get(code); + if (errorCode == null) { + throw new IllegalArgumentException("unknown " + QuicError.class.getSimpleName() + " code: " + code); + } + return errorCode; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicEvent.java new file mode 100644 index 0000000..26cbc61 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Marker interface for events that will be passed through the {@link io.netty.channel.ChannelPipeline} via + * {@link io.netty.channel.ChannelPipeline#fireUserEventTriggered(Object)} to notify the user about {@code QUIC} + * specific events. + */ +public interface QuicEvent { } diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicException.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicException.java new file mode 100644 index 0000000..90534e3 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicException.java @@ -0,0 +1,40 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.io.IOException; + +/** + * Exception produced while processing {@code QUIC}. + */ +public final class QuicException extends IOException { + + private final QuicError error; + + QuicException(QuicError error) { + super(error.message()); + this.error = error; + } + + /** + * Returns the {@link QuicError} which was the cause of the {@link QuicException}. + * + * @return the {@link QuicError} that caused this {@link QuicException}. + */ + public QuicError error() { + return error; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicExtensionEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicExtensionEvent.java new file mode 100644 index 0000000..1112bb4 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicExtensionEvent.java @@ -0,0 +1,23 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Marker interface for events that will be passed through the {@link io.netty.channel.ChannelPipeline} via + * {@link io.netty.channel.ChannelPipeline#fireUserEventTriggered(Object)} to notify the user about supported + * QUIC extensions by the remote peer. + */ +public interface QuicExtensionEvent extends QuicEvent { } diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicHeaderParser.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicHeaderParser.java new file mode 100644 index 0000000..f24fa24 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicHeaderParser.java @@ -0,0 +1,163 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; + +import java.net.InetSocketAddress; + +import static io.netty.handler.codec.quic.Quiche.allocateNativeOrder; +import static io.netty.util.internal.ObjectUtil.checkPositiveOrZero; + +/** + * Parses the QUIC packet header and notifies a callback once parsing was successful. + * + * Once the parser is not needed anymore the user needs to call {@link #close()} to ensure all resources are + * released. Failed to do so may lead to memory leaks. + * + * This class can be used for advanced use-cases. Usually you want to just use {@link QuicClientCodecBuilder} or + * {@link QuicServerCodecBuilder}. + */ +public final class QuicHeaderParser implements AutoCloseable { + private final int maxTokenLength; + private final int localConnectionIdLength; + private final ByteBuf versionBuffer; + private final ByteBuf typeBuffer; + private final ByteBuf scidLenBuffer; + private final ByteBuf scidBuffer; + private final ByteBuf dcidLenBuffer; + private final ByteBuf dcidBuffer; + private final ByteBuf tokenBuffer; + private final ByteBuf tokenLenBuffer; + private boolean closed; + + public QuicHeaderParser(int maxTokenLength, int localConnectionIdLength) { + Quic.ensureAvailability(); + this.maxTokenLength = checkPositiveOrZero(maxTokenLength, "maxTokenLength"); + this.localConnectionIdLength = checkPositiveOrZero(localConnectionIdLength, "localConnectionIdLength"); + // Allocate the buffer from which we read primative values like integer/long with native order to ensure + // we read the right value. + versionBuffer = allocateNativeOrder(Integer.BYTES); + typeBuffer = allocateNativeOrder(Byte.BYTES); + scidLenBuffer = allocateNativeOrder(Integer.BYTES); + dcidLenBuffer = allocateNativeOrder(Integer.BYTES); + tokenLenBuffer = allocateNativeOrder(Integer.BYTES); + + // Now allocate the buffers that dont need native ordering and so will be cheaper to access when we slice into + // these or obtain a view into these via internalNioBuffer(...). + scidBuffer = Unpooled.directBuffer(Quiche.QUICHE_MAX_CONN_ID_LEN); + dcidBuffer = Unpooled.directBuffer(Quiche.QUICHE_MAX_CONN_ID_LEN); + tokenBuffer = Unpooled.directBuffer(maxTokenLength); + } + + @Override + public void close() { + if (!closed) { + closed = true; + versionBuffer.release(); + typeBuffer.release(); + scidBuffer.release(); + scidLenBuffer.release(); + dcidBuffer.release(); + dcidLenBuffer.release(); + tokenLenBuffer.release(); + tokenBuffer.release(); + } + } + + /** + * Parses a QUIC packet and extract the header values out of it. This method takes no ownership of the packet itself + * which means the caller of this method is expected to call {@link ByteBuf#release()} once the packet is not needed + * anymore. + * + * @param sender the sender of the packet. This is directly passed to the {@link QuicHeaderProcessor} once + * parsing was successful. + * @param recipient the recipient of the packet.This is directly passed to the {@link QuicHeaderProcessor} once + * parsing was successful. + * @param packet raw QUIC packet itself. The ownership of the packet is not transferred. This is directly + * passed to the {@link QuicHeaderProcessor} once parsing was successful. + * @param callback the {@link QuicHeaderProcessor} that is called once a QUIC packet could be parsed and all + * the header values be extracted. + * @throws Exception thrown if we couldn't parse the header or if the {@link QuicHeaderProcessor} throws an + * exception. + */ + public void parse(InetSocketAddress sender, + InetSocketAddress recipient, ByteBuf packet, QuicHeaderProcessor callback) throws Exception { + if (closed) { + throw new IllegalStateException(QuicHeaderParser.class.getSimpleName() + " is already closed"); + } + + // Set various len values so quiche_header_info can make use of these. + scidLenBuffer.setInt(0, Quiche.QUICHE_MAX_CONN_ID_LEN); + dcidLenBuffer.setInt(0, Quiche.QUICHE_MAX_CONN_ID_LEN); + tokenLenBuffer.setInt(0, maxTokenLength); + + int res = Quiche.quiche_header_info( + Quiche.readerMemoryAddress(packet), packet.readableBytes(), + localConnectionIdLength, + Quiche.memoryAddress(versionBuffer, 0, versionBuffer.capacity()), + Quiche.memoryAddress(typeBuffer, 0, typeBuffer.capacity()), + Quiche.memoryAddress(scidBuffer, 0, scidBuffer.capacity()), + Quiche.memoryAddress(scidLenBuffer, 0, scidLenBuffer.capacity()), + Quiche.memoryAddress(dcidBuffer, 0, dcidBuffer.capacity()), + Quiche.memoryAddress(dcidLenBuffer, 0, dcidLenBuffer.capacity()), + Quiche.memoryAddress(tokenBuffer, 0, tokenBuffer.capacity()), + Quiche.writerMemoryAddress(tokenLenBuffer)); + if (res >= 0) { + int version = versionBuffer.getInt(0); + byte type = typeBuffer.getByte(0); + int scidLen = scidLenBuffer.getInt(0); + int dcidLen = dcidLenBuffer.getInt(0); + int tokenLen = tokenLenBuffer.getInt(0); + + callback.process(sender, recipient, packet, QuicPacketType.of(type), version, + scidBuffer.setIndex(0, scidLen), + dcidBuffer.setIndex(0, dcidLen), + tokenBuffer.setIndex(0, tokenLen)); + } else { + throw Quiche.newException(res); + } + } + + /** + * Called when a QUIC packet and its header could be parsed. + */ + public interface QuicHeaderProcessor { + + /** + * Called when a QUIC packet header was parsed. + * + * @param sender the sender of the QUIC packet. + * @param recipient the recipient of the QUIC packet. + * @param packet the raw QUIC packet. The ownership is not transferred, which means you will need to call + * {@link ByteBuf#retain()} on it if you want to keep a reference after this method + * returns. + * @param type the type of the packet. + * @param version the version of the packet. + * @param scid the source connection id. The ownership is not transferred and its generally not allowed + * to hold any references to this buffer outside of the method as it will be re-used. + * @param dcid the destination connection id. The ownership is not transferred and its generally not + * allowed to hold any references to this buffer outside of the method as it will be + * re-used. + * @param token the token.The ownership is not transferred and its generally not allowed + * to hold any references to this buffer outside of the method as it will be re-used. + * @throws Exception throws if an error happens during processing. + */ + void process(InetSocketAddress sender, InetSocketAddress recipient, ByteBuf packet, + QuicPacketType type, int version, ByteBuf scid, ByteBuf dcid, ByteBuf token) throws Exception; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPacketType.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPacketType.java new file mode 100644 index 0000000..318c617 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPacketType.java @@ -0,0 +1,83 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * The type of the + * QUIC packet. + */ +public enum QuicPacketType { + /** + * Initial packet. + */ + INITIAL((byte) 1), + + /** + * Retry packet. + */ + RETRY((byte) 2), + + /** + * Handshake packet. + */ + HANDSHAKE((byte) 3), + + /** + * 0-RTT packet. + */ + ZERO_RTT((byte) 4), + + /** + * 1-RTT short header packet. + */ + SHORT((byte) 5), + + /** + * Version negotiation packet. + */ + VERSION_NEGOTIATION((byte) 6); + + final byte type; + + QuicPacketType(byte type) { + this.type = type; + } + + /** + * Return the {@link QuicPacketType} for the given byte. + * + * @param type the byte that represent the type. + * @return the {@link QuicPacketType}. + */ + static QuicPacketType of(byte type) { + switch(type) { + case 1: + return INITIAL; + case 2: + return RETRY; + case 3: + return HANDSHAKE; + case 4: + return ZERO_RTT; + case 5: + return SHORT; + case 6: + return VERSION_NEGOTIATION; + default: + throw new IllegalArgumentException("Unknown QUIC packet type: " + type); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPathEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPathEvent.java new file mode 100644 index 0000000..96f6952 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicPathEvent.java @@ -0,0 +1,297 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.net.InetSocketAddress; +import java.util.Objects; + +import static java.util.Objects.requireNonNull; + +/** + * A network path specific {@link QuicEvent}. + */ +public abstract class QuicPathEvent implements QuicEvent { + + private final InetSocketAddress local; + private final InetSocketAddress remote; + + QuicPathEvent(InetSocketAddress local, InetSocketAddress remote) { + this.local = requireNonNull(local, "local"); + this.remote = requireNonNull(remote, "remote"); + } + + /** + * The local address of the network path. + * + * @return local + */ + public InetSocketAddress local() { + return local; + } + + /** + * The remote address of the network path. + * + * @return local + */ + public InetSocketAddress remote() { + return remote; + } + + @Override + public String toString() { + return "QuicPathEvent{" + + "local=" + local + + ", remote=" + remote + + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + QuicPathEvent that = (QuicPathEvent) o; + if (!Objects.equals(local, that.local)) { + return false; + } + return Objects.equals(remote, that.remote); + } + + @Override + public int hashCode() { + int result = local != null ? local.hashCode() : 0; + result = 31 * result + (remote != null ? remote.hashCode() : 0); + return result; + } + + public static final class New extends QuicPathEvent { + /** + * A new network path (local address, remote address) has been seen on a received packet. + * Note that this event is only triggered for servers, as the client is responsible from initiating new paths. + * The application may then probe this new path, if desired. + * + * @param local local address. + * @param remote remote address. + */ + public New(InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + } + + @Override + public String toString() { + return "QuicPathEvent.New{" + + "local=" + local() + + ", remote=" + remote() + + '}'; + } + } + + public static final class Validated extends QuicPathEvent { + /** + * The related network path between local and remote has been validated. + * + * @param local local address. + * @param remote remote address. + */ + public Validated(InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + } + + @Override + public String toString() { + return "QuicPathEvent.Validated{" + + "local=" + local() + + ", remote=" + remote() + + '}'; + } + } + + public static final class FailedValidation extends QuicPathEvent { + /** + * The related network path between local and remote failed to be validated. + * This network path will not be used anymore, unless the application requests probing this path again. + * + * @param local local address. + * @param remote remote address. + */ + public FailedValidation(InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + } + + @Override + public String toString() { + return "QuicPathEvent.FailedValidation{" + + "local=" + local() + + ", remote=" + remote() + + '}'; + } + } + + public static final class Closed extends QuicPathEvent { + + /** + * The related network path between local and remote has been closed and is now unusable on this connection. + * + * @param local local address. + * @param remote remote address. + */ + public Closed(InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + return super.equals(o); + } + + @Override + public String toString() { + return "QuicPathEvent.Closed{" + + "local=" + local() + + ", remote=" + remote() + + '}'; + } + } + + public static final class ReusedSourceConnectionId extends QuicPathEvent { + private final long seq; + private final InetSocketAddress oldLocal; + private final InetSocketAddress oldRemote; + + /** + * The stack observes that the Source Connection ID with the given sequence number, + * initially used by the peer over the first pair of addresses, is now reused over + * the second pair of addresses. + * + * @param seq sequence number + * @param oldLocal old local address. + * @param oldRemote old remote address. + * @param local local address. + * @param remote remote address. + */ + public ReusedSourceConnectionId(long seq, InetSocketAddress oldLocal, InetSocketAddress oldRemote, + InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + this.seq = seq; + this.oldLocal = requireNonNull(oldLocal, "oldLocal"); + this.oldRemote = requireNonNull(oldRemote, "oldRemote"); + } + + /** + * Source connection id sequence number. + * + * @return sequence number + */ + public long seq() { + return seq; + } + + /** + * The old local address of the network path. + * + * @return local + */ + public InetSocketAddress oldLocal() { + return oldLocal; + } + + /** + * The old remote address of the network path. + * + * @return local + */ + public InetSocketAddress oldRemote() { + return oldRemote; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + + ReusedSourceConnectionId that = (ReusedSourceConnectionId) o; + + if (seq != that.seq) { + return false; + } + if (!Objects.equals(oldLocal, that.oldLocal)) { + return false; + } + return Objects.equals(oldRemote, that.oldRemote); + } + + @Override + public int hashCode() { + int result = super.hashCode(); + result = 31 * result + (int) (seq ^ (seq >>> 32)); + result = 31 * result + (oldLocal != null ? oldLocal.hashCode() : 0); + result = 31 * result + (oldRemote != null ? oldRemote.hashCode() : 0); + return result; + } + + @Override + public String toString() { + return "QuicPathEvent.ReusedSourceConnectionId{" + + "seq=" + seq + + ", oldLocal=" + oldLocal + + ", oldRemote=" + oldRemote + + ", local=" + local() + + ", remote=" + remote() + + '}'; + } + } + + public static final class PeerMigrated extends QuicPathEvent { + + /** + * The connection observed that the remote migrated over the network path denoted by the pair of addresses, + * i.e., non-probing packets have been received on this network path. This is a server side only event. + * Note that this event is only raised if the path has been validated. + * + * @param local local address. + * @param remote remote address. + */ + public PeerMigrated(InetSocketAddress local, InetSocketAddress remote) { + super(local, remote); + } + + @Override + public String toString() { + return "QuicPathEvent.PeerMigrated{" + + "local=" + local() + + ", remote=" + remote() + + '}'; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicResetTokenGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicResetTokenGenerator.java new file mode 100644 index 0000000..feb10d4 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicResetTokenGenerator.java @@ -0,0 +1,42 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.nio.ByteBuffer; + +/** + * Generate + * + * stateless reset tokens to use. + */ +public interface QuicResetTokenGenerator { + + /** + * Generate a reset token to use for the given connection id. The returned token MUST be of length 16. + * @param cid + * @return + */ + ByteBuffer newResetToken(ByteBuffer cid); + + /** + * Return a {@link QuicResetTokenGenerator} which generates new reset tokens by signing the given input. + * + * @return a {@link QuicResetTokenGenerator} which generates new reset tokens by signing the given input. + */ + static QuicResetTokenGenerator signGenerator() { + return HmacSignQuicResetTokenGenerator.INSTANCE; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicServerCodecBuilder.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicServerCodecBuilder.java new file mode 100644 index 0000000..7d6ec22 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicServerCodecBuilder.java @@ -0,0 +1,221 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelOption; +import io.netty.util.AttributeKey; +import io.netty.util.internal.ObjectUtil; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.function.Function; + +/** + * {@link QuicCodecBuilder} that configures and builds a {@link ChannelHandler} that should be added to the + * {@link io.netty.channel.ChannelPipeline} of a {@code QUIC} server. + */ +public final class QuicServerCodecBuilder extends QuicCodecBuilder { + // The order in which ChannelOptions are applied is important they may depend on each other for validation + // purposes. + private final Map, Object> options = new LinkedHashMap<>(); + private final Map, Object> attrs = new HashMap<>(); + private final Map, Object> streamOptions = new LinkedHashMap<>(); + private final Map, Object> streamAttrs = new HashMap<>(); + private ChannelHandler handler; + private ChannelHandler streamHandler; + private QuicConnectionIdGenerator connectionIdAddressGenerator; + private QuicTokenHandler tokenHandler; + private QuicResetTokenGenerator resetTokenGenerator; + + /** + * Creates a new instance. + */ + public QuicServerCodecBuilder() { + super(true); + } + + private QuicServerCodecBuilder(QuicServerCodecBuilder builder) { + super(builder); + options.putAll(builder.options); + attrs.putAll(builder.attrs); + streamOptions.putAll(builder.streamOptions); + streamAttrs.putAll(builder.streamAttrs); + handler = builder.handler; + streamHandler = builder.streamHandler; + connectionIdAddressGenerator = builder.connectionIdAddressGenerator; + tokenHandler = builder.tokenHandler; + } + + @Override + public QuicServerCodecBuilder clone() { + return new QuicServerCodecBuilder(this); + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + * + * @param option the {@link ChannelOption} to apply to the {@link QuicChannel}. + * @param value the value of the option. + * @param the type of the value. + * @return this instance. + */ + public QuicServerCodecBuilder option(ChannelOption option, T value) { + Quic.updateOptions(options, option, value); + return self(); + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + * + * @param key the {@link AttributeKey} to apply to the {@link QuicChannel}. + * @param value the value of the attribute. + * @param the type of the value. + * @return this instance. + */ + public QuicServerCodecBuilder attr(AttributeKey key, T value) { + Quic.updateAttributes(attrs, key, value); + return self(); + } + + /** + * Set the {@link ChannelHandler} that is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicChannel} once created. + * + * @param handler the {@link ChannelHandler} that is added to the {@link QuicChannel}s + * {@link io.netty.channel.ChannelPipeline}. + * @return this instance. + */ + public QuicServerCodecBuilder handler(ChannelHandler handler) { + this.handler = ObjectUtil.checkNotNull(handler, "handler"); + return self(); + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicStreamChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + * + * @param option the {@link ChannelOption} to apply to the {@link QuicStreamChannel}s. + * @param value the value of the option. + * @param the type of the value. + * @return this instance. + */ + public QuicServerCodecBuilder streamOption(ChannelOption option, T value) { + Quic.updateOptions(streamOptions, option, value); + return self(); + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicStreamChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + * + * @param key the {@link AttributeKey} to apply to the {@link QuicStreamChannel}s. + * @param value the value of the attribute. + * @param the type of the value. + * @return this instance. + */ + public QuicServerCodecBuilder streamAttr(AttributeKey key, T value) { + Quic.updateAttributes(streamAttrs, key, value); + return self(); + } + + /** + * Set the {@link ChannelHandler} that is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicStreamChannel} once created. + * + * @param streamHandler the {@link ChannelHandler} that is added to the {@link QuicStreamChannel}s + * {@link io.netty.channel.ChannelPipeline}. + * @return this instance. + */ + public QuicServerCodecBuilder streamHandler(ChannelHandler streamHandler) { + this.streamHandler = ObjectUtil.checkNotNull(streamHandler, "streamHandler"); + return self(); + } + + /** + * Sets the {@link QuicConnectionIdGenerator} to use. + * + * @param connectionIdAddressGenerator the {@link QuicConnectionIdGenerator} to use. + * @return this instance. + */ + public QuicServerCodecBuilder connectionIdAddressGenerator( + QuicConnectionIdGenerator connectionIdAddressGenerator) { + this.connectionIdAddressGenerator = connectionIdAddressGenerator; + return this; + } + + /** + * Set the {@link QuicTokenHandler} that is used to generate and validate tokens or + * {@code null} if no tokens should be used at all. + * + * @param tokenHandler the {@link QuicTokenHandler} to use. + * @return this instance. + */ + public QuicServerCodecBuilder tokenHandler(QuicTokenHandler tokenHandler) { + this.tokenHandler = tokenHandler; + return self(); + } + + /** + * Set the {@link QuicResetTokenGenerator} that is used to generate stateless reset tokens or + * {@code null} if the default should be used. + * + * @param resetTokenGenerator the {@link QuicResetTokenGenerator} to use. + * @return this instance. + */ + public QuicServerCodecBuilder resetTokenGenerator(QuicResetTokenGenerator resetTokenGenerator) { + this.resetTokenGenerator = resetTokenGenerator; + return self(); + } + + @Override + protected void validate() { + super.validate(); + if (handler == null && streamHandler == null) { + throw new IllegalStateException("handler and streamHandler not set"); + } + } + + @Override + protected ChannelHandler build(QuicheConfig config, + Function sslEngineProvider, + Executor sslTaskExecutor, + int localConnIdLength, FlushStrategy flushStrategy) { + validate(); + QuicTokenHandler tokenHandler = this.tokenHandler; + if (tokenHandler == null) { + tokenHandler = NoQuicTokenHandler.INSTANCE; + } + QuicConnectionIdGenerator generator = connectionIdAddressGenerator; + if (generator == null) { + generator = QuicConnectionIdGenerator.signGenerator(); + } + QuicResetTokenGenerator resetTokenGenerator = this.resetTokenGenerator; + if (resetTokenGenerator == null) { + resetTokenGenerator = QuicResetTokenGenerator.signGenerator(); + } + ChannelHandler handler = this.handler; + ChannelHandler streamHandler = this.streamHandler; + return new QuicheQuicServerCodec(config, localConnIdLength, tokenHandler, generator, resetTokenGenerator, + flushStrategy, sslEngineProvider, sslTaskExecutor, handler, + Quic.toOptionsArray(options), Quic.toAttributesArray(attrs), + streamHandler, Quic.toOptionsArray(streamOptions), Quic.toAttributesArray(streamAttrs)); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContext.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContext.java new file mode 100644 index 0000000..e367771 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContext.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.handler.ssl.SslContext; + +import java.io.InputStream; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; + +/** + * Special {@link SslContext} that can be used for {@code QUIC}. + */ +public abstract class QuicSslContext extends SslContext { + + @Override + public abstract QuicSslEngine newEngine(ByteBufAllocator alloc); + + @Override + public abstract QuicSslEngine newEngine(ByteBufAllocator alloc, String peerHost, int peerPort); + + @Override + public abstract QuicSslSessionContext sessionContext(); + + static X509Certificate[] toX509Certificates0(InputStream stream) + throws CertificateException { + return SslContext.toX509Certificates(stream); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContextBuilder.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContextBuilder.java new file mode 100644 index 0000000..7ea7c97 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslContextBuilder.java @@ -0,0 +1,381 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.quic; + +import io.netty.handler.ssl.ClientAuth; +import io.netty.handler.ssl.util.KeyManagerFactoryWrapper; +import io.netty.handler.ssl.util.TrustManagerFactoryWrapper; +import io.netty.util.Mapping; + +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509ExtendedKeyManager; +import java.io.File; +import java.net.Socket; +import java.security.KeyStore; +import java.security.Principal; +import java.security.PrivateKey; +import java.security.cert.X509Certificate; + +import static io.netty.util.internal.ObjectUtil.checkNotNull; + +/** + * Builder for configuring a new SslContext for creation. + */ +public final class QuicSslContextBuilder { + + /** + * Special {@link X509ExtendedKeyManager} implementation which will just fail the certificate selection. + * This is used as a "dummy" implementation when SNI is used as we should always select an other + * {@link QuicSslContext} based on the provided hostname. + */ + private static final X509ExtendedKeyManager SNI_KEYMANAGER = new X509ExtendedKeyManager() { + private final X509Certificate[] emptyCerts = new X509Certificate[0]; + private final String[] emptyStrings = new String[0]; + + @Override + public String[] getClientAliases(String keyType, Principal[] issuers) { + return emptyStrings; + } + + @Override + public String chooseClientAlias(String[] keyType, Principal[] issuers, Socket socket) { + return null; + } + + @Override + public String[] getServerAliases(String keyType, Principal[] issuers) { + return emptyStrings; + } + + @Override + public String chooseServerAlias(String keyType, Principal[] issuers, Socket socket) { + return null; + } + + @Override + public X509Certificate[] getCertificateChain(String alias) { + return emptyCerts; + } + + @Override + public PrivateKey getPrivateKey(String alias) { + return null; + } + }; + + /** + * Creates a builder for new client-side {@link QuicSslContext} that can be used for {@code QUIC}. + */ + public static QuicSslContextBuilder forClient() { + return new QuicSslContextBuilder(false); + } + + /** + * Creates a builder for new server-side {@link QuicSslContext} that can be used for {@code QUIC}. + * + * @param keyFile a PKCS#8 private key file in PEM format + * @param keyPassword the password of the {@code keyFile}, or {@code null} if it's not + * password-protected + * @param certChainFile an X.509 certificate chain file in PEM format + * @see #keyManager(File, String, File) + */ + public static QuicSslContextBuilder forServer( + File keyFile, String keyPassword, File certChainFile) { + return new QuicSslContextBuilder(true).keyManager(keyFile, keyPassword, certChainFile); + } + + /** + * Creates a builder for new server-side {@link QuicSslContext} that can be used for {@code QUIC}. + * + * @param key a PKCS#8 private key + * @param keyPassword the password of the {@code keyFile}, or {@code null} if it's not + * password-protected + * @param certChain the X.509 certificate chain + * @see #keyManager(File, String, File) + */ + public static QuicSslContextBuilder forServer( + PrivateKey key, String keyPassword, X509Certificate... certChain) { + return new QuicSslContextBuilder(true).keyManager(key, keyPassword, certChain); + } + + /** + * Creates a builder for new server-side {@link QuicSslContext} that can be used for {@code QUIC}. + * + * @param keyManagerFactory non-{@code null} factory for server's private key + * @see #keyManager(KeyManagerFactory, String) + */ + public static QuicSslContextBuilder forServer(KeyManagerFactory keyManagerFactory, String password) { + return new QuicSslContextBuilder(true).keyManager(keyManagerFactory, password); + } + + /** + * Creates a builder for new server-side {@link QuicSslContext} with {@link KeyManager} that can be used for + * {@code QUIC}. + * + * @param keyManager non-{@code null} KeyManager for server's private key + * @param keyPassword the password of the {@code keyFile}, or {@code null} if it's not + * password-protected + */ + public static QuicSslContextBuilder forServer(KeyManager keyManager, String keyPassword) { + return new QuicSslContextBuilder(true).keyManager(keyManager, keyPassword); + } + + /** + * Enables support for + * + * SNI on the server side. + * + * @param mapping the {@link Mapping} that is used to map names to the {@link QuicSslContext} to use. + * Usually using {@link io.netty.util.DomainWildcardMappingBuilder} should be used + * to create the {@link Mapping}. + */ + public static QuicSslContext buildForServerWithSni(Mapping mapping) { + return forServer(SNI_KEYMANAGER, null).sni(mapping).build(); + } + + private final boolean forServer; + private TrustManagerFactory trustManagerFactory; + private String keyPassword; + private KeyManagerFactory keyManagerFactory; + private long sessionCacheSize = 20480; + private long sessionTimeout = 300; + private ClientAuth clientAuth = ClientAuth.NONE; + private String[] applicationProtocols; + private Boolean earlyData; + private BoringSSLKeylog keylog; + private Mapping mapping; + + private QuicSslContextBuilder(boolean forServer) { + this.forServer = forServer; + } + + private QuicSslContextBuilder sni(Mapping mapping) { + this.mapping = checkNotNull(mapping, "mapping"); + return this; + } + + /** + * Enable / disable the usage of early data. + */ + public QuicSslContextBuilder earlyData(boolean enabled) { + this.earlyData = enabled; + return this; + } + + /** + * Enable / disable keylog. When enabled, TLS keys are logged to an internal logger named + * "io.netty.incubator.codec.quic.BoringSSLLogginKeylog" with DEBUG level, see + * {@link BoringSSLKeylog} for detail, logging keys are following + * + * NSS Key Log Format. This is intended for debugging use with tools like Wireshark. + */ + public QuicSslContextBuilder keylog(boolean enabled) { + keylog(enabled ? BoringSSLLoggingKeylog.INSTANCE : null); + return this; + } + + /** + * Enable / disable keylog. When enabled, TLS keys are logged to {@link BoringSSLKeylog#logKey(SSLEngine, String)} + * logging keys are following + * + * NSS Key Log Format. This is intended for debugging use with tools like Wireshark. + */ + public QuicSslContextBuilder keylog(BoringSSLKeylog keylog) { + this.keylog = keylog; + return this; + } + + /** + * Trusted certificates for verifying the remote endpoint's certificate. The file should + * contain an X.509 certificate collection in PEM format. {@code null} uses the system default + * which only works with Java 8u261 and later as these versions support TLS1.3, + * see + * JDK 8u261 Update Release Notes + */ + public QuicSslContextBuilder trustManager(File trustCertCollectionFile) { + try { + return trustManager(QuicheQuicSslContext.toX509Certificates0(trustCertCollectionFile)); + } catch (Exception e) { + throw new IllegalArgumentException("File does not contain valid certificates: " + + trustCertCollectionFile, e); + } + } + + /** + * Trusted certificates for verifying the remote endpoint's certificate. {@code null} uses the system default + * which only works with Java 8u261 and later as these versions support TLS1.3, + * see + * JDK 8u261 Update Release Notes + */ + public QuicSslContextBuilder trustManager(X509Certificate... trustCertCollection) { + try { + return trustManager(QuicheQuicSslContext.buildTrustManagerFactory0(trustCertCollection)); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + + /** + * Trusted manager for verifying the remote endpoint's certificate. {@code null} uses the system default + * which only works with Java 8u261 and later as these versions support TLS1.3, + * see + * JDK 8u261 Update Release Notes + */ + public QuicSslContextBuilder trustManager(TrustManagerFactory trustManagerFactory) { + this.trustManagerFactory = trustManagerFactory; + return this; + } + + /** + * A single trusted manager for verifying the remote endpoint's certificate. + * This is helpful when custom implementation of {@link TrustManager} is needed. + * Internally, a simple wrapper of {@link TrustManagerFactory} that only produces this + * specified {@link TrustManager} will be created, thus all the requirements specified in + * {@link #trustManager(TrustManagerFactory trustManagerFactory)} also apply here. + */ + public QuicSslContextBuilder trustManager(TrustManager trustManager) { + return trustManager(new TrustManagerFactoryWrapper(trustManager)); + } + + /** + * Identifying certificate for this host. {@code keyCertChainFile} and {@code keyFile} may + * be {@code null} for client contexts, which disables mutual authentication. + * + * @param keyFile a PKCS#8 private key file in PEM format + * @param keyPassword the password of the {@code keyFile}, or {@code null} if it's not + * password-protected + * @param keyCertChainFile an X.509 certificate chain file in PEM format + */ + public QuicSslContextBuilder keyManager(File keyFile, String keyPassword, File keyCertChainFile) { + X509Certificate[] keyCertChain; + PrivateKey key; + try { + keyCertChain = QuicheQuicSslContext.toX509Certificates0(keyCertChainFile); + } catch (Exception e) { + throw new IllegalArgumentException("File does not contain valid certificates: " + keyCertChainFile, e); + } + try { + key = QuicheQuicSslContext.toPrivateKey0(keyFile, keyPassword); + } catch (Exception e) { + throw new IllegalArgumentException("File does not contain valid private key: " + keyFile, e); + } + return keyManager(key, keyPassword, keyCertChain); + } + + /** + * Identifying certificate for this host. {@code keyCertChain} and {@code key} may + * be {@code null} for client contexts, which disables mutual authentication. + * + * @param key a PKCS#8 private key file + * @param keyPassword the password of the {@code key}, or {@code null} if it's not + * password-protected + * @param certChain an X.509 certificate chain + */ + public QuicSslContextBuilder keyManager(PrivateKey key, String keyPassword, X509Certificate... certChain) { + try { + java.security.KeyStore ks = java.security.KeyStore.getInstance(KeyStore.getDefaultType()); + ks.load(null); + char[] pass = keyPassword == null ? new char[0]: keyPassword.toCharArray(); + ks.setKeyEntry("alias", key, pass, certChain); + KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance( + KeyManagerFactory.getDefaultAlgorithm()); + keyManagerFactory.init(ks, pass); + return keyManager(keyManagerFactory, keyPassword); + } catch (Exception e) { + throw new IllegalArgumentException(e); + } + } + + /** + * Identifying manager for this host. {@code keyManagerFactory} may be {@code null} for + * client contexts, which disables mutual authentication. + */ + public QuicSslContextBuilder keyManager(KeyManagerFactory keyManagerFactory, String keyPassword) { + this.keyPassword = keyPassword; + this.keyManagerFactory = keyManagerFactory; + return this; + } + + /** + * A single key manager managing the identity information of this host. + * This is helpful when custom implementation of {@link KeyManager} is needed. + * Internally, a wrapper of {@link KeyManagerFactory} that only produces this specified + * {@link KeyManager} will be created, thus all the requirements specified in + * {@link #keyManager(KeyManagerFactory, String)} also apply here. + */ + public QuicSslContextBuilder keyManager(KeyManager keyManager, String password) { + return keyManager(new KeyManagerFactoryWrapper(keyManager), password); + } + + /** + * Application protocol negotiation configuration. {@code null} disables support. + */ + public QuicSslContextBuilder applicationProtocols(String... applicationProtocols) { + this.applicationProtocols = applicationProtocols; + return this; + } + + /** + * Set the size of the cache used for storing SSL session objects. {@code 0} to use the + * default value. + */ + public QuicSslContextBuilder sessionCacheSize(long sessionCacheSize) { + this.sessionCacheSize = sessionCacheSize; + return this; + } + + /** + * Set the timeout for the cached SSL session objects, in seconds. {@code 0} to use the + * default value. + */ + public QuicSslContextBuilder sessionTimeout(long sessionTimeout) { + this.sessionTimeout = sessionTimeout; + return this; + } + + /** + * Sets the client authentication mode. + */ + public QuicSslContextBuilder clientAuth(ClientAuth clientAuth) { + if (!forServer) { + throw new UnsupportedOperationException("Only supported for server"); + } + this.clientAuth = checkNotNull(clientAuth, "clientAuth"); + return this; + } + + /** + * Create new {@link QuicSslContext} instance with configured settings that can be used for {@code QUIC}. + * + */ + public QuicSslContext build() { + if (forServer) { + return new QuicheQuicSslContext(true, sessionTimeout, sessionCacheSize, clientAuth, trustManagerFactory, + keyManagerFactory, keyPassword, mapping, earlyData, keylog, applicationProtocols); + } else { + return new QuicheQuicSslContext(false, sessionTimeout, sessionCacheSize, clientAuth, trustManagerFactory, + keyManagerFactory, keyPassword, mapping, earlyData, keylog, + applicationProtocols); + } + } + + +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslEngine.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslEngine.java new file mode 100644 index 0000000..c2bd694 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslEngine.java @@ -0,0 +1,23 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import javax.net.ssl.SSLEngine; + +/** + * An {@link SSLEngine} that can be used for QUIC. + */ +public abstract class QuicSslEngine extends SSLEngine { } diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslSessionContext.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslSessionContext.java new file mode 100644 index 0000000..08909b1 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicSslSessionContext.java @@ -0,0 +1,34 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import javax.net.ssl.SSLSessionContext; + +/** + * {@link SSLSessionContext} which also supports advanced operations. + */ +public interface QuicSslSessionContext extends SSLSessionContext { + + /** + * Sets the {@link SslSessionTicketKey}s that should be used. The first key of the array is used for encryption + * and decryption while the rest of the array is only used for decryption. This allows you to better handling + * rotating of the keys. The rotating is the responsibility of the user. + * If {@code null} is used for {@code keys} a key will automatically generated by the library and also rotated. + * + * @param keys the tickets to use. + */ + void setTicketKeys(SslSessionTicketKey... keys); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamAddress.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamAddress.java new file mode 100644 index 0000000..529a54a --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamAddress.java @@ -0,0 +1,61 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.net.SocketAddress; +import java.util.Objects; + +/** + * A {@link SocketAddress} for QUIC stream. + */ +public final class QuicStreamAddress extends SocketAddress { + + private final long streamId; + + public QuicStreamAddress(long streamId) { + this.streamId = streamId; + } + + /** + * Return the id of the stream. + * + * @return the id. + */ + public long streamId() { + return streamId; + } + + @Override + public boolean equals(Object o) { + if (!(o instanceof QuicStreamAddress)) { + return false; + } + QuicStreamAddress that = (QuicStreamAddress) o; + return streamId == that.streamId; + } + + @Override + public int hashCode() { + return Objects.hash(streamId); + } + + @Override + public String toString() { + return "QuicStreamAddress{" + + "streamId=" + streamId + + '}'; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannel.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannel.java new file mode 100644 index 0000000..dc5d682 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannel.java @@ -0,0 +1,299 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelProgressivePromise; +import io.netty.channel.ChannelPromise; +import io.netty.channel.socket.DuplexChannel; + +import java.net.SocketAddress; + +/** + * A QUIC stream. + */ +public interface QuicStreamChannel extends DuplexChannel { + + /** + * Should be added to a {@link ChannelFuture} when the output should be cleanly shutdown via a {@code FIN}. No more + * writes will be allowed after this point. + */ + ChannelFutureListener SHUTDOWN_OUTPUT = f -> ((QuicStreamChannel) f.channel()).shutdownOutput(); + + @Override + default ChannelFuture bind(SocketAddress socketAddress) { + return pipeline().bind(socketAddress); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress) { + return pipeline().connect(remoteAddress); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress, SocketAddress localAddress) { + return pipeline().connect(remoteAddress, localAddress); + } + + @Override + default ChannelFuture disconnect() { + return pipeline().disconnect(); + } + + @Override + default ChannelFuture close() { + return pipeline().close(); + } + + @Override + default ChannelFuture deregister() { + return pipeline().deregister(); + } + + @Override + default ChannelFuture bind(SocketAddress localAddress, ChannelPromise channelPromise) { + return pipeline().bind(localAddress, channelPromise); + } + + @Override + default ChannelFuture connect(SocketAddress remoteAddress, ChannelPromise channelPromise) { + return pipeline().connect(remoteAddress, channelPromise); + } + + @Override + default ChannelFuture connect( + SocketAddress remoteAddress, SocketAddress localAddress, ChannelPromise channelPromise) { + return pipeline().connect(remoteAddress, localAddress, channelPromise); + } + + @Override + default ChannelFuture disconnect(ChannelPromise channelPromise) { + return pipeline().disconnect(channelPromise); + } + + @Override + default ChannelFuture close(ChannelPromise channelPromise) { + return pipeline().close(channelPromise); + } + + @Override + default ChannelFuture deregister(ChannelPromise channelPromise) { + return pipeline().deregister(channelPromise); + } + + @Override + default ChannelFuture write(Object msg) { + return pipeline().write(msg); + } + + @Override + default ChannelFuture write(Object msg, ChannelPromise channelPromise) { + return pipeline().write(msg, channelPromise); + } + + @Override + default ChannelFuture writeAndFlush(Object msg, ChannelPromise channelPromise) { + return pipeline().writeAndFlush(msg, channelPromise); + } + + @Override + default ChannelFuture writeAndFlush(Object msg) { + return pipeline().writeAndFlush(msg); + } + + @Override + default ChannelPromise newPromise() { + return pipeline().newPromise(); + } + + @Override + default ChannelProgressivePromise newProgressivePromise() { + return pipeline().newProgressivePromise(); + } + + @Override + default ChannelFuture newSucceededFuture() { + return pipeline().newSucceededFuture(); + } + + @Override + default ChannelFuture newFailedFuture(Throwable cause) { + return pipeline().newFailedFuture(cause); + } + + @Override + default ChannelPromise voidPromise() { + return pipeline().voidPromise(); + } + + @Override + default ChannelFuture shutdownInput() { + return shutdownInput(newPromise()); + } + + @Override + default ChannelFuture shutdownInput(ChannelPromise promise) { + return shutdownInput(0, promise); + } + + @Override + default ChannelFuture shutdownOutput() { + return shutdownOutput(newPromise()); + } + + @Override + default ChannelFuture shutdown() { + return shutdown(newPromise()); + } + + /** + * Shortcut for calling {@link #shutdownInput(int)} and {@link #shutdownInput(int)}. + * + * @param error the error to send. + * @return the future that is notified on completion. + */ + default ChannelFuture shutdown(int error) { + return shutdown(error, newPromise()); + } + + /** + * Shortcut for calling {@link #shutdownInput(int, ChannelPromise)} and {@link #shutdownInput(int, ChannelPromise)}. + * + * @param error the error to send. + * @param promise will be notified on completion. + * @return the future that is notified on completion. + */ + ChannelFuture shutdown(int error, ChannelPromise promise); + + /** + * Shutdown the input of the stream with the given error code. This means a {@code STOP_SENDING} frame will + * be send to the remote peer and all data received will be discarded. + * + * @param error the error to send as part of the {@code STOP_SENDING} frame. + * @return the future that is notified on completion. + */ + default ChannelFuture shutdownInput(int error) { + return shutdownInput(error, newPromise()); + } + + /** + * Shutdown the input of the stream with the given error code. This means a {@code STOP_SENDING} frame will + * be send to the remote peer and all data received will be discarded. + * + * @param error the error to send as part of the {@code STOP_SENDING} frame. + * @param promise will be notified on completion. + * @return the future that is notified on completion. + */ + ChannelFuture shutdownInput(int error, ChannelPromise promise); + + /** + * Shutdown the output of the stream with the given error code. This means a {@code RESET_STREAM} frame will + * be send to the remote peer and all data that is not sent yet will be discarded. + * + * Important:If you want to shutdown the output without sending a {@code RESET_STREAM} frame you + * should use {@link #shutdownOutput()} which will shutdown the output by sending a {@code FIN} and so signal + * a clean shutdown. + * + * @param error the error to send as part of the {@code RESET_STREAM} frame. + * @return the future that is notified on completion. + */ + default ChannelFuture shutdownOutput(int error) { + return shutdownOutput(error, newPromise()); + } + + /** + * Shutdown the output of the stream with the given error code. This means a {@code RESET_STREAM} frame will + * be send to the remote peer and all data that is not sent yet will be discarded. + * + * Important:If you want to shutdown the output without sending a {@code RESET_STREAM} frame you + * should use {@link #shutdownOutput(ChannelPromise)} which will shutdown the output by sending a {@code FIN} + * and so signal a clean shutdown. + * + * @param error the error to send as part of the {@code RESET_STREAM} frame. + * @param promise will be notified on completion. + * @return the future that is notified on completion. + */ + ChannelFuture shutdownOutput(int error, ChannelPromise promise); + + @Override + QuicStreamAddress localAddress(); + + @Override + QuicStreamAddress remoteAddress(); + + /** + * Returns {@code true} if the stream was created locally. + * + * @return {@code true} if created locally, {@code false} otherwise. + */ + boolean isLocalCreated(); + + /** + * Returns the {@link QuicStreamType} of the stream. + * + * @return {@link QuicStreamType} of this stream. + */ + QuicStreamType type(); + + /** + * The id of the stream. + * + * @return the stream id of this {@link QuicStreamChannel}. + */ + long streamId(); + + /** + * The {@link QuicStreamPriority} if explicit set for the stream via {@link #updatePriority(QuicStreamPriority)} or + * {@link #updatePriority(QuicStreamPriority, ChannelPromise)}. Otherwise {@code null}. + * + * @return the priority if any was set. + */ + QuicStreamPriority priority(); + + /** + * Update the priority of the stream. A stream's priority determines the order in which stream data is sent + * on the wire (streams with lower priority are sent first). + * + * @param priority the priority. + * @return future that is notified once the operation completes. + */ + default ChannelFuture updatePriority(QuicStreamPriority priority) { + return updatePriority(priority, newPromise()); + } + + /** + * Update the priority of the stream. A stream's priority determines the order in which stream data is sent + * on the wire (streams with lower priority are sent first). + * + * @param priority the priority. + * @param promise notified once operations completes. + * @return future that is notified once the operation completes. + */ + ChannelFuture updatePriority(QuicStreamPriority priority, ChannelPromise promise); + + @Override + QuicChannel parent(); + + @Override + QuicStreamChannel read(); + + @Override + QuicStreamChannel flush(); + + @Override + QuicStreamChannelConfig config(); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelBootstrap.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelBootstrap.java new file mode 100644 index 0000000..cc59c00 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelBootstrap.java @@ -0,0 +1,148 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelInitializer; +import io.netty.channel.ChannelOption; +import io.netty.util.AttributeKey; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.Promise; +import io.netty.util.internal.ObjectUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.util.HashMap; +import java.util.LinkedHashMap; +import java.util.Map; + +/** + * Allows to bootstrap outgoing {@link QuicStreamChannel}s. + */ +public final class QuicStreamChannelBootstrap { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(QuicStreamChannelBootstrap.class); + + private final QuicChannel parent; + private final Map, Object> options = new LinkedHashMap<>(); + private final Map, Object> attrs = new HashMap<>(); + private ChannelHandler handler; + private QuicStreamType type = QuicStreamType.BIDIRECTIONAL; + + /** + * Creates a new instance which uses the given {@link QuicChannel} to bootstrap {@link QuicStreamChannel}s. + * + * @param parent the {@link QuicChannel} that is used. + + */ + QuicStreamChannelBootstrap(QuicChannel parent) { + this.parent = ObjectUtil.checkNotNull(parent, "parent"); + } + + /** + * Allow to specify a {@link ChannelOption} which is used for the {@link QuicStreamChannel} instances once they got + * created. Use a value of {@code null} to remove a previous set {@link ChannelOption}. + * + * @param option the {@link ChannelOption} to apply to the {@link QuicStreamChannel}. + * @param value the value of the option. + * @param the type of the value. + * @return this instance. + */ + public QuicStreamChannelBootstrap option(ChannelOption option, T value) { + Quic.updateOptions(options, option, value); + return this; + } + + /** + * Allow to specify an initial attribute of the newly created {@link QuicStreamChannel}. If the {@code value} is + * {@code null}, the attribute of the specified {@code key} is removed. + * + * @param key the {@link AttributeKey} to apply to the {@link QuicChannel}. + * @param value the value of the attribute. + * @param the type of the value. + * @return this instance. + */ + public QuicStreamChannelBootstrap attr(AttributeKey key, T value) { + Quic.updateAttributes(attrs, key, value); + return this; + } + + /** + * Set the {@link ChannelHandler} that is added to the {@link io.netty.channel.ChannelPipeline} of the + * {@link QuicStreamChannel} once created. + * + * @param streamHandler the {@link ChannelHandler} that is added to the {@link QuicStreamChannel}s + * {@link io.netty.channel.ChannelPipeline}. + * @return this instance. + */ + public QuicStreamChannelBootstrap handler(ChannelHandler streamHandler) { + this.handler = ObjectUtil.checkNotNull(streamHandler, "streamHandler"); + return this; + } + + /** + * Set the {@link QuicStreamType} to use for the {@link QuicStreamChannel}, default is + * {@link QuicStreamType#BIDIRECTIONAL}. + * + * @param type the {@link QuicStreamType} of the {@link QuicStreamChannel}. + * @return this instance. + */ + public QuicStreamChannelBootstrap type(QuicStreamType type) { + this.type = ObjectUtil.checkNotNull(type, "type"); + return this; + } + + /** + * Creates a new {@link QuicStreamChannel} and notifies the {@link Future}. + * + * @return the {@link Future} that is notified once the operation completes. + */ + public Future create() { + return create(parent.eventLoop().newPromise()); + } + + /** + * Creates a new {@link QuicStreamChannel} and notifies the {@link Future}. + * + * @param promise the {@link Promise} that is notified once the operation completes. + * @return the {@link Future} that is notified once the operation completes. + */ + public Future create(Promise promise) { + if (handler == null) { + throw new IllegalStateException("streamHandler not set"); + } + + return parent.createStream(type, new QuicStreamChannelBootstrapHandler(handler, + Quic.toOptionsArray(options), Quic.toAttributesArray(attrs)), promise); + } + + private static final class QuicStreamChannelBootstrapHandler extends ChannelInitializer { + private final ChannelHandler streamHandler; + private final Map.Entry, Object>[] streamOptions; + private final Map.Entry, Object>[] streamAttrs; + + QuicStreamChannelBootstrapHandler(ChannelHandler streamHandler, + Map.Entry, Object>[] streamOptions, + Map.Entry, Object>[] streamAttrs) { + this.streamHandler = streamHandler; + this.streamOptions = streamOptions; + this.streamAttrs = streamAttrs; + } + @Override + protected void initChannel(QuicStreamChannel ch) { + Quic.setupChannel(ch, streamOptions, streamAttrs, streamHandler, logger); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelConfig.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelConfig.java new file mode 100644 index 0000000..951fa4a --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamChannelConfig.java @@ -0,0 +1,83 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; +import io.netty.channel.socket.DuplexChannelConfig; + +/** + * {@link DuplexChannelConfig} for QUIC streams. + */ +public interface QuicStreamChannelConfig extends DuplexChannelConfig { + /** + * Set this to {@code true} if the {@link QuicStreamChannel} should read {@link QuicStreamFrame}s and fire these + * through the {@link io.netty.channel.ChannelPipeline}, {@code false} if it uses {@link io.netty.buffer.ByteBuf}. + * + * @param readFrames {@code true} if {@link QuicStreamFrame}s should be used, {@code false} if + * {@link io.netty.buffer.ByteBuf} should be used. + * @return this instance itself. + * + */ + QuicStreamChannelConfig setReadFrames(boolean readFrames); + + /** + * Returns {@code true} if the {@link QuicStreamChannel} will read {@link QuicStreamFrame}s and fire these through + * the {@link io.netty.channel.ChannelPipeline}, {@code false} if it uses {@link io.netty.buffer.ByteBuf}. + * + * @return {@code true} if {@link QuicStreamFrame}s should be used, {@code false} if + * {@link io.netty.buffer.ByteBuf} should be used. + */ + boolean isReadFrames(); + + @Override + QuicStreamChannelConfig setAllowHalfClosure(boolean allowHalfClosure); + + @Override + QuicStreamChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead); + + @Override + QuicStreamChannelConfig setWriteSpinCount(int writeSpinCount); + + @Override + QuicStreamChannelConfig setAllocator(ByteBufAllocator allocator); + + @Override + QuicStreamChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator); + + @Override + QuicStreamChannelConfig setAutoRead(boolean autoRead); + + @Override + QuicStreamChannelConfig setAutoClose(boolean autoClose); + + @Override + QuicStreamChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator); + + @Override + QuicStreamChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark); + + @Override + QuicStreamChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis); + + @Override + QuicStreamChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark); + + @Override + QuicStreamChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamFrame.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamFrame.java new file mode 100644 index 0000000..1fcdd2c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamFrame.java @@ -0,0 +1,128 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufHolder; +import io.netty.buffer.Unpooled; + +/** + * A QUIC STREAM_FRAME. + */ +public interface QuicStreamFrame extends ByteBufHolder { + + /** + * An empty {@link QuicStreamFrame} that has the {@code FIN} flag set. + */ + QuicStreamFrame EMPTY_FIN = new QuicStreamFrame() { + @Override + public boolean hasFin() { + return true; + } + + @Override + public QuicStreamFrame copy() { + return this; + } + + @Override + public QuicStreamFrame duplicate() { + return this; + } + + @Override + public QuicStreamFrame retainedDuplicate() { + return this; + } + + @Override + public QuicStreamFrame replace(ByteBuf content) { + return new DefaultQuicStreamFrame(content, hasFin()); + } + + @Override + public QuicStreamFrame retain() { + return this; + } + + @Override + public QuicStreamFrame retain(int increment) { + return this; + } + + @Override + public QuicStreamFrame touch() { + return this; + } + + @Override + public QuicStreamFrame touch(Object hint) { + return this; + } + + @Override + public ByteBuf content() { + return Unpooled.EMPTY_BUFFER; + } + + @Override + public int refCnt() { + return 1; + } + + @Override + public boolean release() { + return false; + } + + @Override + public boolean release(int decrement) { + return false; + } + }; + + /** + * Returns {@code true} if the frame has the FIN set, which means it notifies the remote peer that + * there will be no more writing happen. {@code false} otherwise. + * + * @return {@code true} if the FIN flag should be set, {@code false} otherwise. + */ + boolean hasFin(); + + @Override + QuicStreamFrame copy(); + + @Override + QuicStreamFrame duplicate(); + + @Override + QuicStreamFrame retainedDuplicate(); + + @Override + QuicStreamFrame replace(ByteBuf content); + + @Override + QuicStreamFrame retain(); + + @Override + QuicStreamFrame retain(int increment); + + @Override + QuicStreamFrame touch(); + + @Override + QuicStreamFrame touch(Object hint); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamIdGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamIdGenerator.java new file mode 100644 index 0000000..7e3e3c3 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamIdGenerator.java @@ -0,0 +1,41 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Generates and hands over the next stream id to use for a QUIC stream. + */ +final class QuicStreamIdGenerator { + private long nextBidirectionalStreamId; + private long nextUnidirectionalStreamId; + + QuicStreamIdGenerator(boolean server) { + // See https://quicwg.org/base-drafts/rfc9000.html#name-stream-types-and-identifier + nextBidirectionalStreamId = server ? 1 : 0; + nextUnidirectionalStreamId = server ? 3 : 2; + } + + long nextStreamId(boolean bidirectional) { + if (bidirectional) { + long stream = nextBidirectionalStreamId; + nextBidirectionalStreamId += 4; + return stream; + } + long stream = nextUnidirectionalStreamId; + nextUnidirectionalStreamId += 4; + return stream; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamLimitChangedEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamLimitChangedEvent.java new file mode 100644 index 0000000..8cd4063 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamLimitChangedEvent.java @@ -0,0 +1,26 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Event fired once the stream limit of a {@link QuicChannel} changes. + */ +public final class QuicStreamLimitChangedEvent implements QuicEvent { + + static final QuicStreamLimitChangedEvent INSTANCE = new QuicStreamLimitChangedEvent(); + + private QuicStreamLimitChangedEvent() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamPriority.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamPriority.java new file mode 100644 index 0000000..570ca78 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamPriority.java @@ -0,0 +1,83 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.ObjectUtil; + +import java.util.Objects; + +/** + * The priority of a {@link QuicStreamChannel}. + */ +public final class QuicStreamPriority { + + private final int urgency; + private final boolean incremental; + + /** + * Create a new instance + * + * @param urgency the urgency of the stream. + * @param incremental {@code true} if incremental. + */ + public QuicStreamPriority(int urgency, boolean incremental) { + this.urgency = ObjectUtil.checkInRange(urgency, 0, Byte.MAX_VALUE, "urgency"); + this.incremental = incremental; + } + + /** + * The urgency of the stream. Smaller number means more urgent and so data will be send earlier. + * + * @return the urgency. + */ + public int urgency() { + return urgency; + } + + /** + * {@code true} if incremental, {@code false} otherwise. + * + * @return if incremental. + */ + public boolean isIncremental() { + return incremental; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + QuicStreamPriority that = (QuicStreamPriority) o; + return urgency == that.urgency && incremental == that.incremental; + } + + @Override + public int hashCode() { + return Objects.hash(urgency, incremental); + } + + @Override + public String toString() { + return "QuicStreamPriority{" + + "urgency=" + urgency + + ", incremental=" + incremental + + '}'; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamType.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamType.java new file mode 100644 index 0000000..268c5d8 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicStreamType.java @@ -0,0 +1,31 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * The type of a {@link QuicStreamChannel}. + */ +public enum QuicStreamType { + + /** + * An unidirectional stream. + */ + UNIDIRECTIONAL, + /** + * A bidirectional stream. + */ + BIDIRECTIONAL +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTokenHandler.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTokenHandler.java new file mode 100644 index 0000000..729d83b --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTokenHandler.java @@ -0,0 +1,54 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; + +import java.net.InetSocketAddress; + +/** + * Handle token related operations. + */ +public interface QuicTokenHandler { + + /** + * Generate a new token for the given destination connection id and address. This token is written to {@code out}. + * If no token should be generated and so no token validation should take place at all this method should return + * {@code false}. + * + * @param out {@link ByteBuf} into which the token will be written. + * @param dcid the destination connection id. + * @param address the {@link InetSocketAddress} of the sender. + * @return {@code true} if a token was written and so validation should happen, {@code false} otherwise. + */ + boolean writeToken(ByteBuf out, ByteBuf dcid, InetSocketAddress address); + + /** + * Validate the token and return the offset, {@code -1} is returned if the token is not valid. + * + * @param token the {@link ByteBuf} that contains the token. The ownership is not transferred. + * @param address the {@link InetSocketAddress} of the sender. + * @return the start index after the token or {@code -1} if the token was not valid. + */ + int validateToken(ByteBuf token, InetSocketAddress address); + + /** + * Return the maximal token length. + * + * @return the maximal supported token length. + */ + int maxTokenLength(); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTransportParameters.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTransportParameters.java new file mode 100644 index 0000000..9bf1cc2 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicTransportParameters.java @@ -0,0 +1,113 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +/** + * Transport parameters for QUIC. + */ +public interface QuicTransportParameters { + + /** + * The maximum idle timeout. + * @return timeout. + */ + long maxIdleTimeout(); + + /** + * The maximum UDP payload size. + * + * @return maximum payload size. + */ + long maxUdpPayloadSize(); + + /** + * The initial flow control maximum data for the connection. + * + * @return flowcontrol. + */ + long initialMaxData(); + + /** + * The initial flow control maximum data for local bidirectional streams. + * + * @return flowcontrol. + */ + long initialMaxStreamDataBidiLocal(); + + /** + * The initial flow control maximum data for remote bidirectional streams. + * + * @return flowcontrol. + */ + long initialMaxStreamDataBidiRemote(); + + /** + * The initial flow control maximum data for unidirectional streams. + * + * @return flowcontrol. + */ + long initialMaxStreamDataUni(); + + + /** + * The initial maximum bidirectional streams. + * + * @return streams. + */ + long initialMaxStreamsBidi(); + + /** + * The initial maximum unidirectional streams. + * + * @return streams. + */ + long initialMaxStreamsUni(); + + /** + * The ACK delay exponent + * + * @return exponent. + */ + long ackDelayExponent(); + + /** + * The max ACK delay. + * + * @return delay. + */ + long maxAckDelay(); + + /** + * Whether active migration is disabled. + * + * @return disabled. + */ + boolean disableActiveMigration(); + + /** + * The active connection ID limit. + * + * @return limit. + */ + long activeConnIdLimit(); + + /** + * DATAGRAM frame extension parameter, if any. + * + * @return param. + */ + long maxDatagramFrameSize(); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quiche.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quiche.java new file mode 100644 index 0000000..e8a1ce7 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/Quiche.java @@ -0,0 +1,870 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.ChannelPromise; +import io.netty.util.internal.ClassInitializerUtil; +import io.netty.util.internal.NativeLibraryLoader; +import io.netty.util.internal.PlatformDependent; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import javax.net.ssl.SSLException; +import javax.net.ssl.SSLHandshakeException; +import java.nio.ByteBuffer; +import java.nio.ByteOrder; + +final class Quiche { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(Quiche.class); + private static final boolean DEBUG_LOGGING_ENABLED = logger.isDebugEnabled(); + + static { + // Preload all classes that will be used in the OnLoad(...) function of JNI to eliminate the possiblity of a + // class-loader deadlock. This is a workaround for https://github.com/netty/netty/issues/11209. + + // This needs to match all the classes that are loaded via NETTY_JNI_UTIL_LOAD_CLASS or looked up via + // NETTY_JNI_UTIL_FIND_CLASS. + ClassInitializerUtil.tryLoadClasses(Quiche.class, + // netty_quic_boringssl + byte[].class, String.class, BoringSSLCertificateCallback.class, + BoringSSLCertificateVerifyCallback.class, BoringSSLHandshakeCompleteCallback.class, + + //netty_quic_quiche + QuicheLogger.class + ); + + try { + // First, try calling a side-effect free JNI method to see if the library was already + // loaded by the application. + quiche_version(); + } catch (UnsatisfiedLinkError ignore) { + // The library was not previously loaded, load it now. + loadNativeLibrary(); + } + + // Let's enable debug logging for quiche if its enabled in our logger. + if (DEBUG_LOGGING_ENABLED) { + quiche_enable_debug_logging(new QuicheLogger(logger)); + } + } + + private static void loadNativeLibrary() { + // This needs to be kept in sync with what is defined in netty_quic_quiche.c + String libName = "netty_quiche"; + ClassLoader cl = PlatformDependent.getClassLoader(Quiche.class); + + if (!PlatformDependent.isAndroid()) { + libName += '_' + PlatformDependent.normalizedOs() + + '_' + PlatformDependent.normalizedArch(); + } + + try { + NativeLibraryLoader.load(libName, cl); + } catch (UnsatisfiedLinkError e) { + logger.debug("Failed to load {}", libName, e); + throw e; + } + } + + static final short AF_INET = (short) QuicheNativeStaticallyReferencedJniMethods.afInet(); + static final short AF_INET6 = (short) QuicheNativeStaticallyReferencedJniMethods.afInet6(); + static final int SIZEOF_SOCKADDR_STORAGE = QuicheNativeStaticallyReferencedJniMethods.sizeofSockaddrStorage(); + static final int SIZEOF_SOCKADDR_IN = QuicheNativeStaticallyReferencedJniMethods.sizeofSockaddrIn(); + static final int SIZEOF_SOCKADDR_IN6 = QuicheNativeStaticallyReferencedJniMethods.sizeofSockaddrIn6(); + static final int SOCKADDR_IN_OFFSETOF_SIN_FAMILY = + QuicheNativeStaticallyReferencedJniMethods.sockaddrInOffsetofSinFamily(); + static final int SOCKADDR_IN_OFFSETOF_SIN_PORT = + QuicheNativeStaticallyReferencedJniMethods.sockaddrInOffsetofSinPort(); + static final int SOCKADDR_IN_OFFSETOF_SIN_ADDR = + QuicheNativeStaticallyReferencedJniMethods.sockaddrInOffsetofSinAddr(); + static final int IN_ADDRESS_OFFSETOF_S_ADDR = QuicheNativeStaticallyReferencedJniMethods.inAddressOffsetofSAddr(); + static final int SOCKADDR_IN6_OFFSETOF_SIN6_FAMILY = + QuicheNativeStaticallyReferencedJniMethods.sockaddrIn6OffsetofSin6Family(); + static final int SOCKADDR_IN6_OFFSETOF_SIN6_PORT = + QuicheNativeStaticallyReferencedJniMethods.sockaddrIn6OffsetofSin6Port(); + static final int SOCKADDR_IN6_OFFSETOF_SIN6_FLOWINFO = + QuicheNativeStaticallyReferencedJniMethods.sockaddrIn6OffsetofSin6Flowinfo(); + static final int SOCKADDR_IN6_OFFSETOF_SIN6_ADDR = + QuicheNativeStaticallyReferencedJniMethods.sockaddrIn6OffsetofSin6Addr(); + static final int SOCKADDR_IN6_OFFSETOF_SIN6_SCOPE_ID = + QuicheNativeStaticallyReferencedJniMethods.sockaddrIn6OffsetofSin6ScopeId(); + static final int IN6_ADDRESS_OFFSETOF_S6_ADDR = + QuicheNativeStaticallyReferencedJniMethods.in6AddressOffsetofS6Addr(); + static final int SIZEOF_SOCKLEN_T = QuicheNativeStaticallyReferencedJniMethods.sizeofSocklenT(); + static final int SIZEOF_SIZE_T = QuicheNativeStaticallyReferencedJniMethods.sizeofSizeT(); + + static final int SIZEOF_TIMESPEC = QuicheNativeStaticallyReferencedJniMethods.sizeofTimespec(); + + static final int SIZEOF_TIME_T = QuicheNativeStaticallyReferencedJniMethods.sizeofTimeT(); + static final int SIZEOF_LONG = QuicheNativeStaticallyReferencedJniMethods.sizeofLong(); + + static final int TIMESPEC_OFFSETOF_TV_SEC = + QuicheNativeStaticallyReferencedJniMethods.timespecOffsetofTvSec(); + + static final int TIMESPEC_OFFSETOF_TV_NSEC = + QuicheNativeStaticallyReferencedJniMethods.timespecOffsetofTvNsec(); + + static final int QUICHE_RECV_INFO_OFFSETOF_FROM = + QuicheNativeStaticallyReferencedJniMethods.quicheRecvInfoOffsetofFrom(); + static final int QUICHE_RECV_INFO_OFFSETOF_FROM_LEN = + QuicheNativeStaticallyReferencedJniMethods.quicheRecvInfoOffsetofFromLen(); + + static final int QUICHE_RECV_INFO_OFFSETOF_TO = + QuicheNativeStaticallyReferencedJniMethods.quicheRecvInfoOffsetofTo(); + static final int QUICHE_RECV_INFO_OFFSETOF_TO_LEN = + QuicheNativeStaticallyReferencedJniMethods.quicheRecvInfoOffsetofToLen(); + + static final int SIZEOF_QUICHE_RECV_INFO = QuicheNativeStaticallyReferencedJniMethods.sizeofQuicheRecvInfo(); + static final int QUICHE_SEND_INFO_OFFSETOF_TO = + QuicheNativeStaticallyReferencedJniMethods.quicheSendInfoOffsetofTo(); + static final int QUICHE_SEND_INFO_OFFSETOF_TO_LEN = + QuicheNativeStaticallyReferencedJniMethods.quicheSendInfoOffsetofToLen(); + + static final int QUICHE_SEND_INFO_OFFSETOF_FROM = + QuicheNativeStaticallyReferencedJniMethods.quicheSendInfoOffsetofFrom(); + static final int QUICHE_SEND_INFO_OFFSETOF_FROM_LEN = + QuicheNativeStaticallyReferencedJniMethods.quicheSendInfoOffsetofFromLen(); + + static final int QUICHE_SEND_INFO_OFFSETOF_AT = + QuicheNativeStaticallyReferencedJniMethods.quicheSendInfoOffsetofAt(); + static final int SIZEOF_QUICHE_SEND_INFO = QuicheNativeStaticallyReferencedJniMethods.sizeofQuicheSendInfo(); + + static final int QUICHE_PROTOCOL_VERSION = QuicheNativeStaticallyReferencedJniMethods.quiche_protocol_version(); + static final int QUICHE_MAX_CONN_ID_LEN = QuicheNativeStaticallyReferencedJniMethods.quiche_max_conn_id_len(); + + /** + * See QUICHE_SHUTDOWN_READ. + */ + static final int QUICHE_SHUTDOWN_READ = QuicheNativeStaticallyReferencedJniMethods.quiche_shutdown_read(); + + /** + * See QUICHE_SHUTDOWN_WRITE. + */ + static final int QUICHE_SHUTDOWN_WRITE = QuicheNativeStaticallyReferencedJniMethods.quiche_shutdown_write(); + + /** + * See QUICHE_ERR_DONE. + */ + static final int QUICHE_ERR_DONE = QuicheNativeStaticallyReferencedJniMethods.quiche_err_done(); + + /** + * See + * QUICHE_ERR_BUFFER_TOO_SHORT. + */ + static final int QUICHE_ERR_BUFFER_TOO_SHORT = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_buffer_too_short(); + + /** + * See + * QUICHE_ERR_UNKNOWN_VERSION. + */ + static final int QUICHE_ERR_UNKNOWN_VERSION = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_unknown_version(); + + /** + * See + * QUICHE_ERR_INVALID_FRAME. + */ + static final int QUICHE_ERR_INVALID_FRAME = QuicheNativeStaticallyReferencedJniMethods.quiche_err_invalid_frame(); + + /** + * See + * QUICHE_ERR_INVALID_PACKET. + */ + static final int QUICHE_ERR_INVALID_PACKET = QuicheNativeStaticallyReferencedJniMethods.quiche_err_invalid_packet(); + + /** + * See + * QUICHE_ERR_INVALID_STATE. + */ + static final int QUICHE_ERR_INVALID_STATE = QuicheNativeStaticallyReferencedJniMethods.quiche_err_invalid_state(); + + /** + * See + * QUICHE_ERR_INVALID_STREAM_STATE. + */ + static final int QUICHE_ERR_INVALID_STREAM_STATE = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_invalid_stream_state(); + + /** + * See + * QUICHE_ERR_INVALID_TRANSPORT_PARAM. + */ + static final int QUICHE_ERR_INVALID_TRANSPORT_PARAM = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_invalid_transport_param(); + + /** + * See + * QUICHE_ERR_CRYPTO_FAIL. + */ + static final int QUICHE_ERR_CRYPTO_FAIL = QuicheNativeStaticallyReferencedJniMethods.quiche_err_crypto_fail(); + + /** + * See + * QUICHE_ERR_TLS_FAIL. + */ + static final int QUICHE_ERR_TLS_FAIL = QuicheNativeStaticallyReferencedJniMethods.quiche_err_tls_fail(); + + /** + * See + * QUICHE_ERR_FLOW_CONTROL. + */ + static final int QUICHE_ERR_FLOW_CONTROL = QuicheNativeStaticallyReferencedJniMethods.quiche_err_flow_control(); + + /** + * See + * QUICHE_ERR_STREAM_LIMIT. + */ + static final int QUICHE_ERR_STREAM_LIMIT = QuicheNativeStaticallyReferencedJniMethods.quiche_err_stream_limit(); + + /** + * See + * QUICHE_ERR_FINAL_SIZE. + */ + static final int QUICHE_ERR_FINAL_SIZE = QuicheNativeStaticallyReferencedJniMethods.quiche_err_final_size(); + + /** + * See + * QUICHE_ERR_CONGESTION_CONTROL. + */ + static final int QUICHE_ERR_CONGESTION_CONTROL = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_congestion_control(); + + /** + * See QUICHE_ERR_STREAM_STOPPED. + */ + static final int QUICHE_ERR_STREAM_RESET = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_stream_reset(); + + /** + * See + * QUICHE_ERR_STREAM_STOPPED. + */ + static final int QUICHE_ERR_STREAM_STOPPED = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_stream_stopped(); + + + // Too many identifiers were provided. + static final int QUICHE_ERR_ID_LIMIT = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_id_limit(); + + // Not enough available identifiers. + static final int QUICHE_ERR_OUT_OF_IDENTIFIERS = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_out_of_identifiers(); + + // Error in key update. + static final int QUICHE_ERR_KEY_UPDATE = + QuicheNativeStaticallyReferencedJniMethods.quiche_err_key_update(); + + /** + * See + * QUICHE_CC_RENO. + */ + static final int QUICHE_CC_RENO = QuicheNativeStaticallyReferencedJniMethods.quiche_cc_reno(); + + /** + * See + * QUICHE_CC_CUBIC. + */ + static final int QUICHE_CC_CUBIC = QuicheNativeStaticallyReferencedJniMethods.quiche_cc_cubic(); + + /** + * See + * QUICHE_CC_BBR. + */ + static final int QUICHE_CC_BBR = QuicheNativeStaticallyReferencedJniMethods.quiche_cc_bbr(); + + + static final int QUICHE_PATH_EVENT_NEW = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_new(); + static final int QUICHE_PATH_EVENT_VALIDATED = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_validated(); + static final int QUICHE_PATH_EVENT_FAILED_VALIDATION = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_failed_validation(); + static final int QUICHE_PATH_EVENT_CLOSED = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_closed(); + static final int QUICHE_PATH_EVENT_REUSED_SOURCE_CONNECTION_ID = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_reused_source_connection_id(); + static final int QUICHE_PATH_EVENT_PEER_MIGRATED = QuicheNativeStaticallyReferencedJniMethods.quiche_path_event_peer_migrated(); + + /** + * See quiche_version. + */ + static native String quiche_version(); + + /** + * See + * quiche_version_is_supported. + */ + static native boolean quiche_version_is_supported(int version); + + /** + * See quiche_header_info. + */ + static native int quiche_header_info(long bufAddr, int bufLength, int dcil, long versionAddr, long typeAddr, + long scidAddr, long scidLenAddr, long dcidAddr, long dcidLenAddr, + long tokenAddr, long tokenLenAddr); + /** + * See quiche_negotiate_version. + */ + static native int quiche_negotiate_version( + long scidAddr, int scidLen, long dcidAddr, int dcidLen, long outAddr, int outLen); + + /** + * See quiche_retry. + */ + static native int quiche_retry(long scidAddr, int scidLen, long dcidAddr, int dcidLen, long newScidAddr, + int newScidLen, long tokenAddr, int tokenLen, int version, long outAddr, int outLen); + + /** + * See quiche_conn_new_with_tls. + */ + static native long quiche_conn_new_with_tls(long scidAddr, int scidLen, long odcidAddr, int odcidLen, + long localAddr, int localLen, + long peerAddr, int peerLen, + long configAddr, long ssl, boolean isServer); + + /** + * See + * quiche_conn_set_qlog_path. + */ + static native boolean quiche_conn_set_qlog_path(long connAddr, String path, String logTitle, String logDescription); + + /** + * See quiche_conn_recv. + */ + static native int quiche_conn_recv(long connAddr, long bufAddr, int bufLen, long infoAddr); + + /** + * See quiche_conn_send. + */ + static native int quiche_conn_send(long connAddr, long outAddr, int outLen, long infoAddr); + + /** + * See quiche_conn_free. + */ + static native void quiche_conn_free(long connAddr); + + static QuicConnectionCloseEvent quiche_conn_peer_error(long connAddr) { + Object[] error = quiche_conn_peer_error0(connAddr); + if (error == null) { + return null; + } + return new QuicConnectionCloseEvent((Boolean) error[0], (Integer) error[1], (byte[]) error[2]); + } + + private static native Object[] quiche_conn_peer_error0(long connAddr); + + /** + * See + * quiche_conn_peer_streams_left_bidi. + */ + static native long quiche_conn_peer_streams_left_bidi(long connAddr); + + /** + * See + * quiche_conn_peer_streams_left_uni. + */ + static native long quiche_conn_peer_streams_left_uni(long connAddr); + + /** + * See + * quiche_conn_stream_priority. + */ + static native int quiche_conn_stream_priority( + long connAddr, long streamId, byte urgency, boolean incremental); + + static native int quiche_conn_send_quantum(long connAddr); + + /** + * See quiche_conn_trace_id. + */ + static native byte[] quiche_conn_trace_id(long connAddr); + + static native byte[] quiche_conn_source_id(long connAddr); + + static native byte[] quiche_conn_destination_id(long connAddr); + + /** + * See quiche_conn_stream_recv. + */ + static native int quiche_conn_stream_recv(long connAddr, long streamId, long outAddr, int bufLen, long finAddr); + + /** + * See quiche_conn_stream_send. + */ + static native int quiche_conn_stream_send(long connAddr, long streamId, long bufAddr, int bufLen, boolean fin); + + /** + * See + * quiche_conn_stream_shutdown. + */ + static native int quiche_conn_stream_shutdown(long connAddr, long streamId, int direction, long err); + + /** + * See + * quiche_conn_stream_capacity. + */ + static native int quiche_conn_stream_capacity(long connAddr, long streamId); + + /** + * See + * quiche_conn_stream_finished. + */ + static native boolean quiche_conn_stream_finished(long connAddr, long streamId); + + /** + * See + * quiche_conn_close. + */ + static native int quiche_conn_close(long connAddr, boolean app, long err, long reasonAddr, int reasonLen); + + /** + * See + * quiche_conn_is_established. + */ + static native boolean quiche_conn_is_established(long connAddr); + + /** + * See + * quiche_conn_is_in_early_data. + */ + static native boolean quiche_conn_is_in_early_data(long connAddr); + + /** + * See + * quiche_conn_is_closed. + */ + static native boolean quiche_conn_is_closed(long connAddr); + + /** + * See + * quiche_conn_is_timed_out. + */ + static native boolean quiche_conn_is_timed_out(long connAddr); + + /** + * See + * quiche_conn_stats. + * The implementation relies on all fields of + * quiche_stats being numerical. + * The assumption made allows passing primitive array rather than dealing with objects. + */ + static native long[] quiche_conn_stats(long connAddr); + + /** + * See + * + * quiche_conn_stats. + */ + static native long[] quiche_conn_peer_transport_params(long connAddr); + + /** + * See + * quiche_conn_timeout_as_nanos. + */ + static native long quiche_conn_timeout_as_nanos(long connAddr); + + /** + * See + * quiche_conn_on_timeout. + */ + static native void quiche_conn_on_timeout(long connAddr); + + /** + * See + * quiche_conn_readable. + */ + static native long quiche_conn_readable(long connAddr); + + /** + * See + * quiche_conn_writable. + */ + static native long quiche_conn_writable(long connAddr); + + /** + * See + * quiche_stream_iter_next. + * + * This method will fill the {@code streamIds} array and return the number of streams that were filled into + * the array. If the number is the same as the length of the array you should call it again until it returns + * less to ensure you process all the streams later on. + */ + static native int quiche_stream_iter_next(long iterAddr, long[] streamIds); + + /** + * See + * quiche_stream_iter_free. + * + */ + static native void quiche_stream_iter_free(long iterAddr); + + /** + * See + * + * quiche_conn_dgram_max_writable_len. + */ + static native int quiche_conn_dgram_max_writable_len(long connAddr); + + /** + * See + * + * quiche_conn_dgram_recv_front_len. + */ + static native int quiche_conn_dgram_recv_front_len(long connAddr); + + /** + * See + * + * quiche_conn_dgram_recv. + */ + static native int quiche_conn_dgram_recv(long connAddr, long buf, int size); + + /** + * See + * + * quiche_conn_dgram_send. + */ + static native int quiche_conn_dgram_send(long connAddr, long buf, int size); + + /** + * See + * + * quiche_conn_set_session. + */ + static native int quiche_conn_set_session(long connAddr, byte[] sessionBytes); + + /** + * See + * + * quiche_conn_max_send_udp_payload_size. + */ + static native int quiche_conn_max_send_udp_payload_size(long connAddr); + + static native int quiche_conn_scids_left(long connAddr); + + static native long quiche_conn_new_scid(long connAddr, long scidAddr, int scidLen, byte[] resetToken, boolean retire_if_needed, long seq); + + static native byte[] quiche_conn_retired_scid_next(long connAddr); + + static native long quiche_conn_path_event_next(long connAddr); + static native int quiche_path_event_type(long pathEvent); + static native void quiche_path_event_free(long pathEvent); + static native Object[] quiche_path_event_new(long pathEvent); + static native Object[] quiche_path_event_validated(long pathEvent); + static native Object[] quiche_path_event_failed_validation(long pathEvent); + static native Object[] quiche_path_event_closed(long pathEvent); + static native Object[] quiche_path_event_reused_source_connection_id(long pathEvent); + static native Object[] quiche_path_event_peer_migrated(long pathEvent); + + /** + * See + * quiche_config_new. + */ + static native long quiche_config_new(int version); + + /** + * See + * + * quiche_config_grease. + */ + static native void quiche_config_grease(long configAddr, boolean value); + + /** + * See + * + * quiche_config_set_max_idle_timeout. + */ + static native void quiche_config_set_max_idle_timeout(long configAddr, long value); + + /** + * See + * + * quiche_config_set_max_recv_udp_payload_size. + */ + static native void quiche_config_set_max_recv_udp_payload_size(long configAddr, long value); + + /** + * See + * + * quiche_config_set_max_recv_udp_payload_size. + */ + static native void quiche_config_set_max_send_udp_payload_size(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_data. + */ + static native void quiche_config_set_initial_max_data(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_stream_data_bidi_local. + */ + static native void quiche_config_set_initial_max_stream_data_bidi_local(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_stream_data_bidi_remote. + */ + static native void quiche_config_set_initial_max_stream_data_bidi_remote(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_stream_data_uni. + */ + static native void quiche_config_set_initial_max_stream_data_uni(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_streams_bidi. + */ + static native void quiche_config_set_initial_max_streams_bidi(long configAddr, long value); + + /** + * See + * + * quiche_config_set_initial_max_streams_uni. + */ + static native void quiche_config_set_initial_max_streams_uni(long configAddr, long value); + + /** + * See + * + * quiche_config_set_ack_delay_exponent. + */ + static native void quiche_config_set_ack_delay_exponent(long configAddr, long value); + + /** + * See + * + * quiche_config_set_max_ack_delay. + */ + static native void quiche_config_set_max_ack_delay(long configAddr, long value); + + /** + * See + * + * quiche_config_set_disable_active_migration. + */ + static native void quiche_config_set_disable_active_migration(long configAddr, boolean value); + + /** + * See + * + * quiche_config_set_cc_algorithm. + */ + static native void quiche_config_set_cc_algorithm(long configAddr, int algo); + + /** + * See + * + * quiche_config_enable_hystart. + */ + static native void quiche_config_enable_hystart(long configAddr, boolean value); + + /** + * See + * + * quiche_config_enable_dgram. + */ + static native void quiche_config_enable_dgram(long configAddr, boolean enable, + int recv_queue_len, int send_queue_len); + + // Sets the limit of active connection IDs. + static native void quiche_config_set_active_connection_id_limit(long configAddr, long value); + + // Sets the initial stateless reset token. + static native void quiche_config_set_stateless_reset_token(long configAddr, byte[] token); + + /** + * See + * + * quiche_config_free. + */ + static native void quiche_config_free(long configAddr); + + /** + * See + * quiche_config_new. + */ + private static native void quiche_enable_debug_logging(QuicheLogger logger); + + private static native long buffer_memory_address(ByteBuffer buffer); + + static native int sockaddr_cmp(long addr, long addr2); + + /** + * Returns the memory address if the {@link ByteBuf} taking the readerIndex into account. + * + * @param buf the {@link ByteBuf} of which we want to obtain the memory address + * (taking its {@link ByteBuf#readerIndex()} into account). + * @return the memory address of this {@link ByteBuf}s readerIndex. + */ + static long readerMemoryAddress(ByteBuf buf) { + return memoryAddress(buf, buf.readerIndex(), buf.readableBytes()); + } + + /** + * Returns the memory address if the {@link ByteBuf} taking the writerIndex into account. + * + * @param buf the {@link ByteBuf} of which we want to obtain the memory address + * (taking its {@link ByteBuf#writerIndex()} into account). + * @return the memory address of this {@link ByteBuf}s writerIndex. + */ + static long writerMemoryAddress(ByteBuf buf) { + return memoryAddress(buf, buf.writerIndex(), buf.writableBytes()); + } + + /** + * Returns the memory address if the {@link ByteBuf} taking the offset into account. + * + * @param buf the {@link ByteBuf} of which we want to obtain the memory address + * (taking the {@code offset} into account). + * @param offset the offset of the memory address. + * @param len the length of the {@link ByteBuf}. + * @return the memory address of this {@link ByteBuf}s offset. + */ + static long memoryAddress(ByteBuf buf, int offset, int len) { + assert buf.isDirect(); + if (buf.hasMemoryAddress()) { + return buf.memoryAddress() + offset; + } + return memoryAddressWithPosition(buf.internalNioBuffer(offset, len)); + } + + /** + * Returns the memory address of the given {@link ByteBuffer} taking its current {@link ByteBuffer#position()} into + * account. + * + * @param buf the {@link ByteBuffer} of which we want to obtain the memory address + * (taking its {@link ByteBuffer#position()} into account). + * @return the memory address of this {@link ByteBuffer}s position. + */ + static long memoryAddressWithPosition(ByteBuffer buf) { + assert buf.isDirect(); + return buffer_memory_address(buf) + buf.position(); + } + + @SuppressWarnings("deprecation") + static ByteBuf allocateNativeOrder(int capacity) { + // Just use Unpooled as the life-time of these buffers is long. + ByteBuf buffer = Unpooled.directBuffer(capacity); + + // As we use the buffers as pointers to int etc we need to ensure we use the right oder so we will + // see the right value when we read primitive values. + return PlatformDependent.BIG_ENDIAN_NATIVE_ORDER ? buffer : buffer.order(ByteOrder.LITTLE_ENDIAN); + } + + static Exception newException(int err) { + final QuicError error = QuicError.valueOf(err); + final QuicException reason = new QuicException(error); + if (err == QUICHE_ERR_TLS_FAIL) { + String lastSslError = BoringSSL.ERR_last_error(); + final String message; + if (lastSslError != null) { + message = error.message() + ": " + lastSslError; + } else { + message = error.message(); + } + final SSLHandshakeException sslExc = new SSLHandshakeException(message); + sslExc.initCause(reason); + return sslExc; + } + if (err == QUICHE_ERR_CRYPTO_FAIL) { + return new SSLException(error.message(), reason); + } + return reason; + } + + static boolean shouldClose(int res) { + return res == Quiche.QUICHE_ERR_CRYPTO_FAIL || res == Quiche.QUICHE_ERR_TLS_FAIL; + } + + static boolean throwIfError(int res) throws Exception { + if (res < 0) { + if (res == Quiche.QUICHE_ERR_DONE) { + return true; + } + throw Quiche.newException(res); + } + return false; + } + + static void notifyPromise(int res, ChannelPromise promise) { + if (res < 0 && res != Quiche.QUICHE_ERR_DONE) { + promise.setFailure(Quiche.newException(res)); + } else { + promise.setSuccess(); + } + } + + /** + * Returns {@code true} if both {@link ByteBuffer}s have the same {@code sock_addr} stored. + * + * @param memory the first {@link ByteBuffer} which holds a {@code quiche_recv_info}. + * @param memory2 the second {@link ByteBuffer} which holds a {@code quiche_recv_info}. + * @return {@code true} if both {@link ByteBuffer}s have the same {@code sock_addr} stored, {@code false} + * otherwise. + */ + static boolean isSameAddress(ByteBuffer memory, ByteBuffer memory2, int addressOffset) { + long address1 = Quiche.memoryAddressWithPosition(memory) + addressOffset; + long address2 = Quiche.memoryAddressWithPosition(memory2) + addressOffset; + return SockaddrIn.cmp(address1, address2) == 0; + } + + static void setPrimitiveValue(ByteBuffer memory, int offset, int valueType, long value) { + switch (valueType) { + case 1: + memory.put(offset, (byte) value); + break; + case 2: + memory.putShort(offset, (short) value); + break; + case 4: + memory.putInt(offset, (int) value); + break; + case 8: + memory.putLong(offset, value); + break; + default: + throw new IllegalStateException(); + } + } + + static long getPrimitiveValue(ByteBuffer memory, int offset, int valueType) { + switch (valueType) { + case 1: + return memory.get(offset); + case 2: + return memory.getShort(offset); + case 4: + return memory.getInt(offset); + case 8: + return memory.getLong(offset); + default: + throw new IllegalStateException(); + } + } + + private Quiche() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheConfig.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheConfig.java new file mode 100644 index 0000000..c5866dc --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheConfig.java @@ -0,0 +1,137 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +final class QuicheConfig { + private final boolean isDatagramSupported; + private long config = -1; + + QuicheConfig(int version, Boolean grease, Long maxIdleTimeout, Long maxSendUdpPayloadSize, + Long maxRecvUdpPayloadSize, Long initialMaxData, + Long initialMaxStreamDataBidiLocal, Long initialMaxStreamDataBidiRemote, + Long initialMaxStreamDataUni, Long initialMaxStreamsBidi, Long initialMaxStreamsUni, + Long ackDelayExponent, Long maxAckDelay, Boolean disableActiveMigration, Boolean enableHystart, + QuicCongestionControlAlgorithm congestionControlAlgorithm, + Integer recvQueueLen, Integer sendQueueLen, + Long activeConnectionIdLimit, byte[] statelessResetToken) { + long config = Quiche.quiche_config_new(version); + try { + if (grease != null) { + Quiche.quiche_config_grease(config, grease); + } + if (maxIdleTimeout != null) { + Quiche.quiche_config_set_max_idle_timeout(config, maxIdleTimeout); + } + if (maxSendUdpPayloadSize != null) { + Quiche.quiche_config_set_max_send_udp_payload_size(config, maxSendUdpPayloadSize); + } + if (maxRecvUdpPayloadSize != null) { + Quiche.quiche_config_set_max_recv_udp_payload_size(config, maxRecvUdpPayloadSize); + } + if (initialMaxData != null) { + Quiche.quiche_config_set_initial_max_data(config, initialMaxData); + } + if (initialMaxStreamDataBidiLocal != null) { + Quiche.quiche_config_set_initial_max_stream_data_bidi_local(config, initialMaxStreamDataBidiLocal); + } + if (initialMaxStreamDataBidiRemote != null) { + Quiche.quiche_config_set_initial_max_stream_data_bidi_remote(config, initialMaxStreamDataBidiRemote); + } + if (initialMaxStreamDataUni != null) { + Quiche.quiche_config_set_initial_max_stream_data_uni(config, initialMaxStreamDataUni); + } + if (initialMaxStreamsBidi != null) { + Quiche.quiche_config_set_initial_max_streams_bidi(config, initialMaxStreamsBidi); + } + if (initialMaxStreamsUni != null) { + Quiche.quiche_config_set_initial_max_streams_uni(config, initialMaxStreamsUni); + } + if (ackDelayExponent != null) { + Quiche.quiche_config_set_ack_delay_exponent(config, ackDelayExponent); + } + if (maxAckDelay != null) { + Quiche.quiche_config_set_max_ack_delay(config, maxAckDelay); + } + if (disableActiveMigration != null) { + Quiche.quiche_config_set_disable_active_migration(config, disableActiveMigration); + } + if (enableHystart != null) { + Quiche.quiche_config_enable_hystart(config, enableHystart); + } + if (congestionControlAlgorithm != null) { + switch (congestionControlAlgorithm) { + case RENO: + Quiche.quiche_config_set_cc_algorithm(config, Quiche.QUICHE_CC_RENO); + break; + case CUBIC: + Quiche.quiche_config_set_cc_algorithm(config, Quiche.QUICHE_CC_CUBIC); + break; + case BBR: + Quiche.quiche_config_set_cc_algorithm(config, Quiche.QUICHE_CC_BBR); + break; + default: + throw new IllegalArgumentException( + "Unknown congestionControlAlgorithm: " + congestionControlAlgorithm); + } + } + if (recvQueueLen != null && sendQueueLen != null) { + isDatagramSupported = true; + Quiche.quiche_config_enable_dgram(config, true, recvQueueLen, sendQueueLen); + } else { + isDatagramSupported = false; + } + if (activeConnectionIdLimit != null) { + Quiche.quiche_config_set_active_connection_id_limit(config, activeConnectionIdLimit); + } + if (statelessResetToken != null) { + Quiche.quiche_config_set_stateless_reset_token(config, statelessResetToken); + } + this.config = config; + } catch (Throwable cause) { + Quiche.quiche_config_free(config); + throw cause; + } + } + + boolean isDatagramSupported() { + return isDatagramSupported; + } + + long nativeAddress() { + return config; + } + + // Let's override finalize() as we want to ensure we never leak memory even if the user will miss to close + // Channel that uses this handler that used the config and just let it get GC'ed. + @Override + protected void finalize() throws Throwable { + try { + free(); + } finally { + super.finalize(); + } + } + + void free() { + if (config != -1) { + try { + Quiche.quiche_config_free(config); + } finally { + config = -1; + } + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheLogger.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheLogger.java new file mode 100644 index 0000000..5e8ca06 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheLogger.java @@ -0,0 +1,35 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.logging.InternalLogger; + +/** + * Delegates QUICHE logging to {@link InternalLogger}. + */ +final class QuicheLogger { + private final InternalLogger logger; + + QuicheLogger(InternalLogger logger) { + this.logger = logger; + } + + // Called from JNI. + @SuppressWarnings("unused") + void log(String msg) { + logger.debug(msg); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheNativeStaticallyReferencedJniMethods.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheNativeStaticallyReferencedJniMethods.java new file mode 100644 index 0000000..4183e29 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheNativeStaticallyReferencedJniMethods.java @@ -0,0 +1,96 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +final class QuicheNativeStaticallyReferencedJniMethods { + + static native int quiche_protocol_version(); + static native int quiche_max_conn_id_len(); + static native int quiche_shutdown_read(); + static native int quiche_shutdown_write(); + + static native int quiche_err_done(); + static native int quiche_err_buffer_too_short(); + static native int quiche_err_unknown_version(); + static native int quiche_err_invalid_frame(); + static native int quiche_err_invalid_packet(); + static native int quiche_err_invalid_state(); + static native int quiche_err_invalid_stream_state(); + static native int quiche_err_invalid_transport_param(); + static native int quiche_err_crypto_fail(); + static native int quiche_err_tls_fail(); + static native int quiche_err_flow_control(); + static native int quiche_err_stream_limit(); + static native int quiche_err_final_size(); + static native int quiche_err_stream_stopped(); + static native int quiche_err_stream_reset(); + static native int quiche_err_congestion_control(); + static native int quiche_err_id_limit(); + static native int quiche_err_out_of_identifiers(); + static native int quiche_err_key_update(); + + static native int quiche_cc_reno(); + static native int quiche_cc_cubic(); + static native int quiche_cc_bbr(); + + static native int quicheRecvInfoOffsetofFrom(); + static native int quicheRecvInfoOffsetofFromLen(); + static native int quicheRecvInfoOffsetofTo(); + static native int quicheRecvInfoOffsetofToLen(); + + static native int sizeofQuicheRecvInfo(); + static native int quicheSendInfoOffsetofTo(); + static native int quicheSendInfoOffsetofToLen(); + static native int quicheSendInfoOffsetofFrom(); + static native int quicheSendInfoOffsetofFromLen(); + + static native int quicheSendInfoOffsetofAt(); + + static native int sizeofQuicheSendInfo(); + + static native int afInet(); + static native int afInet6(); + static native int sizeofSockaddrIn(); + static native int sizeofSockaddrIn6(); + static native int sockaddrInOffsetofSinFamily(); + static native int sockaddrInOffsetofSinPort(); + static native int sockaddrInOffsetofSinAddr(); + static native int inAddressOffsetofSAddr(); + static native int sockaddrIn6OffsetofSin6Family(); + static native int sockaddrIn6OffsetofSin6Port(); + static native int sockaddrIn6OffsetofSin6Flowinfo(); + static native int sockaddrIn6OffsetofSin6Addr(); + static native int sockaddrIn6OffsetofSin6ScopeId(); + static native int in6AddressOffsetofS6Addr(); + static native int sizeofSockaddrStorage(); + static native int sizeofSocklenT(); + static native int sizeofSizeT(); + + static native int sizeofTimespec(); + static native int timespecOffsetofTvSec(); + static native int timespecOffsetofTvNsec(); + static native int sizeofTimeT(); + static native int sizeofLong(); + + static native int quiche_path_event_new(); + static native int quiche_path_event_validated(); + static native int quiche_path_event_failed_validation(); + static native int quiche_path_event_closed(); + static native int quiche_path_event_reused_source_connection_id(); + static native int quiche_path_event_peer_migrated(); + + private QuicheNativeStaticallyReferencedJniMethods() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java new file mode 100644 index 0000000..4713c13 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannel.java @@ -0,0 +1,1969 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.Unpooled; +import io.netty.channel.AbstractChannel; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelFutureListener; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOption; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import io.netty.channel.ConnectTimeoutException; +import io.netty.channel.DefaultChannelPipeline; +import io.netty.channel.EventLoop; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.socket.DatagramPacket; +import io.netty.handler.ssl.SniCompletionEvent; +import io.netty.handler.ssl.SslHandshakeCompletionEvent; +import io.netty.util.AttributeKey; +import io.netty.util.collection.LongObjectHashMap; +import io.netty.util.collection.LongObjectMap; +import io.netty.util.concurrent.Future; +import io.netty.util.concurrent.ImmediateEventExecutor; +import io.netty.util.concurrent.ImmediateExecutor; +import io.netty.util.concurrent.Promise; +import io.netty.util.internal.StringUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import javax.net.ssl.SSLEngine; +import javax.net.ssl.SSLHandshakeException; +import java.io.File; +import java.net.ConnectException; +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.nio.channels.AlreadyConnectedException; +import java.nio.channels.ClosedChannelException; +import java.nio.channels.ConnectionPendingException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.Executor; +import java.util.concurrent.ScheduledFuture; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicLongFieldUpdater; +import java.util.function.Consumer; +import java.util.function.Function; + +/** + * {@link QuicChannel} implementation that uses quiche. + */ +final class QuicheQuicChannel extends AbstractChannel implements QuicChannel { + private static final InternalLogger logger = InternalLoggerFactory.getInstance(QuicheQuicChannel.class); + private static final String QLOG_FILE_EXTENSION = ".qlog"; + + enum StreamRecvResult { + /** + * Nothing more to read from the stream. + */ + DONE, + /** + * FIN flag received. + */ + FIN, + /** + * Normal read without FIN flag. + */ + OK + } + + private static final class CloseData implements ChannelFutureListener { + final boolean applicationClose; + final int err; + final ByteBuf reason; + + CloseData(boolean applicationClose, int err, ByteBuf reason) { + this.applicationClose = applicationClose; + this.err = err; + this.reason = reason; + } + + @Override + public void operationComplete(ChannelFuture future) { + reason.release(); + } + } + + private final ChannelFutureListener continueSendingListener = new ChannelFutureListener() { + @Override + public void operationComplete(ChannelFuture channelFuture) { + if (connectionSend()) { + flushParent(); + } + } + }; + + private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16); + private final long[] readableStreams = new long[128]; + private final long[] writableStreams = new long[128]; + + private final LongObjectMap streams = new LongObjectHashMap<>(); + private final QuicheQuicChannelConfig config; + private final boolean server; + private final QuicStreamIdGenerator idGenerator; + private final ChannelHandler streamHandler; + private final Map.Entry, Object>[] streamOptionsArray; + private final Map.Entry, Object>[] streamAttrsArray; + private final TimeoutHandler timeoutHandler; + private Executor sslTaskExecutor; + + private boolean inFireChannelReadCompleteQueue; + private boolean fireChannelReadCompletePending; + private ByteBuf finBuffer; + private ChannelPromise connectPromise; + private ScheduledFuture connectTimeoutFuture; + private QuicConnectionAddress connectAddress; + private final Set sourceConnectionIds = new HashSet<>(); + private CloseData closeData; + private QuicConnectionCloseEvent connectionCloseEvent; + private QuicConnectionStats statsAtClose; + + private InetSocketAddress local; + private InetSocketAddress remote; + private boolean supportsDatagram; + private boolean recvDatagramPending; + private boolean datagramReadable; + + private boolean recvStreamPending; + private boolean streamReadable; + private boolean handshakeCompletionNotified; + private boolean earlyDataReadyNotified; + + private int reantranceGuard = 0; + private static final int IN_RECV = 1 << 1; + private static final int IN_CONNECTION_SEND = 1 << 2; + private static final int IN_HANDLE_WRITABLE_STREAMS = 1 << 3; + private static final int IN_FORCE_CLOSE = 1 << 4; + + private static final int CLOSED = 0; + private static final int OPEN = 1; + private static final int ACTIVE = 2; + private volatile int state; + private volatile boolean timedOut; + private volatile String traceId; + private volatile QuicheQuicConnection connection; + + private static final AtomicLongFieldUpdater UNI_STREAMS_LEFT_UPDATER = + AtomicLongFieldUpdater.newUpdater(QuicheQuicChannel.class, "uniStreamsLeft"); + private volatile long uniStreamsLeft; + + private static final AtomicLongFieldUpdater BIDI_STREAMS_LEFT_UPDATER = + AtomicLongFieldUpdater.newUpdater(QuicheQuicChannel.class, "bidiStreamsLeft"); + private volatile long bidiStreamsLeft; + + private QuicheQuicChannel(Channel parent, boolean server, ByteBuffer key, InetSocketAddress local, + InetSocketAddress remote, boolean supportsDatagram, ChannelHandler streamHandler, + Map.Entry, Object>[] streamOptionsArray, + Map.Entry, Object>[] streamAttrsArray, + Consumer timeoutTask, + Executor sslTaskExecutor) { + super(parent); + config = new QuicheQuicChannelConfig(this); + this.server = server; + this.idGenerator = new QuicStreamIdGenerator(server); + if (key != null) { + this.sourceConnectionIds.add(key); + } + state = OPEN; + + this.supportsDatagram = supportsDatagram; + this.local = local; + this.remote = remote; + + this.streamHandler = streamHandler; + this.streamOptionsArray = streamOptionsArray; + this.streamAttrsArray = streamAttrsArray; + timeoutHandler = new TimeoutHandler(timeoutTask); + this.sslTaskExecutor = sslTaskExecutor == null ? ImmediateExecutor.INSTANCE : sslTaskExecutor; + } + + static QuicheQuicChannel forClient(Channel parent, InetSocketAddress local, InetSocketAddress remote, + ChannelHandler streamHandler, + Map.Entry, Object>[] streamOptionsArray, + Map.Entry, Object>[] streamAttrsArray) { + return new QuicheQuicChannel(parent, false, null, local, remote, false, streamHandler, + streamOptionsArray, streamAttrsArray, null, null); + } + + static QuicheQuicChannel forServer(Channel parent, ByteBuffer key, InetSocketAddress local, + InetSocketAddress remote, + boolean supportsDatagram, ChannelHandler streamHandler, + Map.Entry, Object>[] streamOptionsArray, + Map.Entry, Object>[] streamAttrsArray, + Consumer timeoutTask, Executor sslTaskExecutor) { + return new QuicheQuicChannel(parent, true, key, local, remote, supportsDatagram, + streamHandler, streamOptionsArray, streamAttrsArray, timeoutTask, + sslTaskExecutor); + } + + @Override + public boolean isTimedOut() { + return timedOut; + } + + @Override + public SSLEngine sslEngine() { + QuicheQuicConnection connection = this.connection; + return connection == null ? null : connection.engine(); + } + + private void notifyAboutHandshakeCompletionIfNeeded(SSLHandshakeException cause) { + if (handshakeCompletionNotified) { + return; + } + if (cause != null) { + pipeline().fireUserEventTriggered(new SslHandshakeCompletionEvent(cause)); + return; + } + QuicheQuicConnection connection = this.connection; + if (connection == null) { + return; + } + switch (connection.engine().getHandshakeStatus()) { + case NOT_HANDSHAKING: + case FINISHED: + handshakeCompletionNotified = true; + String sniHostname = connection.engine().sniHostname; + if (sniHostname != null) { + connection.engine().sniHostname = null; + pipeline().fireUserEventTriggered(new SniCompletionEvent(sniHostname)); + } + pipeline().fireUserEventTriggered(SslHandshakeCompletionEvent.SUCCESS); + break; + default: + break; + } + } + + @Override + public long peerAllowedStreams(QuicStreamType type) { + switch (type) { + case BIDIRECTIONAL: + return bidiStreamsLeft; + case UNIDIRECTIONAL: + return uniStreamsLeft; + default: + return 0; + } + } + + void attachQuicheConnection(QuicheQuicConnection connection) { + this.connection = connection; + + byte[] traceId = Quiche.quiche_conn_trace_id(connection.address()); + if (traceId != null) { + this.traceId = new String(traceId); + } + + connection.initInfo(local, remote); + + // Setup QLOG if needed. + QLogConfiguration configuration = config.getQLogConfiguration(); + if (configuration != null) { + final String fileName; + File file = new File(configuration.path()); + if (file.isDirectory()) { + // Create directory if needed. + file.mkdir(); + if (this.traceId != null) { + fileName = configuration.path() + File.separatorChar + this.traceId + "-" + + id().asShortText() + QLOG_FILE_EXTENSION; + } else { + fileName = configuration.path() + File.separatorChar + id().asShortText() + QLOG_FILE_EXTENSION; + } + } else { + fileName = configuration.path(); + } + + if (!Quiche.quiche_conn_set_qlog_path(connection.address(), fileName, + configuration.logTitle(), configuration.logDescription())) { + logger.info("Unable to create qlog file: {} ", fileName); + } + } + } + + private void connect(Function engineProvider, Executor sslTaskExecutor, + long configAddr, int localConnIdLength, + boolean supportsDatagram, ByteBuffer fromSockaddrMemory, ByteBuffer toSockaddrMemory) + throws Exception { + assert this.connection == null; + assert this.traceId == null; + assert this.sourceConnectionIds.isEmpty(); + + this.sslTaskExecutor = sslTaskExecutor; + + QuicConnectionAddress address = this.connectAddress; + if (address == QuicConnectionAddress.EPHEMERAL) { + address = QuicConnectionAddress.random(localConnIdLength); + } else { + if (address.connId.remaining() != localConnIdLength) { + failConnectPromiseAndThrow(new IllegalArgumentException("connectionAddress has length " + + address.connId.remaining() + + " instead of " + localConnIdLength)); + } + } + QuicSslEngine engine = engineProvider.apply(this); + if (!(engine instanceof QuicheQuicSslEngine)) { + failConnectPromiseAndThrow(new IllegalArgumentException("QuicSslEngine is not of type " + + QuicheQuicSslEngine.class.getSimpleName())); + return; + } + if (!engine.getUseClientMode()) { + failConnectPromiseAndThrow(new IllegalArgumentException("QuicSslEngine is not create in client mode")); + } + QuicheQuicSslEngine quicheEngine = (QuicheQuicSslEngine) engine; + ByteBuffer connectId = address.connId.duplicate(); + ByteBuf idBuffer = alloc().directBuffer(connectId.remaining()).writeBytes(connectId.duplicate()); + try { + int fromSockaddrLen = SockaddrIn.setAddress(fromSockaddrMemory, local); + int toSockaddrLen = SockaddrIn.setAddress(toSockaddrMemory, remote); + QuicheQuicConnection connection = quicheEngine.createConnection(ssl -> + Quiche.quiche_conn_new_with_tls(Quiche.readerMemoryAddress(idBuffer), + idBuffer.readableBytes(), -1, -1, + Quiche.memoryAddressWithPosition(fromSockaddrMemory), fromSockaddrLen, + Quiche.memoryAddressWithPosition(toSockaddrMemory), toSockaddrLen, + configAddr, ssl, false)); + if (connection == null) { + failConnectPromiseAndThrow(new ConnectException()); + return; + } + attachQuicheConnection(connection); + QuicClientSessionCache sessionCache = quicheEngine.ctx.getSessionCache(); + if (sessionCache != null) { + byte[] sessionBytes = sessionCache + .getSession(quicheEngine.getSession().getPeerHost(), quicheEngine.getSession().getPeerPort()); + if (sessionBytes != null) { + Quiche.quiche_conn_set_session(connection.address(), sessionBytes); + } + } + this.supportsDatagram = supportsDatagram; + sourceConnectionIds.add(connectId); + } finally { + idBuffer.release(); + } + } + + private void failConnectPromiseAndThrow(Exception e) throws Exception { + tryFailConnectPromise(e); + throw e; + } + + private boolean tryFailConnectPromise(Exception e) { + ChannelPromise promise = connectPromise; + if (promise != null) { + connectPromise = null; + promise.tryFailure(e); + return true; + } + return false; + } + + Set sourceConnectionIds() { + return sourceConnectionIds; + } + + private boolean closeAllIfConnectionClosed() { + if (connection.isClosed()) { + forceClose(); + return true; + } + return false; + } + + boolean markInFireChannelReadCompleteQueue() { + if (inFireChannelReadCompleteQueue) { + return false; + } + inFireChannelReadCompleteQueue = true; + return true; + } + + private void failPendingConnectPromise() { + ChannelPromise promise = QuicheQuicChannel.this.connectPromise; + if (promise != null) { + QuicheQuicChannel.this.connectPromise = null; + promise.tryFailure(new QuicClosedChannelException(this.connectionCloseEvent)); + } + } + + void forceClose() { + if (isConnDestroyed() || (reantranceGuard & IN_FORCE_CLOSE) != 0) { + // Just return if we already destroyed the underlying connection. + return; + } + reantranceGuard |= IN_FORCE_CLOSE; + + QuicheQuicConnection conn = connection; + + unsafe().close(voidPromise()); + // making sure that connection statistics is avaliable + // even after channel is closed + statsAtClose = collectStats0(conn, eventLoop().newPromise()); + try { + failPendingConnectPromise(); + state = CLOSED; + timedOut = Quiche.quiche_conn_is_timed_out(conn.address()); + + closeStreams(); + + if (finBuffer != null) { + finBuffer.release(); + finBuffer = null; + } + state = CLOSED; + + timeoutHandler.cancel(); + } finally { + flushParent(); + connection = null; + conn.free(); + } + } + + @Override + protected DefaultChannelPipeline newChannelPipeline() { + return new DefaultChannelPipeline(this) { + @Override + protected void onUnhandledInboundMessage(ChannelHandlerContext ctx, Object msg) { + if (msg instanceof QuicStreamChannel) { + QuicStreamChannel channel = (QuicStreamChannel) msg; + Quic.setupChannel(channel, streamOptionsArray, streamAttrsArray, streamHandler, logger); + ctx.channel().eventLoop().register(channel); + } else { + super.onUnhandledInboundMessage(ctx, msg); + } + } + }; + } + + @Override + public QuicChannel flush() { + super.flush(); + return this; + } + + @Override + public QuicChannel read() { + super.read(); + return this; + } + + @Override + public Future createStream(QuicStreamType type, ChannelHandler handler, + Promise promise) { + if (eventLoop().inEventLoop()) { + ((QuicChannelUnsafe) unsafe()).connectStream(type, handler, promise); + } else { + eventLoop().execute(() -> ((QuicChannelUnsafe) unsafe()).connectStream(type, handler, promise)); + } + return promise; + } + + @Override + public ChannelFuture close(boolean applicationClose, int error, ByteBuf reason, ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + close0(applicationClose, error, reason, promise); + } else { + eventLoop().execute(() -> close0(applicationClose, error, reason, promise)); + } + return promise; + } + + private void close0(boolean applicationClose, int error, ByteBuf reason, ChannelPromise promise) { + if (closeData == null) { + if (!reason.hasMemoryAddress()) { + // Copy to direct buffer as that's what we need. + ByteBuf copy = alloc().directBuffer(reason.readableBytes()).writeBytes(reason); + reason.release(); + reason = copy; + } + closeData = new CloseData(applicationClose, error, reason); + promise.addListener(closeData); + } else { + // We already have a close scheduled that uses a close data. Lets release the buffer early. + reason.release(); + } + close(promise); + } + + @Override + public String toString() { + String traceId = this.traceId; + if (traceId == null) { + return "()" + super.toString(); + } else { + return '(' + traceId + ')' + super.toString(); + } + } + + @Override + protected AbstractUnsafe newUnsafe() { + return new QuicChannelUnsafe(); + } + + @Override + protected boolean isCompatible(EventLoop eventLoop) { + return parent().eventLoop() == eventLoop; + } + + @Override + protected SocketAddress localAddress0() { + QuicheQuicConnection connection = this.connection; + return connection == null ? null : connection.sourceId(); + } + + @Override + protected SocketAddress remoteAddress0() { + QuicheQuicConnection connection = this.connection; + return connection == null ? null : connection.destinationId(); + } + + @Override + protected void doBind(SocketAddress socketAddress) { + throw new UnsupportedOperationException(); + } + + @Override + protected void doDisconnect() throws Exception { + doClose(); + } + + @Override + protected void doClose() throws Exception { + state = CLOSED; + + final boolean app; + final int err; + final ByteBuf reason; + if (closeData == null) { + app = false; + err = 0; + reason = Unpooled.EMPTY_BUFFER; + } else { + app = closeData.applicationClose; + err = closeData.err; + reason = closeData.reason; + closeData = null; + } + + // Call connectionSend() so we ensure we send all that is queued before we close the channel + boolean written = connectionSend(); + + failPendingConnectPromise(); + Quiche.throwIfError(Quiche.quiche_conn_close(connectionAddressChecked(), app, err, + Quiche.readerMemoryAddress(reason), reason.readableBytes())); + + // As we called quiche_conn_close(...) we need to ensure we will call quiche_conn_send(...) either + // now or we will do so once we see the channelReadComplete event. + // + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.close + written |= connectionSend(); + if (written) { + // As this is the close let us flush it asap. + forceFlushParent(); + } + } + + @Override + protected void doBeginRead() { + recvDatagramPending = true; + recvStreamPending = true; + if (datagramReadable || streamReadable) { + ((QuicChannelUnsafe) unsafe()).recv(); + } + } + + @Override + protected Object filterOutboundMessage(Object msg) { + if (msg instanceof ByteBuf) { + return msg; + } + throw new UnsupportedOperationException("Unsupported message type: " + StringUtil.simpleClassName(msg)); + } + + @Override + protected void doWrite(ChannelOutboundBuffer channelOutboundBuffer) throws Exception { + if (!supportsDatagram) { + throw new UnsupportedOperationException("Datagram extension is not supported"); + } + boolean sendSomething = false; + boolean retry = false; + try { + for (;;) { + ByteBuf buffer = (ByteBuf) channelOutboundBuffer.current(); + if (buffer == null) { + break; + } + + int readable = buffer.readableBytes(); + if (readable == 0) { + // Skip empty buffers. + channelOutboundBuffer.remove(); + continue; + } + + final int res; + if (!buffer.isDirect() || buffer.nioBufferCount() > 1) { + ByteBuf tmpBuffer = alloc().directBuffer(readable); + try { + tmpBuffer.writeBytes(buffer, buffer.readerIndex(), readable); + res = sendDatagram(tmpBuffer); + } finally { + tmpBuffer.release(); + } + } else { + res = sendDatagram(buffer); + } + if (res >= 0) { + channelOutboundBuffer.remove(); + sendSomething = true; + retry = false; + } else { + if (res == Quiche.QUICHE_ERR_BUFFER_TOO_SHORT) { + retry = false; + channelOutboundBuffer.remove(Quiche.newException(res)); + } else if (res == Quiche.QUICHE_ERR_INVALID_STATE) { + throw new UnsupportedOperationException("Remote peer does not support Datagram extension", + Quiche.newException(res)); + } else if (Quiche.throwIfError(res)) { + if (retry) { + // We already retried and it didn't work. Let's drop the datagrams on the floor. + for (;;) { + if (!channelOutboundBuffer.remove()) { + // The buffer is empty now. + return; + } + } + } + // Set sendSomething to false a we will call connectionSend() now. + sendSomething = false; + // If this returned DONE we couldn't write anymore. This happens if the internal queue + // is full. In this case we should call quiche_conn_send(...) and so make space again. + if (connectionSend()) { + forceFlushParent(); + } + // Let's try again to write the message. + retry = true; + } + } + } + } finally { + if (sendSomething && connectionSend()) { + flushParent(); + } + } + } + + private int sendDatagram(ByteBuf buf) throws ClosedChannelException { + return Quiche.quiche_conn_dgram_send(connectionAddressChecked(), + Quiche.readerMemoryAddress(buf), buf.readableBytes()); + } + + @Override + public QuicChannelConfig config() { + return config; + } + + @Override + public boolean isOpen() { + return state >= OPEN; + } + + @Override + public boolean isActive() { + return state == ACTIVE; + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + /** + * This may call {@link #flush()} on the parent channel if needed. The flush may delayed until the read loop + * is over. + */ + private void flushParent() { + if (!inFireChannelReadCompleteQueue) { + forceFlushParent(); + } + } + + /** + * Call @link #flush()} on the parent channel. + */ + private void forceFlushParent() { + parent().flush(); + } + + private long connectionAddressChecked() throws ClosedChannelException { + if (isConnDestroyed()) { + throw new ClosedChannelException(); + } + return connection.address(); + } + + boolean freeIfClosed() { + if (isConnDestroyed()) { + return true; + } + return closeAllIfConnectionClosed(); + } + + private void closeStreams() { + // Make a copy to ensure we not run into a situation when we change the underlying iterator from + // another method and so run in an assert error. + for (QuicheQuicStreamChannel stream: streams.values().toArray(new QuicheQuicStreamChannel[0])) { + stream.unsafe().close(voidPromise()); + } + streams.clear(); + } + + void streamPriority(long streamId, byte priority, boolean incremental) throws Exception { + Quiche.throwIfError(Quiche.quiche_conn_stream_priority(connectionAddressChecked(), streamId, + priority, incremental)); + } + + void streamClosed(long streamId) { + streams.remove(streamId); + } + + boolean isStreamLocalCreated(long streamId) { + return (streamId & 0x1) == (server ? 1 : 0); + } + + QuicStreamType streamType(long streamId) { + return (streamId & 0x2) == 0 ? QuicStreamType.BIDIRECTIONAL : QuicStreamType.UNIDIRECTIONAL; + } + + void streamShutdown(long streamId, boolean read, boolean write, int err, ChannelPromise promise) { + final long connectionAddress; + try { + connectionAddress = connectionAddressChecked(); + } catch (ClosedChannelException e) { + promise.setFailure(e); + return; + } + int res = 0; + if (read) { + res |= Quiche.quiche_conn_stream_shutdown(connectionAddress, streamId, Quiche.QUICHE_SHUTDOWN_READ, err); + } + if (write) { + res |= Quiche.quiche_conn_stream_shutdown(connectionAddress, streamId, Quiche.QUICHE_SHUTDOWN_WRITE, err); + } + + // As we called quiche_conn_stream_shutdown(...) we need to ensure we will call quiche_conn_send(...) either + // now or we will do so once we see the channelReadComplete event. + // + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.send + if (connectionSend()) { + // Force the flush so the shutdown can be seen asap. + forceFlushParent(); + } + Quiche.notifyPromise(res, promise); + } + + void streamSendFin(long streamId) throws Exception { + try { + // Just write an empty buffer and set fin to true. + Quiche.throwIfError(streamSend0(streamId, Unpooled.EMPTY_BUFFER, true)); + } finally { + // As we called quiche_conn_stream_send(...) we need to ensure we will call quiche_conn_send(...) either + // now or we will do so once we see the channelReadComplete event. + // + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.send + if (connectionSend()) { + flushParent(); + } + } + } + + int streamSend(long streamId, ByteBuf buffer, boolean fin) throws ClosedChannelException { + if (buffer.nioBufferCount() == 1) { + return streamSend0(streamId, buffer, fin); + } + ByteBuffer[] nioBuffers = buffer.nioBuffers(); + int lastIdx = nioBuffers.length - 1; + int res = 0; + for (int i = 0; i < lastIdx; i++) { + ByteBuffer nioBuffer = nioBuffers[i]; + while (nioBuffer.hasRemaining()) { + int localRes = streamSend(streamId, nioBuffer, false); + if (localRes <= 0) { + return res; + } + res += localRes; + + nioBuffer.position(nioBuffer.position() + localRes); + } + } + int localRes = streamSend(streamId, nioBuffers[lastIdx], fin); + if (localRes > 0) { + res += localRes; + } + return res; + } + + void connectionSendAndFlush() { + if (inFireChannelReadCompleteQueue || (reantranceGuard & IN_HANDLE_WRITABLE_STREAMS) != 0) { + return; + } + if (connectionSend()) { + flushParent(); + } + } + + private int streamSend0(long streamId, ByteBuf buffer, boolean fin) throws ClosedChannelException { + return Quiche.quiche_conn_stream_send(connectionAddressChecked(), streamId, + Quiche.readerMemoryAddress(buffer), buffer.readableBytes(), fin); + } + + private int streamSend(long streamId, ByteBuffer buffer, boolean fin) throws ClosedChannelException { + return Quiche.quiche_conn_stream_send(connectionAddressChecked(), streamId, + Quiche.memoryAddressWithPosition(buffer), buffer.remaining(), fin); + } + + StreamRecvResult streamRecv(long streamId, ByteBuf buffer) throws Exception { + if (finBuffer == null) { + finBuffer = alloc().directBuffer(1); + } + int writerIndex = buffer.writerIndex(); + int recvLen = Quiche.quiche_conn_stream_recv(connectionAddressChecked(), streamId, + Quiche.writerMemoryAddress(buffer), buffer.writableBytes(), Quiche.writerMemoryAddress(finBuffer)); + if (Quiche.throwIfError(recvLen)) { + return StreamRecvResult.DONE; + } + + buffer.writerIndex(writerIndex + recvLen); + return finBuffer.getBoolean(0) ? StreamRecvResult.FIN : StreamRecvResult.OK; + } + + /** + * Receive some data on a QUIC connection. + */ + void recv(InetSocketAddress sender, InetSocketAddress recipient, ByteBuf buffer) { + ((QuicChannelUnsafe) unsafe()).connectionRecv(sender, recipient, buffer); + } + + /** + * Return all source connection ids that are retired and so should be removed to map to the channel. + * + * @return retired ids. + */ + List retiredSourceConnectionId() { + QuicheQuicConnection connection = this.connection; + if (connection == null || connection.isClosed()) { + return Collections.emptyList(); + } + long connAddr = connection.address(); + assert connAddr != -1; + List retiredSourceIds = null; + for (;;) { + byte[] retired = Quiche.quiche_conn_retired_scid_next(connAddr); + if (retired == null) { + break; + } + if (retiredSourceIds == null) { + retiredSourceIds = new ArrayList<>(); + } + ByteBuffer retiredId = ByteBuffer.wrap(retired); + retiredSourceIds.add(retiredId); + sourceConnectionIds.remove(retiredId); + } + if (retiredSourceIds == null) { + return Collections.emptyList(); + } + return retiredSourceIds; + } + + List newSourceConnectionIds( + QuicConnectionIdGenerator connectionIdGenerator, QuicResetTokenGenerator resetTokenGenerator) { + if (server) { + QuicheQuicConnection connection = this.connection; + if (connection == null || connection.isClosed()) { + return Collections.emptyList(); + } + long connAddr = connection.address(); + // Generate all extra source ids that we can provide. This will cause frames that need to be send. Which + // is the reason why we might need to call connectionSendAndFlush(). + int left = Quiche.quiche_conn_scids_left(connAddr); + if (left > 0) { + QuicConnectionAddress sourceAddr = connection.sourceId(); + if (sourceAddr == null) { + return Collections.emptyList(); + } + List generatedIds = new ArrayList<>(left); + boolean sendAndFlush = false; + ByteBuffer key = sourceAddr.connId.duplicate(); + ByteBuf connIdBuffer = alloc().directBuffer(key.remaining()); + + byte[] resetTokenArray = new byte[Quic.RESET_TOKEN_LEN]; + try { + do { + ByteBuffer srcId = connectionIdGenerator.newId(key, key.remaining()); + connIdBuffer.clear(); + connIdBuffer.writeBytes(srcId.duplicate()); + ByteBuffer resetToken = resetTokenGenerator.newResetToken(srcId.duplicate()); + resetToken.get(resetTokenArray); + long result = Quiche.quiche_conn_new_scid( + connAddr, Quiche.memoryAddress(connIdBuffer, 0, connIdBuffer.readableBytes()), + connIdBuffer.readableBytes(), resetTokenArray, false, -1); + if (result < 0) { + break; + } + sendAndFlush = true; + generatedIds.add(srcId); + sourceConnectionIds.add(srcId); + } while (--left > 0); + } finally { + connIdBuffer.release(); + } + + if (sendAndFlush) { + connectionSendAndFlush(); + } + return generatedIds; + } + } + return Collections.emptyList(); + } + + void writable() { + boolean written = connectionSend(); + handleWritableStreams(); + written |= connectionSend(); + + if (written) { + // The writability changed so lets flush as fast as possible. + forceFlushParent(); + } + } + + int streamCapacity(long streamId) { + if (connection.isClosed()) { + return 0; + } + return Quiche.quiche_conn_stream_capacity(connection.address(), streamId); + } + + private boolean handleWritableStreams() { + if (isConnDestroyed()) { + return false; + } + reantranceGuard |= IN_HANDLE_WRITABLE_STREAMS; + try { + long connAddr = connection.address(); + boolean mayNeedWrite = false; + + if (Quiche.quiche_conn_is_established(connAddr) || + Quiche.quiche_conn_is_in_early_data(connAddr)) { + long writableIterator = Quiche.quiche_conn_writable(connAddr); + + try { + // For streams we always process all streams when at least on read was requested. + for (;;) { + int writable = Quiche.quiche_stream_iter_next( + writableIterator, writableStreams); + for (int i = 0; i < writable; i++) { + long streamId = writableStreams[i]; + QuicheQuicStreamChannel streamChannel = streams.get(streamId); + if (streamChannel != null) { + int capacity = Quiche.quiche_conn_stream_capacity(connAddr, streamId); + if (capacity < 0) { + // Let's close the channel if quiche_conn_stream_capacity(...) returns an error. + streamChannel.forceClose(); + } else if (streamChannel.writable(capacity)) { + mayNeedWrite = true; + } + } + } + if (writable < writableStreams.length) { + // We did handle all writable streams. + break; + } + } + } finally { + Quiche.quiche_stream_iter_free(writableIterator); + } + } + return mayNeedWrite; + } finally { + reantranceGuard &= ~IN_HANDLE_WRITABLE_STREAMS; + } + } + + /** + * Called once we receive a channelReadComplete event. This method will take care of calling + * {@link ChannelPipeline#fireChannelReadComplete()} if needed and also to handle pending flushes of + * writable {@link QuicheQuicStreamChannel}s. + */ + void recvComplete() { + try { + if (isConnDestroyed()) { + // Ensure we flush all pending writes. + forceFlushParent(); + return; + } + fireChannelReadCompleteIfNeeded(); + + // If we had called recv we need to ensure we call send as well. + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.send + connectionSend(); + + // We are done with the read loop, flush all pending writes now. + forceFlushParent(); + } finally { + inFireChannelReadCompleteQueue = false; + } + } + + private void fireChannelReadCompleteIfNeeded() { + if (fireChannelReadCompletePending) { + fireChannelReadCompletePending = false; + pipeline().fireChannelReadComplete(); + } + } + + private boolean isConnDestroyed() { + return connection == null; + } + + private void fireExceptionEvents(Throwable cause) { + if (cause instanceof SSLHandshakeException) { + notifyAboutHandshakeCompletionIfNeeded((SSLHandshakeException) cause); + } + pipeline().fireExceptionCaught(cause); + } + + private boolean runTasksDirectly() { + return sslTaskExecutor == null || sslTaskExecutor == ImmediateExecutor.INSTANCE || + sslTaskExecutor == ImmediateEventExecutor.INSTANCE; + } + + private void runAllTaskSend(Runnable task) { + sslTaskExecutor.execute(decorateTaskSend(task)); + } + + private void runAll(Runnable task) { + do { + task.run(); + } while ((task = connection.sslTask()) != null); + } + + private Runnable decorateTaskSend(Runnable task) { + return () -> { + try { + runAll(task); + } finally { + // Move back to the EventLoop. + eventLoop().execute(() -> { + // Call connection send to continue handshake if needed. + if (connectionSend()) { + forceFlushParent(); + } + }); + } + }; + } + + private boolean connectionSendSegments(SegmentedDatagramPacketAllocator segmentedDatagramPacketAllocator) { + List bufferList = new ArrayList<>(segmentedDatagramPacketAllocator.maxNumSegments()); + long connAddr = connection.address(); + int maxDatagramSize = Quiche.quiche_conn_max_send_udp_payload_size(connAddr); + boolean packetWasWritten = false; + boolean close = false; + try { + for (;;) { + int len = calculateSendBufferLength(connAddr, maxDatagramSize); + ByteBuf out = alloc().directBuffer(len); + + ByteBuffer sendInfo = connection.nextSendInfo(); + InetSocketAddress sendToAddress = this.remote; + + boolean done; + int writerIndex = out.writerIndex(); + int written = Quiche.quiche_conn_send( + connAddr, Quiche.writerMemoryAddress(out), out.writableBytes(), + Quiche.memoryAddressWithPosition(sendInfo)); + if (written == 0) { + out.release(); + // No need to create a new datagram packet. Just try again. + continue; + } + + try { + done = Quiche.throwIfError(written); + } catch (Exception e) { + done = true; + close = Quiche.shouldClose(written); + if (!tryFailConnectPromise(e)) { + // Only fire through the pipeline if this does not fail the connect promise. + fireExceptionEvents(e); + } + } + int size = bufferList.size(); + if (done) { + // We are done, release the buffer and send what we did build up so far. + out.release(); + + switch (size) { + case 0: + // Nothing more to write. + break; + case 1: + // We can write a normal datagram packet. + parent().write(new DatagramPacket(bufferList.get(0), sendToAddress)); + packetWasWritten = true; + break; + default: + int segmentSize = segmentSize(bufferList); + ByteBuf compositeBuffer = Unpooled.wrappedBuffer(bufferList.toArray(new ByteBuf[0])); + // We had more than one buffer, create a segmented packet. + parent().write(segmentedDatagramPacketAllocator.newPacket( + compositeBuffer, segmentSize, sendToAddress)); + packetWasWritten = true; + break; + } + bufferList.clear(); + return packetWasWritten; + } + out.writerIndex(writerIndex + written); + + int segmentSize = -1; + if (connection.isSendInfoChanged()) { + // Change the cached address and let the user know there was a connection migration. + InetSocketAddress oldRemote = remote; + remote = QuicheSendInfo.getToAddress(sendInfo); + local = QuicheSendInfo.getFromAddress(sendInfo); + + if (size > 0) { + // We have something in the out list already, we need to send this now and so we set the + // segmentSize. + segmentSize = segmentSize(bufferList); + } + } else if (size > 0) { + int lastReadable = segmentSize(bufferList); + // Check if we either need to send now because the last buffer we added has a smaller size then this + // one or if we reached the maximum number of segments that we can send. + if (lastReadable != out.readableBytes() || + size == segmentedDatagramPacketAllocator.maxNumSegments()) { + segmentSize = lastReadable; + } + } + + // If the segmentSize is not -1 we know we need to send now what was in the out list. + if (segmentSize != -1) { + final boolean stop; + if (size == 1) { + // Only one buffer in the out list, there is no need to use segments. + stop = writePacket(new DatagramPacket( + bufferList.get(0), sendToAddress), maxDatagramSize, len); + } else { + // Create a packet with segments in. + ByteBuf compositeBuffer = Unpooled.wrappedBuffer(bufferList.toArray(new ByteBuf[0])); + stop = writePacket(segmentedDatagramPacketAllocator.newPacket( + compositeBuffer, segmentSize, sendToAddress), maxDatagramSize, len); + } + bufferList.clear(); + packetWasWritten = true; + + if (stop) { + // Nothing left in the window, continue later. That said we still need to also + // write the previous filled out buffer as otherwise we would either leak or need + // to drop it and so produce some loss. + if (out.isReadable()) { + parent().write(new DatagramPacket(out, sendToAddress)); + } else { + out.release(); + } + return true; + } + } + // Let's add a touch with the bufferList as a hint. This will help us to debug leaks if there + // are any. + out.touch(bufferList); + // store for later, so we can make use of segments. + bufferList.add(out); + } + } finally { + if (close) { + // Close now... now way to recover. + unsafe().close(newPromise()); + } + } + } + + private static int segmentSize(List bufferList) { + assert !bufferList.isEmpty(); + int size = bufferList.size(); + return bufferList.get(size - 1).readableBytes(); + } + + private boolean connectionSendSimple() { + long connAddr = connection.address(); + boolean packetWasWritten = false; + boolean close = false; + int maxDatagramSize = Quiche.quiche_conn_max_send_udp_payload_size(connAddr); + for (;;) { + ByteBuffer sendInfo = connection.nextSendInfo(); + + int len = calculateSendBufferLength(connAddr, maxDatagramSize); + ByteBuf out = alloc().directBuffer(len); + int writerIndex = out.writerIndex(); + + int written = Quiche.quiche_conn_send( + connAddr, Quiche.writerMemoryAddress(out), out.writableBytes(), + Quiche.memoryAddressWithPosition(sendInfo)); + + try { + if (Quiche.throwIfError(written)) { + out.release(); + break; + } + } catch (Exception e) { + close = Quiche.shouldClose(written); + out.release(); + if (!tryFailConnectPromise(e)) { + fireExceptionEvents(e); + } + break; + } + + if (written == 0) { + // No need to create a new datagram packet. Just release and try again. + out.release(); + continue; + } + if (connection.isSendInfoChanged()) { + // Change the cached address + remote = QuicheSendInfo.getToAddress(sendInfo); + local = QuicheSendInfo.getFromAddress(sendInfo); + } + out.writerIndex(writerIndex + written); + boolean stop = writePacket(new DatagramPacket(out, remote), maxDatagramSize, len); + packetWasWritten = true; + if (stop) { + // Nothing left in the window, continue later + break; + } + } + if (close) { + // Close now... now way to recover. + unsafe().close(newPromise()); + } + return packetWasWritten; + } + + private boolean writePacket(DatagramPacket packet, int maxDatagramSize, int len) { + ChannelFuture future = parent().write(packet); + if (isSendWindowUsed(maxDatagramSize, len)) { + // Nothing left in the window, continue later + future.addListener(continueSendingListener); + return true; + } + return false; + } + + private static boolean isSendWindowUsed(int maxDatagramSize, int len) { + return len < maxDatagramSize; + } + + private static int calculateSendBufferLength(long connAddr, int maxDatagramSize) { + int len = Math.min(maxDatagramSize, Quiche.quiche_conn_send_quantum(connAddr)); + if (len <= 0) { + // If there is no room left we just return some small number to reduce the risk of packet drop + // while still be able to attach the listener to the write future. + // We use the value of 8 because such an allocation will be cheap to serve from the + // PooledByteBufAllocator while still serve our need. + return 8; + } + return len; + } + + /** + * Write datagrams if needed and return {@code true} if something was written and we need to call + * {@link Channel#flush()} at some point. + */ + private boolean connectionSend() { + if (isConnDestroyed()) { + return false; + } + if ((reantranceGuard & IN_CONNECTION_SEND) != 0) { + // Let's notify about early data if needed. + notifyEarlyDataReadyIfNeeded(); + return false; + } + + reantranceGuard |= IN_CONNECTION_SEND; + try { + boolean packetWasWritten; + SegmentedDatagramPacketAllocator segmentedDatagramPacketAllocator = + config.getSegmentedDatagramPacketAllocator(); + if (segmentedDatagramPacketAllocator.maxNumSegments() > 0) { + packetWasWritten = connectionSendSegments(segmentedDatagramPacketAllocator); + } else { + packetWasWritten = connectionSendSimple(); + } + + // Process / schedule all tasks that were created. + Runnable task = connection.sslTask(); + if (task != null) { + if (runTasksDirectly()) { + // Consume all tasks + do { + task.run(); + // Notify about early data ready if needed. + notifyEarlyDataReadyIfNeeded(); + } while ((task = connection.sslTask()) != null); + + // Let's try again sending after we did process all tasks. + return packetWasWritten | connectionSend(); + } else { + runAllTaskSend(task); + } + } else { + // Notify about early data ready if needed. + notifyEarlyDataReadyIfNeeded(); + } + + if (packetWasWritten) { + timeoutHandler.scheduleTimeout(); + } + return packetWasWritten; + } finally { + reantranceGuard &= ~IN_CONNECTION_SEND; + } + } + + private final class QuicChannelUnsafe extends AbstractChannel.AbstractUnsafe { + + void connectStream(QuicStreamType type, ChannelHandler handler, + Promise promise) { + long streamId = idGenerator.nextStreamId(type == QuicStreamType.BIDIRECTIONAL); + try { + Quiche.throwIfError(streamSend0(streamId, Unpooled.EMPTY_BUFFER, false)); + } catch (Exception e) { + promise.setFailure(e); + return; + } + if (type == QuicStreamType.UNIDIRECTIONAL) { + UNI_STREAMS_LEFT_UPDATER.decrementAndGet(QuicheQuicChannel.this); + } else { + BIDI_STREAMS_LEFT_UPDATER.decrementAndGet(QuicheQuicChannel.this); + } + QuicheQuicStreamChannel streamChannel = addNewStreamChannel(streamId); + if (handler != null) { + streamChannel.pipeline().addLast(handler); + } + eventLoop().register(streamChannel).addListener((ChannelFuture f) -> { + if (f.isSuccess()) { + promise.setSuccess(streamChannel); + } else { + promise.setFailure(f.cause()); + streams.remove(streamId); + } + }); + } + + @Override + public void connect(SocketAddress remote, SocketAddress local, ChannelPromise channelPromise) { + assert eventLoop().inEventLoop(); + if (server) { + channelPromise.setFailure(new UnsupportedOperationException()); + return; + } + + if (connectPromise != null) { + channelPromise.setFailure(new ConnectionPendingException()); + return; + } + + if (remote instanceof QuicConnectionAddress) { + if (!sourceConnectionIds.isEmpty()) { + // If a key is assigned we know this channel was already connected. + channelPromise.setFailure(new AlreadyConnectedException()); + return; + } + + QuicConnectionAddress address = (QuicConnectionAddress) remote; + connectPromise = channelPromise; + connectAddress = address; + + // Schedule connect timeout. + int connectTimeoutMillis = config().getConnectTimeoutMillis(); + if (connectTimeoutMillis > 0) { + connectTimeoutFuture = eventLoop().schedule(() -> { + ChannelPromise connectPromise = QuicheQuicChannel.this.connectPromise; + if (connectPromise != null && !connectPromise.isDone() + && connectPromise.tryFailure(new ConnectTimeoutException( + "connection timed out: " + remote))) { + close(voidPromise()); + } + }, connectTimeoutMillis, TimeUnit.MILLISECONDS); + } + + connectPromise.addListener((ChannelFuture future) -> { + if (future.isCancelled()) { + if (connectTimeoutFuture != null) { + connectTimeoutFuture.cancel(false); + } + connectPromise = null; + close(voidPromise()); + } + }); + + parent().connect(new QuicheQuicChannelAddress(QuicheQuicChannel.this)); + return; + } + + channelPromise.setFailure(new UnsupportedOperationException()); + } + + private void fireConnectCloseEventIfNeeded(long connAddr) { + if (connectionCloseEvent == null) { + connectionCloseEvent = Quiche.quiche_conn_peer_error(connAddr); + if (connectionCloseEvent != null) { + pipeline().fireUserEventTriggered(connectionCloseEvent); + } + } + } + + void connectionRecv(InetSocketAddress sender, InetSocketAddress recipient, ByteBuf buffer) { + if (isConnDestroyed()) { + return; + } + int bufferReadable = buffer.readableBytes(); + if (bufferReadable == 0) { + // Nothing to do here. Just return... + // See also https://github.com/cloudflare/quiche/issues/817 + return; + } + + reantranceGuard |= IN_RECV; + boolean close = false; + try { + ByteBuf tmpBuffer = null; + // We need to make a copy if the buffer is read only as recv(...) may modify the input buffer as well. + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.recv + if (buffer.isReadOnly()) { + tmpBuffer = alloc().directBuffer(buffer.readableBytes()); + tmpBuffer.writeBytes(buffer); + buffer = tmpBuffer; + } + long memoryAddress = Quiche.readerMemoryAddress(buffer); + + ByteBuffer recvInfo = connection.nextRecvInfo(); + QuicheRecvInfo.setRecvInfo(recvInfo, sender, recipient); + + SocketAddress oldRemote = remote; + + if (connection.isRecvInfoChanged()) { + // Update the cached address + remote = sender; + } + local = recipient; + + long connAddr = connection.address(); + try { + do { + // Call quiche_conn_recv(...) until we consumed all bytes or we did receive some error. + int res = Quiche.quiche_conn_recv(connAddr, memoryAddress, bufferReadable, + Quiche.memoryAddressWithPosition(recvInfo)); + boolean done; + try { + done = Quiche.throwIfError(res); + } catch (Exception e) { + done = true; + close = Quiche.shouldClose(res); + if (tryFailConnectPromise(e)) { + break; + } + fireExceptionEvents(e); + } + + // Process / schedule all tasks that were created. + Runnable task = connection.sslTask(); + if (task != null) { + if (runTasksDirectly()) { + // Consume all tasks + do { + task.run(); + } while ((task = connection.sslTask()) != null); + processReceived(connAddr); + } else { + runAllTaskRecv(task); + } + } else { + processReceived(connAddr); + } + + if (done) { + break; + } + memoryAddress += res; + bufferReadable -= res; + } while (bufferReadable > 0); + } finally { + buffer.skipBytes((int) (memoryAddress - Quiche.readerMemoryAddress(buffer))); + if (tmpBuffer != null) { + tmpBuffer.release(); + } + } + if (close) { + // Let's close now as there is no way to recover + unsafe().close(newPromise()); + } + } finally { + reantranceGuard &= ~IN_RECV; + } + } + + private void processReceived(long connAddr) { + // Handle pending channelActive if needed. + if (handlePendingChannelActive()) { + // Connection was closed right away. + return; + } + + notifyAboutHandshakeCompletionIfNeeded(null); + + fireConnectCloseEventIfNeeded(connAddr); + + if (Quiche.quiche_conn_is_established(connAddr) || + Quiche.quiche_conn_is_in_early_data(connAddr)) { + long uniLeftOld = uniStreamsLeft; + long bidiLeftOld = bidiStreamsLeft; + // Only fetch new stream info when we used all our credits + if (uniLeftOld == 0 || bidiLeftOld == 0) { + long uniLeft = Quiche.quiche_conn_peer_streams_left_uni(connAddr); + long bidiLeft = Quiche.quiche_conn_peer_streams_left_bidi(connAddr); + uniStreamsLeft = uniLeft; + bidiStreamsLeft = bidiLeft; + if (uniLeftOld != uniLeft || bidiLeftOld != bidiLeft) { + pipeline().fireUserEventTriggered(QuicStreamLimitChangedEvent.INSTANCE); + } + } + + handlePathEvents(connAddr); + + if (handleWritableStreams()) { + // Some data was produced, let's flush. + flushParent(); + } + + datagramReadable = true; + streamReadable = true; + + recvDatagram(); + recvStream(); + } + } + + private void handlePathEvents(long addr) { + long event; + while ((event = Quiche.quiche_conn_path_event_next(addr)) > 0) { + try { + int type = Quiche.quiche_path_event_type(event); + + if (type == Quiche.QUICHE_PATH_EVENT_NEW) { + Object[] ret = Quiche.quiche_path_event_new(event); + InetSocketAddress local = (InetSocketAddress) ret[0]; + InetSocketAddress peer = (InetSocketAddress) ret[1]; + pipeline().fireUserEventTriggered(new QuicPathEvent.New(local, peer)); + } else if (type == Quiche.QUICHE_PATH_EVENT_VALIDATED) { + Object[] ret = Quiche.quiche_path_event_validated(event); + InetSocketAddress local = (InetSocketAddress) ret[0]; + InetSocketAddress peer = (InetSocketAddress) ret[1]; + pipeline().fireUserEventTriggered(new QuicPathEvent.Validated(local, peer)); + } else if (type == Quiche.QUICHE_PATH_EVENT_FAILED_VALIDATION) { + Object[] ret = Quiche.quiche_path_event_failed_validation(event); + InetSocketAddress local = (InetSocketAddress) ret[0]; + InetSocketAddress peer = (InetSocketAddress) ret[1]; + pipeline().fireUserEventTriggered(new QuicPathEvent.FailedValidation(local, peer)); + } else if (type == Quiche.QUICHE_PATH_EVENT_CLOSED) { + Object[] ret = Quiche.quiche_path_event_closed(event); + InetSocketAddress local = (InetSocketAddress) ret[0]; + InetSocketAddress peer = (InetSocketAddress) ret[1]; + pipeline().fireUserEventTriggered(new QuicPathEvent.Closed(local, peer)); + } else if (type == Quiche.QUICHE_PATH_EVENT_REUSED_SOURCE_CONNECTION_ID) { + Object[] ret = Quiche.quiche_path_event_reused_source_connection_id(event); + Long seq = (Long) ret[0]; + InetSocketAddress localOld = (InetSocketAddress) ret[1]; + InetSocketAddress peerOld = (InetSocketAddress) ret[2]; + InetSocketAddress local = (InetSocketAddress) ret[3]; + InetSocketAddress peer = (InetSocketAddress) ret[4]; + pipeline().fireUserEventTriggered( + new QuicPathEvent.ReusedSourceConnectionId(seq, localOld, peerOld, local, peer)); + } else if (type == Quiche.QUICHE_PATH_EVENT_PEER_MIGRATED) { + Object[] ret = Quiche.quiche_path_event_peer_migrated(event); + InetSocketAddress local = (InetSocketAddress) ret[0]; + InetSocketAddress peer = (InetSocketAddress) ret[1]; + pipeline().fireUserEventTriggered(new QuicPathEvent.PeerMigrated(local, peer)); + } + } finally { + Quiche.quiche_path_event_free(event); + } + } + } + + private void runAllTaskRecv(Runnable task) { + sslTaskExecutor.execute(decorateTaskRecv(task)); + } + + private Runnable decorateTaskRecv(Runnable task) { + return () -> { + try { + runAll(task); + } finally { + // Move back to the EventLoop. + eventLoop().execute(() -> { + if (connection != null) { + processReceived(connection.address()); + + // Call connection send to continue handshake if needed. + if (connectionSend()) { + forceFlushParent(); + } + } + }); + } + }; + } + void recv() { + if ((reantranceGuard & IN_RECV) != 0 || isConnDestroyed()) { + return; + } + + long connAddr = connection.address(); + // Check if we can read anything yet. + if (!Quiche.quiche_conn_is_established(connAddr) && + !Quiche.quiche_conn_is_in_early_data(connAddr)) { + return; + } + + reantranceGuard |= IN_RECV; + try { + recvDatagram(); + recvStream(); + } finally { + fireChannelReadCompleteIfNeeded(); + reantranceGuard &= ~IN_RECV; + } + } + + private void recvStream() { + long connAddr = connection.address(); + long readableIterator = Quiche.quiche_conn_readable(connAddr); + if (readableIterator != -1) { + try { + // For streams we always process all streams when at least on read was requested. + if (recvStreamPending && streamReadable) { + for (;;) { + int readable = Quiche.quiche_stream_iter_next( + readableIterator, readableStreams); + for (int i = 0; i < readable; i++) { + long streamId = readableStreams[i]; + QuicheQuicStreamChannel streamChannel = streams.get(streamId); + if (streamChannel == null) { + recvStreamPending = false; + fireChannelReadCompletePending = true; + streamChannel = addNewStreamChannel(streamId); + streamChannel.readable(); + pipeline().fireChannelRead(streamChannel); + } else { + streamChannel.readable(); + } + } + if (readable < readableStreams.length) { + // We did consume all readable streams. + streamReadable = false; + break; + } + } + } + } finally { + Quiche.quiche_stream_iter_free(readableIterator); + } + } + } + + private void recvDatagram() { + if (!supportsDatagram) { + return; + } + long connAddr = connection.address(); + while (recvDatagramPending && datagramReadable) { + @SuppressWarnings("deprecation") + RecvByteBufAllocator.Handle recvHandle = recvBufAllocHandle(); + recvHandle.reset(config()); + + int numMessagesRead = 0; + do { + int len = Quiche.quiche_conn_dgram_recv_front_len(connAddr); + if (len == Quiche.QUICHE_ERR_DONE) { + datagramReadable = false; + return; + } + + ByteBuf datagramBuffer = alloc().directBuffer(len); + recvHandle.attemptedBytesRead(datagramBuffer.writableBytes()); + int writerIndex = datagramBuffer.writerIndex(); + long memoryAddress = Quiche.writerMemoryAddress(datagramBuffer); + + int written = Quiche.quiche_conn_dgram_recv(connAddr, + memoryAddress, datagramBuffer.writableBytes()); + try { + if (Quiche.throwIfError(written)) { + datagramBuffer.release(); + // We did consume all datagram packets. + datagramReadable = false; + break; + } + } catch (Exception e) { + datagramBuffer.release(); + pipeline().fireExceptionCaught(e); + } + recvHandle.lastBytesRead(written); + recvHandle.incMessagesRead(1); + numMessagesRead++; + datagramBuffer.writerIndex(writerIndex + written); + recvDatagramPending = false; + fireChannelReadCompletePending = true; + + pipeline().fireChannelRead(datagramBuffer); + } while (recvHandle.continueReading()); + recvHandle.readComplete(); + + // Check if we produced any messages. + if (numMessagesRead > 0) { + fireChannelReadCompleteIfNeeded(); + } + } + } + + private boolean handlePendingChannelActive() { + long connAddr = connection.address(); + if (server) { + if (state == OPEN && Quiche.quiche_conn_is_established(connAddr)) { + // We didn't notify before about channelActive... Update state and fire the event. + state = ACTIVE; + + pipeline().fireChannelActive(); + notifyAboutHandshakeCompletionIfNeeded(null); + fireDatagramExtensionEvent(); + } + } else if (connectPromise != null && Quiche.quiche_conn_is_established(connAddr)) { + ChannelPromise promise = connectPromise; + connectPromise = null; + state = ACTIVE; + + boolean promiseSet = promise.trySuccess(); + pipeline().fireChannelActive(); + notifyAboutHandshakeCompletionIfNeeded(null); + fireDatagramExtensionEvent(); + if (!promiseSet) { + fireConnectCloseEventIfNeeded(connAddr); + this.close(this.voidPromise()); + return true; + } + } + return false; + } + + private void fireDatagramExtensionEvent() { + long connAddr = connection.address(); + int len = Quiche.quiche_conn_dgram_max_writable_len(connAddr); + // QUICHE_ERR_DONE means the remote peer does not support the extension. + if (len != Quiche.QUICHE_ERR_DONE) { + pipeline().fireUserEventTriggered(new QuicDatagramExtensionEvent(len)); + } + } + + private QuicheQuicStreamChannel addNewStreamChannel(long streamId) { + QuicheQuicStreamChannel streamChannel = new QuicheQuicStreamChannel( + QuicheQuicChannel.this, streamId); + QuicheQuicStreamChannel old = streams.put(streamId, streamChannel); + assert old == null; + streamChannel.writable(streamCapacity(streamId)); + return streamChannel; + } + } + + /** + * Finish the connect of a client channel. + */ + void finishConnect() { + assert !server; + if (connectionSend()) { + flushParent(); + } + } + + private void notifyEarlyDataReadyIfNeeded() { + if (!server && !earlyDataReadyNotified && + !isConnDestroyed() && Quiche.quiche_conn_is_in_early_data(connection.address())) { + earlyDataReadyNotified = true; + pipeline().fireUserEventTriggered(SslEarlyDataReadyEvent.INSTANCE); + } + } + + // TODO: Come up with something better. + static QuicheQuicChannel handleConnect(Function sslEngineProvider, + Executor sslTaskExecutor, + SocketAddress address, long config, int localConnIdLength, + boolean supportsDatagram, ByteBuffer fromSockaddrMemory, + ByteBuffer toSockaddrMemory) throws Exception { + if (address instanceof QuicheQuicChannel.QuicheQuicChannelAddress) { + QuicheQuicChannel.QuicheQuicChannelAddress addr = (QuicheQuicChannel.QuicheQuicChannelAddress) address; + QuicheQuicChannel channel = addr.channel; + channel.connect(sslEngineProvider, sslTaskExecutor, config, localConnIdLength, supportsDatagram, + fromSockaddrMemory, toSockaddrMemory); + return channel; + } + return null; + } + + /** + * Just a container to pass the {@link QuicheQuicChannel} to {@link QuicheQuicClientCodec}. + */ + private static final class QuicheQuicChannelAddress extends SocketAddress { + + final QuicheQuicChannel channel; + + QuicheQuicChannelAddress(QuicheQuicChannel channel) { + this.channel = channel; + } + } + + private final class TimeoutHandler implements Runnable { + private ScheduledFuture timeoutFuture; + private final Consumer timeoutTask; + + TimeoutHandler(Consumer timeoutTask) { + this.timeoutTask = timeoutTask; + } + + @Override + public void run() { + if (!isConnDestroyed()) { + long connAddr = connection.address(); + timeoutFuture = null; + // Notify quiche there was a timeout. + Quiche.quiche_conn_on_timeout(connAddr); + + if (Quiche.quiche_conn_is_closed(connAddr)) { + forceClose(); + if (timeoutTask != null){ + timeoutTask.accept(QuicheQuicChannel.this); + } + } else { + // We need to call connectionSend when a timeout was triggered. + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.send. + boolean send = connectionSend(); + if (send) { + flushParent(); + } + if (!closeAllIfConnectionClosed()) { + // The connection is alive, reschedule. + scheduleTimeout(); + } + } + } + } + + // Schedule timeout. + // See https://docs.rs/quiche/0.6.0/quiche/#generating-outgoing-packets + void scheduleTimeout() { + if (isConnDestroyed()) { + cancel(); + return; + } + long nanos = Quiche.quiche_conn_timeout_as_nanos(connection.address()); + if (timeoutFuture == null) { + timeoutFuture = eventLoop().schedule(this, + nanos, TimeUnit.NANOSECONDS); + } else { + long remaining = timeoutFuture.getDelay(TimeUnit.NANOSECONDS); + if (remaining <= 0) { + // This means the timer already elapsed. In this case just cancel the future and call run() + // directly. This will ensure we correctly call quiche_conn_on_timeout() etc. + cancel(); + run(); + } else if (remaining > nanos) { + // The new timeout is smaller then what was scheduled before. Let's cancel the old timeout + // and schedule a new one. + cancel(); + timeoutFuture = eventLoop().schedule(this, nanos, TimeUnit.NANOSECONDS); + } + } + } + + void cancel() { + if (timeoutFuture != null) { + timeoutFuture.cancel(false); + timeoutFuture = null; + } + } + } + + @Override + public Future collectStats(Promise promise) { + if (eventLoop().inEventLoop()) { + collectStats0(promise); + } else { + eventLoop().execute(() -> collectStats0(promise)); + } + return promise; + } + + private void collectStats0(Promise promise) { + if (isConnDestroyed()) { + promise.setSuccess(statsAtClose); + return; + } + + collectStats0(connection, promise); + } + + private QuicConnectionStats collectStats0(QuicheQuicConnection connection, Promise promise) { + final long[] stats = Quiche.quiche_conn_stats(connection.address()); + if (stats == null) { + promise.setFailure(new IllegalStateException("native quiche_conn_stats(...) failed")); + return null; + } + + final QuicheQuicConnectionStats connStats = + new QuicheQuicConnectionStats(stats); + promise.setSuccess(connStats); + return connStats; + } + + @Override + public QuicTransportParameters peerTransportParameters() { + return connection.peerParameters(); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannelConfig.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannelConfig.java new file mode 100644 index 0000000..67988c1 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicChannelConfig.java @@ -0,0 +1,158 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.Channel; +import io.netty.channel.ChannelOption; +import io.netty.channel.DefaultChannelConfig; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; + +import java.util.Map; + +/** + * Default {@link QuicChannelConfig} implementation. + */ +final class QuicheQuicChannelConfig extends DefaultChannelConfig implements QuicChannelConfig { + + private volatile QLogConfiguration qLogConfiguration; + private volatile SegmentedDatagramPacketAllocator segmentedDatagramPacketAllocator = + SegmentedDatagramPacketAllocator.NONE; + + QuicheQuicChannelConfig(Channel channel) { + super(channel); + } + + @Override + public Map, Object> getOptions() { + return getOptions(super.getOptions(), + QuicChannelOption.QLOG, QuicChannelOption.SEGMENTED_DATAGRAM_PACKET_ALLOCATOR); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == QuicChannelOption.QLOG) { + return (T) getQLogConfiguration(); + } + if (option == QuicChannelOption.SEGMENTED_DATAGRAM_PACKET_ALLOCATOR) { + return (T) getSegmentedDatagramPacketAllocator(); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + if (option == QuicChannelOption.QLOG) { + setQLogConfiguration((QLogConfiguration) value); + return true; + } + if (option == QuicChannelOption.SEGMENTED_DATAGRAM_PACKET_ALLOCATOR) { + setSegmentedDatagramPacketAllocator((SegmentedDatagramPacketAllocator) value); + return true; + } + return super.setOption(option, value); + } + + @Override + public QuicChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + @Deprecated + public QuicChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public QuicChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public QuicChannelConfig setAllocator(ByteBufAllocator allocator) { + super.setAllocator(allocator); + return this; + } + + @Override + public QuicChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public QuicChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public QuicChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + public QuicChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + public QuicChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public QuicChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public QuicChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + QLogConfiguration getQLogConfiguration() { + return qLogConfiguration; + } + + private void setQLogConfiguration(QLogConfiguration qLogConfiguration) { + if (channel.isRegistered()) { + throw new IllegalStateException("QLOG can only be enabled before the Channel was registered"); + } + this.qLogConfiguration = qLogConfiguration; + } + + SegmentedDatagramPacketAllocator getSegmentedDatagramPacketAllocator() { + return segmentedDatagramPacketAllocator; + } + + private void setSegmentedDatagramPacketAllocator( + SegmentedDatagramPacketAllocator segmentedDatagramPacketAllocator) { + this.segmentedDatagramPacketAllocator = segmentedDatagramPacketAllocator; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicClientCodec.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicClientCodec.java new file mode 100644 index 0000000..939266c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicClientCodec.java @@ -0,0 +1,76 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; + +import java.net.InetSocketAddress; +import java.net.SocketAddress; +import java.nio.ByteBuffer; +import java.util.concurrent.Executor; +import java.util.function.Function; + +/** + * {@link QuicheQuicCodec} for QUIC clients. + */ +final class QuicheQuicClientCodec extends QuicheQuicCodec { + + private final Function sslEngineProvider; + private final Executor sslTaskExecutor; + + QuicheQuicClientCodec(QuicheConfig config, Function sslEngineProvider, + Executor sslTaskExecutor, int localConnIdLength, FlushStrategy flushStrategy) { + // Let's just use Quic.MAX_DATAGRAM_SIZE as the maximum size for a token on the client side. This should be + // safe enough and as we not have too many codecs at the same time this should be ok. + super(config, localConnIdLength, Quic.MAX_DATAGRAM_SIZE, flushStrategy); + this.sslEngineProvider = sslEngineProvider; + this.sslTaskExecutor = sslTaskExecutor; + } + + @Override + protected QuicheQuicChannel quicPacketRead( + ChannelHandlerContext ctx, InetSocketAddress sender, InetSocketAddress recipient, + QuicPacketType type, int version, ByteBuf scid, ByteBuf dcid, + ByteBuf token) { + ByteBuffer key = dcid.internalNioBuffer(dcid.readerIndex(), dcid.readableBytes()); + return getChannel(key); + } + + @Override + public void connect(ChannelHandlerContext ctx, SocketAddress remoteAddress, + SocketAddress localAddress, ChannelPromise promise) { + final QuicheQuicChannel channel; + try { + channel = QuicheQuicChannel.handleConnect(sslEngineProvider, sslTaskExecutor, remoteAddress, config.nativeAddress(), + localConnIdLength, config.isDatagramSupported(), + senderSockaddrMemory.internalNioBuffer(0, senderSockaddrMemory.capacity()), + recipientSockaddrMemory.internalNioBuffer(0, recipientSockaddrMemory.capacity())); + } catch (Exception e) { + promise.setFailure(e); + return; + } + if (channel != null) { + addChannel(channel); + + channel.finishConnect(); + promise.setSuccess(); + return; + } + ctx.connect(remoteAddress, localAddress, promise); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicCodec.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicCodec.java new file mode 100644 index 0000000..478f9f3 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicCodec.java @@ -0,0 +1,315 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelDuplexHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelPromise; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.socket.DatagramPacket; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.util.ArrayDeque; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Queue; +import java.util.Set; + +import static io.netty.handler.codec.quic.Quiche.allocateNativeOrder; + +/** + * Abstract base class for QUIC codecs. + */ +abstract class QuicheQuicCodec extends ChannelDuplexHandler { + private static final InternalLogger LOGGER = InternalLoggerFactory.getInstance(QuicheQuicCodec.class); + + private final Map connectionIdToChannel = new HashMap<>(); + private final Set channels = new HashSet<>(); + private final Queue needsFireChannelReadComplete = new ArrayDeque<>(); + private final int maxTokenLength; + private final FlushStrategy flushStrategy; + + private MessageSizeEstimator.Handle estimatorHandle; + private QuicHeaderParser headerParser; + private QuicHeaderParser.QuicHeaderProcessor parserCallback; + private int pendingBytes; + private int pendingPackets; + private boolean inChannelReadComplete; + + protected final QuicheConfig config; + protected final int localConnIdLength; + // This buffer is used to copy InetSocketAddress to sockaddr_storage and so pass it down the JNI layer. + protected ByteBuf senderSockaddrMemory; + protected ByteBuf recipientSockaddrMemory; + + QuicheQuicCodec(QuicheConfig config, int localConnIdLength, int maxTokenLength, FlushStrategy flushStrategy) { + this.config = config; + this.localConnIdLength = localConnIdLength; + this.maxTokenLength = maxTokenLength; + this.flushStrategy = flushStrategy; + } + + protected final QuicheQuicChannel getChannel(ByteBuffer key) { + return connectionIdToChannel.get(key); + } + + protected final void addMapping(ByteBuffer key, QuicheQuicChannel channel) { + connectionIdToChannel.put(key, channel); + } + + protected final void removeMapping(ByteBuffer key) { + connectionIdToChannel.remove(key); + } + + protected final void removeChannel(QuicheQuicChannel channel) { + boolean removed = channels.remove(channel); + assert removed; + for (ByteBuffer id : channel.sourceConnectionIds()) { + connectionIdToChannel.remove(id); + } + } + + protected final void addChannel(QuicheQuicChannel channel) { + boolean added = channels.add(channel); + assert added; + for (ByteBuffer id : channel.sourceConnectionIds()) { + connectionIdToChannel.put(id, channel); + } + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + senderSockaddrMemory = allocateNativeOrder(Quiche.SIZEOF_SOCKADDR_STORAGE); + recipientSockaddrMemory = allocateNativeOrder(Quiche.SIZEOF_SOCKADDR_STORAGE); + headerParser = new QuicHeaderParser(maxTokenLength, localConnIdLength); + parserCallback = new QuicCodecHeaderProcessor(ctx); + estimatorHandle = ctx.channel().config().getMessageSizeEstimator().newHandle(); + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) { + try { + // Use a copy of the array as closing the channel may cause an unwritable event that could also + // remove channels. + for (QuicheQuicChannel ch : channels.toArray(new QuicheQuicChannel[0])) { + ch.forceClose(); + } + channels.clear(); + connectionIdToChannel.clear(); + + needsFireChannelReadComplete.clear(); + if (pendingPackets > 0) { + flushNow(ctx); + } + } finally { + config.free(); + if (senderSockaddrMemory != null) { + senderSockaddrMemory.release(); + } + if (recipientSockaddrMemory != null) { + recipientSockaddrMemory.release(); + } + if (headerParser != null) { + headerParser.close(); + headerParser = null; + } + } + } + + @Override + public final void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception { + DatagramPacket packet = (DatagramPacket) msg; + try { + ByteBuf buffer = ((DatagramPacket) msg).content(); + if (!buffer.isDirect()) { + // We need a direct buffer as otherwise we can not access the memoryAddress. + // Let's do a copy to direct memory. + ByteBuf direct = ctx.alloc().directBuffer(buffer.readableBytes()); + try { + direct.writeBytes(buffer, buffer.readerIndex(), buffer.readableBytes()); + handleQuicPacket(packet.sender(), packet.recipient(), direct); + } finally { + direct.release(); + } + } else { + handleQuicPacket(packet.sender(), packet.recipient(), buffer); + } + } finally { + packet.release(); + } + } + + private void handleQuicPacket(InetSocketAddress sender, InetSocketAddress recipient, ByteBuf buffer) { + try { + headerParser.parse(sender, recipient, buffer, parserCallback); + } catch (Exception e) { + LOGGER.debug("Error while processing QUIC packet", e); + } + } + + /** + * Handle a QUIC packet and return {@code true} if we need to call {@link ChannelHandlerContext#flush()}. + * + * @param ctx the {@link ChannelHandlerContext}. + * @param sender the {@link InetSocketAddress} of the sender of the QUIC packet + * @param recipient the {@link InetSocketAddress} of the recipient of the QUIC packet + * @param type the type of the packet. + * @param version the QUIC version + * @param scid the source connection id. + * @param dcid the destination connection id + * @param token the token + * @return {@code true} if we need to call {@link ChannelHandlerContext#flush()} before there is no new events + * for this handler in the current eventloop run. + * @throws Exception thrown if there is an error during processing. + */ + protected abstract QuicheQuicChannel quicPacketRead(ChannelHandlerContext ctx, InetSocketAddress sender, + InetSocketAddress recipient, QuicPacketType type, int version, + ByteBuf scid, ByteBuf dcid, ByteBuf token) throws Exception; + + @Override + public final void channelReadComplete(ChannelHandlerContext ctx) { + inChannelReadComplete = true; + try { + for (;;) { + QuicheQuicChannel channel = needsFireChannelReadComplete.poll(); + if (channel == null) { + break; + } + channel.recvComplete(); + if (channel.freeIfClosed()) { + removeChannel(channel); + } + } + } finally { + inChannelReadComplete = false; + if (pendingPackets > 0) { + flushNow(ctx); + } + } + } + + @Override + public final void channelWritabilityChanged(ChannelHandlerContext ctx) { + if (ctx.channel().isWritable()) { + List closed = null; + for (QuicheQuicChannel channel : channels) { + // TODO: Be a bit smarter about this. + channel.writable(); + if (channel.freeIfClosed()) { + if (closed == null) { + closed = new ArrayList<>(); + } + closed.add(channel); + } + } + if (closed != null) { + for (QuicheQuicChannel ch: closed) { + removeChannel(ch); + } + } + } else { + // As we batch flushes we need to ensure we at least try to flush a batch once the channel becomes + // unwritable. Otherwise we may end up with buffering too much writes and so waste memory. + ctx.flush(); + } + + ctx.fireChannelWritabilityChanged(); + } + + @Override + public final void write(ChannelHandlerContext ctx, Object msg, ChannelPromise promise) { + pendingPackets ++; + int size = estimatorHandle.size(msg); + if (size > 0) { + pendingBytes += size; + } + try { + ctx.write(msg, promise); + } finally { + flushIfNeeded(ctx); + } + } + + @Override + public final void flush(ChannelHandlerContext ctx) { + // If we are in the channelReadComplete(...) method we might be able to delay the flush(...) until we finish + // processing all channels. + if (inChannelReadComplete) { + flushIfNeeded(ctx); + } else if (pendingPackets > 0) { + flushNow(ctx); + } + } + + private void flushIfNeeded(ChannelHandlerContext ctx) { + // Check if we should force a flush() and so ensure the packets are delivered in a timely + // manner and also make room in the outboundbuffer again that belongs to the underlying channel. + if (flushStrategy.shouldFlushNow(pendingPackets, pendingBytes)) { + flushNow(ctx); + } + } + + private void flushNow(ChannelHandlerContext ctx) { + pendingBytes = 0; + pendingPackets = 0; + ctx.flush(); + } + + private final class QuicCodecHeaderProcessor implements QuicHeaderParser.QuicHeaderProcessor { + + private final ChannelHandlerContext ctx; + + QuicCodecHeaderProcessor(ChannelHandlerContext ctx) { + this.ctx = ctx; + } + + @Override + public void process(InetSocketAddress sender, InetSocketAddress recipient, ByteBuf buffer, QuicPacketType type, + int version, ByteBuf scid, ByteBuf dcid, ByteBuf token) throws Exception { + QuicheQuicChannel channel = quicPacketRead(ctx, sender, recipient, + type, version, scid, + dcid, token); + if (channel != null) { + channelRecv(channel, sender, recipient, buffer); + } + } + } + + /** + * Called once something was received for a {@link QuicheQuicChannel}. + * + * @param channel the channel for which the data was received + * @param sender the sender + * @param recipient the recipient + * @param buffer the acutal data. + */ + protected void channelRecv(QuicheQuicChannel channel, InetSocketAddress sender, + InetSocketAddress recipient, ByteBuf buffer) { + // Add to queue first, we might be able to safe some flushes and consolidate them + // in channelReadComplete(...) this way. + if (channel.markInFireChannelReadCompleteQueue()) { + needsFireChannelReadComplete.add(channel); + } + channel.recv(sender, recipient, buffer); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnection.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnection.java new file mode 100644 index 0000000..c561c7c --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnection.java @@ -0,0 +1,232 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.util.ReferenceCounted; +import io.netty.util.ResourceLeakDetector; +import io.netty.util.ResourceLeakDetectorFactory; +import io.netty.util.ResourceLeakTracker; + +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.util.function.Supplier; + +final class QuicheQuicConnection { + private static final int TOTAL_RECV_INFO_SIZE = Quiche.SIZEOF_QUICHE_RECV_INFO + + Quiche.SIZEOF_SOCKADDR_STORAGE + Quiche.SIZEOF_SOCKADDR_STORAGE; + private static final ResourceLeakDetector leakDetector = + ResourceLeakDetectorFactory.instance().newResourceLeakDetector(QuicheQuicConnection.class); + private final QuicheQuicSslEngine engine; + + private final ResourceLeakTracker leakTracker; + + final long ssl; + private ReferenceCounted refCnt; + + // This block of memory is used to store the following structs (in this order): + // - quiche_recv_info + // - sockaddr_storage + // - quiche_recv_info + // - sockaddr_storage + // - quiche_send_info + // - quiche_send_info + // + // We need to have every stored 2 times as we need to check if the last sockaddr has changed between + // quiche_conn_recv and quiche_conn_send calls. If this happens we know a QUIC connection migration did happen. + private final ByteBuf recvInfoBuffer; + private final ByteBuf sendInfoBuffer; + + private boolean recvInfoFirst = true; + private boolean sendInfoFirst = true; + private final ByteBuffer recvInfoBuffer1; + private final ByteBuffer recvInfoBuffer2; + private final ByteBuffer sendInfoBuffer1; + private final ByteBuffer sendInfoBuffer2; + + private long connection; + + QuicheQuicConnection(long connection, long ssl, QuicheQuicSslEngine engine, ReferenceCounted refCnt) { + this.connection = connection; + this.ssl = ssl; + this.engine = engine; + this.refCnt = refCnt; + // TODO: Maybe cache these per thread as we only use them temporary within a limited scope. + recvInfoBuffer = Quiche.allocateNativeOrder(2 * TOTAL_RECV_INFO_SIZE); + sendInfoBuffer = Quiche.allocateNativeOrder(2 * Quiche.SIZEOF_QUICHE_SEND_INFO); + + // Let's memset the memory. + recvInfoBuffer.setZero(0, recvInfoBuffer.capacity()); + sendInfoBuffer.setZero(0, sendInfoBuffer.capacity()); + + recvInfoBuffer1 = recvInfoBuffer.nioBuffer(0, TOTAL_RECV_INFO_SIZE); + recvInfoBuffer2 = recvInfoBuffer.nioBuffer(TOTAL_RECV_INFO_SIZE, TOTAL_RECV_INFO_SIZE); + + sendInfoBuffer1 = sendInfoBuffer.nioBuffer(0, Quiche.SIZEOF_QUICHE_SEND_INFO); + sendInfoBuffer2 = sendInfoBuffer.nioBuffer(Quiche.SIZEOF_QUICHE_SEND_INFO, Quiche.SIZEOF_QUICHE_SEND_INFO); + this.engine.connection = this; + leakTracker = leakDetector.track(this); + } + + synchronized void reattach(ReferenceCounted refCnt) { + this.refCnt.release(); + this.refCnt = refCnt; + } + + void free() { + free(true); + } + + private void free(boolean closeLeakTracker) { + boolean release = false; + synchronized (this) { + if (connection != -1) { + try { + BoringSSL.SSL_cleanup(ssl); + Quiche.quiche_conn_free(connection); + engine.ctx.remove(engine); + release = true; + refCnt.release(); + } finally { + connection = -1; + } + } + } + if (release) { + recvInfoBuffer.release(); + sendInfoBuffer.release(); + if (closeLeakTracker && leakTracker != null) { + leakTracker.close(this); + } + } + } + + Runnable sslTask() { + final Runnable task; + synchronized (this) { + if (connection != -1) { + task = BoringSSL.SSL_getTask(ssl); + } else { + task = null; + } + } + if (task == null) { + return null; + } + + return () -> { + if (connection == -1) { + return; + } + + task.run(); + }; + } + + QuicConnectionAddress sourceId() { + return connectionId(() -> Quiche.quiche_conn_source_id(connection)); + } + + QuicConnectionAddress destinationId() { + return connectionId(() -> Quiche.quiche_conn_destination_id(connection)); + } + + QuicConnectionAddress connectionId(Supplier idSupplier) { + final byte[] id; + synchronized (this) { + if (connection == -1) { + return null; + } + id = idSupplier.get(); + } + return id == null ? null : new QuicConnectionAddress(id); + } + + QuicheQuicTransportParameters peerParameters() { + final long[] ret; + synchronized (this) { + if (connection == -1) { + return null; + } + ret = Quiche.quiche_conn_peer_transport_params(connection); + } + if (ret == null) { + return null; + } + return new QuicheQuicTransportParameters(ret); + } + + QuicheQuicSslEngine engine() { + return engine; + } + + long address() { + assert connection != -1; + return connection; + } + + void initInfo(InetSocketAddress local, InetSocketAddress remote) { + assert connection != -1; + assert recvInfoBuffer.refCnt() != 0; + assert sendInfoBuffer.refCnt() != 0; + + // Fill both quiche_recv_info structs with the same address. + QuicheRecvInfo.setRecvInfo(recvInfoBuffer1, remote, local); + QuicheRecvInfo.setRecvInfo(recvInfoBuffer2, remote, local); + + // Fill both quiche_send_info structs with the same address. + QuicheSendInfo.setSendInfo(sendInfoBuffer1, local, remote); + QuicheSendInfo.setSendInfo(sendInfoBuffer2, local, remote); + } + + ByteBuffer nextRecvInfo() { + assert recvInfoBuffer.refCnt() != 0; + recvInfoFirst = !recvInfoFirst; + return recvInfoFirst ? recvInfoBuffer1 : recvInfoBuffer2; + } + + ByteBuffer nextSendInfo() { + assert sendInfoBuffer.refCnt() != 0; + sendInfoFirst = !sendInfoFirst; + return sendInfoFirst ? sendInfoBuffer1 : sendInfoBuffer2; + } + + boolean isSendInfoChanged() { + assert sendInfoBuffer.refCnt() != 0; + return !QuicheSendInfo.isSameAddress(sendInfoBuffer1, sendInfoBuffer2); + } + + boolean isRecvInfoChanged() { + assert recvInfoBuffer.refCnt() != 0; + return !QuicheRecvInfo.isSameAddress(recvInfoBuffer1, recvInfoBuffer2); + } + + boolean isClosed() { + assert connection != -1; + return Quiche.quiche_conn_is_closed(connection); + } + + // Let's override finalize() as we want to ensure we never leak memory even if the user will miss to close + // Channel that uses this connection and just let it get GC'ed + @Override + protected void finalize() throws Throwable { + try { + free(false); + } finally { + super.finalize(); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnectionStats.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnectionStats.java new file mode 100644 index 0000000..87cf1ab --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicConnectionStats.java @@ -0,0 +1,91 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.StringUtil; + +final class QuicheQuicConnectionStats implements QuicConnectionStats { + + private final long[] values; + + QuicheQuicConnectionStats(long[] values) { + this.values = values; + } + + @Override + public long recv() { + return values[0]; + } + + @Override + public long sent() { + return values[1]; + } + + @Override + public long lost() { + return values[2]; + } + + @Override + public long retrans() { + return values[3]; + } + + @Override + public long sentBytes() { + return values[4]; + } + + @Override + public long recvBytes() { + return values[5]; + } + + @Override + public long lostBytes() { + return values[6]; + } + + @Override + public long streamRetransBytes() { + return values[7]; + } + + @Override + public long pathsCount() { + return values[8]; + } + + /** + * Returns the {@link String} representation of stats. + */ + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "[" + + "recv=" + recv() + + ", sent=" + sent() + + ", lost=" + lost() + + ", retrans=" + retrans() + + ", sentBytes=" + sentBytes() + + ", recvBytes=" + recvBytes() + + ", lostBytes=" + lostBytes() + + ", streamRetransBytes=" + streamRetransBytes() + + ", pathsCount=" + pathsCount() + + "]"; + } + +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicServerCodec.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicServerCodec.java new file mode 100644 index 0000000..edd6e71 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicServerCodec.java @@ -0,0 +1,268 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelOption; +import io.netty.channel.socket.DatagramPacket; +import io.netty.util.AttributeKey; +import io.netty.util.CharsetUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.util.Map; +import java.util.concurrent.Executor; +import java.util.function.Function; + +import static io.netty.handler.codec.quic.Quiche.allocateNativeOrder; + +/** + * {@link QuicheQuicCodec} for QUIC servers. + */ +final class QuicheQuicServerCodec extends QuicheQuicCodec { + private static final InternalLogger LOGGER = InternalLoggerFactory.getInstance(QuicheQuicServerCodec.class); + + private final Function sslEngineProvider; + private final Executor sslTaskExecutor; + private final QuicConnectionIdGenerator connectionIdAddressGenerator; + private final QuicResetTokenGenerator resetTokenGenerator; + private final QuicTokenHandler tokenHandler; + private final ChannelHandler handler; + private final Map.Entry, Object>[] optionsArray; + private final Map.Entry, Object>[] attrsArray; + private final ChannelHandler streamHandler; + private final Map.Entry, Object>[] streamOptionsArray; + private final Map.Entry, Object>[] streamAttrsArray; + private ByteBuf mintTokenBuffer; + private ByteBuf connIdBuffer; + + QuicheQuicServerCodec(QuicheConfig config, + int localConnIdLength, + QuicTokenHandler tokenHandler, + QuicConnectionIdGenerator connectionIdAddressGenerator, + QuicResetTokenGenerator resetTokenGenerator, + FlushStrategy flushStrategy, + Function sslEngineProvider, + Executor sslTaskExecutor, + ChannelHandler handler, + Map.Entry, Object>[] optionsArray, + Map.Entry, Object>[] attrsArray, + ChannelHandler streamHandler, + Map.Entry, Object>[] streamOptionsArray, + Map.Entry, Object>[] streamAttrsArray) { + super(config, localConnIdLength, tokenHandler.maxTokenLength(), flushStrategy); + this.tokenHandler = tokenHandler; + this.connectionIdAddressGenerator = connectionIdAddressGenerator; + this.resetTokenGenerator = resetTokenGenerator; + this.sslEngineProvider = sslEngineProvider; + this.sslTaskExecutor = sslTaskExecutor; + this.handler = handler; + this.optionsArray = optionsArray; + this.attrsArray = attrsArray; + this.streamHandler = streamHandler; + this.streamOptionsArray = streamOptionsArray; + this.streamAttrsArray = streamAttrsArray; + } + + @Override + public void handlerAdded(ChannelHandlerContext ctx) { + super.handlerAdded(ctx); + connIdBuffer = Quiche.allocateNativeOrder(localConnIdLength); + mintTokenBuffer = allocateNativeOrder(tokenHandler.maxTokenLength()); + } + + @Override + public void handlerRemoved(ChannelHandlerContext ctx) { + super.handlerRemoved(ctx); + if (connIdBuffer != null) { + connIdBuffer.release(); + } + if (mintTokenBuffer != null) { + mintTokenBuffer.release(); + } + } + + @Override + protected void channelRecv(QuicheQuicChannel channel, InetSocketAddress sender, + InetSocketAddress recipient, ByteBuf buffer) { + super.channelRecv(channel, sender, recipient, buffer); + for (ByteBuffer retiredSourceConnectionId : channel.retiredSourceConnectionId()) { + removeMapping(retiredSourceConnectionId); + } + for (ByteBuffer newSourceConnectionId : + channel.newSourceConnectionIds(connectionIdAddressGenerator, resetTokenGenerator)) { + addMapping(newSourceConnectionId, channel); + } + } + + @Override + protected QuicheQuicChannel quicPacketRead(ChannelHandlerContext ctx, InetSocketAddress sender, + InetSocketAddress recipient, QuicPacketType type, int version, + ByteBuf scid, ByteBuf dcid, ByteBuf token) throws Exception { + ByteBuffer dcidByteBuffer = dcid.internalNioBuffer(dcid.readerIndex(), dcid.readableBytes()); + QuicheQuicChannel channel = getChannel(dcidByteBuffer); + if (channel == null && type == QuicPacketType.ZERO_RTT && connectionIdAddressGenerator.isIdempotent()) { + // 0 rtt packet should obtain the server generated dcid + channel = getChannel(connectionIdAddressGenerator.newId(dcidByteBuffer, localConnIdLength)); + } + if (channel == null) { + return handleServer(ctx, sender, recipient, type, version, scid, dcid, token); + } + + return channel; + } + + private QuicheQuicChannel handleServer(ChannelHandlerContext ctx, InetSocketAddress sender, + InetSocketAddress recipient, + @SuppressWarnings("unused") QuicPacketType type, int version, + ByteBuf scid, ByteBuf dcid, ByteBuf token) throws Exception { + if (!Quiche.quiche_version_is_supported(version)) { + // Version is not supported, try to negotiate it. + ByteBuf out = ctx.alloc().directBuffer(Quic.MAX_DATAGRAM_SIZE); + int outWriterIndex = out.writerIndex(); + + int res = Quiche.quiche_negotiate_version( + Quiche.readerMemoryAddress(scid), scid.readableBytes(), + Quiche.readerMemoryAddress(dcid), dcid.readableBytes(), + Quiche.writerMemoryAddress(out), out.writableBytes()); + if (res < 0) { + out.release(); + Quiche.throwIfError(res); + } else { + ctx.writeAndFlush(new DatagramPacket(out.writerIndex(outWriterIndex + res), sender)); + } + return null; + } + + final int offset; + boolean noToken = false; + if (!token.isReadable()) { + // Clear buffers so we can reuse these. + mintTokenBuffer.clear(); + connIdBuffer.clear(); + + // The remote peer did not send a token. + if (tokenHandler.writeToken(mintTokenBuffer, dcid, sender)) { + ByteBuffer connId = connectionIdAddressGenerator.newId( + dcid.internalNioBuffer(dcid.readerIndex(), dcid.readableBytes()), localConnIdLength); + connIdBuffer.writeBytes(connId); + + ByteBuf out = ctx.alloc().directBuffer(Quic.MAX_DATAGRAM_SIZE); + int outWriterIndex = out.writerIndex(); + int written = Quiche.quiche_retry( + Quiche.readerMemoryAddress(scid), scid.readableBytes(), + Quiche.readerMemoryAddress(dcid), dcid.readableBytes(), + Quiche.readerMemoryAddress(connIdBuffer), connIdBuffer.readableBytes(), + Quiche.readerMemoryAddress(mintTokenBuffer), mintTokenBuffer.readableBytes(), + version, + Quiche.writerMemoryAddress(out), out.writableBytes()); + + if (written < 0) { + out.release(); + Quiche.throwIfError(written); + } else { + ctx.writeAndFlush(new DatagramPacket(out.writerIndex(outWriterIndex + written), sender)); + } + return null; + } + offset = 0; + noToken = true; + } else { + offset = tokenHandler.validateToken(token, sender); + if (offset == -1) { + if (LOGGER.isDebugEnabled()) { + LOGGER.debug("invalid token: {}", token.toString(CharsetUtil.US_ASCII)); + } + return null; + } + } + + final ByteBuffer key; + final long scidAddr; + final int scidLen; + final long ocidAddr; + final int ocidLen; + + if (noToken) { + connIdBuffer.clear(); + key = connectionIdAddressGenerator.newId( + dcid.internalNioBuffer(dcid.readerIndex(), dcid.readableBytes()), localConnIdLength); + connIdBuffer.writeBytes(key.duplicate()); + scidAddr = Quiche.readerMemoryAddress(connIdBuffer); + scidLen = localConnIdLength; + ocidAddr = -1; + ocidLen = -1; + + QuicheQuicChannel existingChannel = getChannel(key); + if (existingChannel != null) { + return existingChannel; + } + } else { + scidAddr = Quiche.readerMemoryAddress(dcid); + scidLen = localConnIdLength; + ocidAddr = Quiche.memoryAddress(token, offset, token.readableBytes()); + ocidLen = token.readableBytes() - offset; + // Now create the key to store the channel in the map. + byte[] bytes = new byte[localConnIdLength]; + dcid.getBytes(dcid.readerIndex(), bytes); + key = ByteBuffer.wrap(bytes); + } + QuicheQuicChannel channel = QuicheQuicChannel.forServer( + ctx.channel(), key, recipient, sender, config.isDatagramSupported(), + streamHandler, streamOptionsArray, streamAttrsArray, this::removeChannel, sslTaskExecutor); + + Quic.setupChannel(channel, optionsArray, attrsArray, handler, LOGGER); + QuicSslEngine engine = sslEngineProvider.apply(channel); + if (!(engine instanceof QuicheQuicSslEngine)) { + channel.unsafe().closeForcibly(); + throw new IllegalArgumentException("QuicSslEngine is not of type " + + QuicheQuicSslEngine.class.getSimpleName()); + } + if (engine.getUseClientMode()) { + channel.unsafe().closeForcibly(); + throw new IllegalArgumentException("QuicSslEngine is not created in server mode"); + } + + QuicheQuicSslEngine quicSslEngine = (QuicheQuicSslEngine) engine; + QuicheQuicConnection connection = quicSslEngine.createConnection(ssl -> { + ByteBuffer localAddrMemory = recipientSockaddrMemory.internalNioBuffer(0, recipientSockaddrMemory.capacity()); + int localLen = SockaddrIn.setAddress(localAddrMemory, recipient); + + ByteBuffer peerAddrMemory = senderSockaddrMemory.internalNioBuffer(0, senderSockaddrMemory.capacity()); + int peerLen = SockaddrIn.setAddress(peerAddrMemory, sender); + return Quiche.quiche_conn_new_with_tls(scidAddr, scidLen, ocidAddr, ocidLen, + Quiche.memoryAddressWithPosition(localAddrMemory), localLen, + Quiche.memoryAddressWithPosition(peerAddrMemory), peerLen, + config.nativeAddress(), ssl, true); + }); + if (connection == null) { + channel.unsafe().closeForcibly(); + LOGGER.debug("quiche_accept failed"); + return null; + } + + channel.attachQuicheConnection(connection); + + addChannel(channel); + + ctx.channel().eventLoop().register(channel); + return channel; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslContext.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslContext.java new file mode 100644 index 0000000..9b031dd --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslContext.java @@ -0,0 +1,497 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.handler.ssl.ApplicationProtocolNegotiator; +import io.netty.handler.ssl.ClientAuth; +import io.netty.handler.ssl.SslHandler; +import io.netty.util.AbstractReferenceCounted; +import io.netty.util.Mapping; +import io.netty.util.ReferenceCounted; + +import javax.crypto.NoSuchPaddingException; +import javax.net.ssl.KeyManager; +import javax.net.ssl.KeyManagerFactory; +import javax.net.ssl.SSLSession; +import javax.net.ssl.TrustManager; +import javax.net.ssl.TrustManagerFactory; +import javax.net.ssl.X509ExtendedKeyManager; +import javax.net.ssl.X509TrustManager; +import java.io.File; +import java.io.IOException; +import java.security.InvalidAlgorithmParameterException; +import java.security.KeyException; +import java.security.KeyStore; +import java.security.KeyStoreException; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.cert.CertificateException; +import java.security.cert.X509Certificate; +import java.security.spec.InvalidKeySpecException; +import java.util.Arrays; +import java.util.Collections; +import java.util.Enumeration; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.concurrent.Executor; +import java.util.function.BiConsumer; +import java.util.function.LongFunction; + +import static io.netty.util.internal.ObjectUtil.checkNotNull; +import static java.util.Objects.requireNonNull; + +final class QuicheQuicSslContext extends QuicSslContext { + final ClientAuth clientAuth; + private final boolean server; + @SuppressWarnings("deprecation") + private final ApplicationProtocolNegotiator apn; + private long sessionCacheSize; + private long sessionTimeout; + private final QuicheQuicSslSessionContext sessionCtx; + private final QuicheQuicSslEngineMap engineMap = new QuicheQuicSslEngineMap(); + private final QuicClientSessionCache sessionCache; + + private final BoringSSLSessionTicketCallback sessionTicketCallback = new BoringSSLSessionTicketCallback(); + + final NativeSslContext nativeSslContext; + + QuicheQuicSslContext(boolean server, long sessionTimeout, long sessionCacheSize, + ClientAuth clientAuth, TrustManagerFactory trustManagerFactory, + KeyManagerFactory keyManagerFactory, String password, + Mapping mapping, + Boolean earlyData, BoringSSLKeylog keylog, + String... applicationProtocols) { + Quic.ensureAvailability(); + this.server = server; + this.clientAuth = server ? checkNotNull(clientAuth, "clientAuth") : ClientAuth.NONE; + final X509TrustManager trustManager; + if (trustManagerFactory == null) { + try { + trustManagerFactory = + TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm()); + trustManagerFactory.init((KeyStore) null); + trustManager = chooseTrustManager(trustManagerFactory); + } catch (Exception e) { + throw new IllegalStateException(e); + } + } else { + trustManager = chooseTrustManager(trustManagerFactory); + } + final X509ExtendedKeyManager keyManager; + if (keyManagerFactory == null) { + if (server) { + throw new IllegalArgumentException("No KeyManagerFactory"); + } + keyManager = null; + } else { + keyManager = chooseKeyManager(keyManagerFactory); + } + final BoringSSLPrivateKeyMethod privateKeyMethod; + if (keyManagerFactory instanceof BoringSSLKeylessManagerFactory) { + privateKeyMethod = new BoringSSLAsyncPrivateKeyMethodAdapter(engineMap, + ((BoringSSLKeylessManagerFactory) keyManagerFactory).privateKeyMethod); + } else { + privateKeyMethod = null; + } + sessionCache = server ? null : new QuicClientSessionCache(); + int verifyMode = server ? boringSSLVerifyModeForServer(this.clientAuth) : BoringSSL.SSL_VERIFY_PEER; + nativeSslContext = new NativeSslContext(BoringSSL.SSLContext_new(server, applicationProtocols, + new BoringSSLHandshakeCompleteCallback(engineMap), + new BoringSSLCertificateCallback(engineMap, keyManager, password), + new BoringSSLCertificateVerifyCallback(engineMap, trustManager), + mapping == null ? null : new BoringSSLTlsextServernameCallback(engineMap, mapping), + keylog == null ? null : new BoringSSLKeylogCallback(engineMap, keylog), + server ? null : new BoringSSLSessionCallback(engineMap, sessionCache), privateKeyMethod, + sessionTicketCallback, verifyMode, + BoringSSL.subjectNames(trustManager.getAcceptedIssuers()))); + apn = new QuicheQuicApplicationProtocolNegotiator(applicationProtocols); + if (this.sessionCache != null) { + // Cache is handled via our own implementation. + this.sessionCache.setSessionCacheSize((int) sessionCacheSize); + this.sessionCache.setSessionTimeout((int) sessionTimeout); + } else { + // Cache is handled by BoringSSL internally + BoringSSL.SSLContext_setSessionCacheSize( + nativeSslContext.address(), sessionCacheSize); + this.sessionCacheSize = sessionCacheSize; + + BoringSSL.SSLContext_setSessionCacheTimeout( + nativeSslContext.address(), sessionTimeout); + this.sessionTimeout = sessionTimeout; + } + if (earlyData != null) { + BoringSSL.SSLContext_set_early_data_enabled(nativeSslContext.address(), earlyData); + } + sessionCtx = new QuicheQuicSslSessionContext(this); + } + + private X509ExtendedKeyManager chooseKeyManager(KeyManagerFactory keyManagerFactory) { + for (KeyManager manager: keyManagerFactory.getKeyManagers()) { + if (manager instanceof X509ExtendedKeyManager) { + return (X509ExtendedKeyManager) manager; + } + } + throw new IllegalArgumentException("No X509ExtendedKeyManager included"); + } + + private static X509TrustManager chooseTrustManager(TrustManagerFactory trustManagerFactory) { + for (TrustManager manager: trustManagerFactory.getTrustManagers()) { + if (manager instanceof X509TrustManager) { + return (X509TrustManager) manager; + } + } + throw new IllegalArgumentException("No X509TrustManager included"); + } + + static X509Certificate[] toX509Certificates0(File file) throws CertificateException { + return toX509Certificates(file); + } + + static PrivateKey toPrivateKey0(File keyFile, String keyPassword) throws NoSuchAlgorithmException, + NoSuchPaddingException, InvalidKeySpecException, + InvalidAlgorithmParameterException, + KeyException, IOException { + return toPrivateKey(keyFile, keyPassword); + } + + static TrustManagerFactory buildTrustManagerFactory0( + X509Certificate[] certCollection) + throws NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException { + return buildTrustManagerFactory(certCollection, null, null); + } + + private static int boringSSLVerifyModeForServer(ClientAuth mode) { + switch (mode) { + case NONE: + return BoringSSL.SSL_VERIFY_NONE; + case REQUIRE: + return BoringSSL.SSL_VERIFY_PEER | BoringSSL.SSL_VERIFY_FAIL_IF_NO_PEER_CERT; + case OPTIONAL: + return BoringSSL.SSL_VERIFY_PEER; + default: + throw new Error(mode.toString()); + } + } + + QuicheQuicConnection createConnection(LongFunction connectionCreator, QuicheQuicSslEngine engine) { + nativeSslContext.retain(); + long ssl = BoringSSL.SSL_new(nativeSslContext.address(), isServer(), engine.tlsHostName); + engineMap.put(ssl, engine); + long connection = connectionCreator.apply(ssl); + if (connection == -1) { + engineMap.remove(ssl); + // We retained before but as we don't create a QuicheQuicConnection and transfer ownership we need to + // explict call release again here. + nativeSslContext.release(); + return null; + } + // The connection will call nativeSslContext.release() once it is freed. + return new QuicheQuicConnection(connection, ssl, engine, nativeSslContext); + } + + /** + * Add the given engine to this context + * + * @param engine the engine to add. + * @return the pointer address of this context. + */ + long add(QuicheQuicSslEngine engine) { + nativeSslContext.retain(); + engine.connection.reattach(nativeSslContext); + engineMap.put(engine.connection.ssl, engine); + return nativeSslContext.address(); + } + + /** + * Remove the given engine from this context. + * + * @param engine the engine to remove. + */ + void remove(QuicheQuicSslEngine engine) { + QuicheQuicSslEngine removed = engineMap.remove(engine.connection.ssl); + assert removed == null || removed == engine; + engine.removeSessionFromCacheIfInvalid(); + } + + QuicClientSessionCache getSessionCache() { + return sessionCache; + } + + @Override + public boolean isClient() { + return !server; + } + + @Override + public List cipherSuites() { + return Arrays.asList("TLS_AES_128_GCM_SHA256", "TLS_AES_256_GCM_SHA384"); + } + + @Override + public long sessionCacheSize() { + if (sessionCache != null) { + return sessionCache.getSessionCacheSize(); + } else { + synchronized (this) { + return sessionCacheSize; + } + } + } + + @Override + public long sessionTimeout() { + if (sessionCache != null) { + return sessionCache.getSessionTimeout(); + } else { + synchronized (this) { + return sessionTimeout; + } + } + } + + @Override + public ApplicationProtocolNegotiator applicationProtocolNegotiator() { + return apn; + } + + @Override + public QuicSslEngine newEngine(ByteBufAllocator alloc) { + return new QuicheQuicSslEngine(this, null, -1); + } + + @Override + public QuicSslEngine newEngine(ByteBufAllocator alloc, String peerHost, int peerPort) { + return new QuicheQuicSslEngine(this, peerHost, peerPort); + } + + @Override + public QuicSslSessionContext sessionContext() { + return sessionCtx; + } + + @Override + protected SslHandler newHandler(ByteBufAllocator alloc, boolean startTls) { + throw new UnsupportedOperationException(); + } + + @Override + public SslHandler newHandler(ByteBufAllocator alloc, Executor delegatedTaskExecutor) { + throw new UnsupportedOperationException(); + } + + @Override + protected SslHandler newHandler(ByteBufAllocator alloc, boolean startTls, Executor executor) { + throw new UnsupportedOperationException(); + } + + @Override + protected SslHandler newHandler(ByteBufAllocator alloc, String peerHost, int peerPort, boolean startTls) { + throw new UnsupportedOperationException(); + } + + @Override + public SslHandler newHandler(ByteBufAllocator alloc, String peerHost, int peerPort, + Executor delegatedTaskExecutor) { + throw new UnsupportedOperationException(); + } + + @Override + protected SslHandler newHandler(ByteBufAllocator alloc, String peerHost, int peerPort, + boolean startTls, Executor delegatedTaskExecutor) { + throw new UnsupportedOperationException(); + } + + @Override + protected void finalize() throws Throwable { + try { + nativeSslContext.release(); + } finally { + super.finalize(); + } + } + + void setSessionTimeout(int seconds) throws IllegalArgumentException { + if (sessionCache != null) { + sessionCache.setSessionTimeout(seconds); + } else { + BoringSSL.SSLContext_setSessionCacheTimeout(nativeSslContext.address(), seconds); + this.sessionTimeout = seconds; + } + } + + void setSessionCacheSize(int size) throws IllegalArgumentException { + if (sessionCache != null) { + sessionCache.setSessionCacheSize(size); + } else { + BoringSSL.SSLContext_setSessionCacheSize(nativeSslContext.address(), size); + sessionCacheSize = size; + } + } + + void setSessionTicketKeys(SslSessionTicketKey[] ticketKeys) { + sessionTicketCallback.setSessionTicketKeys(ticketKeys); + BoringSSL.SSLContext_setSessionTicketKeys( + nativeSslContext.address(), ticketKeys != null && ticketKeys.length != 0); + } + + @SuppressWarnings("deprecation") + private static final class QuicheQuicApplicationProtocolNegotiator implements ApplicationProtocolNegotiator { + private final List protocols; + + QuicheQuicApplicationProtocolNegotiator(String... protocols) { + if (protocols == null) { + this.protocols = Collections.emptyList(); + } else { + this.protocols = Collections.unmodifiableList(Arrays.asList(protocols)); + } + } + + @Override + public List protocols() { + return protocols; + } + } + + private static final class QuicheQuicSslSessionContext implements QuicSslSessionContext { + private final QuicheQuicSslContext context; + + QuicheQuicSslSessionContext(QuicheQuicSslContext context) { + this.context = context; + } + + @Override + public SSLSession getSession(byte[] sessionId) { + return null; + } + + @Override + public Enumeration getIds() { + return new Enumeration() { + @Override + public boolean hasMoreElements() { + return false; + } + + @Override + public byte[] nextElement() { + throw new NoSuchElementException(); + } + }; + } + + @Override + public void setSessionTimeout(int seconds) throws IllegalArgumentException { + context.setSessionTimeout(seconds); + } + + @Override + public int getSessionTimeout() { + return (int) context.sessionTimeout(); + } + + @Override + public void setSessionCacheSize(int size) throws IllegalArgumentException { + context.setSessionCacheSize(size); + } + + @Override + public int getSessionCacheSize() { + return (int) context.sessionCacheSize(); + } + + @Override + public void setTicketKeys(SslSessionTicketKey... keys) { + context.setSessionTicketKeys(keys); + } + } + + static final class NativeSslContext extends AbstractReferenceCounted { + private final long ctx; + + NativeSslContext(long ctx) { + this.ctx = ctx; + } + + long address() { + return ctx; + } + + @Override + protected void deallocate() { + BoringSSL.SSLContext_free(ctx); + } + + @Override + public ReferenceCounted touch(Object hint) { + return this; + } + + @Override + public String toString() { + return "NativeSslContext{" + + "ctx=" + ctx + + '}'; + } + } + + private static final class BoringSSLAsyncPrivateKeyMethodAdapter implements BoringSSLPrivateKeyMethod { + private final QuicheQuicSslEngineMap engineMap; + private final BoringSSLAsyncPrivateKeyMethod privateKeyMethod; + + BoringSSLAsyncPrivateKeyMethodAdapter(QuicheQuicSslEngineMap engineMap, + BoringSSLAsyncPrivateKeyMethod privateKeyMethod) { + this.engineMap = engineMap; + this.privateKeyMethod = privateKeyMethod; + } + + @Override + public void sign(long ssl, int signatureAlgorithm, byte[] input, BiConsumer callback) { + final QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + // May be null if it was destroyed in the meantime. + callback.accept(null, null); + } else { + privateKeyMethod.sign(engine, signatureAlgorithm, input).addListener(f -> { + Throwable cause = f.cause(); + if (cause != null) { + callback.accept(null, cause); + } else { + callback.accept((byte[]) f.getNow(), null); + } + }); + } + } + + @Override + public void decrypt(long ssl, byte[] input, BiConsumer callback) { + final QuicheQuicSslEngine engine = engineMap.get(ssl); + if (engine == null) { + // May be null if it was destroyed in the meantime. + callback.accept(null, null); + } else { + privateKeyMethod.decrypt(engine, input).addListener(f -> { + Throwable cause = f.cause(); + if (cause != null) { + callback.accept(null, cause); + } else { + callback.accept((byte[]) f.getNow(), null); + } + }); + } + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngine.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngine.java new file mode 100644 index 0000000..fd68cbf --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngine.java @@ -0,0 +1,567 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.handler.ssl.ClientAuth; +import io.netty.handler.ssl.util.LazyJavaxX509Certificate; +import io.netty.handler.ssl.util.LazyX509Certificate; +import io.netty.util.NetUtil; +import io.netty.util.internal.EmptyArrays; +import io.netty.util.internal.ObjectUtil; + +import javax.net.ssl.SNIHostName; +import javax.net.ssl.SNIServerName; +import javax.net.ssl.SSLEngineResult; +import javax.net.ssl.SSLParameters; +import javax.net.ssl.SSLPeerUnverifiedException; +import javax.net.ssl.SSLSession; +import javax.net.ssl.SSLSessionBindingEvent; +import javax.net.ssl.SSLSessionBindingListener; +import javax.net.ssl.SSLSessionContext; +import java.nio.ByteBuffer; +import java.security.Principal; +import java.security.cert.Certificate; +import java.security.cert.X509Certificate; +import java.util.Collections; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.function.LongFunction; + +final class QuicheQuicSslEngine extends QuicSslEngine { + QuicheQuicSslContext ctx; + private final String peerHost; + private final int peerPort; + private final QuicheQuicSslSession session = new QuicheQuicSslSession(); + private volatile Certificate[] localCertificateChain; + private List sniHostNames; + private boolean handshakeFinished; + private String applicationProtocol; + private boolean sessionReused; + final String tlsHostName; + volatile QuicheQuicConnection connection; + + String sniHostname; + + QuicheQuicSslEngine(QuicheQuicSslContext ctx, String peerHost, int peerPort) { + this.ctx = ctx; + this.peerHost = peerHost; + this.peerPort = peerPort; + // Use SNI if peerHost was specified and a valid hostname + // See https://github.com/netty/netty/issues/4746 + if (ctx.isClient() && isValidHostNameForSNI(peerHost)) { + tlsHostName = peerHost; + sniHostNames = Collections.singletonList(new SNIHostName(tlsHostName)); + } else { + tlsHostName = null; + } + } + + long moveTo(String hostname, QuicheQuicSslContext ctx) { + // First of remove the engine from its previous QuicheQuicSslContext. + this.ctx.remove(this); + this.ctx = ctx; + long added = ctx.add(this); + sniHostname = hostname; + return added; + } + + QuicheQuicConnection createConnection(LongFunction connectionCreator) { + return ctx.createConnection(connectionCreator, this); + } + + void setLocalCertificateChain(Certificate[] localCertificateChain) { + this.localCertificateChain = localCertificateChain; + } + + /** + * Validate that the given hostname can be used in SNI extension. + */ + static boolean isValidHostNameForSNI(String hostname) { + return hostname != null && + hostname.indexOf('.') > 0 && + !hostname.endsWith(".") && + !NetUtil.isValidIpV4Address(hostname) && + !NetUtil.isValidIpV6Address(hostname); + } + + @Override + public SSLParameters getSSLParameters() { + SSLParameters parameters = super.getSSLParameters(); + parameters.setServerNames(sniHostNames); + return parameters; + } + + // These method will override the method defined by Java 8u251 and later. As we may compile with an earlier + // java8 version we don't use @Override annotations here. + public synchronized String getApplicationProtocol() { + return applicationProtocol; + } + + // These method will override the method defined by Java 8u251 and later. As we may compile with an earlier + // java8 version we don't use @Override annotations here. + public synchronized String getHandshakeApplicationProtocol() { + return applicationProtocol; + } + + @Override + public SSLEngineResult wrap(ByteBuffer[] srcs, int offset, int length, ByteBuffer dst) { + throw new UnsupportedOperationException(); + } + + @Override + public SSLEngineResult unwrap(ByteBuffer src, ByteBuffer[] dsts, int offset, int length) { + throw new UnsupportedOperationException(); + } + + @Override + public Runnable getDelegatedTask() { + return null; + } + + @Override + public void closeInbound() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isInboundDone() { + return false; + } + + @Override + public void closeOutbound() { + throw new UnsupportedOperationException(); + } + + @Override + public boolean isOutboundDone() { + return false; + } + + @Override + public String[] getSupportedCipherSuites() { + return ctx.cipherSuites().toArray(new String[0]); + } + + @Override + public String[] getEnabledCipherSuites() { + return getSupportedCipherSuites(); + } + + @Override + public void setEnabledCipherSuites(String[] suites) { + throw new UnsupportedOperationException(); + } + + @Override + public String[] getSupportedProtocols() { + // QUIC only supports TLSv1.3 + return new String[] { "TLSv1.3" }; + } + + @Override + public String[] getEnabledProtocols() { + return getSupportedProtocols(); + } + + @Override + public void setEnabledProtocols(String[] protocols) { + throw new UnsupportedOperationException(); + } + + @Override + public SSLSession getSession() { + return session; + } + + @Override + public SSLSession getHandshakeSession() { + if (handshakeFinished) { + return null; + } + return session; + } + + @Override + public void beginHandshake() { + // NOOP + } + + @Override + public SSLEngineResult.HandshakeStatus getHandshakeStatus() { + if (handshakeFinished) { + return SSLEngineResult.HandshakeStatus.NOT_HANDSHAKING; + } + return SSLEngineResult.HandshakeStatus.NEED_WRAP; + } + + @Override + public void setUseClientMode(boolean clientMode) { + if (clientMode != ctx.isClient()) { + throw new UnsupportedOperationException(); + } + } + + @Override + public boolean getUseClientMode() { + return ctx.isClient(); + } + + @Override + public void setNeedClientAuth(boolean b) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getNeedClientAuth() { + return ctx.clientAuth == ClientAuth.REQUIRE; + } + + @Override + public void setWantClientAuth(boolean b) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getWantClientAuth() { + return ctx.clientAuth == ClientAuth.OPTIONAL; + } + + @Override + public void setEnableSessionCreation(boolean flag) { + throw new UnsupportedOperationException(); + } + + @Override + public boolean getEnableSessionCreation() { + return false; + } + + synchronized void handshakeFinished(byte[] id, String cipher, String protocol, byte[] peerCertificate, + byte[][] peerCertificateChain, + long creationTime, long timeout, + byte[] applicationProtocol, boolean sessionReused) { + if (applicationProtocol == null) { + this.applicationProtocol = null; + } else { + this.applicationProtocol = new String(applicationProtocol); + } + session.handshakeFinished(id, cipher, protocol, peerCertificate, peerCertificateChain, creationTime, timeout); + this.sessionReused = sessionReused; + handshakeFinished = true; + } + + void removeSessionFromCacheIfInvalid() { + session.removeFromCacheIfInvalid(); + } + + synchronized boolean isSessionReused() { + return sessionReused; + } + + private final class QuicheQuicSslSession implements SSLSession { + private Certificate[] x509PeerCerts; + private Certificate[] peerCerts; + private String protocol; + private String cipher; + private byte[] id; + private long creationTime = -1; + private long timeout = -1; + private boolean invalid; + private long lastAccessedTime = -1; + + // lazy init for memory reasons + private Map values; + + private boolean isEmpty(Object[] arr) { + return arr == null || arr.length == 0; + } + private boolean isEmpty(byte[] arr) { + return arr == null || arr.length == 0; + } + + void handshakeFinished(byte[] id, String cipher, String protocol, byte[] peerCertificate, + byte[][] peerCertificateChain, long creationTime, long timeout) { + synchronized (QuicheQuicSslEngine.this) { + initPeerCerts(peerCertificateChain, peerCertificate); + this.id = id; + this.cipher = cipher; + this.protocol = protocol; + this.creationTime = creationTime * 1000L; + this.timeout = timeout * 1000L; + lastAccessedTime = System.currentTimeMillis(); + } + } + + void removeFromCacheIfInvalid() { + if (!isValid()) { + // Shouldn't be re-used again + removeFromCache(); + } + } + + private void removeFromCache() { + // Shouldn't be re-used again + QuicClientSessionCache cache = ctx.getSessionCache(); + if (cache != null) { + cache.removeSession(getPeerHost(), getPeerPort()); + } + } + + /** + * Init peer certificates that can be obtained via {@link #getPeerCertificateChain()} + * and {@link #getPeerCertificates()}. + */ + private void initPeerCerts(byte[][] chain, byte[] clientCert) { + // Return the full chain from the JNI layer. + if (getUseClientMode()) { + if (isEmpty(chain)) { + peerCerts = EmptyArrays.EMPTY_CERTIFICATES; + x509PeerCerts = EmptyArrays.EMPTY_JAVAX_X509_CERTIFICATES; + } else { + peerCerts = new Certificate[chain.length]; + x509PeerCerts = new X509Certificate[chain.length]; + initCerts(chain, 0); + } + } else { + // if used on the server side SSL_get_peer_cert_chain(...) will not include the remote peer + // certificate. We use SSL_get_peer_certificate to get it in this case and add it to our + // array later. + // + // See https://www.openssl.org/docs/ssl/SSL_get_peer_cert_chain.html + if (isEmpty(clientCert)) { + peerCerts = EmptyArrays.EMPTY_CERTIFICATES; + x509PeerCerts = EmptyArrays.EMPTY_JAVAX_X509_CERTIFICATES; + } else { + if (isEmpty(chain)) { + peerCerts = new Certificate[] {new LazyX509Certificate(clientCert)}; + x509PeerCerts = new X509Certificate[] {new LazyJavaxX509Certificate(clientCert)}; + } else { + peerCerts = new Certificate[chain.length + 1]; + x509PeerCerts = new X509Certificate[chain.length + 1]; + peerCerts[0] = new LazyX509Certificate(clientCert); + x509PeerCerts[0] = new LazyJavaxX509Certificate(clientCert); + initCerts(chain, 1); + } + } + } + } + + private void initCerts(byte[][] chain, int startPos) { + for (int i = 0; i < chain.length; i++) { + int certPos = startPos + i; + peerCerts[certPos] = new LazyX509Certificate(chain[i]); + x509PeerCerts[certPos] = new LazyJavaxX509Certificate(chain[i]); + } + } + + @Override + public byte[] getId() { + synchronized (QuicheQuicSslSession.this) { + if (id == null) { + return EmptyArrays.EMPTY_BYTES; + } + return id.clone(); + } + } + + @Override + public SSLSessionContext getSessionContext() { + return ctx.sessionContext(); + } + + @Override + public long getCreationTime() { + synchronized (QuicheQuicSslEngine.this) { + return creationTime; + } + } + + @Override + public long getLastAccessedTime() { + return lastAccessedTime; + } + + @Override + public void invalidate() { + boolean removeFromCache; + synchronized (this) { + removeFromCache = !invalid; + invalid = true; + } + if (removeFromCache) { + removeFromCache(); + } + } + + @Override + public boolean isValid() { + synchronized (QuicheQuicSslEngine.this) { + return !invalid && System.currentTimeMillis() - timeout < creationTime; + } + } + + @Override + public void putValue(String name, Object value) { + ObjectUtil.checkNotNull(name, "name"); + ObjectUtil.checkNotNull(value, "value"); + + final Object old; + synchronized (this) { + Map values = this.values; + if (values == null) { + // Use size of 2 to keep the memory overhead small + values = this.values = new HashMap<>(2); + } + old = values.put(name, value); + } + + if (value instanceof SSLSessionBindingListener) { + // Use newSSLSessionBindingEvent so we alway use the wrapper if needed. + ((SSLSessionBindingListener) value).valueBound(newSSLSessionBindingEvent(name)); + } + notifyUnbound(old, name); + } + + @Override + public Object getValue(String name) { + ObjectUtil.checkNotNull(name, "name"); + synchronized (this) { + if (values == null) { + return null; + } + return values.get(name); + } + } + + @Override + public void removeValue(String name) { + ObjectUtil.checkNotNull(name, "name"); + + final Object old; + synchronized (this) { + Map values = this.values; + if (values == null) { + return; + } + old = values.remove(name); + } + + notifyUnbound(old, name); + } + + @Override + public String[] getValueNames() { + synchronized (this) { + Map values = this.values; + if (values == null || values.isEmpty()) { + return EmptyArrays.EMPTY_STRINGS; + } + return values.keySet().toArray(new String[0]); + } + } + + private SSLSessionBindingEvent newSSLSessionBindingEvent(String name) { + return new SSLSessionBindingEvent(session, name); + } + + private void notifyUnbound(Object value, String name) { + if (value instanceof SSLSessionBindingListener) { + // Use newSSLSessionBindingEvent so we alway use the wrapper if needed. + ((SSLSessionBindingListener) value).valueUnbound(newSSLSessionBindingEvent(name)); + } + } + + @Override + public Certificate[] getPeerCertificates() throws SSLPeerUnverifiedException { + synchronized (QuicheQuicSslEngine.this) { + if (isEmpty(peerCerts)) { + throw new SSLPeerUnverifiedException("peer not verified"); + } + return peerCerts.clone(); + } + } + + @Override + public Certificate[] getLocalCertificates() { + Certificate[] localCerts = localCertificateChain; + if (localCerts == null) { + return null; + } + return localCerts.clone(); + } + + /** + * @deprecated use getPeerCertificates() instead + * @return UnsupportedOperationException + * @throws SSLPeerUnverifiedException + */ + @Deprecated + @Override + public javax.security.cert.X509Certificate[] getPeerCertificateChain() throws SSLPeerUnverifiedException { + // JDK 17+ may throw unsupported operation because javax.security.cert.X509Certificate is not present + throw new UnsupportedOperationException(); + } + + @Override + public Principal getPeerPrincipal() throws SSLPeerUnverifiedException { + Certificate[] peer = getPeerCertificates(); + // No need for null or length > 0 is needed as this is done in getPeerCertificates() + // already. + return ((java.security.cert.X509Certificate) peer[0]).getSubjectX500Principal(); + } + + @Override + public Principal getLocalPrincipal() { + Certificate[] local = localCertificateChain; + if (local == null || local.length == 0) { + return null; + } + return ((java.security.cert.X509Certificate) local[0]).getIssuerX500Principal(); + } + + @Override + public String getCipherSuite() { + return cipher; + } + + @Override + public String getProtocol() { + return protocol; + } + + @Override + public String getPeerHost() { + return peerHost; + } + + @Override + public int getPeerPort() { + return peerPort; + } + + @Override + public int getPacketBufferSize() { + return -1; + } + + @Override + public int getApplicationBufferSize() { + return -1; + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngineMap.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngineMap.java new file mode 100644 index 0000000..4ce18f5 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicSslEngineMap.java @@ -0,0 +1,37 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + + +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentMap; + +final class QuicheQuicSslEngineMap { + + private final ConcurrentMap engines = new ConcurrentHashMap<>(); + + QuicheQuicSslEngine get(long ssl) { + return engines.get(ssl); + } + + QuicheQuicSslEngine remove(long ssl) { + return engines.remove(ssl); + } + + void put(long ssl, QuicheQuicSslEngine engine) { + engines.put(ssl, engine); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannel.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannel.java new file mode 100644 index 0000000..fb34ea0 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannel.java @@ -0,0 +1,956 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.buffer.ByteBufAllocator; +import io.netty.buffer.Unpooled; +import io.netty.channel.Channel; +import io.netty.channel.ChannelFuture; +import io.netty.channel.ChannelId; +import io.netty.channel.ChannelMetadata; +import io.netty.channel.ChannelOutboundBuffer; +import io.netty.channel.ChannelPipeline; +import io.netty.channel.ChannelPromise; +import io.netty.channel.DefaultChannelId; +import io.netty.channel.DefaultChannelPipeline; +import io.netty.channel.EventLoop; +import io.netty.channel.PendingWriteQueue; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.VoidChannelPromise; +import io.netty.channel.socket.ChannelInputShutdownEvent; +import io.netty.channel.socket.ChannelInputShutdownReadComplete; +import io.netty.channel.socket.ChannelOutputShutdownException; +import io.netty.util.DefaultAttributeMap; +import io.netty.util.ReferenceCountUtil; +import io.netty.util.concurrent.PromiseNotifier; +import io.netty.util.internal.StringUtil; +import io.netty.util.internal.logging.InternalLogger; +import io.netty.util.internal.logging.InternalLoggerFactory; + +import java.net.SocketAddress; +import java.nio.channels.ClosedChannelException; +import java.util.concurrent.RejectedExecutionException; + +/** + * {@link QuicStreamChannel} implementation that uses quiche. + */ +final class QuicheQuicStreamChannel extends DefaultAttributeMap implements QuicStreamChannel { + private static final ChannelMetadata METADATA = new ChannelMetadata(false, 16); + private static final InternalLogger LOGGER = InternalLoggerFactory.getInstance(QuicheQuicStreamChannel.class); + private final QuicheQuicChannel parent; + private final ChannelId id; + private final ChannelPipeline pipeline; + private final QuicStreamChannelUnsafe unsafe; + private final ChannelPromise closePromise; + private final PendingWriteQueue queue; + + private final QuicStreamChannelConfig config; + private final QuicStreamAddress address; + + private boolean readable; + private boolean readPending; + private boolean inRecv; + private boolean inWriteQueued; + private boolean finReceived; + private boolean finSent; + + private volatile boolean registered; + private volatile boolean writable = true; + private volatile boolean active = true; + private volatile boolean inputShutdown; + private volatile boolean outputShutdown; + private volatile QuicStreamPriority priority; + private volatile int capacity; + + QuicheQuicStreamChannel(QuicheQuicChannel parent, long streamId) { + this.parent = parent; + this.id = DefaultChannelId.newInstance(); + unsafe = new QuicStreamChannelUnsafe(); + this.pipeline = new DefaultChannelPipeline(this) { + // TODO: add some overrides maybe ? + }; + config = new QuicheQuicStreamChannelConfig(this); + this.address = new QuicStreamAddress(streamId); + this.closePromise = newPromise(); + queue = new PendingWriteQueue(this); + // Local created unidirectional streams have the input shutdown by spec. There will never be any data for + // these to be read. + if (parent.streamType(streamId) == QuicStreamType.UNIDIRECTIONAL && parent.isStreamLocalCreated(streamId)) { + inputShutdown = true; + } + } + + @Override + public QuicStreamAddress localAddress() { + return address; + } + + @Override + public QuicStreamAddress remoteAddress() { + return address; + } + + @Override + public boolean isLocalCreated() { + return parent().isStreamLocalCreated(streamId()); + } + + @Override + public QuicStreamType type() { + return parent().streamType(streamId()); + } + + @Override + public long streamId() { + return address.streamId(); + } + + @Override + public QuicStreamPriority priority() { + return priority; + } + + @Override + public ChannelFuture updatePriority(QuicStreamPriority priority, ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + updatePriority0(priority, promise); + } else { + eventLoop().execute(() -> updatePriority0(priority, promise)); + } + return promise; + } + + private void updatePriority0(QuicStreamPriority priority, ChannelPromise promise) { + assert eventLoop().inEventLoop(); + try { + parent().streamPriority(streamId(), (byte) priority.urgency(), priority.isIncremental()); + } catch (Throwable cause) { + promise.setFailure(cause); + return; + } + this.priority = priority; + promise.setSuccess(); + } + + @Override + public boolean isInputShutdown() { + return inputShutdown; + } + + @Override + public ChannelFuture shutdownOutput(ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + shutdownOutput0(promise); + } else { + eventLoop().execute(() -> shutdownOutput0(promise)); + } + return promise; + } + + private void shutdownOutput0(ChannelPromise promise) { + assert eventLoop().inEventLoop(); + outputShutdown = true; + unsafe.writeWithoutCheckChannelState(QuicStreamFrame.EMPTY_FIN, promise); + unsafe.flush(); + } + + @Override + public ChannelFuture shutdownInput(int error, ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + shutdownInput0(error, promise); + } else { + eventLoop().execute(() -> shutdownInput0(error, promise)); + } + return promise; + } + + @Override + public ChannelFuture shutdownOutput(int error, ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + shutdownOutput0(error, promise); + } else { + eventLoop().execute(() -> shutdownOutput0(error, promise)); + } + return promise; + } + + @Override + public QuicheQuicChannel parent() { + return parent; + } + + private void shutdownInput0(int err, ChannelPromise channelPromise) { + assert eventLoop().inEventLoop(); + inputShutdown = true; + parent().streamShutdown(streamId(), true, false, err, channelPromise); + closeIfDone(); + } + + @Override + public boolean isOutputShutdown() { + return outputShutdown; + } + + private void shutdownOutput0(int error, ChannelPromise channelPromise) { + assert eventLoop().inEventLoop(); + parent().streamShutdown(streamId(), false, true, error, channelPromise); + outputShutdown = true; + closeIfDone(); + } + + @Override + public boolean isShutdown() { + return outputShutdown && inputShutdown; + } + + @Override + public ChannelFuture shutdown(ChannelPromise channelPromise) { + if (eventLoop().inEventLoop()) { + shutdown0(channelPromise); + } else { + eventLoop().execute(() -> shutdown0(channelPromise)); + } + return channelPromise; + } + + private void shutdown0(ChannelPromise promise) { + assert eventLoop().inEventLoop(); + inputShutdown = true; + outputShutdown = true; + unsafe.writeWithoutCheckChannelState(QuicStreamFrame.EMPTY_FIN, unsafe.voidPromise()); + unsafe.flush(); + parent().streamShutdown(streamId(), true, false, 0, promise); + closeIfDone(); + } + + @Override + public ChannelFuture shutdown(int error, ChannelPromise promise) { + if (eventLoop().inEventLoop()) { + shutdown0(error, promise); + } else { + eventLoop().execute(() -> shutdown0(error, promise)); + } + return promise; + } + + private void shutdown0(int error, ChannelPromise channelPromise) { + assert eventLoop().inEventLoop(); + inputShutdown = true; + outputShutdown = true; + parent().streamShutdown(streamId(), true, true, error, channelPromise); + closeIfDone(); + } + + private void sendFinIfNeeded() throws Exception { + if (!finSent) { + finSent = true; + parent().streamSendFin(streamId()); + } + } + + private void closeIfDone() { + if (finSent && (finReceived || type() == QuicStreamType.UNIDIRECTIONAL && isLocalCreated())) { + unsafe().close(unsafe().voidPromise()); + } + } + + private void removeStreamFromParent() { + if (!active && finReceived) { + parent().streamClosed(streamId()); + inputShutdown = true; + outputShutdown = true; + } + } + + @Override + public QuicStreamChannel flush() { + pipeline.flush(); + return this; + } + + @Override + public QuicStreamChannel read() { + pipeline.read(); + return this; + } + + @Override + public QuicStreamChannelConfig config() { + return config; + } + + @Override + public boolean isOpen() { + return active; + } + + @Override + public boolean isActive() { + return isOpen(); + } + + @Override + public ChannelMetadata metadata() { + return METADATA; + } + + @Override + public ChannelId id() { + return id; + } + + @Override + public EventLoop eventLoop() { + return parent.eventLoop(); + } + + @Override + public boolean isRegistered() { + return registered; + } + + @Override + public ChannelFuture closeFuture() { + return closePromise; + } + + @Override + public boolean isWritable() { + return writable; + } + + @Override + public long bytesBeforeUnwritable() { + // Capacity might be negative if the stream was closed. + return Math.max(capacity, 0); + } + + @Override + public long bytesBeforeWritable() { + if (writable) { + return 0; + } + // Just return something positive for now + return 8; + } + + @Override + public Unsafe unsafe() { + return unsafe; + } + + @Override + public ChannelPipeline pipeline() { + return pipeline; + } + + @Override + public ByteBufAllocator alloc() { + return config.getAllocator(); + } + + @Override + public int compareTo(Channel o) { + return id.compareTo(o.id()); + } + + /** + * Returns the ID of this channel. + */ + @Override + public int hashCode() { + return id.hashCode(); + } + + /** + * Returns {@code true} if and only if the specified object is identical + * with this channel (i.e: {@code this == o}). + */ + @Override + public boolean equals(Object o) { + return this == o; + } + + @Override + public String toString() { + return "[id: 0x" + id.asShortText() + ", " + address + "]"; + } + + /** + * Stream is writable. + */ + boolean writable(@SuppressWarnings("unused") int capacity) { + assert eventLoop().inEventLoop(); + this.capacity = capacity; + boolean mayNeedWrite = ((QuicStreamChannelUnsafe) unsafe()).writeQueued(); + // we need to re-read this.capacity as writeQueued() may update the capacity. + updateWritabilityIfNeeded(this.capacity > 0); + return mayNeedWrite; + } + + private void updateWritabilityIfNeeded(boolean newWritable) { + if (writable != newWritable) { + writable = newWritable; + pipeline.fireChannelWritabilityChanged(); + } + } + + /** + * Stream is readable. + */ + void readable() { + assert eventLoop().inEventLoop(); + // Mark as readable and if a read is pending execute it. + readable = true; + if (readPending) { + ((QuicStreamChannelUnsafe) unsafe()).recv(); + } + } + + void forceClose() { + assert eventLoop().inEventLoop(); + // Set received to true to ensure we will remove it from the internal map once we send the fin. + finSent = true; + unsafe().close(unsafe().voidPromise()); + } + + private final class QuicStreamChannelUnsafe implements Unsafe { + private RecvByteBufAllocator.Handle recvHandle; + + private final ChannelPromise voidPromise = new VoidChannelPromise( + QuicheQuicStreamChannel.this, false); + @Override + public void connect(SocketAddress remote, SocketAddress local, ChannelPromise promise) { + assert eventLoop().inEventLoop(); + promise.setFailure(new UnsupportedOperationException()); + } + + @SuppressWarnings("deprecation") + @Override + public RecvByteBufAllocator.Handle recvBufAllocHandle() { + if (recvHandle == null) { + recvHandle = config.getRecvByteBufAllocator().newHandle(); + } + return recvHandle; + } + + @Override + public SocketAddress localAddress() { + return address; + } + + @Override + public SocketAddress remoteAddress() { + return address; + } + + @Override + public void register(EventLoop eventLoop, ChannelPromise promise) { + assert eventLoop.inEventLoop(); + if (registered) { + promise.setFailure(new IllegalStateException()); + return; + } + if (eventLoop != parent.eventLoop()) { + promise.setFailure(new IllegalArgumentException()); + return; + } + registered = true; + promise.setSuccess(); + pipeline.fireChannelRegistered(); + pipeline.fireChannelActive(); + } + + @Override + public void bind(SocketAddress localAddress, ChannelPromise promise) { + assert eventLoop().inEventLoop(); + promise.setFailure(new UnsupportedOperationException()); + } + + @Override + public void disconnect(ChannelPromise promise) { + assert eventLoop().inEventLoop(); + close(promise); + } + + @Override + public void close(ChannelPromise promise) { + assert eventLoop().inEventLoop(); + if (!active || closePromise.isDone()) { + if (promise.isVoid()) { + return; + } + closePromise.addListener(new PromiseNotifier<>(promise)); + return; + } + active = false; + try { + // Close the channel and fail the queued messages in all cases. + sendFinIfNeeded(); + } catch (Exception ignore) { + // Just ignore + } finally { + if (!queue.isEmpty()) { + // Only fail if the queue is non-empty. + queue.removeAndFailAll(new ClosedChannelException()); + } + + promise.trySuccess(); + closePromise.trySuccess(); + if (type() == QuicStreamType.UNIDIRECTIONAL && isLocalCreated()) { + inputShutdown = true; + outputShutdown = true; + // If its an unidirectional stream and was created locally it is safe to close the stream now as + // we will never receive data from the other side. + parent().streamClosed(streamId()); + } else { + removeStreamFromParent(); + } + } + if (inWriteQueued) { + invokeLater(() -> deregister(voidPromise(), true)); + } else { + deregister(voidPromise(), true); + } + } + + private void deregister(final ChannelPromise promise, final boolean fireChannelInactive) { + assert eventLoop().inEventLoop(); + if (!promise.setUncancellable()) { + return; + } + + if (!registered) { + promise.trySuccess(); + return; + } + + // As a user may call deregister() from within any method while doing processing in the ChannelPipeline, + // we need to ensure we do the actual deregister operation later. This is needed as for example, + // we may be in the ByteToMessageDecoder.callDecode(...) method and so still try to do processing in + // the old EventLoop while the user already registered the Channel to a new EventLoop. Without delay, + // the deregister operation this could lead to have a handler invoked by different EventLoop and so + // threads. + // + // See: + // https://github.com/netty/netty/issues/4435 + invokeLater(() -> { + if (fireChannelInactive) { + pipeline.fireChannelInactive(); + } + // Some transports like local and AIO does not allow the deregistration of + // an open channel. Their doDeregister() calls close(). Consequently, + // close() calls deregister() again - no need to fire channelUnregistered, so check + // if it was registered. + if (registered) { + registered = false; + pipeline.fireChannelUnregistered(); + } + promise.setSuccess(); + }); + } + + private void invokeLater(Runnable task) { + try { + // This method is used by outbound operation implementations to trigger an inbound event later. + // They do not trigger an inbound event immediately because an outbound operation might have been + // triggered by another inbound event handler method. If fired immediately, the call stack + // will look like this for example: + // + // handlerA.inboundBufferUpdated() - (1) an inbound handler method closes a connection. + // -> handlerA.ctx.close() + // -> channel.unsafe.close() + // -> handlerA.channelInactive() - (2) another inbound handler method called while in (1) yet + // + // which means the execution of two inbound handler methods of the same handler overlap undesirably. + eventLoop().execute(task); + } catch (RejectedExecutionException e) { + LOGGER.warn("Can't invoke task later as EventLoop rejected it", e); + } + } + + @Override + public void closeForcibly() { + assert eventLoop().inEventLoop(); + close(unsafe().voidPromise()); + } + + @Override + public void deregister(ChannelPromise promise) { + assert eventLoop().inEventLoop(); + deregister(promise, false); + } + + @Override + public void beginRead() { + assert eventLoop().inEventLoop(); + readPending = true; + if (readable) { + ((QuicStreamChannelUnsafe) unsafe()).recv(); + + // As the stream was readable, and we called recv() ourselves we also need to call + // connectionSendAndFlush(). This is needed as recv() might consume data and so a window update + // frame might be produced. If we miss to call connectionSendAndFlush() we might never send the update + // to the remote peer and so the remote peer might never attempt to send more data. + // See also https://docs.rs/quiche/latest/quiche/struct.Connection.html#method.send. + parent().connectionSendAndFlush(); + } + } + + private void closeIfNeeded(boolean wasFinSent) { + // Let's check if we should close the channel now. + // If it's a unidirectional channel we can close it as there will be no fin that we can read + // from the remote peer. If its an bidirectional channel we should only close the channel if we + // also received the fin from the remote peer. + if (!wasFinSent && QuicheQuicStreamChannel.this.finSent + && (type() == QuicStreamType.UNIDIRECTIONAL || finReceived)) { + // close the channel now + close(voidPromise()); + } + } + + boolean writeQueued() { + assert eventLoop().inEventLoop(); + boolean wasFinSent = QuicheQuicStreamChannel.this.finSent; + inWriteQueued = true; + try { + if (queue.isEmpty()) { + return false; + } + boolean written = false; + for (;;) { + Object msg = queue.current(); + if (msg == null) { + break; + } + try { + if (!write0(msg)) { + return written; + } + } catch (Exception e) { + if (e instanceof QuicException && ( + (QuicException) e).error() == QuicError.STREAM_STOPPED) { + // Once its signaled that the stream is stopped we can just fail everything. + queue.removeAndFailAll(e); + forceClose(); + break; + } + queue.remove().setFailure(e); + continue; + } + queue.remove().setSuccess(); + written = true; + } + updateWritabilityIfNeeded(true); + return written; + } finally { + closeIfNeeded(wasFinSent); + inWriteQueued = false; + } + } + + @Override + public void write(Object msg, ChannelPromise promise) { + assert eventLoop().inEventLoop(); + + // Check first if the Channel is in a state in which it will accept writes, if not fail everything + // with the right exception + if (!isOpen()) { + queueAndFailAll(msg, promise, new ClosedChannelException()); + } else if (finSent) { + queueAndFailAll(msg, promise, new ChannelOutputShutdownException("Fin was sent already")); + } else { + writeWithoutCheckChannelState(msg, promise); + } + } + + private void queueAndFailAll(Object msg, ChannelPromise promise, Throwable cause) { + queue.add(msg, promise); + queue.removeAndFailAll(cause); + } + + void writeWithoutCheckChannelState(Object msg, ChannelPromise promise) { + if (msg instanceof ByteBuf) { + ByteBuf buffer = (ByteBuf) msg; + if (!buffer.isDirect()) { + ByteBuf tmpBuffer = alloc().directBuffer(buffer.readableBytes()); + tmpBuffer.writeBytes(buffer, buffer.readerIndex(), buffer.readableBytes()); + buffer.release(); + msg = tmpBuffer; + } + } else if (msg instanceof QuicStreamFrame) { + QuicStreamFrame frame = (QuicStreamFrame) msg; + ByteBuf buffer = frame.content(); + if (!buffer.isDirect()) { + ByteBuf tmpBuffer = alloc().directBuffer(buffer.readableBytes()); + tmpBuffer.writeBytes(buffer, buffer.readerIndex(), buffer.readableBytes()); + buffer.release(); + msg = frame.replace(tmpBuffer); + } + } else { + ReferenceCountUtil.release(msg); + promise.setFailure(new UnsupportedOperationException( + "unsupported message type: " + StringUtil.simpleClassName(msg))); + return; + } + + boolean wasFinSent = QuicheQuicStreamChannel.this.finSent; + boolean mayNeedWritabilityUpdate = false; + try { + if (write0(msg)) { + ReferenceCountUtil.release(msg); + promise.setSuccess(); + mayNeedWritabilityUpdate = capacity == 0; + } else { + queue.add(msg, promise); + mayNeedWritabilityUpdate = true; + } + } catch (Exception e) { + ReferenceCountUtil.release(msg); + promise.setFailure(e); + mayNeedWritabilityUpdate = capacity == 0; + } finally { + if (mayNeedWritabilityUpdate) { + updateWritabilityIfNeeded(false); + } + closeIfNeeded(wasFinSent); + } + } + + private boolean write0(Object msg) throws Exception { + if (type() == QuicStreamType.UNIDIRECTIONAL && !isLocalCreated()) { + throw new UnsupportedOperationException( + "Writes on non-local created streams that are unidirectional are not supported"); + } + if (finSent) { + throw new ChannelOutputShutdownException("Fin was sent already"); + } + + final boolean fin; + ByteBuf buffer; + if (msg instanceof ByteBuf) { + fin = false; + buffer = (ByteBuf) msg; + } else { + QuicStreamFrame frame = (QuicStreamFrame) msg; + fin = frame.hasFin(); + buffer = frame.content(); + } + + boolean readable = buffer.isReadable(); + if (!fin && !readable) { + return true; + } + + boolean sendSomething = false; + try { + do { + int res = parent().streamSend(streamId(), buffer, fin); + + // Update the capacity as well. + int cap = parent.streamCapacity(streamId()); + if (cap >= 0) { + capacity = cap; + } + if (Quiche.throwIfError(res) || (readable && res == 0)) { + return false; + } + sendSomething = true; + buffer.skipBytes(res); + } while (buffer.isReadable()); + + if (fin) { + finSent = true; + outputShutdown = true; + } + return true; + } finally { + // As we called quiche_conn_stream_send(...) we need to ensure we will call quiche_conn_send(...) either + // now or we will do so once we see the channelReadComplete event. + // + // See https://docs.rs/quiche/0.6.0/quiche/struct.Connection.html#method.send + if (sendSomething) { + parent.connectionSendAndFlush(); + } + } + } + + @Override + public void flush() { + assert eventLoop().inEventLoop(); + // NOOP. + } + + @Override + public ChannelPromise voidPromise() { + assert eventLoop().inEventLoop(); + return voidPromise; + } + + @Override + public ChannelOutboundBuffer outboundBuffer() { + return null; + } + + private void closeOnRead(ChannelPipeline pipeline, boolean readFrames) { + if (readFrames && finReceived && finSent) { + close(voidPromise()); + } else if (config.isAllowHalfClosure()) { + if (finReceived) { + // If we receive a fin there will be no more data to read so we need to fire both events + // to be consistent with other transports. + pipeline.fireUserEventTriggered(ChannelInputShutdownEvent.INSTANCE); + pipeline.fireUserEventTriggered(ChannelInputShutdownReadComplete.INSTANCE); + if (finSent) { + // This was an unidirectional stream which means as soon as we received FIN and sent a FIN + // we need close the connection. + close(voidPromise()); + } + } + } else { + // This was an unidirectional stream which means as soon as we received FIN we need + // close the connection. + close(voidPromise()); + } + } + + private void handleReadException(ChannelPipeline pipeline, ByteBuf byteBuf, Throwable cause, + @SuppressWarnings("deprecation") RecvByteBufAllocator.Handle allocHandle, + boolean readFrames) { + if (byteBuf != null) { + if (byteBuf.isReadable()) { + pipeline.fireChannelRead(byteBuf); + } else { + byteBuf.release(); + } + } + + readComplete(allocHandle, pipeline); + pipeline.fireExceptionCaught(cause); + if (finReceived) { + closeOnRead(pipeline, readFrames); + } + } + + void recv() { + assert eventLoop().inEventLoop(); + if (inRecv) { + // As the use may call read() we need to guard against re-entrancy here as otherwise it could + // be possible that we re-enter this method while still processing it. + return; + } + + inRecv = true; + try { + ChannelPipeline pipeline = pipeline(); + QuicheQuicStreamChannelConfig config = (QuicheQuicStreamChannelConfig) config(); + // Directly access the DirectIoByteBufAllocator as we need an direct buffer to read into in all cases + // even if there is no Unsafe present and the direct buffer is not pooled. + DirectIoByteBufAllocator allocator = config.allocator; + @SuppressWarnings("deprecation") + RecvByteBufAllocator.Handle allocHandle = this.recvBufAllocHandle(); + boolean readFrames = config.isReadFrames(); + + // We should loop as long as a read() was requested and there is anything left to read, which means the + // stream was marked as readable before. + while (active && readPending && readable) { + allocHandle.reset(config); + ByteBuf byteBuf = null; + QuicheQuicChannel parent = parent(); + // It's possible that the stream was marked as finish while we iterated over the readable streams + // or while we did have auto read disabled. If so we need to ensure we not try to read from it as it + // would produce an error. + boolean readCompleteNeeded = false; + boolean continueReading = true; + try { + while (!finReceived && continueReading) { + byteBuf = allocHandle.allocate(allocator); + allocHandle.attemptedBytesRead(byteBuf.writableBytes()); + switch (parent.streamRecv(streamId(), byteBuf)) { + case DONE: + // Nothing left to read; + readable = false; + break; + case FIN: + // If we received a FIN we also should mark the channel as non readable as + // there is nothing left to read really. + readable = false; + finReceived = true; + inputShutdown = true; + break; + case OK: + break; + default: + throw new Error(); + } + allocHandle.lastBytesRead(byteBuf.readableBytes()); + if (allocHandle.lastBytesRead() <= 0) { + byteBuf.release(); + if (finReceived && readFrames) { + // If we read QuicStreamFrames we should fire an frame through the pipeline + // with an empty buffer but the fin flag set to true. + byteBuf = Unpooled.EMPTY_BUFFER; + } else { + byteBuf = null; + break; + } + } + // We did read one message. + allocHandle.incMessagesRead(1); + readCompleteNeeded = true; + + // It's important that we reset this to false before we call fireChannelRead(...) + // as the user may request another read() from channelRead(...) callback. + readPending = false; + + if (readFrames) { + pipeline.fireChannelRead(new DefaultQuicStreamFrame(byteBuf, finReceived)); + } else { + pipeline.fireChannelRead(byteBuf); + } + byteBuf = null; + continueReading = allocHandle.continueReading(); + } + + if (readCompleteNeeded) { + readComplete(allocHandle, pipeline); + } + if (finReceived) { + readable = false; + closeOnRead(pipeline, readFrames); + } + } catch (Throwable cause) { + readable = false; + handleReadException(pipeline, byteBuf, cause, allocHandle, readFrames); + } + } + } finally { + // About to leave the method lets reset so we can enter it again. + inRecv = false; + removeStreamFromParent(); + } + } + + // Read was complete and something was read, so we we need to reset the readPending flags, the allocHandle + // and call fireChannelReadComplete(). The user may schedule another read now. + private void readComplete(@SuppressWarnings("deprecation") RecvByteBufAllocator.Handle allocHandle, + ChannelPipeline pipeline) { + allocHandle.readComplete(); + pipeline.fireChannelReadComplete(); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannelConfig.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannelConfig.java new file mode 100644 index 0000000..917a730 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicStreamChannelConfig.java @@ -0,0 +1,175 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBufAllocator; +import io.netty.channel.ChannelOption; +import io.netty.channel.DefaultChannelConfig; +import io.netty.channel.MessageSizeEstimator; +import io.netty.channel.RecvByteBufAllocator; +import io.netty.channel.WriteBufferWaterMark; + +import java.util.Map; + +final class QuicheQuicStreamChannelConfig extends DefaultChannelConfig implements QuicStreamChannelConfig { + // We should use half-closure sementatics by default as this is what QUIC does by default. + // If you receive a FIN you should still keep the stream open until you write a FIN as well. + private volatile boolean allowHalfClosure = true; + private volatile boolean readFrames; + volatile DirectIoByteBufAllocator allocator; + + QuicheQuicStreamChannelConfig(QuicStreamChannel channel) { + super(channel); + allocator = new DirectIoByteBufAllocator(super.getAllocator()); + } + + @Override + public Map, Object> getOptions() { + if (isHalfClosureSupported()) { + return getOptions(super.getOptions(), ChannelOption.ALLOW_HALF_CLOSURE, QuicChannelOption.READ_FRAMES); + } + return super.getOptions(); + } + + @SuppressWarnings("unchecked") + @Override + public T getOption(ChannelOption option) { + if (option == ChannelOption.ALLOW_HALF_CLOSURE) { + return (T) Boolean.valueOf(isAllowHalfClosure()); + } + if (option == QuicChannelOption.READ_FRAMES) { + return (T) Boolean.valueOf(isReadFrames()); + } + return super.getOption(option); + } + + @Override + public boolean setOption(ChannelOption option, T value) { + validate(option, value); + + if (option == ChannelOption.ALLOW_HALF_CLOSURE) { + if (isHalfClosureSupported()) { + setAllowHalfClosure((Boolean) value); + return true; + } + return false; + } + if (option == QuicChannelOption.READ_FRAMES) { + setReadFrames((Boolean) value); + } + return super.setOption(option, value); + } + + @Override + public QuicStreamChannelConfig setReadFrames(boolean readFrames) { + this.readFrames = readFrames; + return this; + } + + @Override + public boolean isReadFrames() { + return readFrames; + } + + @Override + public QuicStreamChannelConfig setConnectTimeoutMillis(int connectTimeoutMillis) { + super.setConnectTimeoutMillis(connectTimeoutMillis); + return this; + } + + @Override + public QuicStreamChannelConfig setMaxMessagesPerRead(int maxMessagesPerRead) { + super.setMaxMessagesPerRead(maxMessagesPerRead); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteSpinCount(int writeSpinCount) { + super.setWriteSpinCount(writeSpinCount); + return this; + } + + @Override + public QuicStreamChannelConfig setAllocator(ByteBufAllocator allocator) { + this.allocator = new DirectIoByteBufAllocator(allocator); + return this; + } + + @Override + public QuicStreamChannelConfig setRecvByteBufAllocator(RecvByteBufAllocator allocator) { + super.setRecvByteBufAllocator(allocator); + return this; + } + + @Override + public QuicStreamChannelConfig setAutoRead(boolean autoRead) { + super.setAutoRead(autoRead); + return this; + } + + @Override + public QuicStreamChannelConfig setAutoClose(boolean autoClose) { + super.setAutoClose(autoClose); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferHighWaterMark(int writeBufferHighWaterMark) { + super.setWriteBufferHighWaterMark(writeBufferHighWaterMark); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferLowWaterMark(int writeBufferLowWaterMark) { + super.setWriteBufferLowWaterMark(writeBufferLowWaterMark); + return this; + } + + @Override + public QuicStreamChannelConfig setWriteBufferWaterMark(WriteBufferWaterMark writeBufferWaterMark) { + super.setWriteBufferWaterMark(writeBufferWaterMark); + return this; + } + + @Override + public QuicStreamChannelConfig setMessageSizeEstimator(MessageSizeEstimator estimator) { + super.setMessageSizeEstimator(estimator); + return this; + } + + @Override + public QuicStreamChannelConfig setAllowHalfClosure(boolean allowHalfClosure) { + if (!isHalfClosureSupported()) { + throw new UnsupportedOperationException("Undirectional streams don't support half-closure"); + } + this.allowHalfClosure = allowHalfClosure; + return this; + } + + @Override + public ByteBufAllocator getAllocator() { + return allocator.wrapped(); + } + + @Override + public boolean isAllowHalfClosure() { + return allowHalfClosure; + } + + private boolean isHalfClosureSupported() { + return ((QuicStreamChannel) channel).type() == QuicStreamType.BIDIRECTIONAL; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicTransportParameters.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicTransportParameters.java new file mode 100644 index 0000000..2546db6 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheQuicTransportParameters.java @@ -0,0 +1,110 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.StringUtil; + +final class QuicheQuicTransportParameters implements QuicTransportParameters { + private final long[] values; + + QuicheQuicTransportParameters(long[] values) { + this.values = values; + } + + @Override + public long maxIdleTimeout() { + return values[0]; + } + + @Override + public long maxUdpPayloadSize() { + return values[1]; + } + + @Override + public long initialMaxData() { + return values[2]; + } + + @Override + public long initialMaxStreamDataBidiLocal() { + return values[3]; + } + + @Override + public long initialMaxStreamDataBidiRemote() { + return values[4]; + } + + @Override + public long initialMaxStreamDataUni() { + return values[5]; + } + + @Override + public long initialMaxStreamsBidi() { + return values[6]; + } + + @Override + public long initialMaxStreamsUni() { + return values[7]; + } + + @Override + public long ackDelayExponent() { + return values[8]; + } + + @Override + public long maxAckDelay() { + return values[9]; + } + + @Override + public boolean disableActiveMigration() { + return values[10] == 1; + } + + @Override + public long activeConnIdLimit() { + return values[11]; + } + + @Override + public long maxDatagramFrameSize() { + return values[12]; + } + + @Override + public String toString() { + return StringUtil.simpleClassName(this) + "[" + + "maxIdleTimeout=" + maxIdleTimeout() + + ", maxUdpPayloadSize=" + maxUdpPayloadSize() + + ", initialMaxData=" + initialMaxData() + + ", initialMaxStreamDataBidiLocal=" + initialMaxStreamDataBidiLocal() + + ", initialMaxStreamDataBidiRemote=" + initialMaxStreamDataBidiRemote() + + ", initialMaxStreamDataUni=" + initialMaxStreamDataUni() + + ", initialMaxStreamsBidi=" + initialMaxStreamsBidi() + + ", initialMaxStreamsUni=" + initialMaxStreamsUni() + + ", ackDelayExponent=" + ackDelayExponent() + + ", maxAckDelay=" + maxAckDelay() + + ", disableActiveMigration=" + disableActiveMigration() + + ", activeConnIdLimit=" + activeConnIdLimit() + + ", maxDatagramFrameSize=" + maxDatagramFrameSize() + + "]"; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheRecvInfo.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheRecvInfo.java new file mode 100644 index 0000000..40d7935 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheRecvInfo.java @@ -0,0 +1,85 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; + + +/** + * Utility class to handle access to {@code quiche_recv_info}. + */ +final class QuicheRecvInfo { + + private QuicheRecvInfo() { } + + /** + * Set the {@link InetSocketAddress} into the {@code quiche_recv_info} struct. + * + *
+     * typedef struct {
+     *     struct sockaddr *from;
+     *     socklen_t from_len;
+     *     struct sockaddr *to;
+     *     socklen_t to_len;
+     * } quiche_recv_info;
+     * 
+ * + * @param memory the memory of {@code quiche_recv_info}. + * @param from the {@link InetSocketAddress} to write into {@code quiche_recv_info}. + * @param to the {@link InetSocketAddress} to write into {@code quiche_recv_info}. + */ + static void setRecvInfo(ByteBuffer memory, InetSocketAddress from, InetSocketAddress to) { + int position = memory.position(); + try { + setAddress(memory, Quiche.SIZEOF_QUICHE_RECV_INFO, Quiche.QUICHE_RECV_INFO_OFFSETOF_FROM, Quiche.QUICHE_RECV_INFO_OFFSETOF_FROM_LEN, from); + setAddress(memory, Quiche.SIZEOF_QUICHE_RECV_INFO + Quiche.SIZEOF_SOCKADDR_STORAGE, + Quiche.QUICHE_RECV_INFO_OFFSETOF_TO, Quiche.QUICHE_RECV_INFO_OFFSETOF_TO_LEN, to); + } finally { + memory.position(position); + } + } + + private static void setAddress(ByteBuffer memory, int socketAddressOffset, int addrOffset, int lenOffset, InetSocketAddress address) { + int position = memory.position(); + try { + int sockaddrPosition = position +socketAddressOffset; + memory.position(sockaddrPosition); + long sockaddrMemoryAddress = Quiche.memoryAddressWithPosition(memory); + int len = SockaddrIn.setAddress(memory, address); + if (Quiche.SIZEOF_SIZE_T == 4) { + memory.putInt(position + addrOffset, (int) sockaddrMemoryAddress); + } else { + memory.putLong(position + addrOffset, sockaddrMemoryAddress); + } + Quiche.setPrimitiveValue(memory, position + lenOffset, Quiche.SIZEOF_SOCKLEN_T, len); + } finally { + memory.position(position); + } + } + + /** + * Returns {@code true} if both {@link ByteBuffer}s have the same {@code sock_addr} stored. + * + * @param memory the first {@link ByteBuffer} which holds a {@code quiche_recv_info}. + * @param memory2 the second {@link ByteBuffer} which holds a {@code quiche_recv_info}. + * @return {@code true} if both {@link ByteBuffer}s have the same {@code sock_addr} stored, {@code false} + * otherwise. + */ + static boolean isSameAddress(ByteBuffer memory, ByteBuffer memory2) { + return Quiche.isSameAddress(memory, memory2, Quiche.SIZEOF_QUICHE_RECV_INFO); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheSendInfo.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheSendInfo.java new file mode 100644 index 0000000..b371680 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/QuicheSendInfo.java @@ -0,0 +1,167 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.concurrent.FastThreadLocal; + +import java.net.InetSocketAddress; +import java.nio.ByteBuffer; +import java.util.concurrent.TimeUnit; + +/** + * Utility class to handle access to {@code quiche_send_info}. + */ +final class QuicheSendInfo { + + private static final FastThreadLocal IPV4_ARRAYS = new FastThreadLocal() { + @Override + protected byte[] initialValue() { + return new byte[SockaddrIn.IPV4_ADDRESS_LENGTH]; + } + }; + + private static final FastThreadLocal IPV6_ARRAYS = new FastThreadLocal() { + @Override + protected byte[] initialValue() { + return new byte[SockaddrIn.IPV6_ADDRESS_LENGTH]; + } + }; + + private static final byte[] TIMESPEC_ZEROOUT = new byte[Quiche.SIZEOF_TIMESPEC]; + + private QuicheSendInfo() { } + + /** + * Get the {@link InetSocketAddress} out of the {@code quiche_send_info} struct. + * + * @param memory the memory of {@code quiche_send_info}. + * @return the address that was read. + */ + static InetSocketAddress getToAddress(ByteBuffer memory) { + return getAddress(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_TO_LEN, Quiche.QUICHE_SEND_INFO_OFFSETOF_TO); + } + + static InetSocketAddress getFromAddress(ByteBuffer memory) { + return getAddress(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_FROM_LEN, Quiche.QUICHE_SEND_INFO_OFFSETOF_FROM); + } + + private static InetSocketAddress getAddress(ByteBuffer memory, int lenOffset, int addressOffset) { + int position = memory.position(); + try { + long len = getLen(memory, position + lenOffset); + + memory.position(position + addressOffset); + + if (len == Quiche.SIZEOF_SOCKADDR_IN) { + return SockaddrIn.getIPv4(memory, IPV4_ARRAYS.get()); + } + assert len == Quiche.SIZEOF_SOCKADDR_IN6; + return SockaddrIn.getIPv6(memory, IPV6_ARRAYS.get(), IPV4_ARRAYS.get()); + } finally { + memory.position(position); + } + } + + private static long getLen(ByteBuffer memory, int index) { + return Quiche.getPrimitiveValue(memory, index, Quiche.SIZEOF_SOCKLEN_T); + } + + /** + * Set the {@link InetSocketAddress} into the {@code quiche_send_info} struct. + *
+     *
+     * typedef struct {
+     *     // The local address the packet should be sent from.
+     *     struct sockaddr_storage from;
+     *     socklen_t from_len;
+     *
+     *     // The address the packet should be sent to.
+     *     struct sockaddr_storage to;
+     *     socklen_t to_len;
+     *
+     *     // The time to send the packet out.
+     *     struct timespec at;
+     * } quiche_send_info;
+     * 
+ * + * @param memory the memory of {@code quiche_send_info}. + * @param from the {@link InetSocketAddress} to write into {@code quiche_send_info}. + * @param to the {@link InetSocketAddress} to write into {@code quiche_send_info}. + */ + static void setSendInfo(ByteBuffer memory, InetSocketAddress from, InetSocketAddress to) { + int position = memory.position(); + try { + setAddress(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_FROM, Quiche.QUICHE_SEND_INFO_OFFSETOF_FROM_LEN, from); + setAddress(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_TO, Quiche.QUICHE_SEND_INFO_OFFSETOF_TO_LEN, to); + // Zero out the timespec. + memory.position(position + Quiche.QUICHE_SEND_INFO_OFFSETOF_AT); + memory.put(TIMESPEC_ZEROOUT); + } finally { + memory.position(position); + } + } + + private static void setAddress(ByteBuffer memory, int addrOffset, int lenOffset, InetSocketAddress addr) { + int position = memory.position(); + try { + memory.position(position + addrOffset); + int len = SockaddrIn.setAddress(memory, addr); + Quiche.setPrimitiveValue(memory, position + lenOffset, Quiche.SIZEOF_SOCKLEN_T, len); + } finally { + memory.position(position); + } + } + + /** + * Get the {@code timespec} from the {@code quiche_send_info} struct in nanos. + *
+     *
+     * typedef struct {
+     *     // The local address the packet should be sent from.
+     *     struct sockaddr_storage from;
+     *     socklen_t from_len;
+     *
+     *     // The address the packet should be sent to.
+     *     struct sockaddr_storage to;
+     *     socklen_t to_len;
+     *
+     *     // The time to send the packet out.
+     *     struct timespec at;
+     * } quiche_send_info;
+     * 
+ * + * @param memory the memory of {@code quiche_send_info}. + */ + static long getAtNanos(ByteBuffer memory) { + long sec = Quiche.getPrimitiveValue(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_AT + + Quiche.TIMESPEC_OFFSETOF_TV_SEC, Quiche.SIZEOF_TIME_T); + long nsec = Quiche.getPrimitiveValue(memory, Quiche.QUICHE_SEND_INFO_OFFSETOF_AT + + Quiche.TIMESPEC_OFFSETOF_TV_SEC, Quiche.SIZEOF_LONG); + return TimeUnit.SECONDS.toNanos(sec) + nsec; + } + + /** + * Returns {@code true} if both {@link ByteBuffer}s have the same {@code sockaddr_storage} stored. + * + * @param memory the first {@link ByteBuffer} which holds a {@code quiche_send_info}. + * @param memory2 the second {@link ByteBuffer} which holds a {@code quiche_send_info}. + * @return {@code true} if both {@link ByteBuffer}s have the same {@code sockaddr_storage} stored, + * {@code false} otherwise. + */ + static boolean isSameAddress(ByteBuffer memory, ByteBuffer memory2) { + return Quiche.isSameAddress(memory, memory2, Quiche.QUICHE_SEND_INFO_OFFSETOF_TO); + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SecureRandomQuicConnectionIdGenerator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SecureRandomQuicConnectionIdGenerator.java new file mode 100644 index 0000000..622d798 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SecureRandomQuicConnectionIdGenerator.java @@ -0,0 +1,53 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.ObjectUtil; + +import java.nio.ByteBuffer; +import java.security.SecureRandom; + +final class SecureRandomQuicConnectionIdGenerator implements QuicConnectionIdGenerator { + private static final SecureRandom RANDOM = new SecureRandom(); + + static final QuicConnectionIdGenerator INSTANCE = new SecureRandomQuicConnectionIdGenerator(); + + private SecureRandomQuicConnectionIdGenerator() { + } + + @Override + public ByteBuffer newId(int length) { + ObjectUtil.checkInRange(length, 0, maxConnectionIdLength(), "length"); + byte[] bytes = new byte[length]; + RANDOM.nextBytes(bytes); + return ByteBuffer.wrap(bytes); + } + + @Override + public ByteBuffer newId(ByteBuffer buffer, int length) { + return newId(length); + } + + @Override + public int maxConnectionIdLength() { + return Quiche.QUICHE_MAX_CONN_ID_LEN; + } + + @Override + public boolean isIdempotent() { + return false; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SegmentedDatagramPacketAllocator.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SegmentedDatagramPacketAllocator.java new file mode 100644 index 0000000..0784bf7 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SegmentedDatagramPacketAllocator.java @@ -0,0 +1,63 @@ +/* + * Copyright 2021 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.buffer.ByteBuf; +import io.netty.channel.socket.DatagramPacket; + +import java.net.InetSocketAddress; + +/** + * Used to allocate datagram packets that use UDP_SEGMENT (GSO). + */ +@FunctionalInterface +public interface SegmentedDatagramPacketAllocator { + + /** + * {@link SegmentedDatagramPacketAllocator} which should be used if no UDP_SEGMENT is supported and used. + */ + SegmentedDatagramPacketAllocator NONE = new SegmentedDatagramPacketAllocator() { + @Override + public int maxNumSegments() { + return 0; + } + + @Override + public DatagramPacket newPacket(ByteBuf buffer, int segmentSize, InetSocketAddress remoteAddress) { + throw new UnsupportedOperationException(); + } + }; + + /** + * The maximum number of segments to use per packet. By default this is {@code 10} but this may be overridden by + * the implementation of the interface. + * + * @return the segments. + */ + default int maxNumSegments() { + return 10; + } + + /** + * Return a new segmented {@link DatagramPacket}. + * + * @param buffer the {@link ByteBuf} that is used as content. + * @param segmentSize the size of each segment. + * @param remoteAddress the remote address to send to. + * @return the packet. + */ + DatagramPacket newPacket(ByteBuf buffer, int segmentSize, InetSocketAddress remoteAddress); +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SockaddrIn.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SockaddrIn.java new file mode 100644 index 0000000..9025c95 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SockaddrIn.java @@ -0,0 +1,187 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + +import io.netty.util.internal.PlatformDependent; + +import java.net.Inet4Address; +import java.net.Inet6Address; +import java.net.InetAddress; +import java.net.InetSocketAddress; +import java.net.UnknownHostException; +import java.nio.ByteBuffer; + +final class SockaddrIn { + static final byte[] IPV4_MAPPED_IPV6_PREFIX = { + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, (byte) 0xff, (byte) 0xff }; + static final int IPV4_ADDRESS_LENGTH = 4; + static final int IPV6_ADDRESS_LENGTH = 16; + static final byte[] SOCKADDR_IN6_EMPTY_ARRAY = new byte[Quiche.SIZEOF_SOCKADDR_IN6]; + static final byte[] SOCKADDR_IN_EMPTY_ARRAY = new byte[Quiche.SIZEOF_SOCKADDR_IN]; + + private SockaddrIn() { } + + static int cmp(long memory, long memory2) { + return Quiche.sockaddr_cmp(memory, memory2); + } + + static int setAddress(ByteBuffer memory, InetSocketAddress address) { + InetAddress addr = address.getAddress(); + return setAddress(addr instanceof Inet6Address, memory, address); + } + + static int setAddress(boolean ipv6, ByteBuffer memory, InetSocketAddress address) { + if (ipv6) { + return SockaddrIn.setIPv6(memory, address.getAddress(), address.getPort()); + } else { + return SockaddrIn.setIPv4(memory, address.getAddress(), address.getPort()); + } + } + + /** + * + * struct sockaddr_in { + * sa_family_t sin_family; // address family: AF_INET + * in_port_t sin_port; // port in network byte order + * struct in_addr sin_addr; // internet address + * }; + * + * // Internet address. + * struct in_addr { + * uint32_t s_addr; // address in network byte order + * }; + * + */ + static int setIPv4(ByteBuffer memory, InetAddress address, int port) { + int position = memory.position(); + try { + // memset + memory.put(SOCKADDR_IN_EMPTY_ARRAY); + + memory.putShort(position + Quiche.SOCKADDR_IN_OFFSETOF_SIN_FAMILY, Quiche.AF_INET); + memory.putShort(position + Quiche.SOCKADDR_IN_OFFSETOF_SIN_PORT, (short) port); + + byte[] bytes = address.getAddress(); + int offset = 0; + if (bytes.length == IPV6_ADDRESS_LENGTH) { + // IPV6 mapped IPV4 address, we only need the last 4 bytes. + offset = IPV4_MAPPED_IPV6_PREFIX.length; + } + assert bytes.length == offset + IPV4_ADDRESS_LENGTH; + memory.position(position + Quiche.SOCKADDR_IN_OFFSETOF_SIN_ADDR + Quiche.IN_ADDRESS_OFFSETOF_S_ADDR); + memory.put(bytes, offset, IPV4_ADDRESS_LENGTH); + return Quiche.SIZEOF_SOCKADDR_IN; + } finally { + memory.position(position); + } + } + + /** + * struct sockaddr_in6 { + * sa_family_t sin6_family; // AF_INET6 + * in_port_t sin6_port; // port number + * uint32_t sin6_flowinfo; // IPv6 flow information + * struct in6_addr sin6_addr; // IPv6 address + * uint32_t sin6_scope_id; /* Scope ID (new in 2.4) + * }; + * + * struct in6_addr { + * unsigned char s6_addr[16]; // IPv6 address + * }; + */ + static int setIPv6(ByteBuffer memory, InetAddress address, int port) { + int position = memory.position(); + try { + // memset + memory.put(SOCKADDR_IN6_EMPTY_ARRAY); + + memory.putShort(position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_FAMILY, Quiche.AF_INET6); + memory.putShort(position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_PORT, (short) port); + + // Skip sin6_flowinfo as we did memset before + byte[] bytes = address.getAddress(); + int offset = Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_ADDR + Quiche.IN6_ADDRESS_OFFSETOF_S6_ADDR; + + if (bytes.length == IPV4_ADDRESS_LENGTH) { + memory.position(position + offset); + memory.put(IPV4_MAPPED_IPV6_PREFIX); + + memory.position(position + offset + IPV4_MAPPED_IPV6_PREFIX.length); + memory.put(bytes, 0, IPV4_ADDRESS_LENGTH); + + // Skip sin6_scope_id as we did memset before + } else { + memory.position(position + offset); + memory.put(bytes, 0, IPV6_ADDRESS_LENGTH); + + memory.putInt(position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_SCOPE_ID, + ((Inet6Address) address).getScopeId()); + } + return Quiche.SIZEOF_SOCKADDR_IN6; + } finally { + memory.position(position); + } + } + + static InetSocketAddress getIPv4(ByteBuffer memory, byte[] tmpArray) { + assert tmpArray.length == IPV4_ADDRESS_LENGTH; + int position = memory.position(); + + try { + int port = memory.getShort(position + Quiche.SOCKADDR_IN_OFFSETOF_SIN_PORT) & 0xFFFF; + memory.position(position + Quiche.SOCKADDR_IN_OFFSETOF_SIN_ADDR + Quiche.IN_ADDRESS_OFFSETOF_S_ADDR); + memory.get(tmpArray); + try { + return new InetSocketAddress(InetAddress.getByAddress(tmpArray), port); + } catch (UnknownHostException ignore) { + return null; + } + } finally { + memory.position(position); + } + } + + static InetSocketAddress getIPv6(ByteBuffer memory, byte[] ipv6Array, byte[] ipv4Array) { + assert ipv6Array.length == IPV6_ADDRESS_LENGTH; + assert ipv4Array.length == IPV4_ADDRESS_LENGTH; + int position = memory.position(); + + try { + int port = memory.getShort( + position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_PORT) & 0xFFFF; + memory.position(position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_ADDR + Quiche.IN6_ADDRESS_OFFSETOF_S6_ADDR); + memory.get(ipv6Array); + if (PlatformDependent.equals( + ipv6Array, 0, IPV4_MAPPED_IPV6_PREFIX, 0, IPV4_MAPPED_IPV6_PREFIX.length)) { + System.arraycopy(ipv6Array, IPV4_MAPPED_IPV6_PREFIX.length, ipv4Array, 0, IPV4_ADDRESS_LENGTH); + try { + return new InetSocketAddress(Inet4Address.getByAddress(ipv4Array), port); + } catch (UnknownHostException ignore) { + return null; + } + } else { + int scopeId = memory.getInt(position + Quiche.SOCKADDR_IN6_OFFSETOF_SIN6_SCOPE_ID); + try { + return new InetSocketAddress(Inet6Address.getByAddress(null, ipv6Array, scopeId), port); + } catch (UnknownHostException ignore) { + return null; + } + } + } finally { + memory.position(position); + } + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslEarlyDataReadyEvent.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslEarlyDataReadyEvent.java new file mode 100644 index 0000000..be76406 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslEarlyDataReadyEvent.java @@ -0,0 +1,32 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +package io.netty.handler.codec.quic; + + +/** + * Event which is fired once it's possible to send early data on the client-side. + * See RFC8446 4.2.10 Early Data Indication. + *

+ * Users might call {@link io.netty.channel.Channel#writeAndFlush(Object)} or + * {@link io.netty.channel.ChannelHandlerContext#writeAndFlush(Object)} to send early data. + * Please be aware that early data may be replay-able and so may have other security concerns then other data. + */ +public final class SslEarlyDataReadyEvent { + + static final SslEarlyDataReadyEvent INSTANCE = new SslEarlyDataReadyEvent(); + + private SslEarlyDataReadyEvent() { } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslSessionTicketKey.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslSessionTicketKey.java new file mode 100644 index 0000000..ce1a42d --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/SslSessionTicketKey.java @@ -0,0 +1,129 @@ +/* + * Copyright 2023 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ + +package io.netty.handler.codec.quic; + +import java.util.Arrays; + +/** + * Session Ticket Key + */ +public final class SslSessionTicketKey { + /** + * Size of session ticket key name + */ + public static final int NAME_SIZE = 16; + /** + * Size of session ticket key HMAC key + */ + public static final int HMAC_KEY_SIZE = 16; + /** + * Size of session ticket key AES key + */ + public static final int AES_KEY_SIZE = 16; + /** + * Size of session ticket key + */ + public static final int TICKET_KEY_SIZE = NAME_SIZE + HMAC_KEY_SIZE + AES_KEY_SIZE; + + // package private so we can access these in BoringSSLSessionTicketCallback without calling clone() on the byte[]. + final byte[] name; + final byte[] hmacKey; + final byte[] aesKey; + + /** + * Construct SessionTicketKey. + * @param name the name of the session ticket key + * @param hmacKey the HMAC key of the session ticket key + * @param aesKey the AES key of the session ticket key + */ + public SslSessionTicketKey(byte[] name, byte[] hmacKey, byte[] aesKey) { + if (name == null || name.length != NAME_SIZE) { + throw new IllegalArgumentException("Length of name must be " + NAME_SIZE); + } + if (hmacKey == null || hmacKey.length != HMAC_KEY_SIZE) { + throw new IllegalArgumentException("Length of hmacKey must be " + HMAC_KEY_SIZE); + } + if (aesKey == null || aesKey.length != AES_KEY_SIZE) { + throw new IllegalArgumentException("Length of aesKey must be " + AES_KEY_SIZE); + } + this.name = name.clone(); + this.hmacKey = hmacKey.clone(); + this.aesKey = aesKey.clone(); + } + + /** + * Get name. + * + * @return the name of the session ticket key + */ + public byte[] name() { + return name.clone(); + } + + /** + * Get HMAC key. + * @return the HMAC key of the session ticket key + */ + public byte[] hmacKey() { + return hmacKey.clone(); + } + + /** + * Get AES Key. + * @return the AES key of the session ticket key + */ + public byte[] aesKey() { + return aesKey.clone(); + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + SslSessionTicketKey that = (SslSessionTicketKey) o; + + if (!Arrays.equals(name, that.name)) { + return false; + } + if (!Arrays.equals(hmacKey, that.hmacKey)) { + return false; + } + return Arrays.equals(aesKey, that.aesKey); + } + + @Override + public int hashCode() { + int result = Arrays.hashCode(name); + result = 31 * result + Arrays.hashCode(hmacKey); + result = 31 * result + Arrays.hashCode(aesKey); + return result; + } + + @Override + public String toString() { + return "SessionTicketKey{" + + "name=" + Arrays.toString(name) + + ", hmacKey=" + Arrays.toString(hmacKey) + + ", aesKey=" + Arrays.toString(aesKey) + + '}'; + } +} diff --git a/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/package-info.java b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/package-info.java new file mode 100644 index 0000000..07a45ed --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/io/netty/handler/codec/quic/package-info.java @@ -0,0 +1,19 @@ +/* + * Copyright 2020 The Netty Project + * + * The Netty Project licenses this file to you under the Apache License, + * version 2.0 (the "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at: + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations + * under the License. + */ +/** + * QUIC implementation + */ +package io.netty.handler.codec.quic; diff --git a/netty-handler-codec-quic/src/main/java/module-info.java b/netty-handler-codec-quic/src/main/java/module-info.java new file mode 100644 index 0000000..3a84174 --- /dev/null +++ b/netty-handler-codec-quic/src/main/java/module-info.java @@ -0,0 +1,9 @@ +module org.xbib.io.netty.handler.codec.quic { + exports io.netty.handler.codec.quic; + requires org.xbib.io.netty.buffer; + requires org.xbib.io.netty.channel; + requires org.xbib.io.netty.channel.epoll; + requires org.xbib.io.netty.channel.unix; + requires org.xbib.io.netty.util; + requires org.xbib.io.netty.handler.ssl; +} diff --git a/netty-handler-codec-quic/src/main/resources/META-INF/native/libnetty_quiche_linux_x86_64.so b/netty-handler-codec-quic/src/main/resources/META-INF/native/libnetty_quiche_linux_x86_64.so new file mode 100755 index 0000000000000000000000000000000000000000..e4040e87802ddfd1ac644c121ed1a400640784df GIT binary patch literal 6859392 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

e z9lZB2T)}~#(r$63d$h%CX;N{|f56j^B&C^zCQ^@-5`jYl#q&r;GSY_dOqOIQ9*=w? zsaW!vj(&ErP$v#wz?4xHiIS~&zPpHtQW&j^GnKe!V|W+cFe>RZ{~dm4Qn}xRo@Nq8 zt6sAD)QdFR)Usv>IrTn6$=Z>xg({IZxD?@J~B{IPw@fliJc}^ans>I|Uf5 zk=^`;?POY#Gz(ifk@1T;yrwE#kakR*t8p$9*7XGFNw{hq0ZFTliR@ymjzK0EpoEO(y1D$WpCSK)??gI@*+Ha2LMEvO}u;_ zXZHnOgUMcm$#@7I{&yS|A1GQm`fgG?^!Nf?w2~>+xM)K>@`7>E2H9-A3F^F3ohac0 z{*n$7Pxlz1%UB6NlCSnCJ^URr|OG&Sg!)E5GQRE(2wz! zYWb5)$GXYDEcU5avUU`};Vwoi3e-cceXD60Y~wE+WT4)pYm8pv1<3ErvO99@0|tzD z$3i)-aV&&uVI#d{4;(QBV{RB?SDZm7`N69ZLd5katSNA~LwZ$n7UT&Z z_s|q?mzPPC&j^1%T#9Ov=TKoNIe-x0B1Z}M0VPALE=r$qunh$b3!k0}pNuNuDVFgw z|0~~^f3H02B+QqHI1N5i8{VK##Oe|$s9xrC#Ov;E%=NPrqZk~>Yz;@D*)T@L5QV&j zTmpme&aQNhbud3{0PcHWA(VS8#hjxHF_>``94(fzZCddZm^@^dz*-D}PaqB%j2bV+ zOWslz@n$6OO5POJwu8qwHN;IEo{q32o@m5mqCp#}%fM+Og$ZPAD@@g7Vq7r|PKV?f z7{E%~Lmrv8wl{c|6sgzhc!d@qGfO0n1TeD47%H4fm_z9Kc;rnCh~2l`b8{cH0jK(N zjBZWnG;`ohCJoVyI3&N&Gk}_PLWx5j2@a`5dQBP5v4LUy!KmAWtb!&8e2q$Y*#9gZ z5m_`Kc?yD86TFh0;&aK&nJ|jHLmP-UlIb3&gS%YOZA9u3JW^Vfzul7eCL$o|+`yGc z&@?DI&yaY5O884r`xA`**u%?9z2z|2XjI4xHb`NM3OXE{w>K7o09{#F)#(FY;}@Fa|i7fKhKJn?f1&|#>@72Wv?cCZ})oR zR0w5=iHSqhu>Z?eCXOFlljz+V@6G&vUU9;|jBWB|6$PihZl8Uuu}*$Tgkj7qRtz{< znWKdRw9~dXi=zQrXl7lnq^@O+d2z1<59~O<#iqDzCLp;=0Kdzvh*g~%BMijpT2cDT z)XAt6<|2b-a>9S24e&NGknsV{Bt*jws1!}6zcA8M)o79A)lgrX=+2<*H=RK#N$qvV zTTQ>|v)M_n(U?Q>h5m%3?lCdie2BynUNB+Ygr2IQWDO-}YT&|HxnV*%DpL!LyHFL; z3niVBv4_``I<@hMLBg|q2V-n*cF+v`6y9h=D$$i_h{fbUmCz5fDD&#)6-3hxO$h|g zZH%kNL}V$mu4u%3`*uQVp_AVwXvXg{s{Gv; zLz*KZ$?0SSerK9o!~7-WK@#avV&ieE$j^%a&pA@!`vW{q_ja~pC z-x&S4nS!npiTEkfj})IK)AHRcq*70Kq=+`|5jMKXR=Bp^uqx4gBE3DTDbeqiRt8yj zR>m!(T8#ly?uEyG;}P2+m~o01w4Td@Yc?Tt5BnJE_j9_qwiC34042MRYVi6=@R=h6 zIzc^~9$>hvKx2m<3W!^zBuZ-XJ&N^y%1T&oBDOoU2u`I%8#E9m8>Ihk5h}+xD7zX3 z+7>cp)%1xA(`S51a%=^1oGwiI?{IiW+oH{MCndOV*|sQM`2iju#8~u?-gPGv8_2a0?hbAOM!K!H$*ns@E2yplbV7Dn&T>4bGtI8nkt;#)0xIv$y-mSh7RlTN8NwObBQ@!JpW~euB+vSq+JOvaFKCLhTjn%n$Weh@KVcH&%F|_Ofsjhd9AB z$Jh(;Gj=wqHaQq4Y6b0>2OPxp3`g{ekkgVSh;=k;q}N6UFGCi-(3rKcZ6}2EwJleG zYKx+W)E+I0Hi&sYN~E4J0vw=iij~mUP$`)u+;EhVx^NtYNlPDc1e3>{P*H`W?fK9P z(}#SCofs>d(?br2+72|1C!1Qjf+ zsuwDr2WXteVQ50EgjsJ*N54SjG@9&9MmA?zF=Q6Cr8}0W{pt0WF zjD4h2B58Vwu4u0aAx4DhtKDtA4kHaB%{XRlmVHZf@mk%cO+cr1hk6Mx!l?-Hp+aos zar4aR5P2!d76S78wNTkaXh0VviqpYuK_RVHjcqn9JPF6z%1*0!i__@Tnl2I9$?O95 zvsq`%Qm;vGWEwb3*UlnMe4U$}2T&wY_5O<%X(}YkF1A45FGZ7VDea;^N_o^)ZJX`m zAogHe=#T!`Rd1wnDTl_9>Nkl3#4vLe6P4+XUGzp<<Pxz(l+$o? zL&~GP_?4j3?>Cxdl}Bwmm{OzF<^QEPN>R*djbU%$RW0nu4s^5R%>O^>k9RMVYFMB` za(|Eg!X500(3hr|qe#YE@a@61+;7IsKE=Lu43$iM$xEHrE6IN^bvoUg`VJ2}!L6Ja z9eoTv4)3dbx0{e%X=?~>-xX(5*gm5OYUq^%$U$Z{Cir0CVS{E=6P?UqkhX{2qzdzRqA2AX^1&PL^+mg_@*xYoBqW%SnH`MMARtHJX|n z$U1Ez3oGVYs=fs^G+(^(IW^V*Y>u})Z-J6+nmDDbylw|?<5>f32$vlr)+N%HM-1dv z4hp!8k}O*vFI$@^+mI+*k7^$;V}qRHl^j@U*4dco%?fv5oYlbbW9KG%H+j8T6zH7l z&ccoEf(t5oADqsCFtnU5DmXPtq>h6&c4)MQ+p4TM5~)c8k^|W#lP*}<@g{G{ElHFk z3b523s5lE;P;3Fn2)t1%q4fGJg*be=vKRlKM5NcCVY?0? zQe#(g5MdG@N1`J&L3h~k(RyS(;H)r<9Wv`! zU_rYbALNd)e|U-^dwiJB&IUX`dOl&=aC8{WT{^oHq;TPp0RVsfH*4B7EZw@$uld*< z{d(#sB1^yddHU@?#^~4a<*xL*a*U&2nA6VxCs-vPmK{L9gri@WQ}nwDM;G+Tn$kS| zNCnSTl!bmjJj&r|^b5<0et){KEBy{T+0ie|lB3_%qb*;Ke&67x7KA!J%$K7dVbL#) z&e4x>7y30;jCB9T#v6-E+`srUVcbZrrZL*%Wj1s$JsSpQ#{Cu@D|0^SPoL>6E)9!$We5-!!rVX%x7b+HYj;hrPIGdT z;v{kin+t96Asp&%vhUsY{hoa{xo;#~Bl{h55eNwM?Rf}WLI^rM7le1M6fpVTQUHMk zq84fL+l!dazijpEbu50`IYn zW;ks3hM=zqn&ik3)-7Bo_#eBWScU@JgyP#Ak(xXOzuAq1 zZt)?j;_`>SoeP9s$9k`f3l#64Eol4CRYKV--ZR+_5ve%|<=z>wS?8w1I2!=QR0b`d$H}J##Rl81B9-XMj^62;Z zSsuNHzY#)HUF4na=N^8RT7Fsd=(Ec_t@Q==SA3cj;d{2esedx{ zw?wZc^k;4|l5kC!X-P};TYPf;OOj7l7RM7T9A4S_hFxy;ea+RkZE3E)WqfAqYt=XP z^|JczCp43rTGW>cGg049`IL2CSYMjp7u7fRH&)*wUTsqQmgMUD6`$GqX6u{!X8+pS zN9f_OePJfGkIx?Y`oiZR++4^SdoBGzzw)PS79X+oJGpT)i7SMA%!7r*W z`fIE2`>wv!;#_^-Mz*=Rwi)YlQA|^gJcZr1tSyK+jVNeo=k%9<=(73ETHvuD&z)%(YM7)HmGf z+yAUr^my1lKC|uPvw)tT5$sZ*mx})Ne|3Ygy@~Pu%7}b@|6}zv(8*zaH}Z)LyIMb~ zXbT-D8oS6#^^=Z%V>LIvOQP2iDy;8V!Ugr6K`^W@^FXeBuUw+`ZGR?L-!ptt-{16; zieBmJ`8{hd%@eNzbkCEva}f?<7k=IguG>TAn)-(UHpzTfC472QI| z(UgZ>wD%`IePxY>MNyh!}>C!8FP?+QqhB4eeb%+ zRr*Osf4I`xw~an*(Guxye)M2|fcu^A zFl78_cNeO2wd|i~_}EW6y3y|;diPd2hQG$_hh)$<=MvFE+tzTzus3{<%gpU?i4 z$LA2@^Y|-?x56A@IybAuq=I532e=z?OlJ(#ExkN@c zhDM#0vCh>jW zB|a<%UNsF=-coV1%T@uF6<}EbmKBLuNiTk;lBtGF{Ag2(pU3UT`&QxfgMFyMH+&`( zK&jx{@cFUfbMw(w7!0OFe@G0exB*6r|nRNPh<+WTDeFt>%1vz31Ru!C7X;3&H9dP zG)-ob9n`ajTR@P=rh6yx{}cs!s)BO5NU z^07@Ix0GkdE-3C?nH=JUJr=xSF;|~~u-MZT8bLlSFqPonk zV{Pj(X%?GjwabS4D+@NK!g+br+}ho}ZasGnZxU>wXq849y8u?JZm8YVZD!A^ zr$=%rOt&Y_i#AFP`6Gwy-}cA+kg%H-DT?TbG{VN^TrYhmZ_sYpJ(5#})D_)# zd;S%=@7g+&%b(@DIZ-WN?zc7v-TmgB-XodIIpvYvE$#S8(*6RA-b1M|bMdto;AQkR zJU?WHbAmi+7WO3>Jl9jk=~wDvV`3Ge2M;5c;*6gahgyQy)3 zbA#cFdl#k7?>{GkuXsHIO>*W0;?%CL;-kXgADrn)s_V}K)4R$S_r5XLAnpLW)Rh%n zXPL=}Dv+n)i3I=BKoFt03@58qR}k^!To>^?Z-Z2w zPsIEt7qPr{caN&miCDDKMYPoJj#icFi0T!*s$sD9eh*TAI<$@C^beu{Z62|F+9oGG z3$507Es0beTDy6_cl~Pb;JP(JD6|)s-Fp3!*v#I-JZ&%R;!$%Y?E&&Hm66}yHt;Jy zFfv)<7MDE)oJcRUi$me#&d+IsCRT3lD{-aK0ED1wy{-muq{#K5j^H-lxwlXG>@0@G zf-AD=`{f($o0iUJ2d<$9EBy>hx5DN5&tvS9t6!E-nuXdPL`kr5WS*Vcga53P)29z2 z)$NJ&BVz!F@2oIs>&ps#gv%l7nyR{5$!uG?jsq$`nDa700zWfFG z7IBDG6fEtM?-9#q?Ng^>V)(>d!(vPD8#0FExrJd&ynUOGCKXn|ac_C$pZ)$_My*48ZM~xMF?iO{DF}IJf}O#kuYKdN2;yG^88< zFD$k>0bjMs6)R5{Q7T9t)Kg<|FyD?)oO9`+lh?cVgw<%5jS+ugAjoO=PW3a{v|V0$ z;Z#9+)MDTv=Rr5<=t=4H6DtiW<6u7-=PKh*EF&$oqrASwyhZ*&iHdrJrzvZY_6eL=BulsZJhA^4Olzo3F7#D37tmA8p-WAH1briZW?{aXY1VGIMn zYu0QruOL)MC{eE(cUkh!{^M)23Jq+KYCmETgs7;BL0BAg^OF=AH6%Ez|_ zn}#?8)He7@m)Os}E@Gs9E3$u4BPk>Uufx+ z=m^fuf1Y8V*_r!-EY$YkC=&AXXkSAAW!^r_$`sDqZHEdso7>#H{c0{ESZ1Hud3)`_ zVb1p8F%t6iJw)h>=IuwU0F}9U`!<87Hih%{L?RGhB3L+Y-)beuvL*1W3a1Y{{DNUt zPdI-&YP&hPhCT_-q-@vuJDSUX;QW2Cn=m>Lc8M0cop^7}|r(S77+Zq|q?su~&!-?7S`zSZ+m4=DlCsF4!G z*BE%N8B3l9NkZ9~S3|ErkXAP8ID?sY;O`EYdGA7RULVv+$5SnW=Hs?-%8tEa!WVIQZXk`4eIOx327hP6&S;`SsWk_$+hzPYLrsabW%=#J_|4#Lw?W zI&V9877nL+#c?`Sb-h=6cBH7PT@IzHF7;CVBMJW??hAUW0^N-8m*7RBn=V)o)g1K5 z#r4X?73bng?W?DC4Esm6PkdI%w7-pYj@}{3BcO>d(wjkgF~ZPjx9N3tOP39qNwZSX zoQ@C~N(F2M#(H{I7tfhmCao@z`?L-(UXbf&C|2YpjEPyTNpYP4(K2xVJm} z!d-m!mWJ#?zQk)k=)vWFo<}N;cT8y0E#KPJ3@&Vk&(s&Dm&6CU(VUIHgk`!CxVki9 zdtrgw(S@@mc84Xr$R+I35L??)sv@=fy5F9Pr_bA0S-ZJA9o`KmV$3RSQ7^JI9$AX( zwJM(K?>uXtp}mta?d+#Or(IQg6*+!`@339#E9b)kAAXJc3gWhwL?6{1Jsi z`88zMwqJG`e_48Q%U(Pn)yU|z6MD-Dg8v%UK_Z#!A4fO#PFhOiwauko#|?SfHO2iO zw8>_*UXuel3xCqABNgmorN+va##o2=$x)n@|beEXxzhA8O?w64H)@Jdu2e zB#;nj0GIMzDm1b_jr$j|3xk`O1L^a-F7y#ubP>*f#kpvG?Q)D7&C!})-I^G&Bv#9v zhN6qpXKVA1?F#nD21zufaNR0%x?Sva(p+w!zT>5O1#+%z7y9v7fu90ydo9DrEFQsF z>?>aFrzkV+fJvlpDD`T$^~n65K)C-z-t>=82$=eVBayLj`Jzdm--9hudgIgmvAX%> zji)ZwZj@!+uB;!h5Mo=WsXO_3cIp={&wy;6-OAHS9+C&>+4L$Plq%I!j4i?AE{)D! z&VP0KvQnzuCtRyWBP__@3m>tu`m2!@@fJNHMeBtaNL8IkOtHmC<2sVi01Hu59~Ntm z%;M?7Y8d@<{$Ug8vtL(E$=3}~wfZD3=5l>LvkC$-epQ6K(nEITXQ<57OZARQF0z!!L4`YDY7aNpz4E4QJ;Qk+)njeE zUk@gj9_zgHWf8A)MfEmsU=ue45dm)fQ>b5$gI80dD?ESUZc_-%kkGF`n$E<>?EOE+ zzd0hooFZ1@!G2Yc)v|@}O$55=*jEuTKh&|=BI{nIMbx4u`VrNbEwUa}XR1i3W22Tw zt4@-Ry~^p>n{3bQ;5PE7FLXL~^R!LI|EYySi4_Hh4=CIIUg_GX+_hUGrg2vt{NL5> zr`i8Pmo5bWwg0&R@cjN(>b5;vFGU$sQrmnew`CVAHsubkeO9B@*3qo`wGcCV44hHe zJ{wR@DLJc>vMP%bg%eCOk03gTr7?eYqQTaTc7^OR#Drfc>x~K)J6xO_n zpP8XM8=%lxhKzvB61~89+QM|WyfI8B9kW6l)yNjkZ2e^V?xzFmU5tv&!%eFvBTZdp z*Co@3)_18D0|<<1WFfXBbS5EdWA`vEMyX3nljUeF_QHeNA7fnhVQ8Mk`m7OHGLCVt z@cIvICoBV=&<4hT$W&IDG(He&qCyS(H$X}!1u5Os$9^=j~(D6AjA26&=J}Ew(LawM~wV3y%Op0WQE@b$ZpDwdey8tWt8c^ki@3XuWu9PCFU`~ zdF8-4N6s;aJ%W_8Ym=D>G!f!?drCPSk&SW6AknUs)-DV`Wk`8|1!ek-5e24ecNjkM z*8+`bPLcVl>b zDw`{;kk#IVSrU7`?NrMS4y(W%g^Z)k#GCn8W?G-()~b}AH5Qa(9IqVXIrmn`Kr}g; z-x|`$CIHC30W!53nQ#FR^1Uj?he^otpAK0qrx*0T=!KQ5u|4E-{RitiOEnoelf0hI zG#NrhwqrYT4QOT|JyO(K>%1`r5W9;h! zc$~@(VM2Bm+e3D+N~*r!SZy0qdZ@2rA;ex+jZB^WUBSz{Z4$vpOln~bh%uqC50-jh zCf{s_v2iEVv(o#zdBmn%LsQPQd}!EudwP%xWA#@FjS!mbgE#bnsrpf-Gx*4S zn?Hz?rp%?hmcXK|?Jd?dt!x3Yt~vXsENEEw&SH)1#r14oi2oPO???S#^Lx7QIG%!7 zFcy*m_ay)V_ptj;XC8kq_|Q9Wy#yXjybZCS*5yCp=a&DfXZRui!q4YNAC`Gtc-)sr zp{a_-XI(j<>NwqAO86(BT%BLcv$M;3S+}vg%lXHXDtF2vUHq$DSgI=V6c{}H=ic_% zz%ibGKE`^N7bpDh4cInc`br}G)yv|mK1__*I_+rgDz@ChogDxCL4~l5A7p3S9Gp|V zfie0aaErD*67tFDVr`Hdu8U>n4H`YzOZ8v|8(nIy`JZ~1*4v40de}*hT6Z+M)-N92 zg<4L3g1#y-PkfvnR^>{l-$bu;*Ai|&Ve;GLzg~?^5BtF7zeQvw|M)M;zgv8<-sOMJ zS>41%U_g#%p2tA*0A#b z)a8HVe3$>BFUmhb`zKF1`n>D%UlPK<<%{xM z29lH%p1yru6JuSoT@e41p~aHmlXd$ z?%oBy%IeDd&w&IIfu5v-hH9tD7+X^7Owx*lswIJ>K98QGX_c0-(q^<;##>TIkXC79 z4^f`?^vt9e=I_ju8RnfjrBnG2GZl+gG(jX>6apx>s63PcRzX2 zAxV!CFHQ4yyn&%X;y^y^1cp?L?j?;33O<)OQWRbEkLJs7yabz=?=1+po}_YdEbFLv zvKx_3wY@RQo4RH03YA6fh8Q^;w{AO9zOjerEyDFDHg)&Bb5d7yC644bOqN>X4%6-R ztP15x!8Q!C5-&xGZ=7q2!JfYrULgl*UP}G5dFf`{<upNQM`PAuQ<%+vj}CXR5G|{+oQ9P2kg>vz*_}R;Gd}^HDx!>G%G^ z$~;RwNKJlX9ehXd(UnAz@ezGEf132G&-qrn z%I?9pKIaC0Y5uKz&P{*bRq~Ow|{y}VB&NK1_Ia^%d)w3{{FU{G251|6*DN1vm4&4}P+Hrx0 z@DG>3c&qbIuKzdJTm4x>^*`bY|B|c!SI+m)-&_4FS{&~*#&{FIF?eYaVceuc*^M(uDI@9`}#+Rx8_0XNE|5^Me_x}|5 zU+L<9KmOm~>fhn2y2#c4jC@1*@9N(W*7^J3|M0emUb3Oe$*qNWaG!xYv$^Th29Sdx zK&)dB{dol<=sB1NxA(v} zW6v#Hxk*3Uo4RS<*pO#5dO6cedihn!igQ`e()<2C$1#*r54rtj#$IaJ9&ZY_@xe>q z$^W0klArKWjmz0lFXMtvKZ=m+P!cqM>YPMuh?O6Xu|rQS zY)yZg2wBW}$?D}^a^XtUA+4C0u0}iOmG^VL+;8ie=9M4u$~SnQsV3)IuY5p}+|r?A z^4oe(37X2a<|7o=_Qq(EdgUbD>2bQf?EvMNr|rP!2VGM`*S0sjDDpdYoaJ_jRoiQ$ zDPe?s<(s@H_eWvFy>9q1b@=a@YKObNFxbhR2*ESM-t9}ygmIr;gkAfF%Ea-}cYb7g zYV13r0&YXGjtSTR< zD&LssKVE)_M-ZbAZ{)tw6F_C=__nUxybYw@B*%dB30R}3wtEYWb@lb{s^;2@PcJ;X z^3(CND!DL|6BrL~WP(nqENAC|#a?e2m3J~t1Km{01l&y+cf+P9m3KrR-dTQxN=|rf z2Xnb8)yw0iii2#6cSRrW5NV@cIy%Gr#y5k7n3LYJYXF5AjZ*|g!Q$+<*JuiHfl>0f?L9QEXj#%TGt z>;Y17d1HDBq3M;MJ#xZrN-@YzUbcj|#EJJBKic!fp&Ba_3$rl%x{sogm(3%EDTxoH z7xCh}nN++e>x)~tZ`&(UU`EHg)CE9{!LB-1?}k{gIL-rk;5cZahASq-wD2y*7& zg$U-ek+y!OZ&W*jCzDx;fiVqx69XS_oDxf&|JVaOYMKii5|?B*PAPAFJS!`g-O|DI zI$$r0l!Hi(i-Meq!;52_ZY5tjpET*e`;7K|mwiJ4C#WO+KL{8apOe?W#4E_3U(XuN zSPKEZnJovK^`GKMe6NCmoQDgoUNQfFk&mV{mU^f}(oOubss0Y4%y(m{pOw@S7A^fo zNj-r#c(gc{daR@fN)s)8u%roi5q`_8Sn9!&E(;ti<=Bo9$jYspOq9@ zi4T^P+4rH63j01*A_>O&MJ39Xm0oiw2Q*z&(n_GSR6|wi1yvqV%1J3jQl!cnn7e(dN~Wa09+uujlPxJ%vsvjC>RlJ9 z)7Mjrm-<0T1?5{-l5qJ;j5_FREznC(wIq*~=w1ic#`MP(L_?{X9WPP`1fc%$!fezQXrO^ zC-ii0`eL=#S=e1LyvoEYk@Wv~R`qv!t-vxc1S^bRI?4X2-A zaWo}u^x;@Z{b~V9eT;0(0E30W0Yk4x2^idZ)Mvn89XTB&e*D_|Aknnr4+M$N+B~|+ zNfF(Hi|ml@S&L|@m7cNOJTTX!D4Ui+wMzd~6l~lLieBrY?{(3m=MjB|i=LtAHW&R( z7yZ}D-Sa0WX#}8m0K_r0rq)Tk(gn#AaluH%3+^tN6i(Q}=#n;3!6m3p8cK>p0rD4Z zi!PE4GpE21&*F$aod5UN=qdvb1J$|(Gwvw{Sd%83`qNNQb6*4L)T@Oz( zS{0-!!P$MWVlJ(cO^27)C(IVY@`M4epN+koBXQVHMi=q687l?PdZs2%L-D~>7?pS_ z0&-r22~6GHqw@K!8dan^YH>DiUveM1gInQF<;8*FSbV;RJuJU-;QR8jGn4sKE$I zi7t9d`NhAaM>2u4%W!Lg3seeolRLY7XkHs<6i#XYbh=4B439g!)c7wrZG}%{Shb-Ev+i4)lYq9 zjP=zzsIT%3j_sln_(1iqiO|K@mPFOZA8yr3fTw$u#f~d_f+=(>;|Hph)Y$}FwSXzK z`~sVR5k)U^(K#;qUOwr7=)v{C_zCy2yDTf2T#45qrU%kL?q>&(xVxkxyV0k+*(Lk{ zRerBEXkA}YhWi^O75v^-QWGs;$9E;iD6Rn>Uj-ijWF0H`Ynx_b@LFF0CuZ`$YXa>_nlU^ zV4an?Y~eS&toIs5hjz@#oLlho@_es@)DUMGwf#%_tDkaw<;ADvD=*Vfi0^ZJ+7rMX2Jjv|$%-C>)Cb0O%AJ8I{ zIV3zBX{dteaR6r^G9L>Cl+#ESO3|DT;b=jn=H(OsJmGCTUKThug5uJsgeRD+P2cd2uXx2YUZ*>?tv1 zw#&(Bd7mzg3|7dhC6>DTjQm(RAgjLLOCga8s$2Lj^8!0yg>yAdv*$?h`T|!p6SRTv zV!kYp&2!YnLHh_@*UjG8xLMc-|?V8C+ieI z%H`s#R8M-Ah3dtR#>Ha8lJ1`H^1bQLTg=R5hys=qi|CA(3v{bEW~^MD>6Ih)YGcQY z*b5=nZm;|>F{+eBzU?5Qv$S9S)+wP#&(a9J4l9{NU>L=h@9@euYa}hJ_Sl~vbWIIi zAeqX=f_`1TE#g+nlVn799BqDEqnUK@4!Ap)9&>NyW|O#m%-+$wXPw550oLBO^6T35 zRWX*q-kxp420XJLGy7{UH4de1&{Bjqh!c46I(`47BPW8jwo}ErgbNi;vL<$NiCFTo zf2@(lj{U^sj=$!#L@Nda`*8TlY3Z||0KAOxDTWpMQndpSgX{#R!6b)f0*9ytxNq>M zu4{bBPez9<1^mbhP?q~CE1e>d#IfbuM=$J;tC-D zG3D>RT=Q)=wgV@@JM&(rX><+h*Hgr|wBbf-d~!yi zbAiO6WnPBxR=~0Se)H?%(~q0R=ai{6RztRM13!g(fA{?2B#NjSqjuwMRmmAe$t%M_ z%Y)a1xJ_b;&BNSJQ>>roYqkN3xwQzV;qa*A-4Ea%+|R(}7h^v2s7Mqm>2tT) z4&%$Wv-bV)k2tUArM_!)S{r83=}{q_#z?F5IM2yt=yVN*Iy$`*Ivoqfe%9#pRD#%D-AL7rjRq-8%IHz9~qxU5k&mpwY1+%9vT)$X#(!%AX?z;Z8 zix)&@!GE-XB@?TG0pzG2Qq4FFo<0_c15)Dy)n9Xd_)*Bwd*i z-sqw~#aaID%|S!tc=vg@2Zwr*?9jWP<;U@vzbC!hhkD{P{KN)=KTtW}q2i%(VnMd! zOK!}xCv5&T_`|iM`*PeZrx4YeOueUspF`SoK5q!le8gl*lIX=!m;KRR3_?ThF@fyC z3HG87e}o+#ri2%j@VzBpf~_V%nY!p43H);JIpBnJ-;i+o5d4*7ceUCaAkwRcMdxIh zM9ljTsX_xD*$53NK5SAuHb#TO)eda8FGqY358i;3M*MAWR3VtZU?==3LiA-+C<#m! z=qZatP^vKfp~p4UX+$1BHGKz;pO_p7hZ7ue%{^`>DGKG#)$HLOENP`Y6GyYPlSDdN z`jCZL1`|&2k%+HD$)cS{m{gI{C|mg}MB+>!o01cShQ*f8+c#JMKzKknbto|Vr;Uyg)d+7)Q$-6i>n zmm}%FhF5pzV8p>2h><@bQ6Cxr*~4+H^L-+JE+$0eUnDpVLQt?1nAB5|mJB4)TlQ=4 zbM8C)(^>x1_Gt5Q&=%1_Np4~Rax_tGrbwHoqaM zMd`aeV}|Wdz2rsh-kBG14(B2OT@eY-TiSzRynWFZ<3Wf19Yg%OpB&30I2Uo`W+Ufo zygZb+W0760#R9jZaesnSn!^gGexyc=AE7I>!;nytq#L(2e4I0r@zU)*S@Gofw%9r2 zVfhj3Wa^JkM7h&JVb!#H8p3mlVY9r*R{RSl$8Y3@B#ucqxlt-RPy0C9mG70dMSs*v zgU+TwsNY+?sXH4FxP5sg&r3vjc#q5&;fx&O2a>$=#)0a7PVS67TPgy}ilm8+az|sA z9kI9^bI;5HlPhmBaG$@J4<<<0pLG(%O}=wYc(x>Yd5rz$1g?@R_S$Dmu|9-%$$`J$ zo09IW*F|zME|S~FDm?{B2sg>?C2$Dd@C%4Ox;Q31Ovk~gv(%+r+W7h;9wXs+S=Gn^ zD?HFcBzm81;p)uYb-FLkwDqy%LOrE~7(*`;1Nt0C|C8gN^v>iz;6DR@5BQsOMutt= z8TY3bL7Vk}JW>$y<_&}2_$U1{kV`&9Bv|{CZqR!&!s*|{%e-2@!yl6kBJMzb8*P^Sg0ub6e{Dr-I?_YBcWHa$ z$9RNzWMdwnm0&@5e^CiCC;7W;nf=&ul%9z|hE(XX8+P@)2w$tV4tALT;R#$EZZgkM1jE8;gvgGA_i7knlweHW!Mk1JPKx%``NAl=Qw@_&x} zJ&$MP4>Xsz?>Fo5ay579^rC3#4QPjMsfd=&t%;Ui zS4+eV^`30U?oEz03OwPuiy_`xW9zW^yRV6!KoCZAzil0-2I>xQgsu;&j&nkVQevZ2 zYKIsV@_9nSGj{S$b6%a4#`~PcgGRlq9_Yr}K2V0w>uTc$Rq#A|za}WuKMlW zO$*~)nJY8ojC@1apZsIw7^vS{zC z`gul?DtBQEDLQpKF&6@pvzw}lR26Q!p4eSAJfQUMB50DU!@aL4qnaq-bH^4XyrA$_ zywxpKM+@-Yu1Y)YVqdjg(RS}B#jLlOrk-66e&TrViNQ$Oa~tpr@-Rqd{~1}4CC zom$tW(hq20$c6r<_e~|0sHyI4YZYl!eCHOW)&<#ho0Y{%(9PkxW4UvqB6W?kUANtf z>406Z?5;H<3-BS8!Do+Bi6p@D(P`>w1%P&{5)b8)uus(($}BM`68?^Y(w3Zjx}Mpt z2=6>f)76AJUFb|T(atxBrz4#&sigO~(k)*DK?+shsm9mY;eUJ#RE8WHv9w-Q^Nx_sz(|j>twIp z_-$7uP;s5EjaEnNj+3Pm!fk`z*{Zmg^h3T*d%>4P^Nx+x?@?|!?;ZCU)l34-{brh-A2}^a^dFS(L8Bnv9aVI*t zkB-HAf`-o9WA(YRt>S3U9#@uwM%_M&d0K>Cp`tF_Gp_sanQs&;fOWp2A_u}E4GOM- z(RrP!f?j9pp%wIjdT1d1j`j#F!W-^($Dyb?W{pTuCy3XHy}s5U)#qlchGX75 zcQTDMx^8gib;`xKhLu3ZdT4DA&k1k=yek@25z|VZtN8x4?=PyjPU*V?e$^{DUzT70U=SE&`sz@G9Ett&El`ZEsDh8$4mZaD$BTlA za7@cr9b;~fP`u0+H_H$}XPjXdz$=aVfF_$^gb-TDtGn*&Zpg<2c;+1!#t4n)?G=95 zz-yp{RUjafINI|X8Qu!3Gn~;J75W}0i&ay1BwG4O+|*_>hbmvO(xP>SIq%|8ZJM`r z*AeAKzHg%Y5(Yhn#WbPY2(hsKO1{G}`rOESN zq!L4U$N|}u(uj}HMqLx?>g@nJOFJlyM+g}IGDfS28X?^Lv{J22yf>9vbjwz0t5`sD z&482{zS0JzGt4v8)j-%ZH!2JeqCHe3gmPVHB2p|tMlX)2Mm5dWca4#~wIN)F@>BJ* zu&5weNdArRIjUvDJMTy~1!!zFzw55BXDq}Iy2_8swOtikslpkf%J!%Sb+{KMjDQ*O z-m8kNT8JktcKza);o_I2Aw(-JUes$;5qQ;or>QCpBK0evRGt%PD0j7&1yDPVd% zQNWuY5o-0C2Ue(9Y$rSv03A?~Jn=AHO?D4^=*bKyCQTb$qQP(KfTr>Lo`%{jzjT}W z^ae|~2H6uIqG(iVOBgP80^g~J3Y6N+=>7A2C;*eL_s@z9&!WBG0^u~My)>_M=z2B}^DI4iU-Gy6AwVhZI?l&&%a9#=O6uZrND?;yf=hbGT`!A0wiS~8a zqZ~oDVs90*$!f}##QysdGR0C$o6M|jxArBv*B#qtUG2^uB)kqb`_s|ViYESB_+Q5V zO8#5<@8G|S|GxBX_p_Uxx?$cEUTRefCSQ7g;0!OdqzSiBo{9y2bro>NNH^HSY>^OJ?!GSL=LpoUh*b7C2v%^DTD17U#R)`Ib4~a_3v= ze5;+WRi9LIt*YfJB7A<^YeiJ%;jD~q>Q18N3FRyrG_^r@K$G5293C-$0fB4O6z-X+ zcY!14->5*fh`=Tnm_7e00#j-jc+uhlbLLMaaE00j>MwJFqvn?oxJ1ol*jKv1(etB9 zsn(LRl|T?I-MNG|CLb~hv;Z2<{8v34ZpVOdR`byeE;i<6HW)&wWMeqGbph!%JwM+Ww2N7K5`EwUx z2uaylE=P9sUfDB}4@uz4sR`VpWkfV^xuh;H{T`3F|1ch$Uq%Vs!N0UlM`r z=@N>wsR2=f#avZE0_MONqOKI_YQr-lAK#23e9da3LW zDZE1AYN5g_2+x^6UEwtfR|6GZL-?rqpHz6Q!qq;7*AhN@{)ZJ_ukf&0GwS1|-O)vH zNtzNpO+NpXh+}zKq;fTcEz4*PR$0Q+=!T&AdNnsSJrd{c2)wsB?}&Kx3+BJu`A2FH zYQii(aADc;;3;MKsq^N@{h)J?lKU~|9xeCNxXW9iZ=hxk9iZ)z=zT9AbNG1Wk7>g& zd>r%JA$+7_n>8U`wvu@m{?(gzX%`iJfLy&>!^xWZB}Yz5^FIAL7d++K;it2NRl$x_w#l9=u`3MTsl))hq;jNbzV^gZn1)L= zT%?<4+qyp**;E-QofR4C(^gkl%=I5>l?iNWEbk%l zxFbl6Nmt?@ap~2ai6qojPUrF@z~Zyf44fJL^|hmpV~jTXIE%_6ia?1@VwO|g^Q}8T z)8|$>r8a`*X_f6&C1zFw{HkQd9_K(K&;RJh8Gp?G)9#N^0PZ z?wEnnJ=mRid778#;zVu?Wma=%Bd-vpTM z{ouH@$4j2&1!r?0U=+9U+-aS}NO?3?AN^irz%P9dkPX;)e*e$NBVYM;IyONa5dbJPgF*(FPYQ*w}d*rp)yG?!Kz7MRn9T>?O6BS#3s)Q&ZhEX z)OoDCAG{CO-~Ze2Iac{W#_K=E=Pb(lzYU*1#Q{KQU+eET-~X`qob}#+2R@G%ea`3p zL(%6#Gu=6fK93iDp7q~FpD%53##Wi}nk6D`^cm}f4@jT;{tANpf$8(C-$9=X|BL8z z;RmA6=hCO)`1~Kk=MRg|Wk(!7&pHi#F8nW}&xOM0@gY8+D|{Y*5F5+wbuC`qSX^ zxgP+ZGxjTb8}Y;LJ;XAMSS|@|N|G}^1@n3-As%Keg(7&E>pJ6=k6xu`5RprHoD9jw z1$3w0eJkpTppx&zF zFLm)rEOl26R;e{jva`lq4r4x;EPUP5B&yt;09zCvKHV{P9QY zNx*pv4vl<&Jkh_~1{jGKR={IF9p1&5oZ)fXYlV*P0{{+2MK|1xo!KV+v|_~P?6-N( zs+9`TU!=Bp^DEIs3#g+qabR?``B%97w%>AH&0@8Y3mT)msE}QP%}bcfOgo(z``rS4-^?sPw^46P!st+CS?lI=K ziBvqe!UF}lb8EfSRk@zCh{jIoEN7>bcnQ9Gix=S<$o(+Yg8NNml}|FoOOdIy!cTW_ z@Fi|V!uM;8G>D7tC8YZ*3#MJ~uFY?8g(}A@{KnKv9peMkHI}8@59n1 zavv5f2UQ&Q-=8;2mr<3n|L!|HXuJI(XS@9o@@CAr&vHSJ!JAXaMfDUCHDsBbuCPKr zf@MrPMj^wttg;8g4CF8-T%*}XNK0hKFs)S2J{|>2?jxZvznx>pz~^@{4^>$kCsGxtREk8rA)ZkzVn{921v&# ztyT{ep_ZYt{sM!DRfI~cN9H`z@I*UlzVud7v|AN`Y_BDr_kw9l&_+?1S}Aqwt9-|8 zviQ0S|EIoWLJJ=D+_d^qj`d(~(AlG$eM%vvje{A5Mtjg))lI(EHR&bXZfjUkt-90U)>A*Uzp|mXoKp;y^=2w z=(&6JHnd5_Z&16Wd%|YHw0(fqKrNM})2mApCkThe1X-Iv2HSFJFe>7Z(vMCX6?ch_5_D70k2F%iMATTGfMlfv`*kOy*$=NRADA?H&jr#n)5pUAZ@RR22-*3CCWA;B|WOFaOzM=8Ns4~ z%0dZxg`QU8l8zH=I9z5Z*CE&Q`jPIicii$1(N(NymhqKdjtsS09kqfd z#zPd0g4IatV0q+SsmPr~0x?+-Vz^LGH8VSC16GC6xx0v~UPhdV9K{gSr`FGGQHmX4 z&H#~55@JSJb<%{pWF4f%j0_}`p&)i2KwbkVv!UKCWRSfD!K8m%Ne?Mp144V0>vfgc zq;3gqnb}|iMfB_EsM5BQif~*~0h?*vTv`h@@Om#j@4-9}fi%UK5fFG3?ZtTUmI}qU zD!zk|r&NG!E3c~|TwU#{UP(A{b=6JswE)#xLN)-x`t*{8hQ%X@9yfKY(53GDO81@M z+ZSpT?d;-TMZC$s$Qo#CmK!;fEsa?bIJL5=)H|VG^PXo$I|CT7O6IsSXptpQ-MD>Y zTutrv1)@xzd?K}w=WMq?GbY$iwTe`ARP79B+^R$?<~?sqxXg{rnw_exgEUwZwR6H(6-gUtsSHvw zd;y&^+b*riW}h?fMO&&{)e7|-8s5Wr*{XE@fjsN=+!_Kf)~LJi9Sg7#pRmW=ovb3* zbGn)|XR+F%Td-#YnQ<`Cch)wqD#ADe*LQ41!7$p^IeCRER~^6XTjma#60;rAC{VpE zSaWODj@d4~dOP9IT{~E1I@R-?s#sPY)UNu}W5=dI(=;TGQN$dOdM7I{sgBT!dGFbP zU?c|pTO0Nm)>8HrjDhS~CO?;J0J-e9`VvU8x(OW?$a;w_EC1H%Eo#8Q!3MbHa(h@6 z6&_PvVg;N<97ZmrH@giZQf4C~>)Kv$nEIh8FX%`7a<3Ul3NTD6(OD$}l${rT(;C8J zLcp^S5hFRU6uq!EAQc%HpPtv`FzUscZ}!{#K#cg;YR^(l9UJgX_=M}NF+Q@9?VT{e z_1lq0S(um^GQoAIG*ohZL?oR~w?D)^kb zcnc}wYKK`@KTXh0S{C5cjghIlX_?|)RB3d-^Hudy7Rrn$Kdue>R4G?RdKx%LPP>a1cgnuDOfeBo+*Y0+~eNz)y zM#?%f;m58UTkuRpwtT96oq8Qx7RSOp+GW$mY}&~zt_7}(%Axi`ei_i(ln|rTi}jfq zotxFNmU93hL-t-7oC&aXmmSSEicq)I?4GF3-X2%9P8*O=<3XQk1j9`TSW0njfr7&! z#Af&gCDNePUASCDQh?C`SzF2=wr=td6&&rI*{776Elg^9Lqf0{x=yIb5@}&gDM!^} zn@aq4g002GJJv-wPJSvEEieWbOzxdR)b)ssQgymzzlcsN*2 zT>Hi0+)&0($fjOVBX$mk#<8o-H@;&WON8_zqNO8fQDr`EI|hTJuChoz@wYhYD$C?6 z!-u1;vO>NJd^qYVYviMNw(0n4<)b2)dDi24e3kY1Fj+Hs+<&pX*)cAk`cK%KJw-Oz zo2A|`sQkCun@y!HfbMtLn|VVA`H*Mo+6vts<+b&UM6`)GG2(H0&$RzD@Ap$Rh>WUR z(|^71FhZvpC)%r5>ZmU_|5RPzWmTmvtq7`rHY1fiEvSBo3oW1LIP+`-Xw}OH?FnMZ z+m}}*7e3T;p3^_4FIc3L_cOWRyO%2|W}?!cIS`-vYQxt!jmO;+)$6K)BT**69U}3} z^6yr!^U+y*0a=n?&hB4J{UaI+n+}Z7eSyiD+}*UV@fYb=5R3Kvoco9^;MIyhk>CJR0l;ygHX|IgK43 zW_)A*w`P3T)(KBLu!~GuGq`y@n^R@jzHoQ>#%S|qPSQbsWxVEPEc_m*#U2L(Lz(5s z-jBHMZ(|gqc_r(?ujUV0*$s@Cf185tVgiRYb^{~l|Ct3bi$e>$f$aHTP|%G`WiuG! z!PT7kpHa{}=JP5U4G}bIevyK%WKySOI7HCs`Qt1jGy8#7f@E2D&mEW{{7T^A;Bd-@-!T)q*-vb!fRRKHNWd?Qxe+hB7fHZ9GU59jA zKvL^vIz_5mDhL8d$|&8^2~vWQwm6ooll z6VJ2=Yg<_uQ6J-wDrbgi{Gv%}XuNcTJESU$IzRDRQ;3!b-*SA^VDcRsZTSmN}Czco-G^^<<5FD|Kokst5ah~#!|zl^ANoa211MI zg9cG&7VRgV%=Z&(^Jxr+h?;9?Px`|&a%j3e%hN_wxkgcLx>@lAt*9r6uNesPHQ?|y zP(ljSIlQY@y6+kX*#`tWHUoY32~ABy2!URt4@H~vv^;Rz&_|*VUtF>Hv#5v~ zqTH?DFahJchO>{0{>Fm!rWuqXk0bQ4AkHGp%6t7C+~~nt#mKdCYx6WLBMW0Z_QBe< zGQ1fMa8<|#uR=C>6=l(TMMAsZGQ!UJY}QT|dAsQ?C@_mT49idj@peXJgJ1eg#;|N| zVaBK|CZjU0CCC_+4XG@-IcE%)U%18`o7R5PO*bC*>Cl49)t1ZEmdnec_l>0)QaU!z zldkHdQ}6Elc;XnK+-YQhM`YiOV|Qp4gB%wKAyEw^;;rc~-LAV$j?j56+$&MmwE~#c zm5GDX{Kz)mL60^^0e$kvt0}B%KlK|Kz3m1!&SD6bYk3@P(BPXk_qLfG`2#BZUW3=aB+du_j}E2=7PG~ zuX_`I$M00>X%d&Zu#D!7S<+}}x7 zZwTCVN$3HAufbZd~Ou+j!99OE(?x%6-EGz71y& z#7cL0kt2TT(IKt%dR7n9TEFWjFa3-kT>5E`D=0YLL9zd$m8FFScHd*oUZiFNAMV*^ zHa+y*;S*Jn8)q?KSOnoSvw~|DWUM?eB8?JZp#>Jmyg1hV@3bj-aq!tnI(3Xb9qZ0kD~HIpyPx*j zYhuZtPtoiPjzT;drc+e%a?? z9lJCBp4VGwqL=h|B5H*9D5>>Fz^uY}@;Yn}x5R^Wep`Amoafu(i>%7G4DEc<@&*U z9*@d+c|1k2n}=*B`Nhu>o*&QK;}!4n^0*ME%O`2^PQU+E&)wxq5Ko6MplM$JL7r7- z|H5s=JWlUN*7CRvkEiRQ`e0^LESSA`FrL@giC1w2J9xg_+^x<{S_r`G`-i1{c`&U{ zK6=d^Ex|xM@@%}|1uJP?EFkxD#KwY~mc@eGm+OJ|pilQATTQMdUcXAx{km!uX=k#g z&R*@(a+XZA$g;Q!m5eN2YN_N+q;6&TAp`euagB8_b9eg2&x+Hu$F)6Pqh_C{F$?#3 zx(mh4uMGbY57u*rE43n@;_S8O&1@TY8%nRy0Xw!hUSOwld9f%Kq>7-e09Ws@rwdVO zaz3ielC7FV5C-|2_VR=E>0>h#XNMbg7q1$$s!*BUno2}+3>Opfe7buW92*!ccsN5A zOD-u?VOa0POW%%7eUnUjy*oB>D+jQ2&H@vW@)P}gq7QS4vfZWuUGygE6?e`P1gTmj zk(c5@h7QYNZ_fAcjXn&i0|)07`V%R{FWo>9lc)|a7yjs7d(b^qqxw?umVRz(PI-8E zyl8u@bZ2ZLhW_u8&`a8j_kQUXKR6MexQ~~<$$FTr1W(9=c?G*v8ZXaph!t=la)+FK zEFU~FZ`IH)L(RxeUC2|g&yPIq1&vJxBD=D|e@wK1hMn+>pNO%r z`;lk;f)~_KY9R0C2#;#;0DP;uAL;fAc9d_2gJ)2Phj;x(0I_+zmFHC+Wk_dL7zYIIZ9qh$-pAHR1VOJr1oz8!B}ZmPI~C9HHF*Ej-{F?s(oav^Wkm(17fWC1x97cKWU-j7W9)EAimTSTe+)<51Fg z@U$O!%P%-4vQ+$}p%=oN&1!_z1r=jdmU$6mJxf(ztY9mtVvz%WJ6jg>$BGYm=QXQK z#6U3o;5cU^@}AO|@P^!&A$CKGmx6T;0H|KmS-6~qUPn=a zrTHXI|10+yOy!B8H0j@M5e0+_h2DMB^|k_#UkHF?VoSGi+K!j>ij_ z0dL2Ho$=tk%!oeFK@&5hN{e?}rw@n7E{fLXm$v#7w=o#Z$Z$f4B4rSUAz%UwC5%V9 z7z>pXFX*;;2g!rlxRHrX?LrV5VM>vYy(BYF1dj^_ZV!7*F0l5|u>d2XeP6(45|4NZ3QC|3EqaQc+P#Nw{*?5$>z^Qww;DXuHp?nc#f! z+hSDCvqb~K=)9y!1mRZ#kssf%EV zmrTKFcmNp6aD#w|cQqdwuY)`k_-3pCiET;xS%^B)% zjLk$yaEACO!M;l49O=Sx3i8{zF%PKkV{)&?A4{&#C;;5{kkCce!t~heqns8c5zDjm zeoMSmYmuuio;=f=3ZwkBh)ttyqRn&$qPmgw0S*zuZOrDpT#aSv9)Idys2?2?g1`(2 zSaD0w0-|y&`}gvO;aZ+Af&+o_`^D=i%!d{wuY?2bhkV2tOS)XTK0a})unIp{D6&Q7 zoS#t0FMbLJ*bg?u^Iq3-x`(WV@lwY4ZMdH%YBX*{88?9)&{1$$b@R|iWj~~ONv;|q zhR4eD&Rb&OKhMarN_>tLBv#r@U64feMAVOC`q0e*IDtyIuhgZVW$qE~2UDOCpuF4$ zS7tL)86s(Q7QDcq5*H6@b8U4!;@kU}G(iJ1MIYvI(5%$4>_8%Mo$bWg)Jrp5eg`vB++gQiCa! zyk5nyGvUK3oix9(r7*}_LIm_7JHZn5N%+f*TRI0fW73ZupK+oYawUcoe$E*0c;sn# zJcyMt#*KBVaoOzF#}%{8^II!pe{AZ@eri_4R&FZT$EChLgj^JB0K8;7#VZ`%d27_a zc-|K7!qv9yyd^3Tp$Ke?MB#Z)`guE9fr<$A^VX%Wm@d#A2U=Z(kRm<6R)hyM;=xgo z2AnfMs-=pxckDnLm>h5F9wwIt`gs3~@QhnL81sq5trfcNh?nk%Ub6xzn`5=%A?D@V zLg?|XnC$u|LQMOFQ-|ZFX=oht-(f+sYsyw55L;czP<~`7_VOi&#&%(^tw37Sg08CI zr8vh}3!s>e(#Jrc0#-OUxozNwl_$RzEkB5}YuQcXi~>hG;sr25)%o$r!Fcfj^2dXP z2t|!g@q_1$k7vKOThO5R>O$TK0augF6#`-D+ul^RC#$9iJ`-6ohcEZMe4|cncRYfF z1MDDN12FLQu+u~==HJr1KhA@q;8vLxgF?_KnISoQ?&PXvgoofr+SP7Ag$qIv);cag z;K%?zfhBJ6hy|AekGF?NL%jGc zAQKBd;igGEvYWkwt$$S3e~^~1q=jTFyc&J2UilFq{0I!gv#=BESmgG^3SQQfdPQg| zP7RoP5srfI4=25&PvNXH0_q2FF{@exlcDu2WZkR;*uKaiI6%i$#Hp)*r*@1gmV@*! zAg@z5g9n5G;b!s>Pouf%+CiXASJIqjp0YiQLH#5YHbMlu9uL^m04=5@grQXpOBz*W zlJAdC-5*cY44a_++r46V1{RE4Y!RtP(9xe_0ZO*m06(X0Mq1g-XmMH>j!y^U19C!>ldIGW04d~wLfa_$LF-^~ z!IA;BBcg7pVXH~UBD0UhR`7O|-`BI%DuFr-@~bp1Y|&!DnzUR6$E@YxL}up?JI_+f z+LakBctPXs=%9_++6=SFa-STj72lQ+p8XYtcVomgFqGa88~7&g^Kf@Ei|ZG83fhLw zpW1J-1ePEZmS_X$^}}`?_SpI5iTCtMx1kM>P2~BiXLt$9W(y?vXgt{E+7K&kizlb& zgL>+_5*EM3*po2EMGB>DgoGQB&dUBymK*k|w%>G=fz*ES5jOQ~f`bmnQ~0HAPzaRd|kU7He?$xPpOwNi& zUW*5xupLx}KiHb*J;sb)wDV(!Rc=!G9#ogXiLlSLR#o244R3=<@N8fKVa z_T`dCB8=q7-CJI2VT+e)TnWwBiJ`>nbFd~D!T%Mypyf**KiAFjQZqYn*!AFimoEcd zxW7ntTin^Y3={5^vJZ@w-qeBJVpsb0*CpJpYi!|1_Fi?eOGUm0zY~)&!r2|O0nHw$m;t0)WGoMZ3)DJ1>BQAX zFHI}Sl#eSDh$V>#g)O77^fjMT22vkP=c)(=rBd~-c;ilawn)2) zE*1R(dLwuV*B@EMly{~#TG%SVfKm}At|W8%R~Bk}5O_VUo@z2=Wi=lp)<`^JQ`-pE zL_KL81q}_M#WXa}ve=W>%!yE(-I;}w`A)rVW5Ki|N3G>xBO>p_9jrYz5kcO}rkq4` z)QE7Q#;Y>qr2`w$%bvk{6)agvpwU8PP=i9j$QGtcIns!wiq;XhfwFS>1r3!WFh-iCL}lgr-a(-1y=`D6-H<4RXWQKKDGvv6o~wylk|ws}_*jwm!~VL~;86$s9|l9Ywsf!)?f&Brx2M+cpnTppPg} z3?G~dnQL5T=^ot%28Ux>Uanb+Pd{9v_VC1Xq6yc=IE*|?mD)nSBD zzx9#@1TVsh4sNKDsRgPn!`vrRU1X4#Cc&A|@gRm9T+ETOxR3&2zXu6b>P$ zgwR`+i&LszELJH1osr_b2*Qa0oG8I%ElI=#B9yEOS}_J1VJec2jEcli7RvdPVVMal;!@D4* zwB9*O1t~-37yW>381m9VAZgR3t&`dvD}5Pr%Gks=V#VzebOlT6m0w4bS1rJ0>jdv! zDv;+ql>-WBN!qPM29)O`v{J-M-;4oMXn3kd38V{S=I>_uNBY=UrOy3~#2rwPeIYD1 zI6qqk%{|GTLC}~4cd$sX)|i(HD?H1HH0MV6yhFddAopoxNnxI_WogNmBB0BEc- z6k_QDpVx?FNpBo5a#ja>(l&o}M&{&8x@Lx#}>kKs9E# z0{g-agwf(fRHHwUjT&1dF%Y1YAOaRnL|Pk@H}TZUAgQ9>R@Iwy)en&>Xjr`TP;BbEOpf1Hw5=gs*Xwp{y!NTUA05MPoD;U{{NMY{Ie9 zYr;XV0OQV(9|ZMXh80_wOy-?nNJm%xsf%vVR{fUrbzKD{4k~ z+_>&6j6UA#C%>LAdL=FJv&bsrc~4`3k{d5x=Sv@qU4cz{=_d0w6O(U>$~N;{T?m&U zf|#_KPnx);DU3^*Np3Pkske}Nl``+mc=FSJ@O3t>kdCEI1jmD~Q^@*w@XcJJhxp8R zK*k&4>z353L&-JEtqj=JuVOEQkWA_ybOW1IPw_fy=#>c455j$1Q(?fEQx`WPpeVqrEEizw=+&Tw1Ns_NRZDv(?4${iZ572$Ft?qR4+hO z?6K)xz;3o)LIG`=hY1B}v~?-z_P|IOlq>1ByO@=j&uy$v&D)*zg1s-<5y}%{sp^%n zRGj-L*Ep8U&T?S}(*dW2>_DQ0a{h;l7w~>NpF@BMBJ4;P{*y!vUP^KXWAQN8u3(;$ zqEey>f0nLCbpby#2?93;JMZ5tqe9q*$}d79Dr=B$)Nt%T>>nZuY|$4Ywy0i-_yV!T z%nrRVl3o(t>Z^t$rLZ%NSg#i0b|=y>l~(EaGe_LwP0@n$q6N1i$(V;E<1Qo_2`9-& zTKy);Xql-CX6z{~z*2u0*~Q}$2Uc><1Tn#iGHw%_(;FR?Den zRoPXnTI6UO7*&~gY1%!9)raVPXN@MsCP;?HzU{~;??z}hddcy-ydAG4Q)&)xbmb)W z7m+EsM*g-Fq+;e?deqy|n@p+USOsP$4(5{t@pW>Ef*6>vxa9a9l%N98>OYVMuqL6}t?Dnve2 zLEB&zJE#asQn7yaaQkmslE1;S0dPZ+c4SYA&& zc}oQw8Y=~}&3N%sWb-h_NL~kBMy>Zet|ALVU47jobM3`dW-hL?y>5!RWb333#ELij zc`x8m@946^sKg_j!d;Yr!toBQnby{lL@7zqXGso|Dt_Md0aC`LoLHg6@w}~m;%Gs% zIRf$lK+A!S*i{LAsUZ=3Q7v zA_+EJn(dPYBlfT-Qzh)llp1O399NS1fdGocg<)dqq%u@ysUoF>qq9#+g;9fw_OTSW zz?w>V%18EGKGs`ydf*;qQV@mA!Q;wXqO&gmOH~q)r4O16`=pc|%As>HR6=iH)>)x=WWl1tga$Z|uya%D^T7#U$k|$D`}`@81?LPREKhDdWYj`B0f~5X7LeZ*86;TquUoPL<&j83Ls#0L*Mrm4HjW!A$^y zF~N`MCWRvoHE5d8mx86aLP!|dPId9TO;yR1mJFKf5p3r$UjY;g35=D9bA=&;qKC!1n9=I~JtG0Eb|{L-|NHizrXr%1V;+ zUDN8m%^mKW>T+LOrZ}r}Q3;8bW|0>UuiElkRpRj*E1AXbPfEmB;P`3DGW95R)9ztR zBX;xjIZcTn6#RB7CT{F!=?AEnL~1O&++bAvmo?vaim*`+)|dzUawWlRp(lqwu5f#?vb)PQ%kZ=mSFkt6UZb!w{nZlVw%tb8OD-$|-I_>%;>t^YrO+v_R%!o) z=qRJSq7dWQF>kc8Mtfr}M|pL5KEhSdUOOe0Zout!14|YYkpB4uxGK(Hjy9|Gy>fnq z{lSYmDo7h)tXoOOrxsuOk&n65A6L5h6uck!s$t^WEcpZV_AxW8^mSusptC-Z;1yI? zna~Szt;U5q0sBGD+>@vkzsWc=HX3G$l2Iy=86A^kH_9Cx9wrG=!;k<0Vz$dk(^2`@ zj$u(2CdYDVNT4$;<4KAonN*`xl4M|G46c_#IeL*g_Y8=W?b)1tvy+bw3RO+Tgm6bv zFSuP9q??9G)B&g)yZfZ&> zP~juJl4-)-d4YjEdH37ky_kLtAE4F7->LWVnG@+}356b;tcFSz1}&*qLI3|%E&X>Z zlu*W|jc=4VW&;5IKT;^QP=GCoU6gh|oMNp*(`CFCW-FlVLq|A}5HX@b63-X5n{ z0>`I-Ua>q3YLHHZs--ubPD%6z4A#!w^h2gyLTTkRNfK)r-TF@{l)9u)O0F@LywfW| z^e`|&v7XL8N7Dff;lcDHAV2GHz1pZ*bKL2bifCDS#V8A8A+FJklUC_(2_ku!T0C5< zWRlw3DT@izL0%-vOewqP$B3J$k;GsT$I_7nor@*0uoxz(b!1Okp25>MrLyE%pt^M2 zMyGHP4GU%ykJ#KDlCvhOn@|uDXxgIYG>Od5=>mvjsQWu&>Gz{*K-0AtU4!gW&2v8< zmVp|wA>uQVN5)_SN1V^VattdMNE&BPz*y++(4iYCmz-pu1-Vs~>Uf0+i!9HbZCWXU zZXI$U<0Y0R)T0bPYl1le2e~HhkoL6{qrQEy)#_4v7Hh?Ob7kPGV)Md zsya2q;V!2u=zr?m51A%S((+KV23w&LMej2NH%Z zsFo1mh89PrT7vC6u9XZ^W*Z>YV45YehAO2P2O0*|Gg>ZB0)fvN1V#dra|Z$1g4P6v zTlEiVqmWGZ@393r=rb#5maZ*enNu|}Qg9N=5yA;!%~V>T&f8K*sfa2pfgQ-P^$%q} z=&BZT{)c^hsN0uuSdF^DV5Vl_U=u-Ep%oQa5P8!tI1)Q=sTCKPyjW>>3R>{e){0Qs zgv@nz3xIWs(LtLy2E9zxmU424ehV)lvQzYN`Z8^ZYa`Z*EVq_xSIJ76`WofC4GR^KXDgk0UEBu8q5$th!`v@OpUt5?1ZVfXbdBu&6Fv3 zhJ@QFahWzDH({t1<3NfOxFC;g1qRd&X)e??5h2O;3#4wzf@H};1&S7`wJ_e40wT0P zJf7ado}XMrDuOeRj>N4@|Js5VuB6AwMp={hDZvow63ecT)99KukxbJ{6wWWjYGC1N zQm-V0fyn5O*N6t5O61g9@GXP9$%U=q9A?z%X02rzvZr8n8a@I+>G7JSLX(30f>i>p zcg`BM!e%?53TdGFDLYWpI@$7Pvx>vC6rc(?4avSSKJh(cDH(2mjpT=r-xI?r;qN4a zs^I@VWjQjq{72f$lJXmMiE&b0pG)vL38BnWt96;H6`w(nl>;B@>}D;EKjB)TsbD z6@;D?sE0}@pbIzDVOl2;qE+!HDWMdi86fSG#$B{l=n8>f(u7|aS+EN%T!tr}ydnR6 z>ZljvoLdfcQP0W_7gZGY@}}A`ZB$%J4pc~(^9?DNP)*6|F;q?Ir1YQys*IX43MjM4 z7K`BYP=4`NQ$?L&I;g{8$I-q>qvN#2QV(HT37B%#V$?>#H)Tkwj!H!ZL8&#T)L9Fx zs!jiky|;m{s=D(26Ourp;0*;83mu@PQ=-!jQEZ__&D8|Ym3s@mQ0TNwX{ppsr-GRH z(uxLeqPbp=!?dNP?KqRRe|>1DcIeDtDHcrtA!yYA%8OJ9TH#z{Nf0FgH2HsjYoB|Q zAhez5?ejeU&z}#u=bXLv`(AtPwbxpE?L_+19P8@+E}cNrN#A;*j7LzGwK;E}&+k z$cjbLR8;3AoPH{XI?9wpnD?_cwz(ZkeUmmln5XDYGbJrlsFgA;6f)0HB_&0aQ%OlV zb+SrIS}3YST|&)N>_a2aM@h-mr<^L;=6$Fjrv%i;hMdGOYJM z%cVn+>_!|}YQ-u5w(_zHYOg9WjzQc8%{T53nD(`vowW2@-0Si!^+Sm%Ap&si0hwxz zJVL(QC%FR zC*t_zyZBqXMV+3uYJm@Ya8$n*k?>-@!Z52FMED;RCp`)>I=eyoZk?E2$lVyMB@m>l zm0Xe0lso|cZ=NWjl8IHE^>5;QY>PC4I7O)+Bf*U1cg%Nk?OkKz>5i)RuCZ}s3vUn& zdREi(Tu=}y#?m(KTD&!~boJ|gd7c>`VLak{ZD`2c5KAcKk9<-KDRfn1Cq+zu{R(x^ z($uFzNjsDN9j}vd{`Mr}ibOL!M22CS@csX!@iJrna8T^W^bLkk3NFtZ9v;7v;ex+TqRV& zY|U%*91_(Tx`^nk7&Mu&zr`%5leQDt*)jD6fFxLnQnt9`-0Jrv%EEB;;bO* zU#cJiLaRpcV96V2j}HWI?zrlVSjD*ZA55V_S7njJlU!n8I? zWo?f~#_b{z1n0;1_wB`9YzPm6}UGW%APM0QM8QXrocXT-2YW{I=S4IJ%*fyLFcJh_Al&oBma8$>XKf@uSW7mMKOTysnh+FyHo{sXoc$ z<7%Gr{9$80fS0s|K%q2qcYch=C3|=TlkYob_?kQ(i9GOo293C#V~D%V#r-Q6cl-(B z7F%2=-{xAPS2~mXBa|Ph-$%N2a@p6O#A#LiFZsleb@n-91 zeUl-K^=o^v>Kj9?UYUMS(W_E#Ri)mps^1%_d%RFisd~mn9@wmExq-Mm@_6B-R5Lf1 zKE-+!sS6kpNOMCOqj|V3Yisne!O5@7|J<*!Tf0jo?lr|p-TURIyr^R zibhq+UsKBieT!7|SF`fXq3XekXF`O~)eLtRlg8B&y?(z`E)i*zWY9XP_EjELcdht` zPckdTU=bMg@1M{HAdcuBpL8%=V?9nE!Wzp0c*h~Z8wF=t?RY)v$0v-lm3&8s7Hloz zEak5hBC84)?UJVyX+Ee2#LIWf^|na;`Sf8WI~mse9qlpn`8W$2#5xjXIpNmR7=fuL z<0U(y$yf2#@P}B*-e~f*L5Y%=BK33R-t44KkJR4_Rn~Atk~2iD;rW^4qCxZNIG*bl zyXQmdnaJ=-1U<6a1zF!lhI3y9(Uu!{G34ns$dj4%M26b|qW7qiDsVBk=t`xE@Hd>l zQIN>6oMVIg|FMX;ji_f z?Q9mjl8=V$2iS#$fIbPmEgLF)!x$y|>0ehc4lY{XUi$qk3ajnScaH~Eu-CQ6lP-t?R z`2rMm{bE8fpom}aklx~>A5q1j$g}j7I%Jt(1-xdyzSAr8pgD7SfQe|oVWIpA1#-lI zhm`mb>2bVLSv_K1d)c^JcB3CuI+A-ll$>J{d`$_zm<9sK6T*r~ideA59=IOS*NF9s zh@x6wEUI}5M6u7q@=E)9C1g}KWQ4C*3`D|n#eIT7Vijj&A#Ew}Ewd31Do}hVe6rqP zkoE9=ebKDI9%dj#4&5NRN~RavcqJsrhG37Ykb*S^kbY)OH)%8Xf^q{1MCL`|r0jcQ z$v?ncNDo}})pR+1b1c^U+F;NBz}{qe-Yn?HRet3K<6`+Qg&E8W2@@nnwqc$0+HMt^ zTC>$QAmmUdf?-Di{J+b+pumt>}rl)4=E2wdyHXFKrYJc7e_ zAM0J7o>_r=!4hO}G!P{uBYfXmtTk;yk$edS;JpW z^MOLCVeh}V4Yv-Ript}%CY|n9zF3ub<(U0FLoAe3=<4-JA*FUy2}wA;f*p}+E59%l{3g;g z#ZH+KD25uIf0e{6*m}py;O%-ZBXe;-Uio49`tI6=AujLQmvj6{$2hvSW0#h=C_Z6S zTt~KS8vtF8`LW*0@lBFXsyt3Puaqz)O+4=c%Q8y3`1l~Eq+WB+WeJj(Y_(5$8ePz2 z4eHvN7~iceQb|+1WILHGKs2=58-JY6svO@k{%}e2ZC7B6x@?oMwV#+JCy%IV@Y1tu z8J`vgrio-G_^5s+^F_FTe)f*nvgWMUNdFqfgZ-vgcC@`D2alyEZ}LV=X5%(_i|1G5 zd%at0+P(8QkZH!c$f|?$%Kr#9)ST^c66&OyRFAQ`Bs=pnpQ2#I>P?xy*0x|Qx+ zYJUyF@TCz<<0~EAczA;mhL3Dy8lQic(Tytvp6Cn~m714Cv1Wi~R$xfK%$wsaD^-H{b4*y&?!TiUr z0Ql=#i%~dOwvTu_zI!nU6Zh{JRf{*Rvpjim7Z)6QTt(h;T59nn7gXJ?AiQ1Tt-T} z26yABJDU0@Yxk-0J%-cSUy$L^W~fPt=7w4*>*dq6u<>Zv!h8RMQC6kvX7J+bY33iuUQgvy&P7lmHOx8n<~zqSMq)#~b6SNY5V z5Ijpit@*d%K3Q$2Gb+zg9~2{w0MWZ8TE`^Cu48>DgVP6Bth{WI?1Zxf)uCk<}F?%5v`T6rGEf2&Vt94boiz~EC@vurQ zoM+6XK_N!CyKAaf5jf1)3e`l|xGME;v^d8R@i>(oM6>PS<_ItU?C~bOn zBRR&J4@{I^c0Ae^czMp_xJY@msIzhNI&T$azKBz4D=@k)uNKb4D$+A0W-fv#sWyfK zX}PXdi(ryp#q^Ms1`UOrldKb{) zqv`GD{S)DLW$Az|2|ixp!(Wf7V{kvQ$$5QHw`yaUr2-n3Tyew2EY{&_h;=g}&Msx?7m1ni${*eOW(Y0ISJ= z_C^0Gp}GASwjt_Wq@Bg~sF#ijDbXlBQY|z6$tBPXj0YG)w*?hxU7^iyOmxxACN(hz zI)Y~>E;sA$Br?Ki=2$JUL}`tjGDS%OIXY<56&I4clU;%hi(F6uZ_?(et4%Dmw0)S> zg;5%bvWjW9+EL`SqIMb?G=bdY5(8ar%zE}{@Nw5kLdnlrFIv~l+8H8h zS5Rf4mPNR)a&F{v{ng*mo%PqWKZ0lMUqkcUES}kA0IZ$DGhIGlK34xUp5g83PvKct zF3O+4voFyHefl zKKgCT^SOR|gU$;3ZU2rOy6vRm8zJ3d_46&Io#^xv5SLSC=@cnGR z^ahWUCO7}`93K4-(0L=;cHzf==luJhN#|donSK4i{Od>OQ!fVJ-k!smwZsf@=8t%_y+SNT2%O)Sq~7}Qp;q;6=x8_X+_$0Zfgqy(Ddq7+b$R-cZeFu^=MVk(41dhW zW4{4pEI(0i1FkP7EQ`u0m;Qz@Q1_{zW6MTCUzUA!R|1${1>Qtvji82Jnq1J3_r$EVRfXGv^-F~ zPmDd01M9*J=LNFB4%Nj+_;b}7+wh2QtTRSL{)F<{{Z?dhJ~C0qm*9 zx3L|=-j>y7obs{#P=ULyCizGyLHTG-BK2>fYy>Yfff&m?MRnKPz=JjEE4@bZ)#LO4 zU(hd1cG~RCrdja(v$=_S>^V(TGYx}%Xi+3*Z^zoWTUn(#XZn9t!aTLP+;srvtB>mf z{X%Z_wbODD%%*S$&Xh3^$KqDmAc$Mt54sxR16|=pc@M&=l47fzVw){E#R#1Z-jstk z8e_V2mDpEfSiyR3s8yaJw>pN#(VX4%MWX&_r0(AsN>ri6YM0}^`t^Sfdt$iYN2#Sv zE#tuW$mh2vkZpeUv-x>Ss-2XXoyF3qWYAC9&SyV6pBCG|8V5$YQDh-BWu|M-1BVBg z0U=n-Y;e^xs$u9B>ws9k8*FS~`MQF{(~M1WeH+!s#K{@ythdVNHgud#^#<(MR9{S8 zW{C`(yjc@7O@g^nXZG#X+&;{4*jLV1-NOAD^eO$Ijk-2+DBfL_zxP`a{C(o=e?#rF z9cikN;2Q$siy_DB5^xI>(KT^}ZR7lrF%ncLoo^2?p4ei&gUQyTX2B{sf~mJlsbDaJ zPNQk1Du#J%rMX=3ZKbTj4YwRMjvQ_GjW`Aa>H-b)$b+SY^_CUhb~dcttmJyfDz=e} z9NtwwV=uc3YS?LgqOEYZqbx*n%b^*@)&~Zk&E&ANy>wbPAx!7R25>%o;Yy%LMW&xl zZpY6GM+oJbkVNyX{;k5d!J1_>{@vc=Y47gxf}U*`eC_f9WP*m1qCGWkSKO0wH{ ziy`VOQXDV2J(_Kk)eUHE}E} zaYT#+Ww<-CV#}ITl)QEz*-V5NFv&4tVrB5~R?QeY7H*fIp{qq}{mtT7!5x?qq|c=4 z%Uy|#N~}Pp2RDy`twXC@je_2va2cr5q!`XAI9;*ZRfJ137}t;4;6W_yz6$1ua-&`* z8nqTPlyEUp@G_88FlyIK4U}q7Y39!qlFDUl+VXM>2jj_@O1`4&z?d5vCq`gxZUpc@ zLJ%0D$u+~T97Zo}jWMho0!o{w0S*UD3FmK%~=sI*%hWaxm;*i@nxkzRwgO-!o>OSId>4WXD& zTO=4!Y+wX~MZ;N@-ndSWO!w0aU1cJC(#3$FR5o#^RmfyvZWvu+_0fA1)6W5kS1EC} zgX}mSNH6J!=?S;}6VeiCy3x$qfeU``c@gt6=+;^2TxL>nM{Lb&ganLCe>M8e?K-2fDN z=uH#wpi+@fgB}z{K8-G9xeHOwrRr?vs0&f5aV})FLVUXvBV@!P8;s!)YX&2Rt1i~n z;P^(dC$AvcFqY1F!(ZcKPO_Zf`?w2pOVCP8P-890bFo#!;9g=wNlU?NW~^3WooscC z2*V|G&rwdcM52V=2zQ^!GNX%PRoxjJvH3FBbw_Pt%QhR?Ozz4%Y5fF~vgD&y_0ei- zr*qhXl_|5^)JQoaf!(tLX>ggin#BU(+lESjcc7D+prfBwf4rD5$<+k&Wb4|%fmQ;7 zR%@mk0(TtIdhAeeZ}b16_QU9C>`&hfEECyo5K6qa8w@Q@)eVLnt{dbrQ0J_(U9etj ze;#!3k9EdI+N?2CZ{h<&wKOO3^fenSbH>Z8Ee3%?x~kJY5Gsz8L9COVoSizJD8~x& zFjj;eac&hU!DjGHCWbo=UGiqU{AIrCsfantnLI%jhni@A4>JL8t&-OpQ$Q?>@9)ieWiAIpYq|OCtipl?JsVSFfbU zToSs2x>DUG4-fK^NAo#jNlUEIXL(n-n1=3WHeaPty_&@J~bF| zsCtYWm5X(XfH{}!q9^E+&6a0*kSO1*o={tM;n+06NmQ&2%XcQq_fQIX$=fMgOgJKS zfSQ(+$3%=tQMsjOa&8u1LM2f1Asz=;(a~R~U5&V06)qC4hEZD3N~A_C|1BafK+fkxM;V>(IcWO+U9-#H#SqWSYr-Qi|U`Z z-rjd5S+j*cjTmHv9i0^M(mL!Ki1-7q>oPRJP8C9F8JJv@62m1PVwn$PYLrbYyOvUj zCU4B0VUOQlu9F=_n|a2PyDX-NqpAsg(>l-F!pQUH(iRfSQpuMSJtemf;^=u<%M4wT zl=ZmpSYfglMG-DE+_NYahZGcyK+k!@w`zef>b-V4+xOmGEiH357!@xJi3$BNu z{Q62%`2}2B47V6Bz;t2+z8G>Wq4hDVoH`hv3!SRvXj`E;z@Y^xKH7G#5O9qK1Whp^ z!H)N{3dk3t#q_lxajImTMWHgIAJK}0ckoFTa{Y2{1ejuROe@AU-7Djx*LxPnOvX*8 zJKF4qLxxJ|iFmDrZeLC1;wf5?TDn#{3pmEc;1#-y0Ttzd)m*Db*KVEWh4z>m0#5U8 zg{7IoAnaQh>A+xN?;bq~o5gO=t-vISbUd$QFmc8z5pA1=aTu7WAL9KXRe*P$TiUxn z8^H58-`#owl-;vAIN;kPEk`ONi$;XGS-`@o$f6AkD7^Wwqr|rNMC1UvB!2;HiAz24q zvA2`IAToRuiRZh-2Cj?@=f0)+>Z7>?bA&50{DxAQh7Xj6*||MtddS0Zxw(y#@oBzY z0~}nkR-}s)X)gyCuG1^T>X7KsTLN%zIVnOa_deiE_!dfp(n+}3YKbwg=ndZfwE^3Xxu-AOZ^%+}LnHj=2 zDD&onh}yZDc{4Pt!AmcJ@9QEe7Dfl*ak!3--oi8k-y<$l&Im7YUBxxrSkUKkZ6waD zQ{}pf6mw6N>uOSj-9xVbp6i~(+5s6u)$VhaQSYrWg!13jD_;6r*7SaLZ+?Y=eUm0g zFibcN8Q&_;j;X5Mo-f@+g3rU8_^N8uPwlL~%L~RGrW-lGWdhNCLHU0$3;b_-WD$JW z-t7oFQzbaZKCf>JcgFKJ=IoKc>Q?#UFvP}?)Bk#-Q2P2N21_U{WKO;@-(#3^ymhX@ zNE$Rg@@GG=wM+wz&*Jxtk5Vu`Uf=jEW_%RdH$M7mB+h%rN4YXSi{CRoO2PPeedDv* zjgJ6*9atmSW0J=c}?F^Omn9=lRcPhgWRCG z6#3OvXE{^7Z17@mz7!Cnm5~)6eUJs+21qk2mb!mJt;$RHES-rZO5Wr+*h9^5}iv)0Y_?y87Hd!O;?%UXfqj zr-LX1%Uf;f?`yP&n|@ZR=AHH*u~glJwE){c720q3GZ5S+T393j)pUkgW&pIrRR`Sxat;0+1@8NPtG3um- zIu*t9_j3(dMcj{$3#PvYpGg)q>rXn0os(ao7h24!#-1(8l-&|t-$rF+i0xLLWpB(a zrpYX|xE&6D#R3<{_O2U2hI6;WsrG2-IOjpRQhxk*BzLX>hkQL(nOa5eq$#d~ zaIMzvtJZy)duIGYxG(vBCgvBLYza$~L5Ifwsoe<7SBJE$FU z`j66^+p~}*9`VX{)ZpJPw(MOst$H-lL5|V09~>MDT?SLT=7UAagX27ZdVvn#7dq(3 z%>)eUi)p9#CH*Yq*nRSqQbh&aR*-CC`Pe{YjBF1L?n@9T24Pu8`myxLqw?94^XbBl zec3zvsMf9LLX^2o8D%Ne8rk2UezSQfhTX$`P!lMPOa0BT!Z>i;3RA!v9N;2|Df?^A zb&r>u{P8=@8Gk3t{%$%?*Cejc05ZTFG8ES2Z^_!Zq+lKwo$qex-Z0-Q=NQz6So7T4)22o=v*kHO9w~2QS+p&)rML2!N z4zfeO<@AYyBhTTEAyl6fFlDa2+3#Lpj@n6G9Hu6vUXg-#TG!YG0^SzWHqmh_fmt$x z_PKM{=8E_f*kliLv<@%TW|^3;cHyillgn$B<%L1F@LQL3h>t8=G07f&g+1z<3}$}3 z*-5rp203@}Y&>m>AdFBs7npZ=suEbK^{W+|n}v7;-}(g$0q4R6L0C@a$f>NZu&fFM zOUiePan%Rb2YleRpLj%{tLTVmScLdRKkS0%TQG+x2!>~X!lnG`~m8?u**5bC;R{j3mL;h^*RB+X(Tq5-kwJH6F^ zPdnFIJJ+n{AuoaH^&&W^?bu$!!3LFWu=>xRpq{vTRdolXfaM8WZpmP8m9BS<5g;SP zBLmXF3$@?J=C0P2r4qFF8TB*uv=uG>C@6N{RwLgQ=HTt0YQY}hRNbuur?4joRS2;( z9_Hqjis9AHBAs9j)UCI+uSleC;}-PAFh=GIQ0fK_Ex@TgxQfUUT8`2W`{Jyk!Kn?{ zvCf8Enk!62xSj~M$qhGsl-8u(3(H98DNu&$CiwziwG{(jwU+|#S6a1ZBXq3dTBe%f zNp&&L}lD&G^ImkbiaoFClgI1FL|A4ZfLA5)TvOtJ4pxwfVe(gT3&Lrl{3ehD5 z-x8+%&r%rl{&y%0Z18fMnm?&9kfy**DrmAp`K*{@is9RzR2Ue#{&9stw^JCHvLNo? z(woy2IJck}rDt^oAd;bFswY$`z>1sBKpKQTr9pZ3NqPgPG%)SKQKvU((qR6XdIJso zpQATOlpl+m>cI2{Ev7fv35sf(IlTcB%9LBx5^CVX*!G zA)ZqhY_T|5g+WRg2+$Gy!T?!?!Qw37V6eia=%+Ba7T`$=0}&JDa)U}jeyV!nb^H_x z14OicT4B(XXBpTUKy$$2#ROomV`_jVN^lB;ZT%Dm{uiCXUsbea-$l+E)7gY#F(OiiwqOfF+Y`8U8{V6mDS-l9CDUql8EUQFt3Ir4OJ0(I^fsjJAae-4JI0b@q2{5)M zF&w>OuIk45u&lZONeGN5@*5ou`!~9aQ4`TnN1LBcuTN>9#V=GEs_^I8xU`X}NSqS3S{$Xet4{Rt zoW;u~yFsdey<7FuEU2q;DC^HAgS|B*;ro#`P>KDGkqZ;^Bg`+=ORFUM6b}a<3j6mS zBYf{Ogt61=m%?HbVhV`J@KL;WMTVQoWUloP3WQL1AP|3<)2axTBk!I?BE)vc9-x`Z zfl;4tkJHGyTb_si8(XKXT0i-d37=3IlnPVuLCFK*x80Jcv3Cxa9@|J77~*a{oc~)V zRai_EyF-QTMltUmmr?R+yqGULG-LSWlQ~^wXawZcM6j<|%5SMSF0~ z=cnaAgpd6=<<`C&54(KPD~k~6nsYus{r5zXe?GMEB$vxwKV7YY^S8(3*>%{rs><_l z(JJ>nid52BeiV5dHe+Nn)$OaB=i9akGpyH9!neviVcYAx^xsKq8_jT_g=%Lg7Tvx& z{E+VP_AKO}J{V<-woe~umGrSUN^$MG!Yy=ZO|4cUYUwV*ynZ>CUp8_H=4xGrDe1}c z`Px1&GQBX**|q%4Th7n*jr@F_!WY#vi8@&xW~<9SV3K`3RAG-tX4xYo5zyP4rI*@T zDP8;P2tf`FCKKyw1RBrdFX%14QM!fwD_@BBX_n)-FzR20;sO)39fxpcC;L=uUyj$*`H55pIbS#$$o5SCe>74C_2Vo-vOT~5$n>re9`_ob-n&NV9Xub(;=N@j zxy*w3+gRLsGeek*m8lhPkVU^3pL{8wn1teQYnkO#5OJI<7GZMe5n$vWzDBdI<<}ZoW-=;AlcE;alpb@e5Wn^X$Su z_Ky-7@HLUga^wZ0Blk>^)qhT6XvUJeoV2h5X(9a7L9c9Ar2aX0yQDRjmxQS`%TlD3md;O($zy;_p;VULVpM)JlR?7E?{77v=zFcaFyDYT}&I#)%ZN5s&isx2Lab-*X6dd_MPjA|gRc1%N8N$Fh zQX<`L-N)1J&f~eF&4t^wd9Vi+?$fT(RVjQDI?EpZVtd$)ij3BBzC>SQ$v60ulgbl4 zcrK(oR_}2Frq^g@ATgW7qfcV?K3wFw*(4;jd2??I#@I0&-1_M!3FC$W(UDmCN*F7b ziB?4)5OyU_@MxJLCf8i>XM8}?IEleuDRx)N#_^O#ni;cAP~A%2=FC1P7#FtsMW2`g zc{ilJzqA5#Ewm)}myYAb^S@J?X91~W*M#k%1;N93{7$bBB{2PECf z0`_16RZ`GGB| zJFd)2R}^Yk2i2T=bkm^fGcq+V6y=#;xy%J+*1pWE=|VziXVGU*5&!yJ{IAV)@sGIp zTEEQ58w^_3(?l87f3>Vf2R|ZplS=aPObNEErxrk@ZjsHhdEHz4^x<*;15;;#&B+a= zTkdWnmM+0&cQ7R8f36rmrp8PSzr2$Jb)|8CHVSjI;uqn94S;Me)+5~Ari-qBgq}#% z+qSmp*SKL}=3&sh5sT3clUNnu{TG#BZXnqL33-TV3ywA+B^{6B=im+AL~sP<)|nX? z>cBlNvS>VaFN`c{EnXP8ahqlCa_nH8SaM_(*}`Yiw409;& zv^wUS^q2s{b{L?eIT|U;SFMy}PcdJ``pQ=Z1hosEXSEi5XqXMvP*#gt2|Ph|Hy;Ob z^Dz>1pm*wcTG6rzhew8A-WC~tO)D#w<4~<}!63EyqxbOBjg2Om8B}f7N5}!+{GzHP zhtzvi37WEG8>P@%>P9hENvl`83Z{uS;tPd`we~&LR1K}JRz*ue_NQt8?rdvm>CNgi z<+-=$XP`^AZROmo6&b#yGd>k(>T4lPLP1Z0z#@!FmIkth&9Gd zmVeV3k>M9=@A^q3^>$YQ_)kl1^KG7il1p;?ArU=Ea>e*6{vw(vZGKjn&_jK2-~|u<#cMN{i@!`b;(YP{JPSr zD-V#-hwoC+RQ|)axECv;=&SmO?3FV0Efru@DI}kc!|EtW)x*LT*`9r;M9F1`LIYm* zg!ae!R{t-0P8rIs?`eWM4(qF%gl4(Pb4{!AC2)^^*lTr|G{b73T6HL#?&j?UqTAtZ z<^8e>H)#XO{y;LiVbLRMyfU4nmJ-XVZ#l2Gpvc|~!Fyj-p05*e#bT9ChFkUIAssI$lB*wIt$gi0q~1W8OvjRL zpMHL)SPyl&9@zU3Gu~>gJUi3_i;nO^`H@BMGUDwD4wUY=UyA> zMV|&Vi_aJM-20}I9#R5p#~&1Bm%{dC(|7YCET8}y+U;sU1T}t9hkg|1kixp{DTP@@ zUe{X>UFtWg73vT2c~|-TUisMlL=4$#L8*9$Ae(4a7x6F+rQ$Cs=o#g6jP$>?R2rYi zqgRvRUOU9d(@yjfRWxd^9okpor}bmnE2Wbv-;jZf5PB_oNTW~XTo;qp#9!fr*!!T3 zG==|xC~gAraX=ZVrx;^?pa>3o&7xYc2W!<9`r}=G_Sz*d`f5{bBpx=iI$lvX?9tCt zE-T*l>65k_X7NIN%_>cACK5R_Wjj8aKST3;k;b}XyME5@xJn^Qc8Q`fxX=||!@|gJ zU(v@DfzI7etmj4EI{5+1=zvl;_YJYb5po@5E!D8oV}^iM`Mn=_C8ol_7giJHVw0nd zQa;>bkR@*^^m!HcN?06YCP5`-4^p)>KErA=iov*g?J=<^sf)GP=$d{w0UC@-?&0k-^QjMAd6m4Ws=TD;^7$ zhv36F3UBJOk@}RjOGw+r7cGZR85dm(pM;~h*|p_Oaevr(S8ByFMrX_2tw6-qXf+d? z#Ol|^^HyzDZ7JkqiR3D(R7Un-POqNjg(z648cQ|}l8_+B2?a-f1t;(qck+|rjoge& z;A!zsYO4l8%m-Z=x%nOX$gw;pv|=+I)a3|d9lt@WH(@_IPpW|$nyrDg4YtACmI=P5 zdVF^&KVR%u57?4;iE0(rMuofacvIuS0(T=c(v63(oWX(MM_8at*5;TbF;tHGQ2mI~ zL62S47E5-Y6{+9LT*Iw)jiy|mcxHL3GuigUCAIWpb+O}XYs%n}FTSZCPd!3B_2A4e zw-)6s&$Peg_~R=Y3-i{JS?|Vv*)2R>ey=TlZ+`!1`Ta1=FZnO0%n$yX&Bkl8OiQ1e zzI7B1yGzr5Gt%?V{uWuXGfQ7nn0)oJO8<)9)UIU*X$KP7?)+PeC7X~o1*vC!FVETo zgD@ySOH)%Be1tNSCkC01OmYgUV6h`r$WcDwI_jwNTR)l6zDUG-&an5%xIZV#WqbrfH|-AX)<0?6UVgk-BM z3rE!`qgi76AR12d10RtVwcdGWVgFiJPfeaEiqwCa$N;CZ^T}qE!5e_HTldfYV!r}1 z2m8W5`<;IAaff2@!}1<^urOQAyIn(n7#6K=$yM|Fq;m5(NWY2ad7`Q}sZ6{wJ2u0% zMKw0AVY&K!p|2j%{`I@EFZ`!lit;i-f3v^$&;IGR3-dBdtYf%8(DU!rbwI+gIVPrz zrFy~}Ah;Q8UZbv_O1|NthvG(}DrERo%cJRgMv_EUh#a1ZbGQe$>yegZQ+}i+nlf0l z_q*zUEO?g3rf#Zv#+;qMUrmBI+yTp1MZh`PCB)2HESV zTCL0L2pm)$vA}T(L`v^mm?qmgqer(yB6T_%FWZ+gEE1PcNYCI~&PV20K$<(_MNrf` zk<5$O?;Nay1<3=rKkZDuG9*&BjFeEI>x%LwU02lT`LpulQ;*+#BSF23Bu zLHj0~x7R(XN71m&MS1PNCcIx^!3{sON%G5Y>QQulLt$R~cOjix_04`3BiR$+#1xjI zbNKt)QhpYWL(RgN%wt)&zRe_~+o_c2N7=pa!eG-4`W6j3%bJ%G6-Tw{hP=s!{DVMr zNm54@nSg2<@v{_W1Kvhhn}>Bh1AcS^*h7a59B~eo zx)I+$r26*AqeF*GiWfC`zL)P!-FEX04D}EV^)LkuQqXJ#X{0TvKtY!)NCRy_g$nv> z1!NqRoGIWuA?-kXlim z45PFn*im07tT_y`j&RbRc|wdUf;qaI(LcN5Ttkeqzc9r3I-QlwA%>UwwoS+_$x(D0 z|2ZM`uZAMVmjusmFtoU2qoKu79_^0>U--Tu!m8U15ysyGB0Q|_&U_r|0Y<=0^j}Ox zU!1(i@S~U`vbDDj;vR!9P+skA1-yOR-tvb<>a{#X9?g>^uU^ZR*VT-*VsFi*oP3Fiy5u^D{IE4h#r~2Y&%gM*FPc>BzD2AYA0DIY;8-uBYyaAy z!xr2~%xcnxYfSLU4~9UG=5?1hA)e|x|Ku0NzIr8i)a6fpf!Mq~l@+E%>K`CLU3^pU z77|vv_$4kq(0H*-(z~wzii#PS&B+RwI<7NImQsFb8vbo{v}63T`rznVSNmZbzfS!Y z_N(9J)GzZnBg?cSxT4txGuI4{{vu`sR9a z_xwu^@d!#r+XW$)3;ZDmp67(HF_Z#>_0)NnfKjOfLs$==-M`->-h<&lum45rI`MJEJh=h*;$N#JmN7dr4|0-xc)R|p)A@0AYR%_C?>7xYKRw>USx zy#3MfMPUD@=5Io^2*>xc^Q;X|sTS8$i-F_&lfNTo|MC6c_f9jusq6oY@ttg{)U!YE zJ{#Y`T0(R4ckU(G@x{LQ&z-*os$c){z5BZZ#y5$-ZxHGYdlWsywVQ7Ko(Z=|_;uAb zzR%S5jqi{CjU2=Aedw#!Hy@*rAa<^e@7)52<9m+-e?j2$9e9Dj;rM>Vfkz2^Cg6VK zo4FtuK(lAZ{0iG(%yB+lbSn_d9w)6+a@+&ccL~R^?uy(yMx;T9W1eLrm)t)jQh$a* z>M08^;OZbE$tUB5B~KxMS1N0sy0=ojz^PQ(CIx{9AR&F zBTjf`i;2Kab2j|romHEvrXH-mGM1iAJ!iK>)1N8q+CZ^`YDU}U;br2}s(m#-56(rH zp=(B=vn~)@>wQ7<64tlxgy%z&UtgWCy7&`lsh!J6vtFlVh(-9yWD{%D0N!dX$lu%k zI^7w#F1xi_w9;$CsHDQmnD;qW|pej@11^Z~m3V-qhyE-9O@^GS#xBs_Eg+ ze)eHA!#f&j!3$@qYEvx9bx8N<7?~`ZxN9It-dGHFG*#b7PD3!WTpPJ(7vQV5R8A2i z!WhB(fG1mmV_+yP^ZXhPNm9>dcu`PdZQzWoK*a^SgOQ79@7~+S#ZqJNQ?hBIt*`@F z+dAcnqG{8_@}>cRS_}7=Qq`y8{?aBDyQQi{p}|rsJ8LB37hUqjejNCRwDg}9WQO5$ zqLkR}cQ0HXj9$k~?#$^Qg7jjrrj6zIa*;OexM58$Wj70XzN4NAc;5&nU?0EXI-CBA z-10d?5GG#2zo|P!l&3+IiSen2m;5D{@G(Mh9OfpEl}74rW{_h3)q%I{xF+PSgQG{A zhg6R{U3C1!@ePbCcItLG>?{16IZJ!YE9aDO_hoi5TXRQ&!C=7I*>N!(mrDpXz9liW zGm`ulhy(-!O)2IxZ+d0h66MWt{>z&S?mmxQM&jrP;~zL2d30-Bn}x1zaSrPWFuo-= zwI_1-JR>}KifAQuti0QkDKr^!fQO^txeVSU1JA!*8ORF6pK(Oj*2Q#6hvVQaUK#OQ zxINAiVs%9oyIP|kto*={$fHekkGn3Av|-`Ls4vs8TO}%OcQ&nSo=f|drQPDv(sT~g z^-^&a|F$bs6*zUdZ=b$gPI(L{m(u%H_~?5Im5~AEmUH0){$LK%Pr940q*=dxJ=CQh zq9^Rc98p~-=q`|EnagmSeQKo5t$wp-IZIX9-?F|kIgvDl1oe|fP%#_YQZqLAWI1F5 z;wVhhwB;SI_EmYA@1YQ19-R3r=F7g^e33_B=KPAUGi$cO&wBMoXGbF|nsf;rzYwW9 z%tP+bG^+2dzE#&w-YWwO$l#CW+1!k#nxf0v2pR;idTbR`@O@0w>JQJ${L7=#de;KW zo0qweA{H(e_yU2?nU|RlcwXi{8$EqaQJ4$#R&)JBIS%M>V%Lz!- z{~=O$V3=NT#QPF2*uF#}_bk<$|4r_)c>}WrTicWSnaa19>Jq%v($xun=%oxwJ46cm zf;I3h=>+G(S^v`W>_Uo@Gkm~S-YlpA!@EKXNB3O>4pNdj3mbYKD{&N&X$tunjRkI?Vz8<7n zx;mEpeP=BH-9-Ld$yeF_pFrtL1BXQJ*-hhP+)S7sPi^(exYzF(;-!riSTi8(-w30- zoU6)6)zg$>GK0uH8@N$Ja-u5x9Xi1TMbXGk%!gRm>KD0lId;gVDBiCs(bXtjC zCi7BmeOuQNHaFX#rkmRv5BXyGJT430SJ3O?poadnL)EmilOClkY0fSf8VPR5tUKk4ZRNOJl{qycgcJ zRJJ0n ztmGVhXUxB2SV#-jw$E_&46gm9(Sg;>Momy=WYM^}nw;Pxm@a-LoW<8Dr*K6?w*>#ZoWD%ANtY2S@J7XSzb6hQ?AC;t7B` z{7Lv*=1Z|xhRrBz&-pjTK6#=ba*saQ0AQ_k9ptsFQ&L>S^%art zZ5CIQ>>eEXUQ{#TcX* z8(a*7*6+2w$GV8B$8Ogv(-{D8;`ktT$&P9kj)^uDjs;C%+}}p5Nm-R+z@5sm6mkW| zYA4Q$)W46_D6m2oxeFnzz0X_exHR82EG|M6`s!DoWa0Rs63m64*|XfIBlBF-yFu5i+JngZQbf$ z47>$6eyK=*%~g(Enx+6o-%KApcgnxZTg_h;c}0DlTN#C|$|bD;MpSYZ&J zx%|%r{xooC|8)N5K>km#EX~ithXVgCaF&AU{LO(BoM0_G*O7qhCJY1q3~*M4>HN)M zae$?&?_wTV{m%ma?Bm)T66q`=@i*tJ%rVV%Cts-Fo5hru!IYQ}T7WIET$9=R#><|A z3PG(}NMPA`WiNwCgv7G57E8G~+U+B_F@T_JdN-4GB9rCgnt4Fs948v-^B zSi-~~&fpqgI-wwP@9!OApMC0_P|>pgi~$YEa9d9 z+~`+Jjl{38qqP`dZ{=8_FT?laY#`0494nk<%>8U2cv?ADhzg?ImJI|sE5`~u!L9|_ zKrpg$Y>1Md&IW>pm1Bj6;PKRKAh=gKR>%kPPsj#>aFt_)am<)VHV`bU94jd`jf#6f+SRoYsC97e@6vuHTWc;LVuYjD_Ah+)z%x7g_h0XjU zsaV{`M(({3N=r^~`#;v3KLc(bM%c0W@c4}^1(y)Mlr7fMwe532&N@a1TK~15YMsaR zws?NOXxgkRLA#{{)gX9y5}u!h{i09AQa53uTf@fgGN9ctczuHKnQ~WgV(M#=x=m!o z!os??3I>0*Tkvbn&ociVq+MI{?cl5r*-F1_rmghaW2|of$50Me19R08-0=l1hPmoI zLd=YgqOD^SllK_ZH81m1;g-yZA7hH-Wq!aXx~T17Zu!>C=P+$p2V0w$xtnmV$zcJ_ zjAC#&Ov23;n=t5KCu`Bn0>Cjp(T1!gayPzqdow$aY8_qL$T}L!@5ww(qIIxLd6_9H zP_r)cF}=ZE4f^M1XtkmhAd^#*0h%M8|=)$Sb%WGJ}pGc)suUf;-klZ^Ge zTeb3s{ovc|B)?25HkzOQjBPZpznPunHThg&8+o+fP6L@yr2Zxvn7I)jek8q1Nuw_5 z2$yualAcRaz!d^7a^SaSTh2Aa3c5LI0(iW@f9Jq2IB>C2?{VM{3j8Ste$;`VSps++ z;J*EHR)l5ZE6J{4Rgk@&2PUjGE%4QJ1KVHruaUYc(KJ-=x^R9cV~GPUcKMMyqjjmb zkp)ERDu|;U?GT>Oo79W!3?=luW*iIUw}aoQj`~GWkVF zaO9TBOoxvqz*PAD^sG?!f&W}8j{HLh!w^6tJ*)Xiu=$uAa3t2Y|0w29XXXoUNZq|eOtlDE08R#2U6f~RhAv{2qV;4@0X9*PqM0FxttKg5szN}J zuF0nW6#;_O$=*g8_D?k!5TvmObU7I`1Q4Y3)l-0q0kNvJoB~t=2vYsXDL`icg0z3@ z6reK!omu_OldCY4;Gwop98l?D1P`lD42)fVl+d&ME6%Ejd}p)Q^|HRI%ZM|L_D-Xh z?oi)Gz}4yz15+BF`D2D709&0J1r49rx5Yyk>*#IYxCdANO}H}>#RiG}bo^Egjt?@u0JdQPJcAREtJW0QNyxM`k zDDXS)bVGbPGmFS2tFMpt)BQ|g?%JH33Bi-?ndambyvGpTNc8jx-V>=O4Vf=cocird zX=ZX{#Rlf>istc8r4yx!Db0P|_Uga3eo5`2vm{<@(nRJ$95<~GY;jmOoq3u(-G3j2toB?)u<2tS@07Jmj6S4>(mbpbtjo`e1gh z5B?^ke?JQQ;p3Gljv#Y!lRs@lB0conc>3H#IZjqbo)b?+)D>rQREw^dhSuhcSUIwS zq1a1(azJk!jMTM51_$&;&6t5b;RmbVq9@WJA1uPE8?N>RpPd5>a}#U2`o##Y3y&)N zYVh5KBTZ%^ktU%lUuqCSEN!af((u&VCM3x3jwTO8Oz<&7Rq@YWcBP}$qWZ|Hp|UMb zULC3b2_g_kwT`bGEkQ{A(DwkzO%vg z_F1tm_=cXdswXA<&*w(tQ_+S`IXHN;y?SIU|AlazmgYqpmgX63%vsUYc@Xa@1Bkcq z^iSYpYlx54Pk@VWSDqFZ@5u5GIb2*tNU-t2lW>u}V%(}exis?V)bcLXuA-qFY&2WBM-=pp9=o49ZQ*hU|IEMqarj^U zI1BHeTI&i2G3vKgeEol|>l8VXq7Ba}@aWqTXjNna`x-YVa(nj&xe7|xbaLlTEL8%WSYFq{;#mGh-Mh(s zZ?SYmvDfvNeF2HoXE}9V!A-e;i3d}UYszc1_om$`(65%tl0y20&^lG5 zFNB`xYsk0(^&aQyJ#j#tlmW-bPpbF8wy7cm+eTeaYTLxqwrwJ9n{;y9Cb|sz>aFIV z)HW46plup9RkmL$Ri6g+g@o-Vc+!BzPXc#b`=_|p$`7Fi-lM;WY=Jw%K$YXVDI21? zxNgdZsJ^b7vLR}d>!xf7%?`UM8#2Z8wjm0*dRv*P+ow>ODPep=YO9`dP@a7uDn;e? zg{UT~TVIH3tNQnas6}dHUkD9HgS>}uI%JE5Ghb4-SLhhH&5(s$m7GO;LX>I0J|#p2 zPaF_OmFtIe#8CrA4Tz&g4xCV)jg7V5^{8E}6($amGaMNe5F&6GqDr{Y%cfFAX_HXe z^=)jH(FUt;|Hh^(lpTq4&3E+`LS;L|4T_L18=6}^8&U0MAblZxFChn02!RUIl6vnw-iUmQ!tZtHJRVvm`QlJYEOmtQDW;CU7b%aopczKLMKZAm{()}{TNWIX%gl}2y4m8r3xk=5VVbvc zrjPe3f7+7@kQtOe@=|RP&C+i6a<8nn{mgzV4EvrVvC-4GuV&g?o_~v554`hwlLwJt zH+yAA+lTdwy>K}y#_h4ulXt{YlUqIinrwW$(skn^CE1Z5>)OpuWOa5w=%t4;qbENv zBd75_^8b!JEH!k8rJdSZv(Fe!`Q=YFv#C8-yEL_mEpJsrEVW$=SO5BcI$gMP=IFv* zGgF1nC$ieddxG6EdH8y^0g3GE{C}Z4Y%0@OewNv%2lI)no4=#p<#0Y7IKXNG9)iOLQ zukb5B$}lu~E9Ea7(eSF|(oMz0I7?z;FI9gVX(IK9*pgrwWL_Q*26E@@rNcvmmX;h1he_%X!#zsuT+=jnwd);^{ z9;>`y9lEMB%jy_$4THa#qlz{olYAZAHPp`mZfj+=9YM`1TUF4 zb$e5vuGu5`IXd2!a_*)*>QUVxS$lzWVNYyC;X7Wcu*dW7%Hm&BeEf@v@f%=a((@YQ zcwfoikVes$|77LV_B%hyrA{!MJhkXO5Zq&3Aije-8_}DxKKWH|R&uCWV1I z#FZWXuHeN!0CS@c1vU_#8~#LXrW-yK4)cd~aF{yDf#j%TigB1zqHvf6ubW)#4uPec z2HfhvAN@Sw-)F>ty7Mdj)Qi6APM5$56?g8o_s0^x%*z zfxM$7J+CEQv#D#hx6&VZGgNx5CQ@boQxKyCa;gJXf1@}w;q|sup5csZlLxU{Jnj!I zO|>)!1*zupCY{9{=w!ymiF!dmA2xzIZxb4xO74?mMx}N`C|{zE)NNiPB$cbgxZrdo z(`9vhL1)yTmS5>l8;q#sD!=e;#Y-(+Ude@C{xr^+R;`p9>YdbDlX__bOe$u3!DZX< zbd#=WsAT^jpJU_|OFc=d;KM)?sdjSbOmro_qNzfxYj4c2VMDSHJpiJ)P0-Gb#MjO6 z<1ufPz2YYE?6IkvMTcrYsO42Da(0)3+1W%#lu~bo&B6`pr3rsBvO*>r*2h(~!Ou9n zPeP@K)KofxLe*-yk~7-1JGc)xGnu2>?lw34#fi{`l{5))2W!J&Hy@}c7r;&1h&g3^ ze6Lq>oJvxTW)z1CU$5C0D?dU}YnhFo_Wx=`Jbx$MNFUcMmv(Id2BeH`$+I*gUE01vQ;=KdHRxKzFC<^Cq5w=`CLMf2p-F?gg~HLGc&{;PC7P#UDgVy7~7IQSMI z6g0SfI?R<9w2u}jjRu2wOsu8LgLm1k&HWpul@;MyO1o7AGPp+3SS&n6H51Dv7lY28 zydF+#h2G+&b=vbe`kAG-EOu{-)}GNv{}SoK=i{THxv9z*n3Im+zMfmaAh?H(;BF1+ zIcw2d@exCh#8X3$3_E&fACbQ5A|uk@{uEUBZ+~w@dY8bvMSJ{gK4H;4XsaqotwAm8SU0K#58Gkp%Kv+@b;dVJy^&QwB zctDI5BM*EIavxuSuh6!FXo`V^2dQd|`C|&J%DN$?TDc$xRSld?w#mLBq+AeSWl|d) zf7*yBgD|_P3OjMJh6k(40+G>|f$2u2^z4;6GAikjJfCwSX8;}Dd zX=Q4w-Gd^U}ak>UkRBXxY|Y_5j@8hv^}3?ZSt1bh{;XtPi(C;`IdLy(c}U6 zQgBbPSBZ>={4D(PCU5jK*4b%IT3f^TZvVrYPPW}5;aUDOA^JU{5D8adAAb$`jx`@F z#3jAP(rravOmLZRerF>86=oZ|h37acLi=^XB)I|pcmGxC$>s6!n276=x$f-d=&J76 z)a^!>8^q)zT7&Mbj_3Dy@Zf_MF29OPgRUAea>rGvkvntyAMd>F>3QFYbAV)gw;1q} zrfB|4m_k)eeQD{$*n(%O%GzW3PsjX`&vExE+y#8Ump>@-Ep{~<;Cq|AsZWUxH%01i zU_ef$ofaQ#IVGyRqjRLDD+qC<-2!Tuu1igusfaiwbhUzY>;08=y<|^smWJcJ^qVe*%#n7Flg6k~}x!(P7y{x_R5zuW- zxcf5o9ADr~YVvT6FGt*#9LaoyaF?9a@2Do3k&5aM`^If7A5!eHy8Pm=Z27qNVwR5$ zFWK7kIe{;6;D2!739|tI#DS*?Jk5a@JMiI|fa@Ii0|HA!N9I>M@EU=yci^5|0ZT^+ z_(BK%2Z5&pc6^NF%Ltb>4^q2Kvb-%TSxygz{9=A6_Ab&;gdUe{Nge3{9%(+Lo} zK9Uvp>_nfRl`nt9Bv9BAX64H{(QlXmAPK0IqZ5Z&Ku*5=l~G>)=6(WdMH>);Nbf7f z14585bE@=ZlP?dfljO^Y#S|a0ShiBifjs+#6q^(m=JI7gFhYHjENj|0C$~~MYNvFe z5KeiAIfWv(iB4`MK-dr`x4LN(a;quGt(NO9vh?5tk`?YSXAjoZ7L$AuQO~wK^ydJ) z^z>qr-fu9m7rm9AeT%2&6qC-yXrnGMCm17u+9BJ|1@yh8W|pd)^mHnP_&r-z-HRUwTbcs*fJCcl2q4#zV z>F7BLj^7KT>!!G_Bg(*`SAIgwQ*{`PI8BFH^-t5$shJfz3PqFz%PTpkHz-PW5HUPx{eP)@7x<{EbMHTa2#Ep{6)S41 z!P1skZNV$?nvq2I=tR8XrHZwtQrlX!GVv}2lTmlaX=y91J*Twvv|9eQ9_^`Uv{I9R zB;YN80%9w8gFOriqJ@Y`-tX^Odv1~T?K%JV{eM1xJ|8lB@3r>YYdz~(&wB2QeRlG- zOz@3G^g+ZySXR91;{N^)1uFm1>hUL6x>Z1p(p4b(u)9S-f0*3@efT8i(OX{LJvP&6 z=z|tCRZ6iEa`O+dtH!~}UbVHbTR4rSSz2+;=HN6=3!ykZom{Pm5xJ9DNpnVGA#ZeV zBzY37m#O{P?_R_O4o-c4abs8`NAFw@c+H&%Zu$9e4aQ>g1XAl`K&0a4?N%X_8rL_@msK$ z2%h5mF`G1%Z)B8%n#$jl=uo$D`oZkb^DqJIij}`QyM*tSASb@NrFnn@PC;K$T97&7 zFH$FqA1v|M$xP`pUhZlV+&po%@$kpIeyH(sU;HBc)b^Fe%S~2sn=4-Aifc}zcs0c# zKRe~AQA`yG8vNH0E}_AvyzY8&>SU$Z($QV7Olag%Dx12<`cbHV`@d9Qjdgk|6m^=z`pHQYP0$LO0Rhm(Q@y{{Fl7C-s#gwG=T707P+&N^6isG z;*fl&YNk YydThgY)xmY7^{w>5EYrI$KE0!sqx4z`Q#;NVrjIdwvCKD~)GbBs)b z|7~nTNAZnprIVvl$JrZuE1Foio_(pWzcF>yn969XVN5mkEB%Qm-`9kehg`mlX#17M zCJ#@IW)9`WPM#-$C)jxwNd$8y2hGY%o{|@;+10;T^{4S9SAUt+&psdW*F~WBQm1G- z_Vk+19i~pU9M~;S*s`+ji8fzuBHVk3|K-d3`m=v4GPXH;Li(5+zl6pnebUzso@9u0 z(@qd6y~pL;PQ_aljl?d}pw&p3L7YFQly>eUhk#NJ$l}S){WIDQY*_jIj@ToX_VuC5NbqD(`YDPL+={Od)2|(-VonI z+8qYBzhuGfQ0UF08dBe=Z%n=!`N2L~V5!LyV$EoTE0$;X5nM=_fOTXu-f5edmw4*N zK2iiGGO=b%LL_hLe3LT?Ztd&~{%XW5|@){5?^l1(rXvAWff)=M;>q)VxVj-Q5% zr<{Td?Ag1}8;+f3VJQHnyi?yJjT|o7StE!>p5n;9gZAsaYJNh^8KS-*V=K~RY|6G%jYnj)*ArZ3aTq$WNc;zXuWyPL0+%^l+v z$@3)loQ9euqsZ_kl0!Z52)#id-uqKVzz_XA6#AIwLw_;nKVW>ovgrAZcD9Zk?5JfDU^}BBa+hqObjS1vTkcLyt|&*xHYi&40hYC*((16ZbK{`ajTQf-cyQ~+ zN{U&jA{w04Q@3?GFIRMN7zxMoa4t`@s`K%K03{NvzpiooD_8`Z(v!R<=yH9YUx?zJ z-;}-)HRqZJQkOvAl?I0VFQb?6Ugxe;gnm0#%YT-1p}0AaSX}!rd_cGCbMevJ;-fP< z1DvDQqv{1QkG16V(x7t$Z97vsWtOx?3cZ^crNEUwo~j$URe#BHAM3LG!i)q)zK z1R+7VGeNkVKFV#q+IPQNnS5nN4Ow@+W=2ubl^vd=TPUUzUv{Xnl`#A<=3S3<9P z`+~#SH2p5J@!IClxqe8xq8dtRo3=6!{?FU*d_yFWPb?+UE!{8}aI?{4-KF{ZeET6Q z(LKpFszuJ;L9(YDI{{T5CaRqL3Bb~>-ZJ$mRSi~-(RThc+j-)fY2qR3tv2uGU#Mp% z_;U6arWZB_;%`t97>LXbpn>DBwBHo?7b3qt7Y>;XZenG0p*nGKgC9gMiB64Pn&1B$ zQrC#NVP&^mV#B`F4g0U3&2ce_rA5Qeb1;{<4g~iA9vGKWAXp%HlmGc_GQWP}spGP* z(f|Cov!e!#`zzkik`9(I43hxQ0?_#cgLuYu#cdD8!Od=_s+ zAV-*k%oyEKVn1O#BdxyBD93!h$cNrlI<3mG2g`O#FYXhlLNP6>KOSC(Z-l05vYWGu>A zN+-JA^{P6_KTGoRkJmgIjrsG_zoEoB@WTWYB)$fl2t|Z~_5t{; z>X6UsLeuW}EMv07B#8m)*xp&5AVB)HU0(U~-d+_uBthKMf!RfL(xzk4_>L?mFsMBn z|9R)8POX+X<}WtSU#axiOi>Du`Q}?*?K58LNQJ^WC4I~1U;9`3x5)bU z2K{@6{$YW9Ml$Jlyw2AKx9snAzA?CEjCB*Tm8UP`$=S6m*tM8xrUJ50;;)iu=uL0{ zxR%AiY9^hBE;!r4@RcKh{dahhlS58z5dLHzaN~})H$cglqu;AuvAlAit9QGrN9WkV zrhr!NK6OF$_zugZ<@j^L6tA>7^q4R5N%HoyEhw2uShru75m#7z<0MFq}Vs zS!}P0UWRVTsh0RRR5NqqS7b9q^17{R62ZN~P#rRB)xR%2Po+1DomV2J@+Tqh8exWu zJ<%MBg8GB=Thf_DtGnggV8|i1CD|-!ZI|HqOd2cD-*4{={EFqnwWo&bv}B(O*Xeh< zZJlQ4=JhN}2=wA@?cPQVNB~mw$2u?J0X=S|m^2&y~H*Oul zo~Jmr<~KxM7DX+&3Vc=bHh;>q!BT+2E_`EZ%ClbcGqKdkQ6J%)*}Fx#En}(U#&^g9 z>--zzaCq2XF~|>$U+CmbxJ|xy+ZaoV*=&5s;9;1}pO5?)?(FDpF-2sBi`Fgv-iFit zVH<4}14x*|tMRX77l7;#f(U3wPmfDYtW0*yfDhWsYes7{a(Q;|9Q+UvD&Zg# zhj^_w!&+};kLHb0?n9=?aP5~$*4cHr_YGwLQ>UP|^}v(w?Yw@F9Pp zBm0W~`a0J+db8pb_UZ8*1Nfw<|8(Y1+oat4)-RIiMSiFg1F}Cv!3e#18x(c(R)PVF9(w?M?RyQW>#G~;t|QmZJB+Upl6RBWd6$>A?qLJWV$uZa4M4&+gPO7$n;4QccI zm6=-&gy5N-1A*FiOK_xpFL84Ct5HI=q@Sn5U~VpL4$v#TLA-h3hfVYcse=hDsp?yq;2to6@&RR5)OhR;5o`CvUi1=CS6=- z%WJ8|XQOpbC+6xCr+;=N{;+R&Rr~X$$la%k-VlG6`6d^*lyoq~up02M_x`!BKSRJF zoOH-i5TY-x;v-Q5V=SNnSNx?ygM&)nNSYkO6Ykk(>~U&vNHJraZa&J3psyf8j=Xku zc^0UQw%T3u9JE%AvzV?mCA>zNnFoTO?uSa3)C1t%=Z&cfO#}$k1q(su+lHrGf;H#w zLeG_bG`F8R>D;vxS4-;bUTj}#%4K-+iMd#uGdvWU4Cdl*ui8?{N4wcV#P`R@siqr~ z0myE0qZ=Mq*M_6x^2%^@W4ZL)C%DUcF2}h` zkIS*{@+>ZE+~tK_ItZV28J8i1ujDcW@U>8CSM^3tg*L7_PY;#zX#SL4Ao`ox*K_l& zsWxz(8+>}Cv&wwWU{%BD;k`8#;S3bP>boS(VS<`K0jrlfibJ)fz6dcPr1u$-v0>I9 zwqEcO)pAYCMs2qTJ39n6h`c-@{HmmX@JFu)KjgHz5^=tsxrAu`j*l22FdU6HPhzLX ze%Gyi)#CMS#yIuHh4;$@>?2P}f+;X9j{dWh_Q8uudTivYWxJ8Dy6U%g!?>ss$yj@h z>`?@Voy!zWCB{_Kq2w=tQ?h@?zfFtx*aW5QJ;-g_-wQ*due|D+^f?e2d@8?T!$!$CFOqxC`{H_ zeX4>Y?=9DI;=$~nndbuj%4oVVNKo0H>8%`!G=wPzRpBT2VlumL3Y4Bd$`*s_=3mNu zjpa9f1v#PuNQYOuGOVTZI?6H}vjjN_`(Hf2n!nXlvH6317g3pb^EH_3-!X0R*QtW8 z5RXzO@h)z#)8buOGKtF>SE>Bjvzz(rz>;9|mvQq~vCQbfVA_nPZe{-ZTaGs5BRyxFz}tO=S;W|w@wsM2p-r7!0ZW#Gg+O#C$h>C()j zd43hT`vXG)5o6}VY8B15Tc+pA?ssdB$^?%^^5p#+291!oVD=5^3;Sf^1cRf@oJY{7VF{)ht1#c)4nLx z!_+SxQp@Q@BQQY5{HdiHVB3E$1bms>9K6LEdfc16nna8|&A!68a=_V4!oPvQ$^NDQ zf@u4N8ZU8P{YR8NF_CNJ8SUu7prf2VIkf$T`e(uOO5_sI;FZi&zBYh9=a#jDXX~zx z$epw71DBrS?BO4Iomq@2YdHGLnUH6}AEI&ly38$V^i4~OR!7E=vST1__j zkx;)doZ*=~(!e}4`G=2*`j?C`^@YLD#0m8rxlNg1r2iQ-K<{wik-HmbUN3oz>KE%f zHjN)zCiRn}zlCkcYbM(!>=JVG%_6-R;!SSu(uhoMezj!f?@n&sE&VEzo7W;YlkTmf z#nU())0iXPu0O#mZ`)#Tj5V_&q`a$zJ!QE(A4?4z1HYF(u`~GHAJL#KwEa2S{zC_s zpOg=P%OJ*SJiEb$wZk4Se;tBwu~)s|S)7)cpkj3$ zEw6KaWC*X+q)G(C(OxR@&*ehqY^HGFe^;M;a83`Rb`zD0LPJex!_fL?yWXBS*4%tC z%M&tkhqPhiw`cb>I!`h+j$*$9bA|fT1~l#|G^FTA8e2OpqDXvsSB{xC)7zP^N)&18NuM{kyK~dvX#06W zMz+7xV$E2+F)(ZllxI5D+)|IuZ36e~eZkL$?ZPN%D?GX4rjefzn;Mveb|rRVy=RAl z*E9J(bWJISgTuaL>wQ$-rzQH;sf!p$=3F2`N=uo>2EqgLxr|75*nlZpP1t1eS0tu! zrcBELp}MVDoQYnlhMUNvj~mE3o!dk5GlE362NO2g68(Bi>ROH-`BsB(GCuxb999!@ z&#I`bui4+*`f|I?jLO_@llW5cPD5yAficf~i&k^%O_rVZnCNxpavlSa+sO};%VIfV z`w_tCq*rP%QXKi8piQW6{U_tSTH~!PRWE*W*!lIo+wpUDl=u<$D2*IB6t3^|?uH!} zbr95vI{hJB|8CrO49$;wfIL_{ZVgc5?eT29l5=O9t{y{!Y%Wk8;{Pj-^vaQ_LwYoG zLRrh6CY6vZU>oM-^zayYbe{MYbqyY7l%P!*u)`_r|wxXC|0+0 z`Wf5|I(5&6K@ilX(@)}Vu^Yt^Ef)i8 zFLK)RQs38#6HK3XTtDe4kd++0BV`vHlXIkLxa(A6gnL@DUhVTOLm=VM1?gM2XYPLh zw!sI+TRMpRU~Q~nC2H=E@RYw^q4Zhl#zPu8Noz?h+J`ht8tr-?C0rAZeBCTfMJPI zphiY%(FnuVlzwd4}{JXsj;yj1182&nb)AVv!X`9cf)b8)q zt&Frz1uw{F8mnCsu0s zO|?BuVpd4QF8cGX(Vqiy^k-?@?}30A{n-Tl=?Mu+=O*Znk(SO)(4X)M`s1!L(4S4v zAIKH2cg9*@>x-8!MPSB-FP@I#!Z#v@*KH%$gZ69~0rlyfK7kut_(ni{dZ&Mp8~pP| zu+Vy^AIuFdd?O$|z0>#R1{b~&P@Z17@QoNUekr8q0H6%%K{@{-`+m!(;J}1W~O?5)fxr0wZ4I`<~rPHZKf|^rt1i4 z)l6T&OxH2fD>Ty=Fw=F+^a{=N1x#ZdGrdAHeE~CF$4sx#OkcoE*D=#8G}CoM#`m{% zB=)+PAYq%(dd}?=oc}1A3y=kCe@!0Lgo`h-ts!@%HRP_ehPZNowKc@7X#)qo<*Rc` zXp#f0Eul#vU~LIa3IS_NXi^ARTSAjUz}ga;6avV4E7vV*Q3 z(B8iJ_QtPJQ+r7=_D7hR((hfAsKEVW$M~h$YzQZ>`Am3?PvL^g&ncO7|Hs7yMEM;1 z6XPWDeqK9;X<<@dtv=z>>crd~k7x1hI|T73?wA!l3Le8ROK z96|ej*N(NEIV0zSNMn~odHASyjh*^@1(HL|EE_0}5N`z^a<G)mUlv8^Rjt`%i*cZt6D{DMpbK1 zId-_cj_!8dzo%o7Nrc%=MHF@R6njR;Fk@BYZp_^ECx+qGV*{XTLzWsG@Geen4@d2# zr}QzE!8nFOjA}s`6hDXmR?P1K0j>Z?;ct`L8q zSH0Y9G8F8^6FhCUTd(K- z!}UKQ)Hi`aFacv(vWX+p9vb;=UON7KWwtuEPAxKid161W_4u;HyQE!Be4Lt09`}~_ z)%Lw!s$of=2V3MNyYk+8tSkE0K)`bY=f?cyWA2Fp9cAh5{TMt#w-lg zWWec?nVLw(!u;m(O%`F3D{V8C1m+bEIh*LF3O6GOnIzno3uV|E1;KF!<%W*%(T1NW1o-&39%C!~h34cdX; z2(`rlm_loKW~%;a-SuNFTrIM9eKmGWqrYc3((9bMyw>m4lqH7D{NC8I#8GHGNM=2D zg5sBs`O$|T_Xk%!hGrvmOJ&fi=5x_z*K_0O?4sZa_Ob##TRVFe^r#F$Xa0R?nGF3*+vjr@Y~$YiB?Wz%8l3VZ(*RlhWwhOV(bB_jc>{ZhtfV>ru5AYl zh1cE~eCya<{Yxf}C43_L!)ddFFFqpGlsr^M@WxD0QN+&)un)Ge9b?A5Lj5mAhXl+H`^eD@ZH zf5kppWM5dx_VcRXaGMipbCCpv8AD7CP_LmqvCxK-lq3QR-4!pHO7Bb2?#60*1EAy+ z7WJoA25XnVdocm~Sh(&MPU;D|H>h^Yzw0CLZx`dGAh)@x>~oo$fdYUUc`U5j1SAR; z%C)Z>t9Icq1mU}XUZQ~u^_6+$tQejN4XJ4m(VHu!kZHS^Hk4|r?Hn#<-ZU0`z_s|9 zNZWNFa#P(qk+$1);co)_Ip|E-P4xCrr&dS(Qwf(`PimJ)@(w+2{irh1b_uOa1)XTX*<)(^<)}rtosPBBvKYV zOQbRXsKzg- zp-z*==;5TgJ};8=_)>2DkMEdy%h<9ORH-gV@(q&P=jr{#^ob{uVN9@} zv5%5N%@~HZvGoHE@%uTW_L^II7)^c-o?D>-b5asmrD2h?s)?k4%t$PCEHjMN=Xfu* zC!v%8peML`qS9wg>9M(L5<-m7i#kMpOR)E1LuB}5eCsoRr(d!wh6rzOaN~&4z_Hht zwIX38UqwoZH8a!@Lnc3MVNHS`jX^ zeZ&xyvQXaUseKwrP?j zVek69s<(p&{@CAtkv@B=#Z;U-4nnY;r3E3l=1n66->!rZw34zGI&mHe>7LlAai)*y z`I{9VIE3P_yW;)y_TSvw#2@+YiWlUYw99N zr{DMoJ0GQo&qZh6C{pqq`H}HQGB~dbzDy*U;c;V6@L6|_WhNM$0 zJEFUBuEZNWmp=_Z!;i~INC6op>sFY+cawJjY0esZ^pcWH_}n3qvld3btC(&7*?0=E zAhzR0@=uS1;l}rW^s=VW>*H0(w9ZXDUbpqS*JG*u)q#!y@d5{t)7b~iIsbF=wW;;^ z=v53+hZk)1QlrS8Dfy9n$gsgLdZV{0Wpx$tp>FCgBFXuzNyPfuB#PCCy=D)TC#=PVU7N)5CrylETb$C%1t-PJ*XHRl z@>^csAll5y8=s7CVS9LO7qW&Te-dAhnXAMqSkH@0)HvV1vK%(Rm@}skh?gtwuT;Ml z`bX@x{nyn#s#%yYMKN%2oRr}Bt6`L+&!9GER+zw23t+_SYOr%pkoZ!Q2V*gWO`uk~F^cHcHa7Bd_hzjn)4!V`(YP+^K{sFe`yR4;LH#5pC3wNY_EZTmi z=uLX~y%|{4XP{uGQzD~WIKUCPj4V!`RV}j8igv{w<{=C{icr+slR{y{te6Nas z<%)mdivNb!P0&tpj-DI;Uvz%l*rw*oYGSDi<=EcNMh*_YA4&cv^FYRzF?g&-lE3E0 zj!A$g#W)|a^Z$gv7?p73cK9xO8;d*?F=IQM)T_afNTFw>hHWGpetF;#=U&%&hF`If zW9P6>;7hI3z|ehbP}vB$ZOWDWpO`SIn(V_qe*Hs1?i zQa6l}o6YHhm;a$TkDkf3zZF_IXn7!&(?wF7$>z`{|DrRv`$~SnwJpJHVM$sPMM{oLDlujMX6|Gpy zHM15AUd3}fn>?G>Jw*_|?T8!v&iB0gvJYwBb#?R3j7A~9NEeE5D@R`n`RZqFmP<-J zb>{>oAl`gKz30yfm_7{=h9Ht$2ZiD+DTeqGSCiAjj&0KUw>{i2#CjWI%!lK6-}?Q$ z4VSTMOU82~l9bWROV8a(qwMxJW?^XXzD3QTI8{s9hAbaf@Z83sWsNyUtZ(ve%u;Zy z!oq7of}y{`J8U1PQd*P;28HmP^?W7Txgksivm6yT>2LLrY%oJgv%%bK*ta}h`+=8t zXBn!#`p+u`i|x~`8}Nu;;?@JWl-I*4dr6oN<^{u~LOz(IPXWPLLjV1IFy_wkS7yVj z{Qv_kP$wPCm9g}sUavgB#CZ468qMbaxvVfO6J>?jC6|_OcV6XUgSp=p-XF((1^4fT_g~{`bT_!7M_x{0MkyY`K^N`+hYijsWr@zls2oToy1{-XS6od015f7D_@Lu1~$)As8w zan_4sJ634jk}HJ+i;gCr$;+_aUKJegFiz#_lHtGD|I|yLZw=hAS(GXpYe6a z_Z`{A_&SQ@1$>b7DY$v$5yyW}o*LF2A5DPSyO#gO$stneBPU>tGkZs|^+NAi{~uzi zaU@tN0MY;F^Zmzqj@(YLbKYMHFaNcicS8Rwiu>QeE9yKH#GP+Le*u2}{FW6MPBbON z<;H7?2{wp*y=DM==^pPzNLA zcSNhYV;pwNMP+wlq`0P_3in48G172ZJ(8?b7b_ZfOK8B}T9SKfNdglwZ>{1YB@}4y)D#0qRVqn8F#Xuiy|e*`IGh_l9WzSf{qR0 zb6%?6X%9YQqWM(xJ8JdPQeo( z;G}njy;NE;lB@4khSmVD87oBLh5cfw2_iE9>QB6cno_Sssm~r84d1ci^B#k!QPxlw zL~cJ;8>{^12}MdA8ck2>@7y#5EzsoND9QY=S%FHndoN=64Yh&ah4M3U*EsIt%{#q& z(J$2YD#;1k^3w!+Xol{M{^bpp)AdaZ9a3+5zPNjn+vD>zJT3^ zO7qGRO;mseED7$S9DH|*SV%zTDC*?(L?g%Wbte$P+SQbz#xqv6pnKQ)PFZyP2xD^OXX;r#pB6Bhra2xxHL+y z25}c1Zu-fnx#t8It%J+-8!;ImCs`+2PL3%fuGn}Ey26Jl2%P><=9+mD0mj)9;W{Bh#!6$}~gDu)v_W$HW%A{RU_v%TOaU z9fHI~yHv_gzplwtvd~0bteM)~!RwD3sXr{*eVUoz8vPkigSW9)x8BxMme|KyW(jo! z?N+m;!Re0Km5|y?RK0?u(UGj5z_zRPyYk(%Oe$Z8>nBG&Gl)a!SH3Xs^ ze2ZvtQwa}Hl1-}2&IGnUIj{iRp-T+57rg^)e{-8wfD02P9_0n)e<5i}2-1(tEN@DH z;G3(>Fi+kB5XKqgwaZK2>30xPNG?P>l?RWl`WmXRR2E@%l*K-10w1&u&p{D*i`nV1 zZY54}cKVs4%ub)-h~i-J&q6!>EBYD&+DiQ*)MFwn!b|emznKk!AxFc@l&s(4&i^BP zDC4bSeAtSTeE>fEjYqq~hXv^02jIgBb~MoAU%-d?R`dTWeE2s`pZF*E(5n1rp+RTI zBEyH+X7J%BxBRR4aM4Tum+;}*PZ>VE{4)6P$ea)#p3&F9hei7RNBFRP{6Kt&PHFO= zR`m0;LgES1?)g(5G0o;5%^LikQu2`UDA@B+&10nP%aXp8NYKTxx?GQSL&LYWOjNU4y=!-NShCns=w^Sk#w~bZnqKiB{07tjlWmXmKa&(K#XGXf>(rk4F z4{ZxkwV>LcR2hEvnZkDycVn3{A{mvk)TcAHt2Nd%)U`aqo@Z630-Y(1@u99tI!I20P#m%os|0e}Z>& zmCmHnZ22Qigl#?tw6i4i!O1OE@w%On+m%-c=cLcg#W@M~Vr-_CH)j(P$#`k!ZSFFI z^WSlPN>A1B662^09$~~9?n1r|gD|C;Gf7%SCH^trF3Zl!;YKlDWTY$~us@L8EX?Gl zjQoxy*e(ZM2$H=aO}iTmFW%$u-Pn=a*I*df?rdMX;x`OJRO3VX5YmMxuNLUSZ$Uxm z0(&>d+$jhTZEJsU+bg_hx2Sj^3>dP%#UoQ*B4nC$)hLo+`g7-6<@`QFF60ud_y1sR zC%&D}Ezs!SI){dt~MjhRKh^7Fl9X)<{kERHqLKm-syT%@V(4pTZLF zU1&@EP&D?zRV`ZLwvO1yF`qWppqtXn@8uS5+by>CAZ6+OepPJ*z4Ao}`Wrt4FNG;P zUyz^ImS7vd!h=%A(}`KY3qgRc zEXbNej@=Uu`O`L~uBgcoj>G{X8gl4!L_@CbIeLaS>K6wh{ZkqOL;pfC(r2F%e8~KX z%ik7O*7T}4In(jcOPs*+TJrPU@_L;Gg*~LOF6>?abxe8YcYGawr$4i*2;VcUMWdpy z1nXO<7;HL>y>LLhv6#E<4*y?7%_jUGD_uj{jr?mVmfvC$7lRf1EWb;xjAG5NsayaAd4qm0z2 zRsKm9`LOo{tAQ-?iH=2{I^0&!l3rHOukQ|7qIP`=9^+wtNgZsyeJ*uyJp|~@Y&O_1 zHpdTn-5m^y1-d;E&)LF^ttVeJapX6iLIPu~CtmX_Y#p08ubqBuC|mCy32 zCCOKA+Q7`@%y`hXoZkpunj4A~yaV)$p^Gki&Lpq-G}x`bgB2&n)7OEwFA}mn#6q^^ zd%2i7mZQt9cs9X(jLUy5zd5uC4RWkY7$0qWNEU-~*_mMyPQWHHiP-kw>;(FS);CW{ zAUy9I!hzhn-pcjfj^5KpHyqzb$~7f3A?Fx@_cK0AwWj9nr>D=`)>q_bzNr%FO!$Z zb}*Ms>8rxn`nQ>=r*VXNC;00Fu5U{4rtM0*Sgp%|F#>uWCcwD=>c0LwlNo3dEE$|k zB#gi%9ny^sr}PQtxPECaNQJ`%UAiNug6SUxZ*Wk0oYp?j0s(XO{-YhiW~2DrmFuxZq#G(Y;OG4)_!_w@3lN(~CFpmj&+Kn%#!togp~?7P zb-rFrP&!_h>`LRj&Ub36(7P_;e7ML%TVKdW{`jIk)|nBM@nG$o-PMQdp$ePSNCf^Q^@YdxfU zcon4kFrG7`bxxC%k$r5zRi-=Kg>T{$o-01k6`T3&rxX|K6EG>~iM&Oj+m<;>Tc+$0 zF9Zud3tff;&+XOTXAba$x3`c1WQ`GeSiA0^jEzzBE~?yo@DJxk{r%-lXd6$<5qX!w zht;9ose$&KHapxGS2Ffd19V6;c@388#4#i#3}ckMs!oLkotcjT!zx`Gro_7X@5cj$ z@kxfW4$(IN>pB55lmZ|8lWmjzQpCo-ZNPN&+ORtBZ!>H2eERHsB2!-87-QXGgeGT`<9@?N)a=zYM=NcX=SYfs93XTsSY_bO}^LVu*I3`rG zyi|DD9@K;nI|>iy2YZDNe_wbwJJ^m!L%{#3J#3sOY|#0%b)=c>_9BzEdj5iIp%B4y zVa4xQMSDiYyMhJb^C|ZHwwW{#{5pIVwPy=&du#`UV`>_Ljcf?k7Jwzk z8qVHjXXoQ`s7=b)AfMx;PT7w83q9`rxkj=$IxOx#I6-ZvzQbp)m>Eyqr>=Ub1!~Bv zTcEciZBtC!BpVZoB-A`{DSD5RDT`=S8J+%21?(-dMsZ^N4xMd8YE%+(#}SF<91Q#J zJfiUGmp(Z@y3bs1iMxtpwBSS(d8x|C`@H;b$m9^61rG)h z5f;X5i;#F(*%Iw2>Ty9e`aRQO`!CB-l4_i3g-JmkhvA@?oW~k^td>H1iUkBa8=VIl zg0!1Z+1%}@Y7|Qy!0|G@|JkGQDaK$XN5byhU|!XyU4O$@tfAe$NB?2j91!##{pU!^ zDf9l@FW!sLYJP&(8V0r8g*8W$=r0LIpxue3KIJ%69_EMs(x*i_>=t3P3=wPpV%6Q6Fqz;kGqGA{k-;2a*Hub&N;XcDc{;3q5B3zpnIm+`Ddm!g!PA-2XxZ+2k z9299zjt}8^k9>0@$(=BJK_l~-k;jo`zj^8dAvl&#=7{Yib!;qEiR&M`jhCK*Bil{z z5;!T4=BVvq2G4AUYsYtoZ~JqMxLr%CE)5l|oC%|0KK9}1-1~?DNR6XK+QnU0zWeSp zb5V*aj(G%a9EsdSbOOD-SDB&lqXZpULPn9ouaU8M33ZxMQ|Sq*=+;2tF0>`8Pupr^ zQO5nbj*LwRltN4`(wcV5@Vlu6?j_FeaQ&9kH>>I8cq;d%4RmdAZ=H>6b~vuMU}5nC z;41@TBEqpTFutr2iu}D=I<9@_v&O`LG%WUoR3iA(0)aY$o`QCOO1Q|- zEE!D+4s^Zc)hY96h~XH0DKzwfy4z|*zdUmc7{_XO>0_{T408wH`L#bAFLc98@IohD zjttsva!-1=M?r}{dH?z$WtlGYJ_VdT#o8GD8LE!oZg}rb34Bpie@0b4cBMWRp4t7r z(@%`n$9lgem$Z_lo0d|kAg$v6^Hjao6|Px7{?`gl)N7*Ktl|GSvDa-9A$4IHOYl4GyKV+&Q4ueC!GJtmo1-W zVxf5GjNKkSe^3i+^_Ee=%i(=_;$bh%{Ze%_*Wi=f6b)#$&Lfn&`fvHH@tT-?-nYKi z?Mj>=8&6P+>?G#lk5nm62U^H*`h~BDo(PEdGM!n5Q|-A5t5+Wotw_3E*Nvu6e#ybA ze>X~Yxtgm94Mr`8lsNjKS_wkyd z*QG;r@DDRY=Ji{SpJvyWd}8Ny6y%f2f_$>y{@^IE{TT9<(<0AeF!8z|aU$9N5Mr>8 zyHQ*fYsR|btX>JuwLH-b&A~p_ug1!#-!KNKG!n20WLV&+wB!}AVtIeR#YTN5j8#m0 z!3i+~;uI0uiVV2uiwFuB{_%&Pa40)`_jk5l7U9kq4F770#Xs~{b3+Za_s!P>@s;Rn z=&EL=_13L@Ws$pHVRY&azG<2?#$Ik?R~W6!EvpFU!=0Ur!SDNTHifqoV?@h$mAl_C zfD6W|#CaO)hTd?jqw{f@M{A*)&{jI$aICrcR!8n)*Vpg0s3=@qZzOpQ1Ql33VEm4< z?EZ$uYi8S$E@Z?TnO>>+=hokOF&wkNoMV++xyDNwDfEZ5_Lt8%F+FJ)?&{YM_tIxq zlh2Hx=B}1gqJE##?l^fF|D;aoM)F=o9W9&HeiUy8tCw?c$Q;F&r_FA_W2s%XMJZ_- z{I2l$q}DFdg-Gs3j;cUrl9Hxk2zw}THoYyI8vG8jhbRq4;(p~~$bU2YGbX=mXJPUa z_u1qxd5+1io{G`Ood?u%E1PqT=2i!nHn$TV#F5hq|e$t7XaH@Y8u7wON=FW)=(w5-yp`dSi*g>|vqu8L!JAy~T zm@O~gWeXcfw_BI>)uKgDzhWtGR1B#iT|X|ka_}ByXi-;Z_TuGGj}uQXtOr=(_mOTB zEWZy-Q=&fny+KQeF9V+q6~X8EjGave&wxSLb+#+hPuEMp;o_MJ&=4r|(FWJlyD)1E{Z38v z8U18d8N%tm-kvl8&)z%LtNABFS z!mjp@+-U+lQZKzqK1r?a5osGw2Nal`RJuPsNw!JOPcJ;{LxH6KFEi;%@Z$xB`hr#w z>c>+_LCi~q@WZcf0~5}ymR8LCgtnO1e5-iXrZo&%jqkh|JWAPZ=8$lnTNesQ$Quvv z@$jwgWG~OE^B|xr6fG#TZnAIhl3$_g5NntZtkDP33-6^u(8ZtB95sN#!hTW@TG#!# zJ@)X!CVxlkra>gxTH&SJURqCmT%vOGou1wUppnXlJjETWUuis(TqYTZRD`#unb7e6k3@i3ur z{>7v7FYXaZE>-o`U4s)}<|QJlb6=Z&NbZH{`#sJu@P&RY`lK$RE8mK?K8I=?^t^|+ zBaa$(*bcsOJxA0;T08kdl%zB1IYQGj(hYByHTrMGXGuV;SE z3;F#!#ALxhMCLFklZ9vT*G3rJa$#XD3@gwrUdX+Q%Kd=ScP16yaZ5xDjiV9*W@ZgN z@bU{vvr)33RL9k3)Mc3msO`>e#n_s`|Fu7d0m({-(UD{;7xY+gmBMUc2Nx(Iw4UPr z0zo0B-RzYHx70YrEVqu>BmF+xN}vEcg2SPzSjoW2@+kVA^~Dn%^IwVUG%;IL@su^Y zay^i>=}g&24HX_`LspL!O;CiO z%za4KZ8W=r^;05q$%6DLu>MO%AZ}?E-A^GRvGpcTl}%{zF=$^zfZ;!!29f zNcx!Pe{I}y^l7-|*UyHTOAmiV#a{#%XdWJN#mB37kt=>u#T%Fwif6mxZ>jjV6pJ6g z;de!>`Rp1b{CFKZ+wH)G05CYA8@XyC{;M;4d?fj8ZqT$Laz#g>X-ia2&8z?=$j6l) zevv-0)_vj#_ld5>d?LyxW>1NyerQYx6auEC`GWeUqOTp0|5~K@YlFA}>@)U>rEVI9 zu_aN3xH>g+8DHdk8QfKK-&;7(0CJALxBM)9kH9z6ROrm? zzu1(zXq1>C;!FtQYPmqFQ7`>nXgwwi7~<=%!0tGsCc1rac>)7+(>!v+%4F(y2Wyx! z7a``xU(}x?Tz|T7tPP^-kC&c0j~Kw~<`MsAwDwgo?LW@rr_Qjrehwd>&&S!L&@ht2 zu8qfRBR8|xQ-m7CiXOJmgDdo~btn7H#jdzLEN-{r(_C>yr0qmk+z}R=$td{+SIk=Z zj4LL4x;0L?6wwNmu6RhKZ5LR`w|m3lUMtS%Ve8JJk+yZNcuiQm#)_A@;;Klp!>+!w zzT6#UQ_w&O-*WR4PfaGE`GQf6sb~$Yf^++x$MiH4D$k@1?IUC`MOXutZ2X*Fbi<^|v zIa}+BnX_J3TsmiecE!xuAMHwWCeO2QKg#Qyy!1~cJw?xtr?2;#(!a7Bgv_S&H$2m~ zA!|Z~Qg^PWmi9PECo1Qy{Dcx00n&YX*gUyD?%x-1sU7}92nTexjQzodyg(VnLMUez zLF_zk@>d0)dsi=>!He>!ilniv!6{P1XJlsa+I*P*DzALtjAl+AkFRHsXa%(hKYoP(w zU(n+^IS#}K%8EuN{yt>`HnDvLq${Z3O&_f*U)W87b$*2UD3yLVa-$6ntFCljWhUzwUE?x2^1C@s;HqQ!PqUTpPw;a zwL&)s98?ti4ox3`&D9YrM0=*H+!1_Vh4~4<3m1*vmf&c8*T8B|a#*q@`13ot0^kh{ z4b$kf03G~Ng@vA&Q?E7m79SZ{VEo%K70gthz*5qy{}G;DK}TP&I?efj31FYB`ooDPjTyD#^=M%<8T#3OM7meFevx%Mn%QG;ii3_=$ zt^_qpNX?iyox590k@%9zl%R&PJrXsT{!tHN=+7mnIpM7I z440thh3np&Hv1FVsymgwbeO+N$09aw_x2iwTJ(7jjhb9alFvu(TBaFDCq-3askGzu zUxjdq8n6vO$vP+snh8rQ3>xxvBfPvcNqB+y27spYZ(khCOPP#dowGlt=G3U6bgSS( z?<}7Rzn0R4-}}n!JINkC!tI0Ac54RnNbMYTB2qiI-hS>o%YGibOjS|~1$2k$L`;_l zT>%4V)@*KIHghwHvWaS@&H8m%A;ytY-Y2TWW^LAF2e*W^ayni^2tE^BPC*U;D8OhH z_oeCAgdftE<$2JympbQ0%d!{f*oJIJwIK!vSu+b&pm$>Fd&U?ZhnU9#|6rpl3R}+X zO^bQ{wVm0LQ91uj=}a-aXnes;p%j2K*!sYa6mlS zBQf@q13GCvZxjv4(IbtgkY7qfz*72$HZL2?bH!sxEmU_I5(z}Yk@STl!K=%kvsE|f zuk0t;%TJDCr)}oE=I6ci!WuL-hNJkKCd+6rp1$u|d$zE~?iO@#7ku?CFf;7{XFI^g z{N5!-k9RAn9ZaB_+aX}~b1azS&ex~|=>^qn2EpD`%WafeBdIxhn?>U~&^R;hC&#Ki z?}=P{wtMBcf*rvNZ>oNdtLIBrpN6c{L?fK}c=0Fb4LqG|^Jq$-dY5T$E82ro3#<>E zPvc|UORlH8nBRkG`jCwn(|K;tvGfIKobG#AV`a%|d}7D2Ds>3jHP(b%bccc^$!Zp~&~rcC)Y#47gpPzr zj^pN&t7Lm;d7|2XKDR5}^LKTLomLBkJfE@Agm-+zx=8lWh1@Ks%|4;+GPOWmb)7b( zN-q!_9Gvt9PaXUPFHlPoVD5c4wV$U~bJx3U@E83eKh~+`KL6+yU4WOZ=W|J@b()<_L*{sNP3aD~u6thGZf)v{&6rhDO(~ zcXdk8(l9=?Ko}QHQH4BOGMKq~FF$KxTQ=@x#ABCMb>mi@;6W8OPp{YcGHuGD&Zum~ zr7J9lDm1{M!(6>IIi1)8oS7?n|tke6N z>i*ucjzl^bPpQsZefHK&_8%--C*mYLY=vr%e%W5&{0Z`cd3D?5NV>4hzO{C8`tZTI zFJpe90k>cA-MG$I;gcl6q=}}{%i~q3a8K_eVSEc=EsUt>vsjQsGJ|=B-$0w+I6E@qd+x);N)^=G>1z1iyt*`)&lwbz|gU&2fENB?-LA%;%{SpCaP z?o+RST)frW9uFU}JAMT-+&X#$Z?__I3tKgAtJ^b&(r(Tl!18Oz1M4IBJNd#~c_73u zbqz<>zC8oSFCAC=H1?ye?7j}Zb}r-Fa8k;X=(XP1SC+^s2(0Z$?&Z0~3ok`G-%_%~ z-oD_s-@ww6zIBhq?aw{??6bIj5RB9p>)diE#^B$@P~-YV(g~TpOuPKOC0dF*9uR2Lc@O zLq}Nf(|LA3w>P~1<->M=-}>-d)^#{@fe+iPS#0)qWO~(TPay!fN|T*4R&a zoc+wHx1YIZ+0T8K>F3e3hUY9rFauFLLLN&ONT}wc=|+ZB!QNQW!I^2D81j~5%6k=` z|H9*uox!Pyo2?54ld6W4!SMP6uveIYUCkl`1_x88v2NFO8O?=B!067xG2F|WNNDFY zz|N;DRwzf9In~Zlfdx5jBpvn{>7!2$<=kK^k*p1M+3Q|ubrY1bAM&C`%*mn~rK}7Yr#}6^^LDDw%_p*3|TqTPK`>U{kT4iPk&unIUjJ6-8Jup4|xLL?5 zr&5-aRqkJ4vdV&7zPl#BJ0Aia$|sfJ4+o2aB$ja$<$<;~xgGGs$rdv>3`I!2n89~t zKb2p<`SV8iEXHfH0`H_jLb`b6#qj7+(E7Qrlg&XGjj_C9G0||C_Jc!V3H{_>`A)QT zaeoBIbG_-hftQEAkGhmCDE;78>(e{I(<~3zhP3Yaom0jd=Xb88U4HMY;g=?Ew4bD; zUJ_rAK=e09cYYUm?%DY$4X$aL$)73YcG&yUnwbC7yMP>37G6jdev?=7ONFWPs4#6D ze$XAhzYpaCc`#Y$fy~*fVs%aE0 zRx?7BK@2k5y16{qFioJxBS-v+h~a(c@>32(b&Dgdck+Ir@Ja++_p;#RAQr+e_{G4M zE~X^}YfiI;q8l{PwCcmW8(clG_7SonwBA;YUyb54!!FRpDBZaICLV#ELY)%qWIvHR zVyyeLdOBJb>%K!E)juu;D*XcvL->DMwf@xT&p7?@^haPkEf2;!M0|L1$Gq@Y#76fW z{FTZDsmY_Z*AJ~u)T085B!?J+U4Td3#vt|LU^(9n z4IPVJQsFa3nN#mZJd=VaR`>T`Y-$2|EyL};WRim%tNb3&BTSKeK9_|Q$sTuw6v@YP zS4fe3ICq5<$p^zo_?9^|r-3^8tn|(K6v<#(Pk2f*LB1A`m&*}Je&iMT6p<%sDwIV= zsy90CQY6C)F%sl7M5u{)U%wlixQfm22r4TOH@gsG@hy^IJ#mZ{Z~B-K*P9vexHimy zKRyyOpzOz_u|%Iya2jl9r0+gzJ;mwoI#4aS zj_m!0cLVen9n#lT`^$5ZMB6jMCgp6@1_2L{?2O!{9Jujx%gmg@F8wD}g7}REQes*| zW&VG{raGON7G|hWlHq60OVmqQbsZCTfU5*60||d2tQTBMC51g7m2YB~jABkx6`Vt< z3Q*P~zU|C6zA>0UNls5C;1{hm@`o$+9@F?nYJh&~zaBE0|BPjxE@vDDpS=B2^J&4= z79U_){%(MIK_wNaL8J9cIHumn{XQ^>Z9Jv`dXF1p;%F~*7H1o-NW7!CfQ6KhsbhlI zyppKYp3XNyF6Pxsg_TV`>GKA69E0V(6TE--$LxO>(=yrj{v!mQf@{pZF!=jQ(Xqv& z42(taV}O|xv>H}qzRFK-e*`$_?KqQCV#LqX-Bbjx2vgKWb*p8Do@`4;{s=~t2%-OX zwcNgi>GC(<&3Smy@Bl0n$TYK81t^H!cRbDF>@9D~pJZ$S?WC=k>kxF)#T>ShnI06V!dF&!|sE zn>O|8R8N{!>OJV{9s7Oi?M*$3k5uvJT=5TF@lVyvwj-=~UlosW#n-svD^!Y zk6+p@&}BNTx;79#cCe~9 zaGmS)5vqO~)pPVSCqG7A{voBF8S6D)XN2Zmplq8dXDh#mK#pa~(65*0yQ4UQS1JDO zmfqBF?=IJQuch>+jYb=ZnW?snu5$0j+VX=V_}yO4bSid_D7|7VCWdgo>B(s42SXau7m=p7sUz0>UV}e% zaqycfTtlzXYOI+oQ_W2sO@#V3q^2&8)^(iKd>>9tFx7usF8vMp5 zk-}b5Z)lAc7u&IA9Gk}mJf(+b7N>ZgYUKT??S^ZO91AG%PJHgl^=DL7kYIgFW9^dQ zA^eaec3sB4_q`F>bA?w}Es+2dlL(14&+VLp#7`bje_Pfm^Zd91zsaOugtOff_tPKf z*V}MTWKF4@3yC?KF3omQBwNqe(!5@l2jv=YhXzKe0f)}V{J}MF-!EvOng%HT0Oz?U zYpY6|YtCeeUyDyW;Cryuua#S;g**$zvwF;#L*^iQ=677)F4oIdmCM z)zglpLke1N$9-Qjt)yTgG-d}x{kcdfPN5ORMOO3Q;v<6vs73%}9p`15+=8-yUFU|O z!EnSF;|bK3ph0Hl&##&%-M1El!JL5VtoCL2=4VU&$LIlCx~GI&P);%!2! zi{ICwnh#Ut;wYcgw|;H6ilh9q#Zmq!yf05YB(iinx7i2t>k$|{Cm6iQUhtms;VF1f zr#cdfOd{gzD_x?KXE{?({xXlG9O@j=Scf&Tv7MYrg#7k!$YQsrliMD_b+IG(%jMJ} z0u>35O!6(Kk6+;u&51DzM!M}68}M0=texXkB;=>kjCytMv~$X*r`2@wI9ZHt^nHOrumKj8Xq;u)Q7zk zFl{cjb6ghLg{0j_hv%!qjkQ}F)OSqz{$g@m2lbS*s2&D--i~z*{;NA)jYhop zVu*v|I~q9Y275Spwa5t1DULaQQRiNz*j|*s`!$!pJ4}nP#G>_kQd1wXuqOY)%FL^7 zL2SVdF&7Qle6_8p1wRF6`#)C_4Vl}&ZTD7Ips(I-*mYb=S*d2AT-htPQ|+DakK3;j zs5-S*Z6(4L&^f*^^kFsl4#-=yF84l%B||Zh7da<@7spL;X`NZ7rzR{!S(}ARph-;e zmwqcAoY=>F{<+MbL7bwPEaSy2IEmw={GM3(at>UGBo8@^wM}eWON4VrDqHaPU6%RU zc=F$6PFP-Y0=wa_#kK(e^fx+$H1R2!oH?23(9$FJoD7kRKh?6Uhp{~cZUr5UOgm4# z@G&+kJ7{%f6staw^XqhW(T=YgTo+qD#?-zXfa#Oj-aou6`-j5%$y>S=?ADOFTFLCO zZ*w#A=CSN+?-QgOX?tI2?Y|nU`)j1_Bd#SpU3r(}A~Y?DFl8Ta%8JNL|qKMk6t!fW@rZd)rxEs_Kz0WAioh=&%$1NRV>gGvGldB4AP z-7}d4+)tnVKJVxA{PFr}$=uiZu&#BjYaOvwJ{Qsf{-wWa@SbjQpJ!{PL6(2y`QqYe zDRYLc)>YWU8(r1kbMZ%w=k${c^)AwWJkXNe5sYu2J$2G($8T(&xglhXxujuC(lCCU zThH7$k`P7arj?UZw7BQECvULhzU-$Q_wr){|AKkugFRC(C>Kgb?&uuRN76TQBC$qm zW}1=ots}V1U`8aoC4_4&p0!`3Y8JpCJ2|t?rt*5joc(aCEM8vjdt*vFp{UA9R#1V@ zUJW&zL$z?aMsd{lw-XQfO*i>NUo)Md7t)7g9~tQS!7@6CkU5MtEVhLh4h8WoxC8Jq zzqQ~sYILo98?z{De$=PsjlUQucd8w20X*@vMK<2;-v9(LW^}L>u@hd;9!mL<`<2Q= za9Q>y03`o@k5v7rG?Y@@pm?pVgC5U^UMUc=OXT73UEQKGwhU@0Y1JNr5VV3Gsz zq?$wYKf2C#{^fb>{2?QZw7F0YB80V|td`tr*+>73?9O8>dz7++U<4ZqdmY(% zcr#9D=g{%AF4!9>hFspVA2tp{{QQHju_!076mC=@u>Hb(-rFGakEAJyc&2Nv+hAA7r? z(0)hKmXm5i?5PG2^jULhYd_?Tq%FI_Gp?5hREXx(4$aM16)&Z+_&Z?MQr)#;#ZygQ zO8tgXhpU;im7_;hj`NZa*MC-={5JpgV>D_ij6rIs;VM7@uA6)K7Q8g|?wAa&%P~5( z)_t_sBeN-9)+9Op{$3l#@3Hxb{YzS8DVtIV=N$HN^f6zC_CT_>A-!TR*uD{j(pZ#3 z-n@xTzYf^UJ+W5&o6beIyyZl6GB0!Go>I9&e>}gUoZf|s%MIw=ul&N3d$;lz22OkB zPf|*}Zf}E)^%vizCC0GZsqj6?C+LDtG1772M37z7DYfcF7|@rt%(0aWrOve_w`~kI z6)B}wo@ro|iGJq88dRv6`(YW7aM7evK!<usG`VW$-C zWpqGLh_JKv4Mfc7E9f`fDn}>SN`@LFd2&N^Re}aw&FOavYUC_2)G$Z|T`LG?RG2=Q zeGvBKQ^eOQwttwCQ91lKDV_YR%Z9&=%fbJ>wUazf z%DIuMMU9jV&23}9w5l6s;YZvn`Aqshkhn_`ld7Yv0QfVudtze(r>WZ7-Ru>>B%05h4qe-*txf@&&p#fI}%u|&8ky^!aQ?1Hj zaDe&@8wdJGZy=`!pSjrwxDE~)okqPafL``@{LJ5ft{1iKdg-rThS9tLcJ3TjV)i1f zU=fke`3Pqc6$G1G9jo0LYu*CXzc%9_LX_=^ui0#tmx@UiiZ;tyIyCoD4pjXjoveQD zE(vFDuRvk)l~{9@s;g$;8D{WG45fF@I4Cd?T@`+gUW(RiF!vyzQ%~%C*GT`++y#87 zk=QPnc*>Vh56 zK~m}1eCDOe$I?HuP2drTwub8a^`GRA6>Y1Kw!x7isayHXJ`7)1lel+f_9Vv3oqFdV zMUVl|&}*kpGkWb!Myq17tXS8-4;OOQ0k4j-o@{X&Y zrFTCv+&X-jqE8j;JPWQ5a=E%%$&xa4Pv#8HxA-gB5N}C(>e3x8{gNkh*6XMb=f*Lv z@~*fen(-Y^`d^t2OX=^fKm6kP$M8+%j%7XX|HVRZV#4^xeji4bi;00{?$k!;_a`mt z1uj(df@ddM{fCD`>E<$seP}LUsr;fUV&*Sny2_Ef!I~M_8g)4JD*#ToaXE)O z;7G$U%MAIqYff?O3IC_}!>_4abCux5FPhR^mJv@8Oy z!Fh?Q4Fx`>7W0DS7RSjH4u1oWT6I_Ta_IDe(4Q`!`+3K5WWF0X_|-c1cJS-uYr(53 zS&JOP-rB*7s+qqdI#%G#4y8T$kE%U%U;d*y?hD?-?zObJ#@m@=^zQICps&NBv-j>T zEDXza?UO)i;Fs(5D-5Dff{E(a9i%4)`|jQoaj(Y|2!uzv`A>VB7UFl3c*H zEywnBP)v`W(nR^Ze3rs93U9|6lS;IUfj{ zi5EQ#9wsU|^1&tD3S{G<)OiPk-E#i7&eVr2w8rvpDe#{$cVWmSlOSr{l79D2VH|12 zng6I!H-QBE_ya5W&W;+xg7oBPi_SoQbFqj}hT{L~dTKNKLAqg(X*hmp_Qo4}IaG{! zw{U(B<*?-7p$lFlmR?QC!LhXBdbV_${=S;>?v+EJ)RAoOeyQ%NsMLUl#A(&3v%;nwzb?3bfup|sDO0xc zp5_t&@*j}WV$93vRk=1lpIcK}G`+`czj*=Z+o^GeGnaMyU!yIzcr*^P%{GJ?+}+h5>lvpqhCe}? ziWckS9&-yCKJc{!EpFnfM}?n!P*|b9r^2k&^)`rpY5P;(HIk6k3oID@ExM`v^7hHGpfZB2c=`&sW2+~h1NJrJtn{*my>yQzBHu>HaqER60a*vY$EYG5~nNiOGqR} zu8M!@;+g8Sto?dd^iAd2A$p2uhTMgk7~Y~e z)obscU@Os3_a%%aZ$s_Lo;neT1Pk> znmd8RiiJolJ=CNK`^laSW+18QxJ5yh93hgv6xer?;pTD>dmGm^H%?GD*;>JMC8OvO| zE>b8`jc2ai8ZMNVhZ|>srr51_rm|bt=|~3pV5@OD36G@XdBd~e#(P}3=T)wd@BdrM zb)X#AKwZYsc(*HezsmLE|Et^+@b9&YGA^2)r>`52nJbf^tg#l*AX4I-e7K{@^mrp>^nti}}PcKrM!rWWg zpc}uXzd1-$^`MKitpQvs%~Xu+%*Ew?}Gh26ad3O55hfG z^%4Shjsa>26e)PWO1H-wY$`of%kD(`==Zje>BrhBr$`)zeS*^yU@ChiZ$f%Fik;Cw z{WE>;-P)(S_-$lyP!Rani2Osy#zU<=vNthvB}z)l9~2|~6Y%*;o5oYu-3ylAAi1LtkJ5cG@64*hRxrP`b*^u?tuP-hf^gssWQDIehKrKl9jiq}A-9Mui&j2&V7|k!0w|^{<%H{Zb%%aDl=kAa z+={DW*SA=gJL$4(WMx}s@N6!R%C`D0Y>65u#SH;)J?c+Hh6aEro|%EW?T--UtewH* z|BS7%H6NjvU))K_J(0}G;}|g4{MRYUi!~@nFqT}waPg;<+zs$hkjwV;|Gwbou3-P< z@LsKz(5>XH;o=v=^_vI4!K@LB1@=?0>A{g>T{Sy@zyH+P>08ME_&@fU{MNpcU)*={ z6C~S<+(rU9&E zA#j%S!@IA7w>27($cNc!{Ng=y*UrE25&I)FM^Q45*(pp(tHl>b2apQEb+` zcIjWNgTd4bMqq?OsTcGjVKBL!y?Tt{eXS^WOUm72i{@yWt#-3h92Qr1@^EVC%JEMv zlLn{#&hx<+Jwi^dz)hDKfuO?KZ{gOHfK%>jQYQ$F_?J2A3h-MnsR{Pe(Gsdeh&6`I z`f3!qHcJs1sS>ha{$v-bO{{NSl8z(DS`|SM*C|nO-0dI#Z%+Ot1*R6mo7@CyQnNWI zH`uF7^Rt0$(=>`gsgpooG&bMbG)g5`y!h)qa~nV@*KQ_NE()Q3k!pzSvv#y_0qxUp zCQF~~X5axhoh@o`U*H6p2M}FNJK87*PP%)tXHwbT@7ec}ss+t_qC0qB%>b=IGjtR* zquV6=5z;7d0{_eQL-tlM*6f+${W^$30H~$5tJh(<$F#Dnf;Iv+YD7%xP5!a(i<$a{ zUAH7baV${2BLGEK6jQ*_5y(;1?vnZ)RAbXi8d;G zoH%*6>v_R@YFO*kzfZ$+f5&<~ugTVUf9p6gxX2yNA;{Q-g|&Y@)zh}jRZBt*E~r>A z6vU|@K`@U|2>#;NG>*E)pqK13Xac0VP2>@}uyb^ix6OrFg&BBcztGSl`@4W0Fat6C z*|5iqu1?bNOb>&|8MY*QG#}ow(M{O_{D@RNAOH@{eH|(uTVsCLZ!U@8HTXVFA)LOn z6m(yi&gyw|_XGxvPI{emL|@$-p&T>T1I= zlXHZUBYga(#U(|Te**&d)@K7UC3kEu1KfzlMu($UdrK6?z`KPhj$R(gRPTv+ODfm! z_-rCO*P>^D;%36pEdW6Ow_nS{2+a$g1S&_;10br&A&FOcW~dICo`KVwp*iya4tHgH z>rfd=)OJ*Ebq5GRZq)l6?ahv{(c*W}V>&kB`SIEdN}UL)Z3do`O^SqoH@G~PGK+Zq zhs9L^NZ$|8vF7T_jOO-$hXN4yZ+X?==uzNE1I(Hqf5LIh zF8#E|9UaQV%$U&x*)0{mU zj)0T^33HZX*}3zuP!5MC`FL)skuX= zbCO*{A~O-zOr$RuH96+)p2>t3w5W3ck@UC6`JJ0MXicz8N_CNh0}bto<(GdWdjwO8 z)h>x+sTc;B(ZmZ20x`sDrKmyq;AUnxE|MAFo%s>UGR?D2h0RJpO?uCilu1tX4n@(8 z4mJGBen5);gdYe;vZE*zuWc&ED~fddw$6ajh&FUdE8pirbQU*f#_!4e2&itp^Ea{i z`z&`(P;PhTN4r(-t}iGzHYoQwg=U??rq>-^ygd5^%(>Cav*!RcxVX;#g3so+`(^)? zzxHg)X2iYg={Zz?I|;UpFbkUfv#r(acS-b`vsbHdX2^fs2ds$S4Xpfpyur$g-vw5l z__$Nq_bU5SmwlVd{&!{H=d!O;_CyD1SGw#6l|7wo4x(WxN8e^o)op|@CG+OjWiw??+jrPQ0Q)O+VyBXd=1=l0GX{-onZ z{zLj2Lw~Caf4#pG1hH>@jnJvW4*!_G#yb$7|0ne|p5oZ<9q;SE)z`Qh!mW?K#?xA} zO#m|sU->m#v)jJIn!UKK)6siwy)0f_jkioD@MiUe7a#On!irri!>u~Fxvl<&1+w+( z^xLMgAKntE+~m=5#jcKLYKFs(;N68#N=h1QInpe~v9cDKrI>4<3R>#>Xt3zLV09da z$AmaXzG6$htVUt>P)i7>rmgPDp%N}axu@@u(t}OCW))V&@GvgRwvJF zR=bcec{}7p)js2Vnd4HNNEEMdjw4>9p9{7TIPQCiG^l5c*_z&M{cIn-nr@bdu>i*l ztF@1xppv2VQh{bp3+C-xmSWl57Oz@e_b!^>jB3U@xyNghd&L#-<*}B>U&Z^fGp=0? zVp|nE{fyUQWn07P$>r(WxM?C4!$3s(_O;RYH}eklF>T(*=h?jZckCf?H}O_Yv!-fI-8;P}9%tf-vUV-=Q0A_w zrO#N)v{z}`r_U^p)v^FBXog41+E7kGb2i@jdbpmrby6PX2`bH(3iC_BPS@) z=bdzQf!6tEDJ9UGE%e{$JM8sc=p29ky6#xs>JDoUrUs= z3CzOjI}Fas3*n6AXYJ+lplpej;!UtL2Md4;S1xyc3{PN$QPfg$t5FDYh42=yTC%To zFz1B_gt7e(7cZ}=U4A|$|GAZzE;XRsN;IDh-Mt8}?F7F&AP<5bq!_NUE41uI`#oUUGD2aHb z4&kLjT(rUyaqJ^Ol)U`}&q$k`{VIuOzdB(=_Pt$tGmRwMTY;Kp<#vM#*}fZoTlR(c zjnI~6ZnETy@mr|jM8+W;w>^6(zoyL#&HbCTyj-^BkVI}g_3rAy()`+EQ>Ik>jx>&4Em7omztu=*X)ork!*)7=(NuvYfv@ev-~{c z`}Q9qdw#qtK&k1hy_UU?U!lxyDl3%vL6vI_Z~iOahBx;yMTa;4SMzg@f7{tE;m)<$ z#r)#U{95*CI>ceh{Qv}1s<%9QXz*)QR`%XxO;?E~@0IMwY(f-rZW-y`3LegPp#kiz z<;M?b&D+k8?~_86zvz1<-3n8?^R5@!_B(~A{-8TYa_)Uc@xX!4jg+>bY={N z9zt;iBP>m%kBAVgB0a1E1JcS^E#3)BmT1>9VfJEND7A;*0RNn|)Q~*&o<;n?b^trb zM5g3xHJQXNShZ8z;;E6zJ4Wy&~M@5Sch>EJU5e`Yi74JLBCUyMhatvURN znO<9F0zQyX5l&z1Aj@jOE`zZ)N# z>9Y$1EKOLTEuEhOU5D;WXpS?|}uU{5brAmdgLHgZ1{53Te0!!>aB6xf~lIQ}GX? z+}{y~zNL6(E!OzLXJB=h*=ycGhb0FeEH55^xZg10-4^%sf&R&sVnoPovC0*x?pyyx zUm;i4&C`8OzUF7u{h zQ8;7S^pCXrYc?TKM13aiC0@k6>$G_^J=%&F^ub&BJNQAa2RQ1E+=7(9Xv= z-s))Pd=JufjW&4QThxjZx03UXH_k6Z69B<@Sl!0)*~WTo!wC%Z^_q_$%bDSpY^foU zecuMpL5_9%Z&Yt7RLYD zIYhYyz;%wz4@>P7^ajp0ERy=YN_0^o;o%jID<{D2K`7gy5$lTUU!9okY@;TH_pT}9KYf9hB(ztjbG1TyC2>~{2 zZ7+XSQy@SCe^qjP)XMX(COs%o`0r}r;{?3T;f24Qa zFoc?zoP-+W0LoGx=ZCn-PYr|NR?Ui<-t87Nf+}0Q=#&2AFs0RJJ>_KEfTyJ=oqYpt z0fKejhkXO5)BLT-zM*k8%{l{|9l4t&QrYCScxIO8$AT_K2r_urqFg7UCYBzZ>!8pd z;pS3Eq-3srmG{Ctbf=cKhQ&QC%G_LBwJh}G7x-D<(hpmlSnYQIxFg&w7THK@+M>)P zRvYGEmW4Bui!r5|U)6r+QI+W7k8PIkspykHka?Z*U;le29N_4a;Y@WuFZxKfAH&S! zGhpeyKXFR44Ll;jSAxP%_!fg#@X`Wsq~6gnZv3nI&J5{yB7pyWe&-Ix&a31!2Ezrx za{=lEi`(e8`rkd=?wIe*J zE7*gYS_qcPwn>@6h6o|`yyybi7MY=1I#SxD$C%70BBfBpRvn`ubRsu-Q|IBzKsvBq zN*b@>(A~;dE!p^Ctn#`4lc7;+qIV9m$de-F3MW#aH zGRyg~+UO%Skg%v}sjg=hDz1D|NNp`DdB21RNu?h}FsC<7o^%R-0z@RVc+xeFR!`fj@kXEZj-J&k|Ezz(}4% z|2Rb5dEf)=$2`mnVwI~qisun9d0Fg;VXaUx%VL@8;#l|cx{laktFdKFeo1{C9+wW= zsz8hXjx@M~CQ9P!2dsjBEJ@8(JiHj%h>*u4Vxp?@HFF&rw_#iPFLWjJyx|Q z)KI1M>%{ZaA_0U9+_`OAqk?9(9@*m^v*VrbLi16PeFqn=K++I9Y*(mWK{nNEtQe=B zD?)e6xG9k)a!I;oP6s}mpua8mjnLg|lvRm2%c{g-T*TDhdGp5XB5i3NFV7dr2-8hS zxW663v$A*cMnuABn~Zjx#tLMkc>#(!UXUvslP=@5_x5in$}PAr0{9jd+)io&Ct2pc z=w3e356H3@O=c9GxUUfhsMw_pBwl+dC+9Vm{5xD8#`MrbNsE)a46;P^~ zxqiun+m#nr-hr=@Rr=;UaLmc1IT4aVCa|^g8 z;L6{Bti9gfo5bt=E7t~H9O70&>LBxZS{4jIyV>7@j_?JFwcekJ2 z4ndrrRq7X=F1okV??TCmbs65vtU9=_M!(tduGYn^-po8m9e;88Aj|M<6ozTI;rSzEBq1&cg$ao@qeHdMVN|Fg#XGz;wjv7uQ4Q>c7sQtAEaQ^~+JNs|Wep@yh@t56BPiKv(BB>U79?bFcTG#eUEeV`cEffKLNv zkYh*&iLLZCy9e=JIJrXf(tQ2KZu=ljp|_jQdCI?>d<*u#8Xbz_3TZ%j|5&_<+9 zozEfz$;m%!CUR3F4Kj?qHu;@Tac6li>SUiScmiw{$y@N~mSyTAHgipz0rkvT{(G3!$u14Aql6hSSerH6KQxy}K}DyIXGrWvV)kRc3NEDF z`!?rnU(SK+??ja)HJax{B7=-q?1vq2?aV#hKvLyB7>=QTF`%s(iCIzTa3PcunGuHP zRqjn00hMzi=I_WN^(0=^F)YBd0bPJytsba3KhDF|;5DxvrYQ$lB8m_wuCx)3j zhx@PaLkVY{GKklU2Jw5SE8ZKUSo-8eiOh{-40g8oui}k@wtgYmn^*rX0}9QZ&A$nD zS`cn}doVsxYK%6KZjLcAwk`-6;@9h=SRs4dP@w7$hfcCs!Gvn_=lQl!n4LX*t zpY4)=eKmh$wNt98{o{(+43@HwPY=o(u!V;H%*}>p6s7*HVgaT2@n}V(`|-PqHh%ao zfCB)Fl+=%Mt9^Kr(ui%(X6LB3@Ku4Ym3gh>hf@~6-6QlTdkyH)@ML=8@T|i0;VQV) za@zHg8S?VAke*T%hx!7 zmGIu^ZWnU;0OSNZlb}L@83N^pwY&D{85?T&i?U%{v_=Ji#*KNMBqIh|qc1Bh)Ub|< zx%(e{!4hNCzQuq0H2TVaayK^lD@o$+5=+e}G}uBYo%;WYhQGrf$w?5}(g<1#Axhw! z#v-rTyc^unR8);K&XHRYARM26CPls5D@q%hlEYj-Tl@^wbRZ-Gut6rz6=ihCf}-TH zyt)>otL?g7#)x&@O3tX{m?(aJ?&X_^_rH_Jr#?{8%#fd5-}4kJJ=h@n8|MJgkG?Ec zel_xoE|v~PjV<3?RT3Pw`t@8~mZpP_9A<%A>frg|Uz5w0*c%xoPwxBvh0D!+2xi0F zgzmgBTKF4yU6tmIJXP?&(}+R{o2CR}s>OdCP9;yS9AD6!1({A&>JQ8?H=PDn95Ry^ zHH@zM=*zgsHWdTpSrbO2qc2xQ+qk%>P?MfEf^y~Yvo9T^U{Ef|jlws-6CWnKG*w-WGgr1JU6aiS$A4r5mv zlqkKtKLr>z&Nto6#z#z2YNtcEeY7~LmrR?7UHSqQ%PaF5Y zCr=~xRbHMJuE)ucaO4J~)}+kjm-%*QpC|t!>{gBZ>Shi;h@0GjprOb|%UCm^Nbik+ zIy3}XUy8xaw*jCC1I8e z4DnQewVaP@WW_MRZc$0-{&}Y`CV5X^=BN1SoD1W_j%*uwr++GLmF-X+Y-!M&-TvXZ zv|`ds&o}Vy)oGzg?g#$ZH#B`s%|pII_Z=I;&5x@&uNRn)N3%C8X@9lhxJfP?jr?{K z-MU1wL%A?OfJp?)8Cx-hSOw{f7r>So?}&_lv%iCfDO7+cmeM`KDtI=2@jFo2&I#0U z1x}#)=pzVU1oURq^W_REj0Uf8w**Jw^kwk!FObXiklD|JS5iqbBu!r)YBi&{m--P(pntgYE#l9%Q@u|k!qg~N%audk$^mGoScCP(+wJ!>%C=!Zn=!mmVdHspU zj|cHyM^=u_f8d0HMPa%16IsieZ76uv^suO031iOTMh3{&1lH2bKDqo)!(j9)XW<-G z{x5~kbuqq4Cvn*)6q(;;!#g=YR$6n`J2yF7=NBojg-@-nD`lOtPxB2sZ@FB*X3lxz z+uRy3Fy9{(3H?{aGu&sx7*pzp6pA_LHrW~c);MqHZ%4{Ffxl)v;l>L!@XU~39LHMR zRInBUqsaQUsD;ds?da=17cdK_9bh+9<5#(%`YnUzn&9nS5PpH9!FM1FH8K_D`+x%lsc7tARi+e{KS{po;hvD5*Nxx(ZezG#BL*uBH5HA)fDfA6#gl=O z+%7&c*miOI8SLWNrM+0b!F~pu7GuE$3|MnE=uLguxzC$=n^VO;=foVP1s>(>C#pI^ z4d%?ERt4AliS9kN;)8`4EDaqF3|df^Iw+o&=kl}tSZgQTc$HW92kiusGVujMLFHFi z<3#Ov4rLRb6#x!m36mt&P5N{h`6m!DN4-7319v-G1-7kgHm>m#UUL{?Y2e?1cCf4( zp-PRn+Z=dcJB?05=ihK(m8{6oL&LBiAG|Cva&vs-@iMN$;iGmEjxxu0b_*gC(uk!{$(!!5b0@Le9qnvztyvAoAu$0e9!gu! ze*aN6mQ@)O%hbJ`L)zT_oBWsTSSF7lR@rFy9-P>>?a&f`daS|sO@;7Xz1Q^ea?f(z zl$jw9mG{9t|6GmSvnfXpDY5fF5w` z^mw>`n=Rzm#&M>ebV(~Zgw1sua^shN&7^dsxGS~_^_|F|u0W3u=_?|^Rhu~pPA?8M z>tcw5L@`?XGukCu+BU9GlSae>sDy}%@9&YmZ}KtZwA+B@VcU>nj#E=*?MNLvJAPb1 zQM&VN`dAiB&HK!M?lX5Hf6FZ5wJ=HS0Hybr78dL*0*`?pA0RV<5tUYfAQT*4={QNj zDRhr`im}Xv5bi5ul`9DYS-+?BmOF!WNu+Vjrl64NGhT_W^6?8eE>X5D?j@JAE-%$> zFqvyQF^KiZqV81O74alJnssQRxUFM<#V;eC;b!v-tB}lFy(xJ;nL_!DJ+XtgPRBc( zdl^PMfB5cvv6Lktt!JpudcyT6DN{7ISk<<=*Rht3V_6!me}`#G201C6Xf2(TJ_7@* zw^>wllD3`i4Q|e&qha?qy0eJ0z&nH3(70DDUphsagM}^3-G>3c(A|M!0yCC7o`gBN z0Iq1GWIOIo9P&eVE>>Q_;2QZw)*Y-%(2BT;q(L|zrbZ^cOVS( zU+3wkJseGuczRII(+^K*IdtM_%5KX4kHj9(;~fFX+fU~)kdq#tOO!K!94+Edbf>f^ z`$J*lp`^%2-k+$VoOJ9JjgR}PH@*9XqEqNywB_EG3XKcL_e&auO+F7oFK7BDgVB~m z=+|3Acbokt!Ci1Id;wFG&(#Ui#5LWRZof5Hfv;%vj&3+c#FEhsYkSFE&kF9zuqUD+ z2@_A4Bo31In_*pR9kVQxCad{pzZbxP){k_pqsja5DQtMpBA@I}zoVDC`yVN=Q_~m~ z!%0Wrsb5oB2F>0Uy8AOVA_Yhe0fK1fK=$iyGU9gwD~(iC5w0Oi<~_9mi)Xp;Z&WTJD<)Kgc^MtX|meVab=#Vi9u{99PRKc9KuG)!iLlK7O>SAzYs+(GV~LLXx4h;cLBp2X0Qv&vXBJ|t$-lvrf09>F1Nf7EjZ_5$i2lJ`yIuS8RyIVQB-61vz`_P&4bhWtI2y@>|IQhIJWs}#Id!i`;g zaKZf(EK+x#{V7$D?B`lx{8mHjerMAjX(O{TgbOmJMP|tHm-SqTKksK3;s;;mLj3A; zz3GV_c}J-e97XWyjrQ@Z$+0xg&zE%IqQu`p<&SyYh;}Q_a8n&wiRq(%%b{AYTe0Dj z^u5aw7N{h%4O{YFNVBVuO%N~lRyUPj!_MvX9=m(YzVsdOKjzBMQ285s*2KS<@*OMP zdj!f*^pG)8klGVTPxgc->MY^0BGhmQ*d?6)AxzD>FA?LHP0{h@5t%;MtND|E)*$xnHIkmPMv(q6;(#B@VKsau2dh_EWu@IFOz^q+WZ{gU5Dig;VR zbr2b1A!H|6aqbPu*S)Efb1a30U+-UiAnZ3hZgWEI-7uMNW|uwAk^=lkxwea?O5naF zBpWA2-sm@xZ2m;7y~C*HSbND7xSme@fogdrhi9ID#XEa+$p*}!)LO6tmMniI&(XCz z90VHZxwvwfA)5~246QzMphg`^$%nf}K1=O!Th0-G!@;GUE5&w{g^QrlB-o{qs_&Q1 zItA6@n%WP&*NwJufiXYQ3F;9i5zP|&2ENKM#^0e`#WL3=mn^3YK>SRhvKG{gz}PV?U!!rh75mn!2NnYR6Gco7Zrp z>enM3z#W98LG6_CqX$c%!YGQ_Kkz`|?$Dg=JKYV`e3;n}SrGAf$6D#hHMI-G`|u;B5#6U>QL4FXz0+TTqA3KcgA^o0^yuE8IO@jo4QXMkv+ zw)t0<8)|RU&K*cQ^*8+)%3o$-kORSWKhw21Omj2h+Mi%=rn<+c&EsHe)#V?4>6qS3 zLPzhhuVe5toxO!kG&~jX2v4%bD%1p)51T0?3;+(;D>G0Ne$eDi;8izWnPsXJKh$7mmU zmUwF2*^|i1e;mz+p@Cn~Lfi}le#$S&pq!g_9(}xE(FyJ1VRN9fye|kWAD+FTuTm(! z@_9EC>v{i@P9w*X15EdWrxv!Fmzrj1dHD2bxmzd1X4!|B5L3CeriWPju~d?6rFDR zoz-friu_j@>q556z?j~>G` zk~1lZsL@(m@LWK;xRQc^bXV!O1*8+^ZB1zs?4!~MO_wBB67+G*P}?<;EZkaY_rmob z5om4)f#%YW2{yu}X&1+oRxx69(dFK(iZ0g*=hHcC3Z=e7qZZ}hEA|7qOA5T}pg8Mm zccm{EFekS7Zqu18dOva~2x0{}jJPx5G z?6Ip6>X*k_w?C=V(Bw2X5_ztrL?ZKaJAZ1t_lVD=b~;XV@743u$&b1Uo7v@;xdw>I z_9CIjKM2ho!B_;6lZSS9pYN3@dL~%AZmG^&fL9A1%vam3U5Mx%E{|mv3E2HF#{lrm zq6PYWG{3VbZ%Fvuz{{oq!21SxKHr7maz;evDT^2O?K`2&=Hht-|UPhJ4F&e;dR zT_#{Uj~}j*Hp*3EWs0&fDitm`w=M+27XPQ8+Q~}&fr{D3tYzS*evyGP!HL;~aOML1 zc|(zH;v-Spj3s*&A0-N0G&2Ft-X4ymo=v#xcAlnO+_zWY zBsJ&bzAX=%L%bmBn!3cK_`j${8@p)(y~$sGaU1G0g0~9myr7MeAM}lWwHsEK1DQ-HvRKc#_(<-Xw?w>*j(0Aw zm|yXU+-6ytFakQkpn~RN9?sFql_BplcthrV%HjBMCSHsOH)2pmyrOB-{}H#^0cK2vWdo>g?B;plw$%<(&p+N1nAYg>>oGK$i|mp)?6ZW2*=alhS=fn zTIOy9$(ivnD3ypWJC%r{&3jlLaga=y_!FNq?NlP%V_q_>2)Z>j-Y0r=pAk#<*G+sf zq$Tc*To;=i+oUsmC36qd?y{|ObY^E$9R$CxvblmEfyx5DT;tbtMP!DY1SQc+)_eE~ z`|ul($4A~a1S&gbMliK4ZQe7mYU`}37$SZA_Ov#!Mcwf=O^J~u+dD$}@yI_ya=0_C zgMV*qRVQcl+Lz4hO>cI<-drVJ26?pJJ_DPXlGp0tyPHoybV90&=)Z~nkBZfW50Ok>Y9;nQ?aH@6~@IOx`wt#yf@-FBW>O|u(*BX zx^USt9w_ZN1PY~o3z+r|>#chmBhucnzHNVd_A9VI`K!slv5Ld~-@gE@CWywE*WVwX z`#HYUKP&&c+&_umvHG(?E#rqLt7G-Il@=wd_)}h#JPoQLc?z`kGsPkS&Us{8w8(${ zFBmIi>W0e%J#+BGBnhcZ-6%?}ZYbvh4p0GyE|E6v>&L*?vGi@o;E=xV@y1tpEq)lT zF&)4Q?DSLXM9bb*?)11(NARaaE%yoZRLaR2u3omhZSD1Bz6`e!Maj&WU8F#1uG;LM`mDqKie}#$ZPEmT zb3A&7nVs!4A;WtA)h1VP5hY+%Y2=#xe&Ms)lle?O_6*632o=ER`^ zBO*JK(N06Y@Pr%h5-|n}b)1f6yws#(Q8uBn2LFPi>rhbywz3O2WXK=cST!&Cj`%Ry zkqkHAf1utTh@!JUBhSd+@m80o!g~MuJ$9DSU;t$ChjD{ZLR{cvdEA@Qo$>dvk4>Nr|bMzN!`MKo63LGjk84UTgy%b}xoIiV87YynaQ?uciv zDd1NLzQ=Pj`OR7%%^!c)QOK1VbMPB(47+llbwfwpUQlke%FUBQ^pk`{1GOm>GzMv$ z`*lwq9&=(BV8Z<7WalyQ!nGA$LDj7Vwed?!c)jJx%XJlFfxQs7H!JE6k9l~JZVq>^ zqUDpUu^fGppT`v%U*SAXV|>8~Sk1tr5AzP@b5h^=^wWGKPh&jvou5!>A*vHA>bR(z z6PRgp7uGO}W0+Ogmb|P_C+=KD5q^8?yC;`-yyf1Zx%GZ(PoHuA^O5vR5FvM81j{#~ za7hc6GMGknQEvV!SEveQ7R2=*lqVos(^qlJPAvyw&g&N|UKhGs54>2_>!G_>+Mbpi z6suY`<3K!ljz-&NMj0e2z9E#w-QQhzVmuQ$3J|GT*IhS)N9zqmHxx~|7>;)MBIp#* zeY|pAxclN0!F<(#-kG@Xs2e`|O?k~ZI+nRMr%x(1mTDk%qqERD;@>*EJ9_;6#QI;g z&WOsrE6rvkKxMe`HvT?W$3F(3!0h*TpIqc$e1zmr??zFVFby`I*FVEc#0`t_nB)%60kV=Y6`omo8<_i1Pn-Y;VD# zpZ>fP#_Wem*{pTj+r4*BNE!XNH{|t7^ab0d_x}zPJPhTKtmS zF{-F8=C-t&ZNUDgyKameFnNFPt{cTZhcBJnU01HH^jd5$Y)A1~a2>0l&I(XRxX~`} z%#e=Hm_#6>H@wku80+>`T`WDX6W*ieXG)Nun>D?JXfFxm4#4x*XcP=*42ZK%SK8aA zdX&({bb*~@HSYs+-F3qmS9g2Qs7Ba~&?+R*Cj%2bEAWc2lX4BEb$b3maf>^Mi8`Cr zW}iQDi+;AoTe!~$GTx4-!i^uh{3Dcq9lvvMuzfiB_q+2YIpC|fiZUasgtvT(nP~z9 zY(AzC?C;08c+Z@1B=eb37Oz?tN=c3$OP`fUUphi=E-tf)EjLvCHglUCp3D=0-3@oI zX1PajFQ#TwMTh8!91^!l?&BN@Le|XZ9Ic%fTKJ6ajp_!tL`&2quDI`(-FvK(H_Nhk z)zX{Cvf4#-PhcTBzLX(M_H{$LZj%{ZB>DT@_P=9J{yW@g%HEkFpY3FQbhvWsv-(i> z8{xYNGQCjmj0S^KVtoiLBYDaAUhG_qfVkThQL!Dkpsu8kvBL#pnKF1<$;j zf;=8Jp~UOYV$ucR1>6HWg;&Zv2TNlFOC{YKrp?=zeAkYzo_ZhXwn|UdIXMB(YIQfq z($&>etvfcf@Lnyeskwsj?fT$3FMCfbK^%8)MR$8)zSq8-{Gej2xNSzubGnMdjfX+h z1dGPho`N6Y|H~nAv4c2c2`N?bJT;U;klGJ8xyK>Q+5ZVKSLW@5{+L6n`Y%s^%;zId ze=OD)2hKll8~2|l^~U6>y~zz|jd^N-|I|i6YxK0jTU)1Uwh9#9Lt0x}!#$omto^#% z_2%*$)l=rS(w>X3wZ5=}SmkG#bWigR#n?^8dO|XilCD)1fIs+Ez6;KxieTii1 z>4#Hd`<5L})!hAB2rL2pVNs#QWsPYM>d$4>h;w{4AL)BE4IRw^%1RGH?A~_;;_2Hf z%KfLe4kSDi$_7wmZg{xntk41$8r>RA*E2w5BeG5{so=-?T+hQ41vn~wQvsL+pC+IAyv zNUOIwo(GeI!|9pjQs59kg?CgRT%J6bc%$CiFNjml>V>-}k72*B%-Ja6yM*_}_mr6# za?tCX-}CsL!v`$~4J-k_9?8?j$^o(wDr#<4$I8r{Q6W&SMMnfUN!>q>p0CkMg*6|}KUj%C=ydzR^ zFg^huWdxERmSiS()o<)1nl=j0sjc8Tr4HM%w7BkeuLZ}C^}CP==q`sNq{;cm`@9?5?ur*-@_{Ocl~w~iNR z6&0@2(%}W<$~^z<4}=B-r3BFe>`8V5*NmgniI{^5{4L)VFQ9e2?tl0t;DRK8Ws^0~ znyxGb8FnS}BzU4?-(ypdtFUhWkQorU$xUo@fU`O;SfPXW;bAbQLav}ZfHw3b$ z=H{z?88$nV8bWFoeP>#qO&#M4=oWJ>o<=Vpz1j%F?sijonM(=f$x2T1(Fojpf;nWT zkRtq+$H`fEFYpKOP0_|o;JI(=il>PJ1S_pQo=)_K{hk=eKU-s!UGd5##qISQx@rj1 z(^VR}J3&=GiM_L`z6DFmVPy$#Sg5My<}KOLK|hJiam7qH-1txIZ{XJrRN|hL{~3Z+ z()bjECMi&23QJl<%2F`W~15V{s@l$6Z0I+3&N^Y|$?&xp~E+;^rMsI%LLM zh*tbV=b3T-Y-LN2kn9SVebjccyYB0O*RaK}%D#v2#o$5`n|1c#;Mw7e9(l}(>3ef` z%0+CRu2gx{z!mCit(HR~`0p=KZ)qewolrb`if0Xdj^W-JsoWl^Y6<=LJRPv=gG-WQ z3)ik-WG~B0^ zZAcD|Jkz=79fb$IghzIc=D?TpoZ?x$mi7>sQ-7z41%UAgmBPJ~+S znC=>E<=R|16TeEwAe_0hJDge@N(nhdQXA{e*=uB>hJPn7>Yb34rhz+;VaGor4gyJl z_z$ev>R_oKQNyl8Rs-XFN;q88$ig=HBYq+WOZ{0mB8W|G%BCrSKP--KBwoAr{7mw= zBL8zhHQQ;8&ZaRo>8~{5zejSUxb~V{;~fCM!Do=bNH*!5WQN=*yU@?636PIlWoN*H z{pKH(>FoBOz&R0RE>jtCMJaQHD|5HXZ255?a=cI<$MMrkd*J<-bdpG)VDOH1->Y^d zl_XCQaub3#0RB0J(Cp)C*_R?Ha0|J`spuXNy7zGvMQ17bO04$6Yj#W=Sz7mlh_|P5 zWu$87jNyuPUmaSw127InDp#PoRP6sE&8mo#Cy3QMJLoof0$!6k<_KSg8^7(~;`H`D z@UwA0!G*?Ec)v&_AZ{vL3Rmy5SEzRbL(9R_Z>?Sj-VcYYN4e;^o83CDp&a<;QrK_) ze=@EDdOL?Lyw7-|l&2RP!r+28h)wrL^nffPlD>|0*j@a?9Cp}j*g<@4VTVxakBk8^ zYiMqjlE#lL4W*<9Lmk%cR?c`NJ>z?TcQT6hEJ4?jXCyM`PbZs8T#|wCju&a=L?Ht* z4-G9GKYh+X68qs^4ct1^;nrC3+OX-oz#)aXz?x$8v(6s?3WR>U(?%FdkH3cdb)9Z3 zK~ZpNtM7_v@yQh(NB7)^GGIkw86dQo)5Bg#MGl9R2MgajKKK2!$lBJg?6Y5|m1(~^ zh?XM$K)6wa3FWR(xx(|lpDXu^+cH2$V1GT+2!t z*i3dS)F2*x#LI@Bxnw`~?2^(w*}JXH*;D{Q?-#3IGBf6#k7ZgmrqQO8`!UL7Da`G4 zxC<>9=OpUcIK7n&GnO8ETFe`JI>X$O{R&x3*&7HM>2725SCQV&JAXP2r!U#>bGrUK zJBV`Z!qX!;2~XLMoVomEI|<(rv+m(Jy)a6Sp68|B3Lx?#yUz{->I{;f*zLK-F2iGl zMS@FEdIs*zZjiH_w`@`RvJvT6$z2+k2tvM&n$YqhyFOw@P&Kl z_RxDcW3OzARyBv_dh`>?R3ma}n((zt22D@C6K<3e8_TosB^tYy{2UUw)*9>h!@Trm zc3U4~C?^n?%u(q=lyjCVU2pHOt**&h6%r>k*W`g#D0_uLv{Z61cR5XgB)SIvuso5u z@CQh}Ybx8~^<4+tQmM!WO?Dm@GSWH22FgS@fr;=IZ~yF14V)akL+Q{x;@t2Ioj5%- zbYT6?^5mPD@Rmp>yp^Uy_lP`xuAG0u&+A`rb+~>BuoO9TI@X+rggFq&$K$n2h)QW4 zg)`%eiO)7aHoqXHA1U|rO6ji^oz7f(rIsjF1b4600ZKK!;Q91DFxPGb&iLF@C|uAx zv-=bGB-77MA;%3ldzD(u3~4_aApY2v_so(N2E-5V0*Ke8dgwzywEOB4d+=K!J!pu0 zg{02I)89H0+m&O%D#KA!0Fn0GG1+HP6azWA_3b$Ta{HV}hob50gL|NnQ9&j8;i{(4 zePhWD?+EK6c$QVRi(npUc1<#ET>@9yC2)&f0ta(Qg*{RyX+Fg(b4XodkwbH2;%)v{ zoXT3mW7<9L9%*KW?)eR0>50PdO&p(;Zg7XKCQfgi*cV%c>UIA)jMd67-7Pl@TU}__ zDmkqers}wi%OKo+5v0M)t8^7SPnDvMg7pkH=J0=8pYwNGe;$6UXD_dw=;PRfQFqT% zcK7_gH{S1fxzBxZlG-i2FW%_Ke8Wc0_*E$q{+_ZXFTs<(~7HV}LvnOrs3Ap~l-~5X6WoYwv&*38Tm^E2Ui4fx zvopBg9Z`BIfOqTSy{JCJs{x(3KeOtE_n#{=x+8$2|DGT{;I0CKRKoLcx4KMbphwLF z8-80rSN{4%`YA;67h6ABNwrw$26O>)q~%PCLRxXM##8Th%|JAZIbehf>E!U8exmfqj=S3RtL17=qNoV)LF!S__V)8C7+2xH+h z8zcV;<9Z}Z9RE=a1}1#}Qr6>owl{a5o!318dXF;JE^!@Pxf@lkkPUOVmFrlWD<=j6 z?TuGC$7gUniS2vTUdIy!t0y{Q;s~#0_RFQS-$8x)?Y&*o=A|dH89m#@cdzB; zo6YEzpIhwU{+P(OEw=lP%VEq*QB)Ba^r<;%1F8=AWC!kB@14UE>%V>L+Ji^%KWWVIQe1mK`#;bg_|P>r(HfhrY5ZS?Z;s+dHF*7p@y$cc!0CC+ zBnS7CJ~uf1hw#n6-~JEdo72@#A->u8nfl4$n_-xM=I~7^MZq^|vCiJ2heG)4S?|60 z0kVhNn;%ejN5K>SU5XfLugjzM)Ne`q@3Cs*Z3VL|eCA&bS`~94_n<6%$p`Omw-3gQ zm^nIMwqtefzR&Xq4r=PN4=ua2KDuZM?wENz8J^AK@b!!Ptm#~<(}DWykR`)<7W5g) zv7leu%7UhuOu>R`Jw-A8U-TXdS1q5l_j~B$7y7KvuXft{{Eyy4|DnbT-$PTau`hTJ z%~a_^&^^JG?)4s;qC$o5p?+5A|9=nt&)-8$sNv<_L!bQFKsfUuAlx>y=RM>u%bp9W z@UqhVF%=f$e5Z&y^hJegdC&KLi64T@fMfZTf7#5LzRUl~QkQ?d%l{RhE`N+uH~zyC zmmhceEquEC1!GOob##zl>GIFZ=U*4pZ*ld@g8F>A`i(AsbdaBY#Kw1CKEJe|wSQ5w ztH0dke}~VY|FbQBRg=sAjmzK2XE6Stevt14_4E02T>h%XuKx8weLh|NbuNF~3obwI z^84lU7kth7|3Q#n>GJR9)9MeH=@xcJ^`L$jhh)yYj@Tujqh==PfBp-b?5j3e=pnLS zciputBKvPHdo916-WU5d;KV-db-DI_!i4bcKZsYRf zn^R)r`!*BsuXGjaY%;FBovytb{!I2cF8hc4&X4cR(kiQ;ecr9tVXn+}KHYj=H^%a> z5At{ZyDh=Z`TRDbO0Ygzo{56j*IoX0K3)CG-T1B#@}CXr=kwcKe)d^c|G}U>pRT_D zRo8!ze``=bpC5Di*+y6Y>p^`!UHt`EJ2AfNgZ!$Xem=j{<{#AO^D6XH23*fx zr>jejgKX`0j{b2md;@w`=hclr9@KyRVOyVzt-j7{m&;$i(6#@p%U{iBus#E9d=~}z z4+iyJ{^EA-doAnDD<#PNf2+@8?ogy3$`NRh94Y;jTIr`;WBMsKNR8pP<~r zT}vc$WKmPspwPlQmcT@hF0J2igtwx2IlpUOX$G;j%T}_Tn9UmaX!3 z6?f~$+KAT@EpF1!*CH_AiS*z5`@M?jLH1*{*D^j+QZc$c8d|t9v=Gy) zjirgQjeNb`^AlfumP(JCdVap&^RuArJ3%UDp2f?7a(*}n&u)fW$GynvH%HK1^;ShPCm+bylBO)HyOOQZwjCIm^OWZ6t&C(U%1B&V z-SiRppL%O4`(lI$wMvN0dHg|2h08wiRC8G*Gx$K4{%aHDmVIpHTO*m0p!`D*S^4c& zzRi`r|KBWao42-jwM$7qY$;p4mH!WO?;amzb?yHr5Fn^@f?}I`4K-Fc$78`uCH0np z0MFSXJ4LuS$plZ*Is+AwF}p~n52%@2fp7p`RT@c zAL5l(tPk_2wh;Qm!1o%fpK44uTVnNw@Y8{N!fcg|cdQurUS;DGKO{?I^^=Y1hh5%3 zrk>55sZKttx>U&%jrab@(k4HXdfp=Uq%4uIe@sF&wI_4xp;ZI-gWa^S@wbwQ(}?Gi z+ZRMrTcWM+f*~K`i8WJnC|BB#O}z`^e0gl)+e&FnKSJ)Rfggd0cRbyg{0X7Pdo@;| z^Vq`I4Ws`IXeC%5n|gU{;Y-ohw+HByHuYyim$w;-KUw%0@TsctN7@rB5A%rVs>bi> zY@Fh!J{29fsjBhbUsy?+PEkr{21N%lcRtd4V|uAR9@s$(&ryq3R5d1lY5BKCTYdVm zaxA-M-Wu#7zPW&pqN%-wU5)qZcv|W9 zsfv<%P)G!}h)mEr!2KxE1D{W=G)ho4au>i}uBeTTNx6k@OzSK!ivzPfdGaLmvrlMW zAhNE%_VGtSl%#kUskd_xG~J4zemzv+enl3}E=>gv*AC?GR)dpYMXABH6Du{iuXn4# zts)5}wkh$<7|v(=y?y7G$iWHvA;g;+oW!?eI4ttJK^-JEp6Ary6z%lOoEluD{$2{_ zmRA2iX1a@HxEZI4YU^rG{8WWEgbn%f!jZd;JY!mUCAFDEd6HD;Y9BX?ft+4%p!c@Z z+K^Lx+m!eg{LZQHY~_6IKXgOTlx!{QP#{;;8j8H)uwSv><;zu9W=#(DT_;x!_0Z%M zNBcT2J!s>68WgCWao${xL2jB;W_+a<@1^73@co7FqqUxVjWdom0rAe4bPn+v3d&qw z+lsZtAtU3dLr%xQ;oYo^v1!H2ec5uZuoj&*|ChGqJc5H*fAZIZ^M&-FOQ<$oRkDv7 zxxTYxU$#L_GUYIZ_h)NeQQuZkfwtF|T~S|BQ3p{}_kOjvJZqQ)=u?W4AEOc}*O8p* zr5_ODnUVe9rCIeJq0|=q0#s-25%6Moc^SU9x?+2EWc+H`5`6*7f_UL`=>051iL}KZ zcD=xUze+*(M>l1)R24FBET($+YInR*Rq;`zL5FF$R_7Wc)@d%)k_$)aVPQdm_kleu z+|nMRgk?I}7DcZvTobSO>rJ->@-BRiM3ehKSkb%a?$w+ZW_hDkM`JfMxggp&7`JtU zIk}qDZ$I}?Oe)0dGSV?Ec!pPoOjEf;K2hY^ov6<}0>!d=EXq~Jc zhOenA+#ae{=sT$_IMqdzwFfaN&io9zi|=Gdk%r?isQF-~LBD6 zbJ`W|aChrpK!=a7G2Os&B^LmFk}F;E^Gf~;$$8>BJ74jNI0TO@c&9J9QwJF0L6JF+lC2mYElD+^(?{nNTOt)3m zkx(!pQy;N|V|+N-T>KF`zv_%v91{_w&i1O3z4nrPbuVfH@j`9~V&+=j^8lg3TyBorn0_KVb)2MHn&B=jSppMY1--5plc zQ!b%D3H_5Ws`Yq6vjiEl@WlWU21rGx9?vtD(CQM3NhnV49T=$>AyTW_T*5#S(5XHM zBj+GtrAs)7goBcM502E|6C|v12?vvKaB}YCB@7~A zkQ6QI#{>y$UBYKb_)KzdiBn0YQ5vh0M@JgRMY5%2{U9>;TLL=IJ`8=^^vLsco8EoQ z@~KX=x^lXE_gau}K=0NE2?z8}SG=gG1A6yBkZ?fnxGuuJ=-E54^=c9*Nu4`+^k;CB zOYelL`FP6QSVVeuo4He~)S6p6+jO?q5)>0?uIDE`kaa~Sd?0_4KvUR2pHqJ7y`D+?`7mBxb=Mlad%#3TH0c5=ru?;sSP zb0^?Um_$gTv8-kfS=irWPp~I{~I`{Pv6_fm^%$;jf z;Ah_1C&|tUzd*Eg<=qmy9DWAx@yy}^FnnYy6A&W%*kKfeZ5#&5rd)!@fEWGWzNejA z?L4k`N;fFCj$8q+Gwta|c9|utC?Un)vO-7NdBr#ZNahaiJ8YFm#tQ?(#x&anT31lJgMBD`WtlXSj4zLRpcc+ zj{yi@+i5^}?Uw*yYTAIXoA)gD*mULWvAdogK{N85yw zyLmVu!LvwvWf|Yf&8_ZS^<$q$T*cmZ1o@Z z-q+URDsP*B-&kOkRzKwE)q~{MTqmFPGclSIawGLtg@+gvQz9Q7?Q+rGgzg|B8J?(_L$fd|;M+swJ36;daP3w?N zM6FaG;}|31zaF=nH0$5ugLt}ThPd}5G+6(+cORFvextn9AIh6zQnblTr(S1|p&hqw z>6M32^Et(5Cwmk~*Jtcw(-TA0Wa??fiuR z(5UpLy!2bb^sE*?!&~K>Ms#+J#V|8)!F+x$-_iN`Mk(LlK@{3y`A*2?d(L8+k1DT3 z`NWon`MQ<|?aIy%^J!QOb)co`ONtv_ntQZV2WvP8f|4HO?knjmOnk|a(Oqb*mP19o z8W332^SYG0LTAP>H>d7h-?qJfrl?RoSdDxVJjaT7f;_(ioT&H?_o?{d1k+v(Y`Xc zHaecV){tdrJbf)V@pfVe#+1r5luRdu*7@;NO<8CftG%yeE5QE_>^UA4T=}9ffpXNl z{sV+NJA!fD<2Nd(D;gOW$c8`1vX2{*y;WqcTh`#_+wO$hpXIt&Liey%x2_g@sUGfZ z^6s;GKCn+Uk09=x3;%0oUwJyy$KC7f?jb{yt>I&kSMV54pP5f@ConBlpPgTDO(!Y5 zclUj^O*-Xfj^^clBAB8&2k6dSgY?D`g)zAaSQz9KHBls&c01b(RjNo;su{0Kj!VPI zb>45GXn}M|T*!gahdN~iK#}?d_OiS73$`JU?M6I3Q=N-697_Oq)b1J^#?2h$Q?Kj* zRIm1ufx8XNYt4Al#!H%Qrx@(G4V*#1oaq!Ry)?h{Hl~x6-iKKC9Zl^a-U#T0&DUFg z6U;+uuE)W>k;yBANW02gk+L)|_0P*ilUIw9Bd(_soyF@fwbjvd=6jc4rns}M1>o5^ zeu;fLen|F6iwp9->+k(F`KH*n4u5wLq0!HtLZrh}p>c=u^~uZkbeQjDI3brWb&Hb+ z^_YKlQq`^BYj@b+vCcSh|9i_APp$te5HRGk-tD-r=*@aRJBXXV(?iM~WjY~`GIif0 z&V5RqfMzp5a5U;I`9IUH)6uE6zXpt6TmAm7s?0a~wny9E?OVlR7_0Bp$Hl41=W^m0 zySNb{7274;p(WAO3su~OS5E-LE_X%l8BAiB=IDFIH2(~r;(o&{ZuCxbKkN7Do(jHC z-Awke?C5TXYc%Et08lT}k5@)sYXD;}U1a9C!EklX*@_8oV0@ysFrpi$f{ z_*^7;8AaiwBt9HVH{2?kNygWRL$Gvirs!-ru0}eu%PU+ty$MMWzAIZxxO!_=Zf3m7lGhEM0tb@-L}-1NxIjYPg!LA~I zb8lt2w_)Mi&QatTL5MGCHZ9&8FWi)TbwJ|3z0A3V2NiubUa@}mSl;^_RP|X*R@Tpk z5jwXofj$cSCxIdYeHFlM(YgHy6e%#6Kz{=L6i}A_^{~+WKz}&{!}0-v1e>rRDCi7*l3N1NwpCtoU$|&5HBbsQC*igXDXZtP?<_0vEXC z8iWJ>%_O_^=3nJkkMHJJkLa}yJT`ZKSLU+5?QNZX!<|ky5B9H?|Ihg0%P9QQ_~FT3 zvOOVTVDg*+P8i8)UU&8E=fwG#kg!|bqu9Utr_v%>tr`4T7DdXFl)>NE-Z7CMPXG6$8SsIg8k zH#4gpD-tZ69M#x6-e*MkE>Zx7mW_h#P;I9hCDJitr(50~{zE`3RwP4K^k{IBf}%#H!9$M*_ExP-8@;7w=+nL66zF z_om0%2Nu(;&PCz=gMH{HRLa}Dr_aWvp&p!w!hA@vtPNAtT}%3U4I$z z+1o76@sST%M)=6dM26o}-vWzggzPqwJaostrN{Q~6T%1ByY#k)8P;R|Xi`K54~PtA z8!5O?e!2{BX~KQs5nDME2fHjL+eIHSm)_@-(`|q3wo_huUa|j#vVkBhbft1;b&Tdv zSr>fGyREi2i45)=8H_B{6yKYa`g-Sf|5S7$tvz{D8(F9p^(kZ1x1yd<+sujX60cob zh^{y;4TdnJQ+f(rr#E45bIrGHWPGjMGi$!z0lQ1^=BNx-s z)YwG|(~3j!u*3Gcc8NdbZ*Z~|s}qOO02rG^{tj|>{;%OH{)J9dSK^tgmqmtio73>I ztr7w05YFHBV*??DE{W8CTX2;??x(6JP1AL)R6KS4GSXY{8s@wY-$6EzFxtiaZ<4L0 zCpU`4PS-Ayn@eJnbBZc&!3<3O-_bR(%;mbH1z#cQStq6@FY#MIAK|gw@pD~Nv;waj z$hVoQX9U-Am>WWCzw&wH%a)PBKL%A`KWqBRgI?Rt+7kGfd*ohQdQQgf!asrwHM$9~ zqyOP}BVCwROe_4;Xo69KCk2AM;XhWO9qNX^$H)isM9F{c+~%K3BQ*X(nM-?C0#Z%y zRqAkkcA6`dDV|?&_ABJ=Zm%-F(D`R3TRng-C|KohKwCXO{gdk3{iB|}__X>qkT<`) z-t}G5qdx52=F$w-^3mTmd$-Yqo<3Sp%)xuwr8APRztY>DEq^lS=1ZXWC_hai)baEU z$VBj>^EX>Cq`%;$$1xkB@@_BmZr4Oycx!o!)c=iST^uJm`^9+0DXxrYdhUtB>+>kj zAMmhNSFM^{{ixuBARG+R<{tohUC_l!8Faxau`Jd@2Y08anJpE-l5^2!Y z5z&@!s!5qaTbe-at9VDWFHrkmTq`&SYk|qBtlStMWk>VVJ)ZIO>|(AN4;+wX`;%z% zNGs0@Yba}I7w$JZf9=oe(uQ}?V=q&iIs3_+HkFz=ko@w`m`EGP84veeB}*F+9`0iR-B$FH}p$f|a5L!CExOcnqH^PX)C zmQd{oPIgV5;=lTXTvNFtgQhN{?bgPiy+|mnsl)zRQyJeL?er(m5E?r^udxTa#y;>E zjh$E3W3TM!fjnrv!P;Rk=)pYa=mp0V=>fK`oMd$3PqwV!$NBYy+NR(!sXnnX0 z>o1*K zxnGx!_Z2-`WBm)q3mIE=YHd#D%LTCb+SQpTD`vQGOWCXvua8FQBp~yTeo$j5ejrjW zbyHiweIkR!`;L})s&-j!@zyj(sS7=`E-ck;0XID^-QkqCd`A{6w6b)fMSPhp;hYro z1K6p<4AghDNKjnhza^Xz*Dza^aseTEF(2;A!3P8x)q{<7_>KO+I`uz<&+A+b=tn*_ z^eL8W$^h5@m^NIW@_W#yax}PpBzf{iR8?`TIv|u+_VyP`dZhl?@p8n4p?VP~X@pC| z@Guu19E1y2HQ7++>66I*W!MkZtg}WY1N)b+BR6bc`mHYgrd+!3(gz3WUv=q+=F*2fZ1w+ozAL}NrT>PYE5F61|96o7d6#}cF5UZ) zeg9sa`~JhPS^M87=)T|T(*HL|f5D}HJC|PiWBYz+kp7rUKRHN;*07%ENr&f^z#Dw* z^dE=izVL;m;J;nBL>@u2ngD25#W%Z-5e4$t%`_W$CSiEtKz&h zwvIAs5kycG{wdmWy~5mc_#@Es7T#H%`}6P{pEAu^yI&34jyV2JPkXZ;KyY3w8|2=N z1^37PmpDPCfML&f4;km@$w%g#j72l2_z4-nDgXgf{0?(4O1y2qj zg*B-++&D@Dt$Ve>KZhMMWd{A|hZJ&0-l+cO$$+=*Cg#S^{4%%jN;?;`c0*=Wn)a8IlE%y?#n+$6bW;}z&Lmr^Q%HKNY{fp&tr zv@p_;Rx{Eo=8)uXdBA9M9kjX82;f>JYR!x zVrura9sLUAPgv~>0H^(DX3$rgPb_c~W9Ad6iahN2nY6Xi7V*p3j5g77Cb%swmJ+m; z#ic4er^vrgcm_&i$AtNUEmFHF-oK7o8(MM7yE=OeUDJLXqX6Err>Un8{*76&m!Gix zw%+I9n|ur4I($gZ8C4Lef0@Py5Oq5c?v@g0X&nI12kjW{fs3ZrB3*~Cb6~BzzZX~~ zlClQLULyo+{-sUwKc0g_WP#ZIc&66DV)s9VMI)2Y!Q#CT7H{I8*sly>u{QfPI`7~t zcq9dnZ}6k>5nauV5AGBPJ@$iee4cv@brz}R`d5Dd+*u(;oi*7TTnU!hUT zoa27;R(t19POHs7Yu~7X+M}qmQhddjo^{qyA#m)`>|B%m%`_I++1*mz->t%>n`>wC z!CvkBc8gJ|&3VleeRx{3T&RsZ-nrvmhE7A0AvO>Nukx>PvHwi;>!tcS>F+r~zLRaX z2V!E>7!i2}f?|(5lf(iYnWyAaM^zGA7TYs@hCky^kV!H4SLlWFo_5MbZ!{+@@1}6f zr$D}d7OQja(L>TX1z~1YDCtCkYSPo3#?1w!P76~V9!$+%LS@|*gnXLhI+dh!KJNHI zJ4gQ#5l+3JF!5boyi$oA5_#k2^5UEIWq%^V@;~}^e)-VNe31k5t*5|IxZ6t~12L=A zO`N=iba%hiWR$8x)&^w5f_GCQhWjce`FLrFoAJl0(O0mKa6naat9ZMOBLqCE7UhB4)S+C{7LsCWKNs%cP)!&{dX-~ z0YaLA(~L>DlA!oKI;Gyg1}_tyB+p@W*_W94bfY9E&ol|Jrf+t8pl{}IudYt)zI~9p zaX?=@hx6Uzx7r8baAwdqDZqVMz?aCyyOGV->-_a~ z{#!D{s7hZm4By1Hc+Q+xObs6=Dxxj-xaOSMyE#99RBDm0qX%uDrnYx4fglaA+v8Q7 zUHdeLV_qsFixg;+|2w<|bEm0-$<_g9eU4L!$O75X;rP|prCR{x4!`+-bc}0PvB`JIEl16fKi~ z$E}!KCUf%rJ^r+geeRA@qrcyA9X@X!@J|{z9TXq`EsMfI6m9U&`R6-M`E(2vj?=f5 zPYNv2mY=$!3VLUmNtVuryaBQMA|mxN{0k5eH=oU47Kc>VmsZ}sPLxpLIHM0d^x=R|s?y*NTN%g%JJe=a=Jso_ne;}7?A zla8l(59PWz?)QI1xbta;ckmwmLxicJv$-3k@`;P>-!-3{{(lVLeMntQ(1nT&SO#U8 z+$t~FUqBl#R%l;bq}&9e+sY2?AM7CKVOhLS69I9GED)lwSC9m zGtsc@lxVtEzRu1|pI3tZOJPDK=x$?nxA)xy;;qlS{<1)Lx z4!q(#pcUEwy0At+?docmT!5P(prT(yS;1X6`>ok(sJm_UI4aDmE^$A5#$)d{LRK&n z%YZSLii(}J?*`sa|5($^Nj+YnG2-uWCQl!k1a?IaQi~ETyRD=ekZQTbJJ8g5inveG z)DhC06-$1jysUt`HG;bv@3zd`DxNuf=rd}~Y2R#uRk|8=S?O~X`?ufi4l`!+gl{N~ z_t3g-@~>sKGs)dyZ=^vkczgQ4oaQFas@s`gH&9zRzfNA}^s#>iFY2#Bt0Y^;xBjKR zS~2Jlw1>lk_qtnc&$Edghkw+_9wIi=Ck!ysrp*8*92mjYJEs&}N2P$)&ATVd0CRU5 zaP75z*4$DG%6vU8HafKn_x8H$jcXoO+B&f@%f+ol@xrzcKhWPe6yMz(r**Exr-9So zFy##?7a=d7yAmx+4wv49biEflmbBd_85#&%Zt-v%JeL;h2AJyKwrei=<*Z);8VEf za7<}uhut6akbgVlnMWbjKVu!!SCpc>Tjt3k#I$!;b{?Yn1>HbD4pL!e5YpfMylrV} zHWS@ux^WPW#Z&ip6|M@$u~+#4mHI$#$g0xQ4}tVV8tw&TyT=XbQ#MK#+-Ec zYxEN-$r;wqoBdQu82_K`V`L+ZlDSb`cW|d;Y(=t}g#XlA9xH9*$Au6?gTR~b0D%K1 zU$SEGM=y1Jf4C9VF-IlT{G`tBtKVAM+WluhZ(5SQC0w5jA1*S|Yny@q*Qbfk8v_=N z0#&%OEO9!wF;{Bru4QQ!We^dgUzNf5Ie+WH7lKv&zK!}Md^^1x-w?Eq zC(mZLM4fTzCn(5tua}|Tc-UT+md)&>=6C%8o+vSX-j|4Y#v&d9FA`s#-?g3u?O8#R zeov92ML~xmuD|oU{zy7Wcar3?^+=bzwozYc8o6U%f5u6B(BWxO!O)g!a$IUTw)qoW zimE2%6jHt%q@3zf)Jjr5Ps-pRPwkN zA*6bFw7ADQ9y#8-DVBM%+!(CQM_^`C$24+$HcXtsbt=V*4?jT*=)kaFpViD~wiqH$%}%2Gwx0{@pH2OA{{c*&6b7vxh4EuP{z+CBlx+}^HSp~z4V=p zAP3>EPr>q>=S?&Cxou8l@C4;wP{~~4`K^f}^QpU(IWqVn*0BY3F699+JdwedtIUUH z+52>gzN^D>-ax50&xj13OM!NKTV(J(&6aZiGJE`>l}9%{(1k}_1;}lw8PAKSN3$NU zjB;^cNG~KuO;?tQF57*A=rf$ca>D|2!A;%z4BB{#&3NjOK<1nCr)={X{+|27xKbL$ z;OOLdX6Xnps#`!d|E*GWHa#Goo;b@(dvm-@!*+NzyV$-#rfl)l!gUsr*~+5}#~JqG zjAxl7T^r*y=K03gi5ElYPUt7H^ro zjCnc|Ry@RKw#KDbxK_NQCERbktG`ZM8k*>}PT2d~*}C2)=$Ku%*ztZ*8SnTW(fj2i zc;_BFc<4&$=T$251mdnL_w+hb-(6QeMen!hyF~d6z0cEk-zc9GOONNf`f_1|t&VJ` z1+!q4L!2DWOWapIHcJB&ZSfcI_P!a@2+o>C&|TrzQl}Erb%GGC zDatEJ0Tf{u2muU!={~=7oL{=kFP%j@_Gktf6gwY1iN`0<4MvB(%aVE+^xKc`!Js?* z5_0W#7S2Xe=f5Q`$vT$JMw-u??QCu}e3oLFt8R4k=z{Ie1UG%N0#4 z)Nb5cq#Fz{g)4Dj($yqXRF!Y@OgE@eUV5Qra35e@!8G1w1-0`9a8)_*p{hLhxjZce zRq(x4m{~5tj2e>U&aKgWKYd%~kFe*kiUH84j5;NI-(L$O%)hs>IG12W%$ zi+glyG=i(cOX61|K%A9 zf3-5_4A4Zll|j=qRCL9TEpcRMv?YE*86L6>1Nf!GAyy=Y;&5KNv~5AIALb>uE3cds zXuiZ#Jx>ETGI?@45nA?!n2-J-ANsG#R}<#L4)7t%hyLr?L^}RQ zoAE~FyEM#qjz7n;VV5O&U&uG4S7@C5%ar%B{P+jm_@CiNNlK3yk{#v>cl?QlbGQHe zTWt5gNId5^n=~$*PhJZx(K;3KWrsE+fBTZ^@V4fkcOn19nFgy_?pP5vICIvRE06{w zmhwM}4JbI{=t%?<7o2f)Jx}Nh<(_f$GJD_2d&SXz;XS$nvQv=wQnY1&;|-5h8*a~Q z!#xk#8OWL4{65IYC4DzvE+-bJ{Yno8U;tH~moAc<2+5`V(+Nu+q*YmbV*ZVf0sJs9 z(#)jihyPTi4ELc?EB$A1BH<)Ii3KY88PAohlFkW>-%F&%si{+wdhEK+?{~K^x&m-w zEoUQA1sg82wSufimhakGjo4fg|AyCIdTD_q!#)rP(4cy?RhOqKLJ1a3RSzWtrWNUSb8vyyB zj+Qg*@pi8|eOap)ANp!+=u7c|FK}_?S{T4Kvr9ol^cQ{7o&WB3t-{sm`&#vk4_#kP zRRd|x-D?$*_u*y}xa0wo`JU5ur$#GLzWbld>_kP<5;@9y`)K(sRFolOc;I%n; zW8;3K5sg z;OELYk>QzLF5?J#PSno?HlDv}cF)I`@r(>#Sm2Vs*-DV2IxP0V5@I967nkv%t~m+~ zUOLJi%RPInm|~C23?7{$gK>^!?h#$%lwt{$b6cNg>#=xY;;f|_QLkC3! zwfcLWLBT)mqFkjod&w{HmS09Q6N_Rs=oLdyar)!6?d*@Za`tD@JrGvL(`jt=}Y+4_81wm!+%id;4Tlq)T)Gbjz~ z%-8ym3-_*JtEjI*t*T-Yr;9qg&D@Mv7#+BVoy}uMGSE0Oiu~?vb6>PvaA1i;=|Xb> zzzF8X+kHGX^&F}Ym?hy{ZbvM+wlF^O9dG_BLluc*-zoGUKSKfNTCeS+bNq=q2H?um z+6{4zEYnsrU{!%~GhkCFM#7<=9g~*|2URuUajkcdlM`;2MMulfgrI)&2 zEFt+@i6n8kXNebSSG!`0i_6TgxXV?-!aCl0KGyZEKcc-odZb-&G} z!8fzFoy*>K0(;y0H3=hwf6#1?M{EiX{$(qnp15@96H=m>zgnazZ@1LFzm=3*@alzP zkN&wgigiAs`|logvZisB)C6s^{dw@JM(U4kePr;s68@oZ#RozRUPx;ZkN|adsAqcOV}N)|bRpF-(M0tSPp(Y__%K1uWNQOjURMJhOdj%99dVLf8K|L>r_A#3C5^7i=9mDNN4 zh>v1zt5QSS+s{Ecwa6o`Yo}f0d?r4SgQ-bvVY^}#f2#dUZ2l@?0UKENXwxHJ z@lx$KZKR!^KiX=|24S~;hVqClwq*?TE-z&5TF19ehWka%401Bul5pJ(&J9Mz)6@2f ze}6|-^|}|FJ-wv4Ia2ubv6xd(Wv8Q6?7w$7`?wIET}}nhIT`stya0S+dco_In!dPF{d|pxii=Al4YKsdFX%lR zq4L~49;w#`HPr!`FoD%ZAL(%78iK!U=4+0**5GX}aS;(uX&{Mc#~)&1tRh--5k-kp ziTGWIi&%^Q!^CkT*Gs=D*;a`8bP=g{pR%3g%#HnYc2=?WrdOvoL2%ZkWZ3^gaq?AE z*W8&}>+Y30RI6F<9bEqhVU=-7KJ=5*thPwwXK8UbV42@qhMEo4=>?=9Nw4c$@ zB-eQ#T))|kF2qiwyUA-Y6(iY@z^fPoZ(0m zCb{PaB+A^oRl=&dbIr-|^epJp?gSp%7S3V$CsV3y-h@W(mpI0t5^3!q`?hs$ZfPej>=dd&G7==%zf||0Vp49bDgWAbx&V^}R#8=ZMLN4Ec}JxH#V{ z$#Y^U2O#1irwrrRql}knqauT+kMPoSU@5zKx9W?gMHX$95?r*zf|uyi<`#RuQeQ98vKSfsb-u3K%Bztp@`9EH|-}i~|P=-zS zyN$P0UoNvKyqO(wzb9NmX}aHclz$eReya>2!3& zLMRUEynAT|8j~9YZ=)X&+42Y+}$pIe%~tQPnnage(a={O{kVGHIAI zGVkYqPZ8;URkU3FvDKIk{H^b&b%378bAjpeoi(t#{me-a!r z7mfgmfb`}V=o3|A#EIhQF8e6yR)4Sa{NDK7gFdG|#?)3aRrpX-{kRn@eQ~`+_h)UU z3ibwm`c#Qq-yoEjea6v;1B*!g9{P92(NTN<*xs+_J^B$2xz&^GJpsvia=prOwWvh#(9r>g2IhIhUeRQ-&eoJvUYKJ~mU2%D+mP zM4iWd)c=$GtFYG@#%jU-tbcm+2*eIO2aNg;&o9Ez*pR)Tc>9JGz9qUQ99*<94<+NUgY)xxI3VqK5Cycqr_I>d|K)kDeZl+%T?G zrt9rvhN#!mBePn!=n5NULz)>dKNYCO zQkV6%a*kf^j(m}$wIJ94n1jyXyz21=-a}+Rc|kuX=#I90=(03jXA?pk7Rm}ANR?M-rsxe|g$Qf+ylF7XkLo9BFfv+s`imV- zpOTEWN07#1Zak2yCW-?6#Yp{UC=Z$G@rYF4>pZNR-wgR~IP!^mHI3f!YCb@->%F~B zozTDZG{gau`VMH@iGASnwdd;wFNC@8`rp1-XSZf5FvV7dwf?WrQblIKp_b0;<}(23 z>|F0TPeKR*8(wFS&~XdBZL+>cTYjdVW(NKC>x@$!pXA2BA-Jb2%&kQ7FLwEp${*Zc zV&mF}{GCX3w)y@vv|QL3o1QiHFIx%gplv3D?IkM;A`Nma?ib=6JLhjRyoswc^s#vy z)x^`+ICE619rRMtx`OPG{^~zd|{;*7bOL279Kr(UwP3H2sZs zjh$4_y;Su&c1r#O_<^j-T-VoJv1xO4vQyKpUKg*}8A;Bej%Z7pgX@3l-0CU{4aebU zN$DZK?N%4R$1Jn)`@Q?_gBiWX<0iiAT&vpJVi^n?Q?={-AB@s&t#(~z$^g7|c@-Z- zlEvy^>OF7x3trCIVLyx85X)2@RcZir-VU`sga5DtroX#7r@xE%Fo5TdUBGjlml<*f z8)u0{{yl$(;+pYx6{kfpE}Xde%2=l8C~jSd51>8xgF|ikIWNVnC40>uoL@3|uLaGgPM@vivrhT(lbund;bek->IpQS z!~J83+u5zEfcDvb7{%@EDT+wFsPP|(xFLI;cr4b5hiJj0>QCmhu9&r;m`YCdMx#iNd4=Cw5#YQ!ny(gBIp#z-%)0;Qet5IX*jiZuW(~i zPx`wqoX_tC_?It&3+V3#tNkYw2>m^dIsE=7(cjuYzt&OT_e1LYG6(z!GzOS3c5UK( z0eASNAt$0EZ^Zv=MUGEF%tK9y39-~s<-sh4|Bki<^Yg;1d(F>H^Ry1;a(cgNB!ZMR-s=p+?d$+2?q9T z*!QA8l@o?zv9T>`j>1^T_@P2+mV!zYp3$-@yeE$ks^y6_~C zE{n^TFs+U(DBz>?O&HSD7Dv+)p}T73AM@yrBhldcT9z!snPCS-=3 z;E3g`yYR&tFWeZ=%RK+EZ4O^!sSgZaW68f7y*w{-$Wi|)y~HUd0?EKZY*ngN>sRIO zwfN9{395}`s(LsVWd&|Dr>RjNjKPoQ5h30DLoD@TmeP9Rvd(n(j?LG~Jtg zX!7Q@b%s7Pt5YlGAa>wZIv2XojN(Ew607Kt3(Y7lG$W`TbjXEf6c?HiTxfR4g=Q50 zm=PG54!O{b;zBcm3(XF>(2U|jGlC1v4!O{bmH2|!Sf6`Wh zxz$K-ZZ*=ITaC6lz}jj=gJayXCBU{N-!$L5Hwvy^#q;vLd!xZs0etV?XmC{k-@7*& zTou6g?u`al1qKr^xGIo?>wbsD=Vt1Up9fKhMaKP!b2cwCx$fM|sRQKPW=K=ycUX$I zvkv)%jUMaJp4zu1dLF(uafD1PllzNjUkpf!YRB^1r}mWOn}xO9meQY7C6nR?s(G4X zd8`UkKYJ9+>DmDWo%r;nhCb6%AWCC;xNKbkJGFzt57Odq1j>VNa&-N<=g&%Pi6of&ky zR?uMmI%kZnUlT7RTMgNyuOiV>p1%Uj2yqadn!FBP4h9;Eb}s7_RxuDX+b*!)u3|Y~ zQ_y*+=DYZL-G>sX|AN*tQ-J6suj1H}t=X%KQvADyyE{^nU40^VX?GRfjp0tDUdx`- z1{|WVq5X$kAz+9~m)IEPVoNKf@^{G}&A6&biWa^LBZZhCc`m(Bg6gsn*I8Q&or zI|qmJ1qP#-v6at|+x8YDcE#ZaWwXL*PojJx`v_Jv{{*`#NLSBHZjEIgEnh^rl6OQb z-YF6W>&M7ewYPQ(u8EPMaeB0myeLJ(&Fq8+CNe#Q1KtbE#J}cYMA)8ai)@e>m)RFE zE;sNVQtIE#(fZiyvnIi$7$?el?!w3_fK9{eAc5OpV1IIvtyedWL&$XZ7cdm03#OZ# zIsAI!)RVCvI+f6~m>hiDrqJc6}Kb$xd1xbhP8&M||7-AVY&g$~lUu02sXca}N zdOM9aF>6*{=IP3=g>+?yb?daNqK0C>gRA!oKHTlj-*fux(aF`RHQkEra_k-)0y3u2 z^u!@{`Bn!-C0|27^RK+f1717N;9{<~c(JqsAxwK^sZtOg`ZX8IB7p{@e_2MeQpr)u zAx>-;Sr}%nAU1{GHw8=FY05^2EY9Ah=V*2BSL5j)sT|2G&A|8WdqV@?J9$%WJ1>Ae zYPZ_dmIH<`+!wOQBBOdzxe;8^S9PQQXy7c_r_!2pX(tK}4H^T4_Ur;lOm-*QhXqQ^ z1c}pw#H{Y4b8@bhD`|}8zwnF|JBMfI-Yh&bHym#Mn?AzDs31l!;)p~{h}6}tuQSu) z4}d8w*9_!Z?z}3VwgWMphhEEOtM-_{@q>Y~7a64d>dbWEZmjJsMC7Xrp{@Q`PZmBU zu8yJa+toGimTRk0HSi*ctYmNyT2+&A8kzx}KXLGL4k~^yF~^FYWUFJ~qk>t{?a4TM zHN}SWO$fa8fA@)@zk+B0@-V(TAD?N!Iqjsg4O>5EFX>;fd$*mhp#M-uYRE52AEGfY zTyuUUi-@FQGHAEmxHQ~N8rH`N!!Bi!zMzD4(#~tE30+b~$b@0%5V~>%Arpp;B=q%4 zLM9A5ZlviwA`FXR)CwCjGhRHgiv1QD+M*S0x$}2-LW|Ct63nJ`cN@4gjCOd7uxV{& zA7S)pPlq?O!_+g{_MYSI=|JtPdibW!gSzp1LVC!C^N$>|ZbE9vv(=ecq1Uy(wzK;4 zo1!+!{z1pn=U1w?a)V&KeS|A%;2O zU(P%lxvBH#x{)uM0%6Xk87#D!uNuNEhP+8ge9Yf=v)AZ`CjMf^X1pS3fLm3O*GRmX z+Q5uTt&g>3`{(TSXLvR9N@KX`9dvHGXoFK>YunzB&v6)IS(SL`g!CaBVwxtJU?|Fe zsNg-bS*&u`;M#T!Wb2eWbCD;a!j=tM*`Nx&n%gU-5X6`AjJf9(hJ#}Q=T87GVXeoN zAggICs(mPWVQ+)_mg#P_*KY4c!J49!5(g@6e*aj--bnHT5aZnRkd>%8GD8M-1UJ24 zfebvdh(SJ#-1!^wWZR4qhx))B4k4a~zvogx4y0#sMA2(C#H{N?!}Xj#a4Wryr!wn! zpzpir&)s^!OWeEZ0k`mu9`HIIDE}7lpc3f;d)=>1!7Hl0t$!jrn!)a|-92{cF}R_a zY&=TcW0-r4(qnkTME98H9<$t|j)#}NKqthW&XXtVAYh6Vfv3&kXNg!icD7r|MsQiP zf@w2mK}~qOi)~p(EUAsHJkbl@Wo6ch3*gf-02LYjU;z(wgl6cGu|5#$5MYKcE>V`j zONZHG`6zp=@a&P9!lU!lZhY(36JA6$##nCi_xu9J%FxdAgoR*pnQ!cuRMmi$0+yk^gz$sJ!ZK_oqIItF}Pugd$hR6I``OWj}=Z=H6u0E$l!(2 zQjMh>v`ngT4{Fr)vbZ^TS!zQ}%<@)Z=*JxQg~phUNV65quXQSI_+sg|lBLx`OPlSn zT*|GTC*r?6lacZsjEVutU95Qe&%^OEvSH(QQvUdfiDATov2z0#%M5wmf4Mo(^TvN^ zNkOE3jh4{#*l_5Uap@^dO9M zk6TiRnlplf_e#Jug)kj#)PuSrgBQW?6o?mJ&2e!vW>8QQ1wo>O8%;z5q-K5G z-cZRy4J1#qRo2kr9_!p=t9$r*3~wl~ZyQS7qs%=<*kkE39yD^6HIkR7Y!Cz89$MQ$ zI=ZZ+m~xNTFGzo+)v90Ks&w^l_zIhr7$(>k4W$Cy;DtV+$lwR}+GBAsk)8hqf7m^q zf|462|C*ovyW=_Np>RC$uM>SrD)at#%Jz3X&bSshf)P!%cOo4M}~xcJ2-Jb~uYVLW50`^;7qI#WiFub1(_yz`K9vMe9vvaax4 zBvuH-W~LBQ!LwZKW#ux2y{dc!aSztHw8c#>?YeT#UuQ0DCS>Ncs!wyz%t&QS`VBKC zjhD~i{l0PyEid0MZ+0&~E??$eeo@}a3;oxUWWE7yUS$@F#`pzv9NSq_aI;O;LtGwc z6D#o__{-tQTDb+U%tB2a|GC}0KDdDo@RiSoF=8YfYxhVdzs%~} zu&MT|C>Lr`?XeNBqYLUo-WcYZ)e3|(hNtyz*`FTa)~3G3NZR*u3{a_pMC4=b&eT|8 zy$iJZ1BRgwabBxzfU3-p7vY7)2=-M5`znKdeF*#d5cc&U?CTBo+5eyoc^qdbzp2i5 z2Gw4I8sCy~QQGB=FKON`oMMm693B{X*V!X8jfa2R(VA@g`(oy;yiAXq6JE=6myf=E z;M>Qe9=*{udnSN4EKU%xpGyf{)Ya5He(H=2x2;WUZ&_O4tEe}A@A8e+LA^n zrw*JSr2yNC|6DJr29JcGzIbZ+L_(b>v#gr|U3-H*6ZnFRN_a(`Xi!Foo@!M3*wlxy zOcbe0L!}bVQu`tc&Q}#_*I`ZDTBfZ$2V$l>>o4j(O3vHp#w@;phC6eijCCq=U3sy; z^T+#aiA|Iv2iq1IzPy8_N2?jP=|SAK2chfAhed`j-4%ooJ;Bh(uu4Wk9srjCm%f@* zJ`w6CTPuYwE1w1t92SHU<+HS62caj+>*$o$3nF4^Hw`s(LHaLDE=8p>&Qf9Z<+!hWokc8^>6VHVSIuqTP3pT`XD)0eK{n2rr2@YH%y%&SN3T`s z=@kM>FyJA*jAicE`fD;I>DBvB{0Q`M_Epst@6>J!hP7IEo;3);Y~26IAb4ME)d*oL zWaF657#5@!&aldsI@EL+8niI;>sHRwJS@yrP9b!*!CHpUKlKj0J?jVaSRXRr!f6^* zomo+e*beg?edHg7uW3QzGuGX0Ot(xWvM@zmgaP~Dg%g9&<)WSsP76ZQWo^HB79oyD z*zhl`3leV7yj|KDgl^XSUA`y?&6Pp^iX}m4f@o=`g-|SQraqLiE=V&qN|G0L1Q9=I zW?+bTaC;D87CJ;M-W5dL)#`FI6wo_L6pf+85<(JT4q3DxnMWn-=>u+jFdMh=ITF@1 zHosj1UtRHT?KZ$K7Y_hK7YrpQmjyMosEd zo!S!r+H#GxKCCW$HdeSc#1}8QVhRZbiNT{IPt_0743u1ZF%l_~^bK5BOd(fdJiXK- zl3kCgnUK+~7k+i>4G0cIrt@<&RF%+dwYR$Btw?<#Uq>TPjV-8eO>Aew+NeftWRb}< zsie%pGAi{JaTbSsK?Z(BYgs;vnXgLcbz%v8RkM4a0^j!FGWR}h1dLWI?;O)sGFLiW z^bC}57jESpM9_m0W?`+g+;{JDW`G2H-Fqe0OAW=UKD|ubG4!~U5MMNEjim`{8^NY# z3oabtf{V1?(vV6QY;LvS;)w)Ntkuvn6{Zo=2EAUHS>A{9ea*L|K=1cPeZT^bS$s_k=WOE9Q)0t(GJa8N_AS*^wfl@hN!1)IgD}RUJMh)SVdbTc{5YSWI5OG z)7%O`&m^;Yw%#kEZ|@qU7xf7F^DcH=3+I0XM@^6+&qD2xmu!9)f6JnFXQK8vFaJMO699rL|!3I z{XsQO6SI4kU8ALDyr$YMnrcr6Q|(*Lz=ZGv!Bl%lFk%#Q#I@l^wi+IQ6L3u|~^)a>F6wS(1!Xd~!3N^Yo!PUSyA=A{mqGY*+;H3O%6AhWFu{;y@=XDOY*?9sW-POSu_{WtE^>BAMgUc@5E*$XER|4m57)119< z>M(}TbmkmqFPu1>M(Bo0LThx=aDq(aP>_@D;||$A#?PLZxz#BmZ@KC996e-my3-dv zbVo0^6CEh`0gJqY<%uHy;Kd!fnEea)#7F_Sb88;3#IMCMAVkq1hA&d!wP%ZLe_u+V zSd;U&cnJQ3PQ~BFMsMhTZy?zYG0zpTidD6*t;&aYjhK`-%);@rXY?w-V{^a(5NE|)s!rB`#kBg@MhN9T;d?VgZ(APZ&^6vC?Y2FoqN5-5D?;`_EX}2Av zT@F?X@nsZE?ki%~?M13qnq9Fmik)wwA9g-N2SR;N863ln4E%8a=Bt7J?bKD48DRaM z^OVeJgsrBcU@BKpdE%GD(mB?P<+5h;U=}s+8=ixb)1&HCJ3ac({2m=1!jn@0ci*@4 zZNon8l+oW7B6`~72Cv`M_nXI;9L-b}`i*?P zdJe}iJ!B;X&d+MEjwc83S+wPU=vJV*D|3*{pkvPo>B<`yqm27Y+n=paU0x>fInGgF zJZMHNGk28VchG+MDo4@KJHuL4`xTm}ylV@JvNEg;&as6rc3wMD7jjU`V;tH#|7`Q9 zC3`zOC9%ot!KZ7<%PHLh?pU{k=J>a7-QDFnfdT0mF7L(4dyUI`t;_p55C44fk_(wq z?)=!vS7NDd`}b#rfAincP8(c}Z)<96qIKsK)lSt2XC9Q%yD1;-iDfQE_VG&S8!S;yhVwF$PAHVQ zqGic<9acNp;0b3if3@1)W0)(^$G(k7;CSg-z~*}1!+CkcMGPf( zS@zlLKgT3y0lddQ<5#9>V)t5f-fJ^i+DNC8N%T(sQfEX>U*&~EoqpvDU2qziewzro z`=O?M)#+ajcIl6~^!Ew6^f{MU`q4r9cU=0RK{~`Dysv{x&9JbEB4hV3Mur|XXx)g_ zOhvMT8~qn&&+vwCj-_kaihj&mGD@=v)9*~t^LBI-YT@EsTI+hA9YmmaXG(YBLeMG$ z2pmiQ6;Cpov4eO8=Ms{AG(1L~&WQa1d;4o&?&qyZpb%~TWH7hcaq_-yWt3b0gNf*@ zOH7~kEVU{#=&<9v$At}Vfq&FCo7p<_ zBiLhs%juVK5}q5DKL(z1OQY#(H!|xZ4Np*Xby$6_ z!mo$_8~j>j#erW|2g(%N{3G^t6PWB*Li}S)!M|h3&Rn@d%xa*Jw)qHSR*x66I+Nz~ zK+nK_75y~myEDm||JGjc%}akip1!eI*OcD}N4A>_%!@lB4YIqz(5a`xck(rIX`UMiPovptziSg zhV61>E@;^Mc77e1nWw+~FSYA=lkmzRBuvmWYZof}+rU5nhM+;e)U3)hOk{W%NNaRM zf#qE5rTca@Edk}!@N=zm+=TH4J|AovW>#=Q8#u*c;A5GI1316f#VhJ3kg642afj*0 zYw^f9+$!L%_SIP1>wW#>kJUERAWjh&* z7-mmvaeU~;_|Ua*?Ow{;8>`q{yIq|^vaZfkuztMBKLjdXF5 z4Fy8$^m2`{=?WU`{Eg&`rw@Z`QfaZwgyQP-xf82}iEWy~sa6AsPU50+0o)fkg^F;J z@UAA?IJZ1a)|?__?Xb>6+`5k48wt#%k56MRUBx>q%Mm>MgC>}s>ipH3CwW{%_}%y2 zcdPW>)p_4-s+N70SwVh@RwTC%P$wTRR`%5X;Vb?5S^Dh;D~qOU;25oEH!heW>Lnh? zT{K1mFHuFZ$O{|zH7d$pVp)Ff+H$(GKtys`#wp9`WU=OqqB$XdlkNPt#}d}Povq>0 zF?ljMS}dXe6&q<5#5io7P`Yyme8m?wcvqO%C@QYNX}-5^j=Vjoz5A7ycH@_f8Rp^c)NZyAoMl zN`rEFaN|tdUjMp}|G}V7Myu@`MR2|E_7#j{6O z_5Mdq!BFpzQ7Zrck)7TiXQ%gJo@KR|6KLxOiIM^&s?xY(48HyJCA0-ZQ zOM7y|Za9)V#AN2PLmIv;db?c-uEjH)$g*#R=6t9DGsC(k3CrOrKFkKaj7?u?o$$j$ zZKeJVjDWv}(rum0+kc6F{70ZXZuoZ#__sT9Plv_?7ARJ;wkq|3ZLAN47&&|n_t&TP z*k5ZpqKGBujGnVub(c%LvRBwxy$%Cp$ugoXl`0z_q2ppTFf_0^JNyl$FlIHiaPO1h z5b+iDo`1p#`5fYqULdi4L|ewIsLY^MC(+{u-a}6PanCsQ(jFFCbR>JB=+h>`i73(8+E+&?P z?}Qb z<>LZP%rsgDtJR`lQJ9+j()Bu&tRo8lR>e2{1d#H5YU2mq;?D27^@9HNkQZKv-=tDK4NLv;qgfeJ+n(|$$lrOqgw*)ZFu7Xq@A*#hM*Gg>jpt#|U?1w5++Xr7 z!pClKn*7X2iFo}t*w;5xM}7f_ktJTi%TFC=2ktez0JX_$AFKQY{u`BfwRo-;8+YV; zz~|qW@8!S~*Tt3q12AW|a34?rSHlMrNQAiHQKN9dtJoT8c5?CV3y<=Klu>w) zkty$skvo4#6g-gnG_p0of*s~H^962I>RWq;94X2r5uDX?{+(<{#G_rSBHR92WVru| ze`&d$69nU)+h-;}EWSzJD9EMJUY?tedBYucDLbIMKe97u7EHr)28G2Q=JyxtORhfq z*Y4lxEOgB_R^b2X{X2!911s5o{X6&Xtof{ci*EuntDzUu!Z`y{*U?*%)oD43V3!y= zdX~F?=aluk|CRf947Y=$7q9#1h1U*M!yhLvI(X5!i;i9R_xR`db3DhM<2mlM6Bi!M zmf6l*2(=PgW&Q^6-Z_Bn%mj)!Uxz0bQO?C>yj)IUSB&tu!@=VyiwM@o!Pj`a=+=#y zI?~hC8@K3`Q1@@lo8vi63D2E16MdKPDrf@1dzvk1hh7AOD?04#i{KAhE!B>|C`lcp zBt5$AgB?7^RT9a;$Nyt@q`-qMmzhgE3HM@~t+#nGXkcEPMeE+%yO z3_@ldBD;v`a|m_&No%B`LVfAJ zW+F1yS`!>snA_6)^9uR#bY~VYI9^~ZGANH+PHzhBMb1wRS$Ckl$RLUj>_v_b0U-B2 zbZdh52?iq*Je}Fxu4Eu$)*w@KZu2$802Pawp|cyoX#$Y3m^nJXkw43O1RXE)lz`yU zEJg=9U;IBzM}m3Q%YLNld5;-bMWKQP_9K{RX5WQj3F%jEetx3;$Qp8*{fI=!q5VkV z#jN;&{Ydo*#^YRlIuCXcue9~HACdD<9Ph26Lx3hyzmk{UF88jb=RI8RT|z_;mwUpa zM_TzbL?x*x_i(v)z;qG=(V+G%jsoSXsgH$S)ZC$&lP3%wx7MQGEqWTM>Ktx`mUYjGgh@F z<-Sri?5-zrev%nmhfmm1)io0;*_T?4a76Hc4Z|qRf2abg?kY380oF}1Om^_%TA;Ex zuu&t>q!Zfe{wY_Yic4ET_Sp`9BE=!(=jb`;X?M<7ayjwSw#}bT>CyDfm12j#t%;{g z3Gd}a8=#qX_sYh15vC@-075i0Q#+QpiNh6GW`Vv5$($Nm324Mq&c8&yhgbGLlzFt^ zQ?n6ApntZ($}`a6TEe~ONUzS;3sp8!A=3q-?3JqVSjCuD5HYKgU40XS6!Vi-071;^ z1F&sn#e3#gHg@oR&$&V0=nUI94c#D%Aa7s?q8OcN(6T&fL^xmbhYUys!)}9TpoSmv z{nLSSZV*Dy23ZB(_8u8}jnYnZjkBEFxc!QUD*_DdWOfHQvTud)HV?9s3>y~;beuQm zNC;9VWgbFm$j`AQJ5}_Dy8s8cE1j0?E7~mT2GcGt&a+@GCa@TT~?+N9D;N|lDhvn-|NOV6 z^bz^aEI|Yo_^vUxQwy6-P}s1DhXjgQ3dj7PjbwG|85AXA=|p*n@i)IxwNmvsK$u(y zkb0fZe9HZ&IWe~rC(ohSYTcP91KuroKsf6mN{ig}qy+DHq+ZB+tEU)B`j|u?0?}$F3&`jSQ9Td4|it~ux`D|i*9qB zX&*bz&4_0!-^vZM5zh__1jKVY0VAF{cXg07=c^9hOJqzAl>cnD)%NmYHYci5UlYo?SJ5AmZk#(jg;LTQO`?tW)5QV zXOWaQ5{e;KL-k3Yq5@nU8UGK&&JzuK2%JCE0geB+0VXh4c2ohCHQit(q5pg5PiU!K zW`TfTiw831#4Mx)l9umAV%$ALn?Q^|7kEdWiopETEup}Cr}z2YIL<(Ta(<@hITU(z z{A$-LK#=i(cu*)W_lABL8~R>+;QzT6Jqef~DsoXovJ6?GXJ&!> zs#`9ReKY_rAhQ*{K$Y3P#fQ8%e1i(&jh>O>LK$Nr?5g6zPz`vvP(k3}%?wqcQjhn( z^EsVzxo>+O#D2DnKkl=GI7>Um=cC*jyC1!SJj%&)-{&`yI0;9oTuFgCwX_HaY*s^r z5A`IhJ}}X_(zU>Kmix(05oKvma;%^@65A{t>MO1+A7Zx$ zr6q`iK(P1GyLKO>94R11tX!=`2Zj@8sYqa#`>bZap~!BZpt(AV7q*L6bG*Z{BOB5p zep$t%p67SSZjv_u*q`n@0Xj8Z(t7s_e?C?22QvG{mwkQc@=pZ*0Dc18qVu@_7jLWG z-{OP)`D(_kBcb${YX!YhP#M-oBU;5()$p}~+lthwQ^9N%`u~ItLRs~z*uu;Qb4K!x z-?$gtAP%YOXMVlwBED=2!PY@mELDfY!3nOM5f8oH;!fgvgMrXM(IAu zI+A_TZW==0z=K~NN4hGCOXI;GOgc|KXg3{U(#@1~qO+4uH(%4K4;04F$X7cSAUBme zW8|hqv>5%d{}uB$ZR{Kt#5nQu%-?a?&GnkUBSs!_{&b$R=Wm-| z)AgOdM+6_T=dV@M{loc-B!97xSq5Xn&Y`VCG}UYDf(x}6 zlrf|jfvUEJ9xk;Qo)wYDRrQh8r=@WAK6B_OBfx#9`^eW0bSEZNMiSa;IrF!$%j%im zC%nfR*>9w^S-eLL!3^&)RRi9BGo8Re`%Ryt`m0i!sFa9fgx#-&hqZ@Wy3b;dkYR|( zlNa=MgEZe88C1J~5RK=gyzos5$*64~ix2-sAHrqkD&3k? z+(IR0>Z$cnCQ(nV;_Oj)$^YZdn*-}uDQ>4&>>KV&#vqiOZO&-zAqF5aOs&C;<)zbU zhWivbmfl&u7|heND-7Q-i87Y3a#WR8s^CStHq{3M1tOtS?%Yk6)B*1WPZBYq-j5B)?3G{P9K?H zGApM?#K(4sfu^3Cc_v8Dsa=^9w5+3Snyz$O^bOPn$7`Ws>ETMf$RK+AqaLu}a?|I} zaC$M)_E|(BGTeUQ6SIp6C(K~W=*yxI7aPO6!@Jjnhc(MUq`pZBx=B}2N)~r1 z`{bD2R>RBm-5dlt^@%bWPPxxGe|Yo=ZH=Dt((Um#V+QTEU`7j)(HRPK3S@7{oZ9D##dM< z`J{+)6#h$vTa7=U5290rItWY~OG{KjlGBUaufcf0P?hW z#Z;gqBo=%GpxQ<|8`@>Uh#I@yui|}H`Rtp?syHRyj>n1$4RuQi$=_;O=~CYBQwoQQ z58N&LOeyA$=b%?^(tJ<})E+)))UK0y%N6eZn(m`e72%g;37N+lI?@fY8m|R=I)1Bg zyQ$2S)A4u8`5x^~%Y81=ay(7VEPc%M4Vv<^aH8|JkJb@B&7IAvlMxpma(c?J^aDHY zetdXmKs{06J@0^<`hz5op1`59Q^%As1n`l&Mgdmi5OT>84*cgW?c_ujlRg=)L;Mav zgwyhP$;2W)KIiKt*Vd5sGhZ)RYKY$tRe{ z*7N4wPt<=)L21SM=AUr9WvvtRtHsyXxnFfl3kP!GVQuJX!Foz#1a zQ2LT}KMXaQWXOqoj}oRj4!|gUa{~IYhNJ&(H_bCsv~*{mDLV11eO$s{Xi`BAy|c~GX;Fb`tq1R=q% zsXVx#c22jSu^4djCS&S!_HJj#Oe{x_m&Ug zhphFS<4W4kaZ1{&d0Wx*Hzy9qaQHZq;%!RNJFrJ+m-55+@caAP%BJv9>ak{hZD*d+Jit7RtkSrM#i=J`CoD(6GSzn)Kw0OumwH z=}*1&-`NMbTFW!`PS6uGcF5J5xo|X#rk;A)8Pb00vPV}naqp2@IMrA(5@8$Irw^;Kc8rqa8F1wrpEhqXE zmzq*BCn_mk$b=?;%N@+)#cZ0t6n7a4nNfs~QLEu?Di%W@IgYW9^62Go`&qh?le&%; zh&_h5YGuarKI(%{GrojQ>vYOeen1SyrCjk;%#EX7Ifaumpi+-XOAwWd43ICt?$uj$ zM0Gr{11DCt|3M_nh~w`3km{Jv3|o;W)xAzq!=EsmQkuKH0I>wV@F<|+Ng^0noo~~E z)b*O-2AvIdr(}+F3ghQ8^ZToz=2v+*jC;p%D|y3z%Ld7>YOL}5v}}0dTas_p#NxNQ zo;S~ivgb7us9ngrXXu_xt0ZvgV*XsUG~_H;L+g3=ti~ENYbp=pvVAS6*Qg)LTIY$} z#rmTc>DHhJnhB+3NP5xl6psmH$7JZasKka6XNjl5PX({T*pB=>7O;D8|Hl zQ142XJ}TfX1{^owrv!X5;H&{L`x*8VIFD5mANB8RJFlpg@VxE1f3wT|+b0I6E(Mik z2~E)#5}%ft4JT)Tl}Ja>^R14J@u30sYv(F(R>ISvp}*qE6pDI1Bv;muq)|(^fHP0b(4wFy|h|l9uOuby_udN zF@M}>VpJh#gzTn0&ldr{{WKSN&l5(Qy>l{12s@T#+9CUC)bjRHuD9EyeOcRS#r+Z#e%(^RFiDW}=Np$ReBWMPPXz?eC94sPi020Z-Kid*039u% zyVczjp>Jy$_p7rfg448^ht$;*!Rxgc!P2mU<{j$UsCH+s6{QnlRAU%pcWkm>PUG?)PSZ7;khukft}kH|b|e`YK9D7CJUd*Bv zz3@Yoxy3-!Bb!!34JFCxU$8_lM%d%+9~r`tFR;YiBDVvXoSlhA!ybeS^a&TzBSu?6d9Gj+x_%*5Ykx@V)wo%lo%zOc?sf9cPs2Iao-Fj5PC?Y$b|O8JrIev zg_&^KUZndYjpQZJD)#>X@6D2IwuQJ0-a$?wk?vPj|^v{%JBaSdK=7|uC@me4=BD7_UIa6F_bY`;Z>Fb7s)x#jP7$TMDgMv^mJG6+-ADE50D<)rT>?`rjZQ=^x1phAsUV(zKmom zhw10k%+!2j^b9^wZ4-TOV7Qm5Z-+rN@W{ zz|XG;C|UaDeSPNh-lM^PlO6L zF4p~u;JZl9Lwbtfup1u`OtTxp4)e&NzSZ$E-@0A6wVk|ds*BdVk7y?*=sxitDTMEk z$4QZJBEbl!9~#l;3Emg?o^o7}|KwZnSN>z;MZl?lhv?to`ggSc6&@g<+kZeeexz(B zi&;xRjVnj}Xi9@t@*(ODVNlg}p5ubza-jy>z6U)V(KCOu88&a@m1pykrLXTf$@7nK z*}-^l*oU$I8o1ig7*voq z0j0znM7lk_`9JfR_-D)a`{T7ph|d2*`Tm6W{uT0lpI6G~lkZP@3$z}`2&d7y^$6Lo zI{sPt{s1W_d)?op<@A>C_c@P+ofjwJj6zr~xn32tI?erwAx(`p5tBYOeUon`_7C$R z1iII$X{N;VIyHSqVtSpL&Xt&6r=~L{rq`+Iq=V^v-&0eDKlq3A{t)M;Ims$>YHFve zdTRP9?*bZUGni`Q#-};9H$P$pnz0Fs$m1&Gx69c$xROmA{|eD5XugPGM^2m}fgk;` z@Nv}ww;FySr8-#E^=38F{IGYfI5W1ZF zInX6zfBiqe7b`A!lExX`FXW_s`HIiRnIpCde=3r$=oG=7zBsd0d4CUQ9y$!pu%F*8 zL(cv$_e0tI>AeG$cn`@~fr$nk={6nHis zjTHC~!J=0^EE+@yQ#V1|vrceE-UEM`zBSYrtiK)}!xNV>a%`ja8NuOog9KGpNv9J* z?(7Sr->{oJM&s<)sW_W}Jzi>dsSKB+a#p>mUloqc<))qo$Lh>Y{h8ZE8?o-sM2rrj z9z5DT$;2!cEl95F>uMz0T-BF-BrinPHF}`O7D;=OPbvSZclA3ylmwPqbz;t2q?eTJ zv6;L2Ti!72+gXf)Y@~953EXgRsfw38eSPJ(xz5QNjCagnFibKY(F(iiUBhQh+}Nl4 zPm~4q*y!JMej{nPO} zcu+QZiO!ZphZ>acZZd-+USot;Qie9DoL*jPOs^&~X> z$XS9P;e+^5E{LJ`IOg>E<`DR|g$y44$#{Ew@*5lajQ80CJUW~%Qsp5sEQ=}NAC31@ zslMa=2NQFs@%~ZA=NRwrd5I1?-g`FojQ2tt$2^rf;&MxP8dIPIxRs{sEuo6JjF9vD zTw2{BgPA^<$vaHHlwl=8k7e>s`+YLN=|dS0B;W9$Oj`O#HoQ0OMOrn=1>7Uw+>#~V zl*gcuaGD31D8cByrxoAVFCt@KOEFng7h^6accqsaw-al#$c=Yjg=l$$Tvf?sE>97{ z<}1P3Oo8bMhrZ;Pi;-=w^qKGri@9iPVx+p$H?r)Dedim&fv5&OZq}F37ejDf#0@4i zUj|t|WJEfHRiLk0xJ%UibES#KM z=HC9kj^DjRK(ObIcITLgABV4~W&CDAuICzReYtDKFDhMB;4;A&1eJ<7qI-3gm*iVI zevCpQ2sz%7A=fYSqz@C@;LjRAk>HAky|5Jlk>FMp$tOk=Ton(I&&eXfoitoNFA)*$ z#ppq(5C2IaiMvu9_+O!n%J;>4|Fu&kR$cecoGzbFmDf|gHRwtC5hwdX07K3l@*{9_ z$n)r%MBHxt_76(P;*^LxjojFukmg+s*n|wYJanj_KEHdJP}jvp!UF4ws{{JhG=(HRt{t#dDU2POmPH zyG_K8%?g;+vpiz&_e`$=>hxwWkEvdg^z`;!9`b@p&-9w}XIhzKg&~rSM=|xPl)-N9 ztUir!F6ZWs*Flv0ahG zHPgFmW^>PKw8(I?fXU_uYMd%2qdX6RdXLz$RH_!R_{-pCbR~tjf53}(M(5!}>QSAC zzwzO$ftyu@WJA!^=A@H6869AeN{LD+*Q6bdWdsglfBWhHn|Aj+tF|Wea}=AKr8j*V z&#FR+_f@X0wadf7#{sLt6KhpAHUG140`Mg4~Krt@FW8`Y&P z%U0;s4tYkGiKnF_vZB-m)ic6GaW$>h+s7g`tzO$>k(ySo{arIFO?E{Y&>o#$jF{5< zT5DR#*0W3PQLgXLA%<7d%)@%GW;7Kli71b#f)5lEu;{IYzN+Nd;^YP0XgSCBBb^&Vx-sq6?Q#eWU$Js6SHC-h&T6Oj#jx*%Q1V;8@Q79R z?zcL=EA^A`hrcAD-Plq$hc_^-ABxz@jt7q5q`M(>MHNoDK7vHGSuvsV$mY1b^P~}7PK(oJk6CRc|3DEo-gJI=4jU^fOWY;;@zxE621~ zT6eawJ6m_Q2Z|2VEvF07XE^RXI+$zJda~dTwezKu_&M|Es}Y*MI8PiONqw85$4MKx zvK29FTD~T9Svash!UsycTuS_rDe>2)#2~T)_a;gNTqWRn27IdlN6~k4FE-$E0bgOj zQw`X00gpA{0s#xfrMb2NpC`FbFyQx(1T4-$0e{JW@8ickP_K2j3-}TP&NJZOa@=*_ zHsB=!zSw}@eNo3^4%)D8vjIB-zQcf@GvLi11HK0^_W|<8ULjC+;0bKx6WGBs9!%Ko zCk)9(>4mk=ULz%8*mm9~&RrbdzwA9PEG1ckDk-9pA}T}to5DYes2tK`U#N(xHM8O?T8snY1U)F2zx1AKIsnS!f~K)8&QHId{MA@|QF+Z3`*mFuLd zq%k*Ul8fv6fVkeAQ%3S4H)fJ^S&D~Gl8=|;^PAd3t3eL& z>gg5#B;@*4$ImnJH3>h}(d52zx|qCq@^!C&@D5%d6Vp$2XGm#@ITh}n*ZcHWxE9K> z8e|D%I*{paRVdwODdr?oOpW_zQ%t)5R)Zp^6eCESDJC-x=#F}0A;rA=hBl(iz19?y z8JBaUM>U^0E=$OpUQgO?IeMk4_+!SWF?EZ4>$y-$d$ePz`{-$Ad~||^kQ@RLHgD`R zFmiy`3SP?YQD$H~MEJeQ)-w?G>1;pE&XySn4yj=PTt{y1+dVw_G^ z?|h-nyF&VZiT0m6N2%U4d%ncak@$>!O~wQKaqmAh3tzJRr?M#KZP%BGVVC5N{_K8~ zHilhcHEK%SdDa#208qp6EZJaU+Hg!v?Rop8O6#^M5_iV5d~5!7d{vLxXU%^Mo>c^s zjbeQt6r=(7Om?Dq{wRgFNN#~Hp|l`+7Ph^z$Gw?Q&}%4 z!tn5zwy57u+;XyL+kA}1syp*lx#4Qp`F)sv=+gb>2ISn%oQjCk8F6L~55?w;&JpX? zIh8q9!!a^ZiKm4rMaN%;sGC$iZX&H4k#|n3s8wgU5VVpD|DEAgSV;;8ARIr@iYr3pf2TRL<7W zh}KZ@Y^HcmzgfKKeM>`uU>r;c-=&FPf1S;GOBeHsmDGlY0>wSw%GlOIt3jSAw3gke z>0>)ji{ELW$r>LnZLQcb3ckHS4n%Noxv`H=i{D;=HM4lUwPH9cB=_wF=NWLG0k2Dg zU-!V`N08k42E0BEe!>H*Pm*L!fdRjg2LI9n*OJ?SR4yEA?k7$LV>c_fZ_86xNwkNb zMLqag1b$i#GZ@4)j#h&{=%O}Jox5@!q)BdGlohrbhm($*Zy_SRgx|71ot?b%OdZ`= zSCJKafRsz}t;X$=L$;0&xutB&%~`_Y-O8u``Dsoh_dsd`--e!Z48tpslmInxKbj*> z4V9!c{FyWzi_`NPdyo0u16}z?^ZVr8pE19(Gxp5yC4J{tlt5(yd*=6&p81`5OYgZA zkTW-hDnqy-hEpD37tjA3rcWRDDQPbUZxl-GZiZHCrUtOV@ONLkQNQ2S}_Wp zWFbG^0iK$IC`Z&+a#Fjwt%t?0EP+uLRs$|P|5@du7jA=5o?WM0_#W}FBPa*>uWu^& z+kXXop#g6au-t6|e#U^0?*RNCfZg|S^y8L&eINdb5)-%vIhV!#GF&vffeNFAL9Qq7 zLHeI?HKcdy;$|H0B}v%9|H#$obJi{7)d0O^MVV%(2=mYqD`O;OK;2xZ0s>Z0HvS@PfvGpG}EV>SBFagEb*M8&uuQIqc+Noi83`>3EuY=v7KJ9V|1pI75ZJL7s))XEYU<>P@|`30Upbdp^lP}ujj^%JC_ zJAD3i5u9D_{v>o}H&s}-ttE%G?0I2|8lMw~i+5#|NLj-Y%J zam3njiI}z%ff~{^{E$lb5Qir>+A(>MwAu-$F^5lUP%zHFMf_XBzb0NFlwADG=Et45 zi-IsZ=NnfMQmfF--_jmb%!2s#O*Re%79R7qHU9&OrCXASzTE0H=}f|a#;mYnKchTx-3hDai#MJ~MqwoyJBcQ>v=U`W z*6a=zql_gpoQ_XECdmOkK}&NKU~0yfIspGVcRtHQy0S?sNtS#O(~R(#muD8MUEQ9@ zh@GMW)EFSK*D`5sm}brYuEsqrL+?huB5>t?+)BQw(H(8#q#iwHxmUkjVAQxehT2VG zX+8RgPa#&ll5g}oPUOek+L_Px1t}9u$wIC)-O_e5$6_As-{n4n$p9#RV!FfWfkh1g zVmT!B2CWmikTC7M|KEDrxrlFR=RyW+xcn2*Fj_&E zadD;8ob0xxSjFaOa3-Sr2T*+iTA*RXr<4KCoD&E*!LS!Iu4FoJH zj;n~#o!3dO)KGOCz((`AgwH0EM%E}4p;p2*q%MA% z%#YMVNR}Hvar3jt{0t#4k;Bc;X!8>?KV2qCk%oF`9F0?#T29L$sNJO>D^X}vjn1U{ zZ;B+7QVS&4)jr)NwLtZxcradQ7Ve7@PYd*!O6eUYYkbq~CHm7Sy?3uLxFKWb9`hy2 zgKLoQ0es7rm1p8)v<=Z1X);I|?)$?ugB0s-GT&P0YQ8nKV7$*{kV$YKGl^st+~1pT z>9qSR^DX0SYI$)L>%#b6>ZSFck#}I|PGVZCE&pq|A(|d7m-5pcY4t$j(-e9v)k(h| z^rHW$(YpBRj_W%`?E+^n!tsIcrba`;U&=yMG!U4Fu->j24 z^xj?|9SJAL_9IY8ZaMjKdFDNA(8a?BR>Oah*IM?dCbcV0;cc_&`mjNrwd|<^TWYHq zdm54Yz`<0B#0z{nQXe{)D3Pi=Y*Olj2d7D7peLn1d@xKRgG7cnziPQ-*32x)u08Cd z7wfHtuQQ|`72rZl7Axo?cpxkC#J`)Fk?Sm?H!9RDq&r!NOq%-4OH-KSAxKMVG3>k9 z#|2?2Mb;tun(ld8LfseT<@7`5oJP)t;JeT(@~xEYFo2#r!y`@ha(#IHu7v=5)3nrA z$yw;paq_H;E@Q))rYxefi&i?BTK{Qx_md0;LuQET zAshZMsScSSbqA18vh+r78uZOMjvgIr^kniZYOe0H*Yq+rRQWX6l-~Aw^Cw|>VGO5- za=gGC5oHmK5a(@Qq9~e_Jw)8uD}SkSG}%6TG0!rtX?B6%Lov?-F_3VUGd!a+Y}#Fw zWRnf!F|C4^bO{R;NZut9RdqndHG9gALd2Zk*s-(!8`=>vcP2MVP1YK zy^;)~Z7LZKW?s(IJlV{P)o@EX+wU}+jAeSeVb{He_VP2EAGcuz*Y$5ir-~i+#fe7g zid<6XhaE24*3{j=9wQ^$XOF2gjT%ep)T#VY{sn7337?-1N8_n^@~w2*ZW=`~%9VPL z)BfR4sIMyrz4*QSoQ|KmV@~Ak`8WRjkLKT%E;~u#8hYkGhtNUuZ}^KI#^Mm{#K4p{ z|M-H@;etj;Svvn(1@9NJz|8y~FLfp#V_hlr*wUGe1CKQK!2z*1)G3ww(L>u&g7hs`v-+Z-!auXWbb-_KeJa)}7&s^jN&dhj+Y4BFw|I)!gW*fbABOZ3>d7sd|X{RXW=r zv$9=VL^ioDVtW_ySjglWLaw25hMA+&e{&{BpX)wHCQ=Q2yWcr(ANv_ba0Q4&>IUMVjU}0S@IA9Xnmb)> zgaQtCyPLX+3_a(k%=tB~^OilYq4o(I={396wTL!n$}kP5+%m6MLHUqgjW2Uo9IF^m zrWjyUt(0CV9>`()K1~pPThTzADE!1ktnPyaCT|Acr9+A!)LUul&b+%3kqeX;8otgw zZef-@t;;**8D|~N+<4-|Kw@f1;?{iU(iam`kjCL6#F0}iEa80aVZx$n+RpPW&4spqZNRsI3Qv|+`JWH?=**M~s#;|GK1NHlrDcGh zXP_>YL#|}0jeR zSB(~*W>VJO%?SI~3f8CO-Sp(0$9P3N#WJz|Ea;bP-`~NQWJ5nM%M!cgISU;3e>5R^ z_eolZY0p3}!D411;NRxoDRsLv@S&F0;;gz)_o{$;3@~-SZaeE`mb?NMwX|5af4S{{ z!S;Qkbr%T4Zdslu^}glxzrREZuKG7kNZxs(SL*$y-i(bqAY00zwt-k6PZT~7(FMaiCeLhGIYowJLHU#`@eLJC&QY`MJu5a_TASaB|Qs2wI z^+De&q1biJsQz95!Zh2u{uMsno@QN+y8GpD7T<5N2C;H7T6*1w}dh~gc|M$i_$A^1%VM@fGKy5Pr zRhbII%*cDok>rg-)7>i`Oem6cZN=&YMu?Oel-3!>4NM1m7y>g29Okrf6CB zNg2ufBatp09V+IXK$gmauORv|Z#5<_`9gDO#2W5YQL4F`dPxALi!4nP1^!*+b`1Ow zYuVB9W59LG`pe{g2SE421By4^nvwfO^(k^Q!Z>9@V|&lCF$Gst2f6XmAO@j)Wjm6Y z^^Mf&)Fkp9($5NU2gNhRxZqMh0Tq;mFP7LlXCXjqHfYuOM&0qE%h|IK(n`YSd}QNQ z(0M87++03|oO_FAe49H@P9ykCVoj*G2xlYq3I%*m?$;&v-6J}~BcAhZG%IDsy*;ZW zoVdA^@zGe$ToAo5+getOzAY|qM5#g!VKzfnaA2BEeFsvN zL}ciixtG;(3m_`{{NrXV7)&{GW5?wZ1D0CFA==P`#L*##r=aLtD0!oHI>cl_4R(io zUEvY?8Oko5pl#ri;*v&^tM~_y^5D3FZsd6o_lGsgd*M+;fZQmv3Q&RJZHFVfc z&`X{;=S}*_1^c9L`%+f|O&skUL*@IZb6@IhgkV{hWh#&8#hin@k;K*bBmn7;7UXl* zduR{;CYX*0Ww4zmdY#Ve)f_2@2qo;nb7{d~Nn~(cq%;TNx;(dg2wb0(!S#DQTtC*s z_2bjHeq;}>XU+$G@%?tL$Lucc8)y~n{ni;auaC`Vi2arw$J7n)TQPr)ZjvX z7qiPhC8yS-W^rmAq2Bm7(OV7wt;oMKkUUwQ|6?6=i7~>q6F36a!^1eW4Yv4AI{@vz zSK&KRq!9U|K7%fAyZ3W_+}#O68A)4g>sfW*YYWEfL&;j_@zZr>)Ww~Z$P9RE)QWvV z40JcP1^OlX4fLz=27ZwRD~?lhGiS^d?jI0K(d49b4Q($dxSI0gZ7utql2GiOX2iw5 zjVxio1N=*clGL{e8f?Wx>Z%wOl$zkYcrH0!9pBZOi-rMFn1k!ablZ3WZGi$>4PVB? zt8x)D+FEc5(T`V3A4asmyuFOyPhs9#lzHo)Go~xUyy0JH2g5+skB=t32rZqRc#WgW z^F?gt(5%B~7Qsf1=t9xZg_BkCY*Lh#cLO zoTTjHeAFPiowfdTXfrym!F5Fv`J*Z4n`2hZ*rDP(#@|!E6R%HcdNgtczYES!vH7q6>Zf?>L-G?PH>^~ zu~U1eL0Qp@A(i6l4#m~Kf8ZmAJ@+iD@ngz>r3@}i1Pyy~+n1rlV8J4Aw{DTags~nb zJVfFwu5zui@$0b3X@!k1%wcHLZ2S%wLL-}xOJ$U#yg4;#EVpaUTAu7w#=eCHDxW!* z;zi$RKM_c+bR|$uaE)6IeapKI(uWjNN%*uiL|K4jJmU3x-Ra9eOuz04QQ4khRQ zTnk?-9hiTXpxT;965TN)2t;YFu!}4>&1Apl9jFn_$&y?!QC9+YU)_A0^G{K=Q&Ki& zC8vS@M0<3ttq?067?|C(z~2m7SqIcz2CKMkrtms)M***Mbi8(vFgoXG(Blo^bH1rX zaek9k$ax47Cm4wTc#ltkUg)G_|K!8GZ+U7pplJ(D>)QjCIfu+nr?(-%$gB)&0k82E z0Qcp;@9m4vGCZFtFZ|{7Uh+bn;ncMEWO7vx_kTJ6efPW46R!OJ1^jmnWgUVa`Tr&V zeIzvaJYpOfZO{zd$^QOZPm5=ro)hYC;5h46i*@MKyR)%{1plVi5}pq_n% zC!#;5G*<4>I8vTy&hkUjXL(E4Uz%RjanC-pm-wW0i7W%(~Z-Mtn&A}%PKBMFiwCsE$pbx+_2c}Xa7>C$lQ-Oh+_{lw(p zFWIs8QD`|q+7&xcXf2q@o*ho!=!0Nzq6VojEV_)iP;y4ExQWE!MoDKQYz0w-nGUyp zpr5tibs*@^+`{ANxAbQ%iV{p71r=Eh%Rrf?BL1-BoKjdh@|4`l_$hewosQkdE~6(4 zBwFaJ92w2^RmP)vFptx70nWTd0l5MoQ#3CZK%M}uQb3*n@&q8o3ib@PbUFwY=b3&zpoNHX7a zBw0SP+F4#b;+=48FXqA%S&-JUv9x(?9={{`9i^k%@H*o_XVcw@b(LBT&v|iPPhwpq zSPpn`UMFH*1FQzQ|CGF5`(s`Gtp>-7Gfk(C;^==$nnLLcFU@onMZYWIA_*f==qij} zDB)rW7ZdIm4NJJcgn62>s~|c?!UH6Xu~b)nbcBRUB#aajJ*i_QTq@yG!oIpE_T1{}VHKMlJ8U&$QF*@teVfJfy6UB38APX@#7etWgZcEM0 z@DERx(amb-&G3j741T{^b)m#5xnZXw9NSkEb(qN_5s^5Z;Su;H>du`tI59StyU=`R zY#tMWmD=UP(Jad!8P8`P4uJb2+p(4fM*8A`QM`0;V4&6TO)n~!sN7TqA&x_-Q~2ek zwi52U+Ia_G`W^S7jw+&Qr#tn`J~^(GPJWH+`7>xDDn0JcRi&qU87e*718R$Ks(@_+ ze%^rh3HT+z^gOd17){G+e36<`f2Qj_?-!(HxClzHG5lMhjKvCh!l1$Bn^vj}=6gzJ z5JF-V_b1}hvwlMA7POR7c4vjU>D2yfC&9sM{Di7`BsN1uno9|TXR9U1l` z&ze*e_FsUDiplcAElZ@m3=8u*^poZ;jc{95?R*?b1eZXxI4^wA39VWP&5DaU-r%#O zz-nJ>>>Z24E3{B_H0ovP2{laCHN)tGZFD0~h@Q3JI1Ky5RIiZt2YeBPqYyK=e(Pr~ zA}JMP{+~5BaHje#BN35PqlsK_7hyH(rv`cA*9xwuP-x?^6eyG}zZ}w5jmdpbc#RhB zMmB(gC_xAh-!Pf0XeDy6%btB)?yRq)nvWIc^^t;RI}sHvgX_6h(Y&|h=Q@7T(TQ!@ z7ZL-xyyzv8T8I($s>>!9G>;r)#|K04YM_b!(3nj#&mh5IP2iIREs|hzF2u416w(yO zW>VxzidK_Cp^a}S)y8}J#wJT}aRld^NuYjL?yM8YcD#geCnmDQ)u9mwl&s&j2|`AV zffJC5=EFOFT4pumrsI5gCODqzt5|D$SwJa@B{4%m!}E!Qwuu;A3&@ki>nWy#>)THDZ87K5{ZD)?ahlGrxB$R0jb;TtLslh z&>~!JLC~_TXdpW$TDOgr<)tfXtuC}G7Edks&EvBBWGTr?fm)S?l3buUmoAF1bal%= z`SfZrF{)c)_I=sDx#dPKFB`wz{aP3=BP@(sjt0xi!lMuqPml& zREALyTV&Px$ZW{B=@~(s$4w^nvk^OxJL`B*`zXZ8rwo>56Wa9pnxhNh-+=L$78jCEc7m+% zUGhE_qw0|>{pul7si|IL`eGAJ$cPQB$dWgAh3#w^uv+ zQw=n#X#hd>771q{Z(1qkS0k3DVgX&oqG@7J%}I#`Y7=`yPHLijv6tkeZ26MXRc)+^ zlR{4F--&~h*oIpa^%n^z@#`NeC$aXAunPB%RZijs0bfaaz_%LkPX!z^;D-c!g8@%9 z;4S>PR|59#Z`R0gCChbEp+vF>USKIX30 zhP5~uV082;qZA)@;#k;kv;Y9I=ik*bY*nJVO!%K~GIR~=>IyqfB0=;k&g){^CW6M; za=hK9!o0O^EgNKyoLt@=9~7_YhT_$|$~gxM+ThTc5-}Cb+QCbW$+o{QG>z` z|4%-X*VL^W<>I!G_&knq-0TrA+6++e*mGrKemLfxx(DHcnqici0?sGkS47A@s!+T| z%|UJn*M4$VqrEUXxLuXw->{4cr z{0}?+ADm#yl9S-34?x+)f5V{@51XKb1SQd14_$mIz|!dDeStyl zayf|LJ*m}<_Q3G&O%fA5y*hbGW;V{S<7XJSB}?|WuTo4eqmq0<8Rl*3W3v^kn_8PL7ErN{);qj;Z#qs&+uWh=bDy>&BzQ$-yk4 zv9S03!~Q+hPJ|`o{70Wv^jqbP4!?@l9JGqwf$2DC6>aKSMG;zHR?#VC*0M4F-7>DQ z*{mZLlvzr5Q--rsndTr%sVrbEJ2B{AABZ2%TFDK>k1^}1j%0^Plt&`Ql{FMQ&&{fN9A793wF9rQ?2IA$+wiS$jL3g{jlQUr5se^(%$UnWa4b*&WOY*z0E z@>_09f?jE3-yRDwVOy_E=&s+wkNeOmy-b2U|BY$0{Mhzu*sbbA&SPT4!qFlga`d8C z+i@t-wJM0R2jS0|1C!Kauc$L7X!tVX#`OYPwg zLYf8|rwnVqfZvS=m#PLJt2w}tgx$(o_9E}#g`MSWmiXaeD+;%K_>DvzKRZshWAFLG zEgfH#wPh_^VdIU@j=kfvTeh9p(pAV9tqZrLj^WY~?T;g59osyQ*|Ou9e-p-}<)ah1 zb3DtLdq4Z+%9cHayx{HBE#`LlIF2|gLoJ(&=519Dre()B#Nj~8M_-K;cZFNr(*+hO zcFoU5^MkuWiCn3BE1%R{7%5(5v7ptv)R-1DlqIpYSL%_0LCNYCqGO?K1xjy#NT%w_(r*yciOL^UF`8-mSHo|8|+ zUtjQ1W(FQ*_cUu?v%P*lhs-9-B1g+zu-)=rAst#0a5~@^583`JlF5|{F5nRNrHgBSzZ{&=O!s4_OmTugA(&v8sg95if(UlJk zS7fr{Z{--G0>oK-s9USkB?cd6A~CGzJB-n)aF|hv2SEaf;dX4lW!)x*7J|qSkznJ8 zbtS2xLRv-m3+r&PRDoy?_WRPf zCs{=I^qR7X$^36boa+`cVTfms93!`l<8;|gB*(_M2W#^Rg=ll|wl@_;1 z)buN@WxM3F#bMDtFJEgU#Q;_=f#ld+=Tm3yqeR`}YuSdjtpNK6l7n;QqnJPA3xm#j zY$}#QiO$crTRMuyC-db};QS(DzFiPR9p4E)#P|4IyCns*ygz|+Fc;YxaIRXy_q2W# zZR)i!9T6AbEgu#MsX?ICA8-2c zS=AL91#9O_=mMD*hjBpK_$5dSi=LC^rEz4u^$}kOnmBgsU3l4dt%gU~fH?gi{HjGZ z##^`t%>18k*~x03DvHR=Z$l2EC^3E@qaGhWkePN`WiCrKT$%}&Xt*R39-!d?nQ(s% z_s@ijHC&tt%dE!77iGeQ8ZOL)`)RmeCS0K5f=oDH!}*zTo`&->;am;pX2L!V3vSyv z{a9J_Nx0v+i$@O5iw{QbzBLrv#u4pCwnl7Eyn7Qaj!r4GlR?gJp8~uHUwGTe>BdAm#2=s3s%;PHu zLpYi3gJXQ+U7{HAe3MFTkX6UNEF$zJ@ip>N1WxziFnHraaNjN3^*%gFEm?2 ziw~U4&$ma8XLI<_+Z?u7(E_Tgdlfqgi^Oa;3wDES0W9>8TUR4pk=LuQTAC7--)d)j zxMh335MJL-1W4)_@M-|z5wBnj&v6cRiz^yuqwew|rLmSxLcBS%e|we4^gz{##bCjt zeo9ODsw#jLTnR;iuJ|@UVzFJ@TvREW%C@57PO|3t){>!!SRTz}huKk7ywdk6L2KEZ zd~4Y%NypYRG1uWi&1F?k2&a{Dgh=_;1)Oz4(>1UrfEybF@xA7JN*&$AV*#|&t4=HO z+0F|}_dALLzD;6H#EulmJx=Jbh>RfVd_{^4IfqOW3Ke&nAKI}>zmys-hhPiA52Hp< zygcF@7jAhszk0-b)xIs&K5iEFTeIedRJzI#;%>vWVxmhc%d^aWO8)i?^ZcI+K~YERZ4=$nY#KY9aPqYywNGodeu{1QJX+ z2Kehmlg9}@rOI7W54gZR2UCgzhY#3j^2@0+5qydaE15M$TPn619#*`efhjxr13|XI zAlqPs?od#be2GBZ>FfotlQu+CgkIMG>+STJ#tko*^Vh4^_$p)O0m--`3 zv=fzS%5 zzx_P&`ecFgZ~MAyi1QIQ<)Y_}omuy(M@-O^9b8^qW>0xuTm&GGV}DrV-3LUHmt7M{ zo*VG)1LSIeDn-Ef1^Ya?6`17yk<1tB;gz~HfA^o{dcZ)ZWB*_r4r;CS05a!2^;Y6N z+VSEfIdO1MN&IXuD6v@*8CSJ1S0)pC7V(8m@aGn zFNom93u{>=?sI}=b=Pr|x-`ONW#W-CN(&{P6j=bG^0>TK<^=2U*w9^9*Ut^ETE~lHGKPWa9nsI;NwJ82l@IkstSnd-I9EYGW^#toUQ7HR-RA^m5UX zPQUdY{4uPyn`#WaO5j&#!CM9XN4rTBgF1eg-X9r;v`dLC&bM2!TKvUJysKFC@38+EqG zFlCL9oSXkw;)l_Hlj+oHb@nKSA;`kr)@zD8HSS0(?CdG_g|cD?L{a=nlGsfP%pm{x2MqF6On!Pr zm;D-tkw2AE`=Y?wLgNQS=BDA)H;v&v9 zHDNzY-t6fJnK(>DoXR0#|AvtNg@`kK3Kz6I*s@w8oGGJ;xrP`R{kMn-`}c9a%rkHh|b5oeLGJ|X`n+!}@bxXG$tL^$FsTrAPf!jWC2Qo9to~gLc&7oYL^Fv`d012iemAiT ztz{#vWuq(QHnl>T&IHqLEt}!9md)mF=_VAtrkBO`K*<{n02P+mLjj<{HGODo54@-# z3OU#TXIB8=pEion9H+10O1OVdN+PPy+zv(djifZ?}}=1%Qgm z?5P0IAe}xnwg(>cJ0=IJDYK^oKuR!ux>%m5V1XPQa}=$Bp;o%Ip036Az=aB*3>bx! zCK-CbXqhgR&)6O~(MkhG9i?fp0i$%fR6b*SxY!wGz!2J|r3Q=+>QecP?SZ@hiUD&J zZ)!GRR8p79XKW9bIma3>iYQHM3>Xd7rSd5!)W#A8pN$&I(#;B}dLe9BGp~t0p{MQ;9wld^L0khzq zx7bZZ;{pZEWWgwu`TJG_|ErB^U!skg`iD%T>i8tJ-5wP70)>sN#??zTn(qd^yDRAW zMJC^0dEK^mEm^{P9bZv+-T~Qy=-`OUPIDsd45l~(7>ds(;i&O3dz-Mc`l)`?_snY< zN`!Hnj`>bHB8Q?s{#-uA`*2QnH}ax98u~7Z4Oyz7|wOoGHgCY zXHOFTzLIsD(cE@N|5}El^v8>JRL;J~m*Zd8@s%|HWzyXFJ0D6x?~?3mzt?0{{D?%! zQT`8JZU~JHISCoR*yaPpYvLvb-kSv{lUy%-W1j0Ku|xX0KVyzVepHVp_L<{kY4e** zsZRCzJ7jW?M1|~Tcw`ypbYEV?Ed`CN{kb;sn>?*WBI7kf>sR@hv8R#I568NO-dGlb z*!z4k`Vs5C<{4k6fWL|RH6cK3(K(ms7X5?ou|=00WAv)Pui$)|f_4i3( z2jl{00Ik1*^tx1-AcBEo_NBeL$Xw;PM?RG+H%6NFM!q#IO&=Ue9(6Tg|MSLIiu(nj zEy;o-pU#zKBa@wR3C4PJul)%#LB3t_EZ_C}dSH~T|yro-oD_MFK)$4qm z?PtUDg2uIB3!=^~&&oj)>__MsnzyH(fs2-e&J>ii8o$S1y>S@92ZCC-_8;*je$pbz z2PF-n^j^pivhG_m<0~M;2mjrJ44+)6$Z+K~AVc?HK?bRYkuLbw<$;{!DX&ThSKmD- z@GXi~6lezG?tM?DE`{&=BuZe(CuN$@}HoDV1R5)5**QoAQap)P)h0s z37T1j^4N>}L!v+eB_1oZ+5_&h*sCmlsnCpMH|lhhc9-&ZM#`^f9; zr^*1PHn5>7zw7R0rgX5 z(p>f*exgU2-t~~Ffi!Zwy4&PSNWN%Rz8RXYqs^4>9=R}sOI}mHHQkrv-fl?rb2s~P zQYSzgkf(f3d})u#yDakGL8v4Al%kG!&o!uXCtv>vb%c&Q^k5I_G+m&mGh!O3v*L&h z9XWRDq4DNIs!+TUw$)w!&c6z8zFTq--keX=Ve#g5PU}5*bKH@i2XA`j)8LQ1>0|Kc z$-nf%pW~arpVyRV7p&pC|xR9nlu`HHG@Vp;vb?B`*i75zwbe#AJi%uZM_0Cnp-Al zq}GSp51SX{3{ca@@djO`{zU{ zHyeLPnsT>GQ?vLfBVR(egmGh9%@7kMPJjrPB8i7<1TXOAYSPugYH;J)ej9tO{%4Jt zPyqsSTHi@bBza>EA#QXJ5DF#3oiJsck>r*A%lyw9d%=Vi8ilRNa4D`Q)@NaAYw0V)Y4zr}GDTaN{QqEPWiiwx^iV*oPHx=k(&Ae<) zJA^Ub*;5!5jU?=J2y?Nxr>JgbnqM)!(08OSVr=Pds^bJBXSUh=lbAk+Gva@P`&{DNiDM-SB13Z!@`fm{W;N#d{)=r>Zc&;b5sJsWkL8L@g`BzUMGY z_cu#Be;CHbxf{J*L!yq?L4Q3mA{C0YoCSVEp=5Vt71ZWbOsbS$U&SO_ese1(jpH^sAUOo*2Zq2h8fK zEv%R{ff(esLhdC^QN^SXF^FtE8_n9{ib-K&ARO{wk)-KgG3jh#AREiPm;n`&CK3bD zxZjH@shAWY29og;FQ&9&QZ+H?%FBBiQqI7NN#_uQ?dSDgj8!q|+|+jnEM$~$G$Dc& z(brYG>Z(etWy7)eJFO8_mG-U`%BeZyDkhJr#BRmBHTsT;kDThOh#V==XkGKhsF>c9JaTHT z7mcq8q902~=Xue1njreu>F9hf8b1?6-UL2Nvw8j|P+A$=YSnQ&6kHNc*42cQa}QCisjIdG zJ)qj9;dx!%1E^-fc3Kfm25Zy;J9$qI@^Si7PgEtpaemAAZ8AkaTAuSac_M7?QZ!Q+ zM^I^Y>d+l;3p)G5;$P(xJy(f-v+UeRSIM_qR=+SWqHf!bcGorwhv(;)gcBEZVvkMf zlREhp+w37?n=Sl|*kz;I99)P_+oEdc@AHCsg(26Ik4p=~^Hyj>=LHv=2Ja+8J)+%t z*DcWqGt!HAW>GqM+c;*I?k^5I%@G8t@K?sJ+yEVzz}pI2usXS)IJJl3PFvBaZy^EJmESlYufc?pwv&BHvMSl7(U4+OQ9F zW{;vi>>EQPRzZKYaz(Eu|2hx{2+-Ok6xLLCob4!zLCB5nNfz%EPF~8juS}M97{?^t zczMUTk~vS1KT*Ay2FR4vme5k+Dlr~^78DI9!x*H^4TZ+M5XJ$Hbw^8h%$`c?j`qr; zJyyd}pmaD{U5SfkC_3(LpRcrj*6xLHGf~;_venQD@|iv0UJ4WjE?53kV{>6#NBA@- zjPy$JBvB0w5MMdJQKX%{nsb%t$KQh(=zq%tI%92q#ZEEv!C2P*=nR-z<_c4zb(J)l@iZU##2 zzUYxG&r|x_Bcr9*FP#E=8D&AX`cjRMWEt~bnzgPEJ2y$4Oi*8{FCdA8T&{ zA7yp@|0fVI$TCqDaRR&iOlFksR&xF);86;wOW}7ia>BO$aEZ}bt!GN zr7kV4`Yml;rdTy$3s^)J#jO>@g=dHgY9V1U^Lu~JeI}Vi?62Sd@6Ss!&-2{<-gD16 z_iUGaT}_~hFr0XGP}a21DdVBR5$E8OABHQhhVEgo@_S{*^tQS`pJC3cA%65-Nb(#E z`Kkx-86LeF3aHz~YaP8irw2&`NrGLkh7=Otqy7><2~)J{K_tPsS3?t9p^0Ptq=QI0 zj3k)&YKWtzUcpP%RxwF~NrJhqhDx?VC3Rbil6sMJI7u2CK5|6u944vy2$Ep8 ztD&0;*P}~{RjM~hN0J2BT@3+Mbf2`J)Q6;_NP_vUhLS26&;x!_Uy_a{2_C!}lBzff z3LvHm`;l}EN&QGVFLOO#<-GMV{HEPeMHcmj6|*(4*f8VCq;<($%R@WAZXjiWe$n-D zBhhMe!p}Po{(qn^U&^B|NBnp6Wx@Y5efhqlFK6V_mr~J}b()MEeNkwYb^=3i{JB4d z#6)@+i2+Ui?@7#7+pS$m%=`n97?Bk)(E`Kr)skI6Z@{thh59+DfOGNuMhytmpI1bBSCD34##mGF(T5L;-yw#H4g0LY)ba5VZ)9*#>!M?ge3+Nnrq0-_`l zkQ|N4Cm^C5?NmerMCXMA5fGuz3L_vs0t4L{;Q*l-5y=q{hzEp&uLLg$!$Ecs5C{jK zjfhy^eF6gE;Ik1CK6fG@5Dt=zh>+BYfIv7%G9p4!CjtWDAjyabNu3A?go7j_A|!Pp zAP^3cjEIobiGV;jNHQWqQYQie;ULL~2uYm?2!w+qBO)YqA|MbBl8lIu)QNyVI7l)g z(oR6yL_l_-GBW}q>h0Fx^8_S!{&4g|cRJ?i#{)d)(T_-?!9SVctr1$1JBzp=+n8a- zJ{XB?U?fZ@=%Bj6i3I|;*Q52zol&OooV-iN3giUj+=oYKDEYLGCcZ#YEGx2)fw^-D zVyPxO_=B!6iL@g~L-eX@c%61R0z({Rp0^E!BQER>QIMC)4o)2$-^+Y?LMbI`U*^;^ zBw>|={)1g=P9pHi?%37zjBqlG*>;u5>-q!(FNSAl#jW3b9Z{8#B!Prd<8%gD6r8=H z!Eh>`4K27hNZ1K#Y*?bN;n_RH@!P=yLczgg#v%+kU|;ceFfzh%Fg$yuGWobXyUuTF z>LWPMge7g|j28VCk=x9Bf)fi3a7(J%l4%HsIhx~m;UC~62}=26DO{l?sV-bwUHTH9 zXdtJ+s>C=>09A(Rm9&N#3e^8YYlAO1B{}nK)*&f-x6YK|6#kz9?#a3i!6N%=&ONMU zICUP;r6$5Y6D(>kV#KYm&nx}6z|WUf)Ng`yQkAKR6T+ij4&1$zgA+V>@e7!2>bpRB z&X1`I1b9PFFx5CPGBzSO>AtnM|2=*eFlw)^ryFd21o*-b2yT;%n%bV)YB!24YRe!6Vj-UeXC#zx>&&H_GG2^X#m7cLK%HeGy4W;b}n$=m3}pb-;G!m0B)APg9W z$@z7I9$6=M8!-{=j^y4%V_B>p6+=lW-A7CW!4t2`L}Xb+WaWNJ z(TIuQcmj2qs4NSfKg>_*F=8Spo(NqgGRuPIKZ6LVww@y{r$o4D@Pq~191Kd;e7LYYsdGX_$s0WDq_{!Lj2K-XcwF<23<01 zkiNL{9CjBKBG4CTdvQlwk>q6!v=z*5gnt(Q9xQAU{x5v7x^xY<%~^}gSfKtj;o%OH z@6dfPHNMbDgnax#vcmX3GmKx|8RO&c_&JRKwrWhB3lIE>qXlOM=DetHhV7^L*j^&y z8_wml@wSidg`SN9_}KnjL=K1abaLZkC>}0dLx>mk29$rMp?P8a%D$2s2VCh*0Y?gW zv#6d$5T&<;`+dCsE(l=*%Vap8ON9*A=P-Z29MWG*4z}e1(tWId*B54RX#b`Imv(r6 z(t#5l;+MWM*Djd9y=#W~6~mHPMuK=B{SRtC{|o;sR8DSxYc~l0@9_8ce~16Kg8yZ8 zmBas=#tHwg5D6$<4*uVikN=&#I~5t$1|bN}9YpU;;5`C5Fn2Qab2ax;IE-y75hDSU zVesX;u0yE`2<;mMm@J=mu>Yxkg0Q|3fXQ-c2l*f2CkW{q{+}$5c5uJc7-b>&QB1wH^h%L+4L(H_z6PxhW97ql_@pLC_h2C-q8N!ek6eM zhxiFX^&`Oib0-HfefTE4t$|DL;FiGf{l|a-mvjwt5~3WP_woJm9KQFNc{KYKhV5m> z@^A6ozDL#IQ0#f}+tS|&ohzWASo;=2n8L%t+>R^b4HspU;;XI-ao+}?M&`Y^7N@w%PcLw<7iG$_}lik#7Y-%Y-~ zgT@2Z`YdR)s+jwd+f~epP$w1h?qw*K9VtT5j5c{$W%41ZYcYTh)c=IBRwjQX^=lP& ztuqz0W;TA3*;!L>3NcWN3?H3pUi53pTa}zdpxv0XuHgiNjpPDKh8*{r*j$CG7<2T~ysJD+R;F-qwt*ZC8^Svb359{4j%Rikj z-%;w?^|t#eYnIG3{^amU`38B!Z1$D|Ttve`p~pQml}#~qMwX<_v(YwBy}d)*{LoiS z+x+jZp>6(CW>?m`^`~4C(tdwmM?3>9*z6A$XpMw16dV95T82;P;OMAe+60fOz86wm zC#SB_SDU%l?Byz%rz^6XVf^_t^oW#?3L=RTW1F}5pH!5bG#s!WqW5(iewpyutodMuU#$}rcHP{o zLy2v+=uc9Ow+NdtF<_IJN6nwg*0cYJ)=&n8e71rPM8{b0)X=C&Wud^?lgeZUk$Q5z zb$zFz_QsY{Rr%`OOSvCPDh0c%X(kW2eAQkVwSl6js# zx_^A2B)F-*y-#5xZ&01Sf9xk$;rFH><;FjH8#4|9#Gl)>N)CR|IS{F(sJJ=hzdwCi zF<0rGhH9g+TjoYGyYIx2NEH8#rV26_xR3QbLr=MYNzuSsby-w#Bq_>V6sY97n~#XR zk5kCbjJSI$aruD{CSn%;Np)uJm3R*cL-7RXVVSKREFa)Bun3@+t!9$%Z2&Xm-3KW6 zf(a^Nf(T2sx^^lj)ZRCTRjW=svF&~S2IB?mYSmY#2J}~JF|SW(f#1jltUj*N6F=98 zjS@Jaz@&M!Nde$M5)Tlwjz@FM^K^#6yWELo6uf8Xb`C12{@KpuHW;iNk78+v5G> zbpy-_@cjcSj7nJz_#m#GDZ6Dv!b3Er5u98E?JeFrA37jk&1@QAN5A41GS*IcCU*dr)cliQ0YEyek*;$?wVS!sk*&8 zCEfLDo7~lBguN{KIu<)SGUAVN?R(Sx=6&pgfNV0xvS zfThEkfLbk}k4XOTJrK!KtCREO=k_n#$~o_sb=t&YT8Vcc_-FM?`UK($EqtOioV*3$ z7SOsU6j%+@pN;kkjh-tb>?y|u(?d}Sv3g_Fi5YpF7)B?w`#?*aRHhZ<5~?EpK93~U zAD|o8_VH#IT3%k!fl7Qj5=U{m;ZlXh5h{V>gCYyMJ~ac;0|&9CM$TRD3^yKB+$ zkGsS=iidpp|2O^-r>X0g9)N$m;oKot1y+t5(v838R`7R6qt8#)DnM?&(Pam}Vdx}0 zYI!6ueoK%;z?83WvIK+Zm=F6GT}ixdd4GJYr zJEU^dmYY86(n)HjIZQGN#w9Div|kPG&*&JGH{JI3lL-T2X1+@?d%F);l@G<*&czCHz^#@4Z+UVB1AcZSMWg%aJCAkugTD#Z6nL9%3|IEcZVuG8bp6$v%DslX|yylbwO)+^4#+$lFO6 zZ-x5~`ByAO3U?v^X_ybbWl*}XhH6W)lS;zL$vfdA8!Uj{sr|zVEP0ZX31i0%CJ8Kg z2nG2M(ibaWT@?Xh3s=|}Oodd*rL{8>U?#w`v~Ib%q8@<#OoHmElB~z zD?E)GjEKNCmw<~%PY@LBMLewF6C~-TBrYXzNjm3p02ZIyHAyF3j=&=ikfgINhv1_R zkfhTt$KY-UNYZ(igYY)sple$?@p2SibATkBc{vOVk994jQ!mHi`woz#b8qkHtga<= z>g^M~y6b11dHY7cnfuIbOg2BcNN(dhMRGd{2|RO16t}sz+4Nc{H{G9d8W&3WQ|s_> zW$KJWntNO|ACO~piNrpV-IgDzigpQe_GfW*#D~w6K(C-9GkyftJA+YSC;NvHc5*rC zR8B6t{<%xZmn(UUOa6&V9h8(RMn%5HY=Cq#4zwY=88x!(>Q&gPutg)BD-i#u@0WtQISJER}wr+4MIi@`6umtr07+1NNW?vA8> zfN|U_k<_#1z^^zXa!z;c2h#Q$L&G+XmWIPUCjD2nz< z_DmdP7enycjrfC459oPSLUGI*y78qj%5)6qX#pWuMiK~VS5}v<;Ewd2()1O!fz^wm zC*jYNgh5C`ei};T10GndIa;bet0iU$lveEIBBaP@X~g6vXCp zvL7Alv*(AY3@bHg}^aCWx8Mf zrg!#fD%+9JLC-TMla#mPu-_}2dT=IAZN|@(a~SN%-9g`=PZAUDa$=%sCUW?xEjfF2 zmD~vSlm+g%gzh8dIEMeP0w}*Jk;jjaT0NkHZlLtax_x*i{Re^XCdw zU8={-6BJv(F0Q7zg_g-Ww;1kr zs>kNn*t3Bf@PkRrQ48UwIf6X?gCDTIEYUL}qx)<;vE|be>+;|be$tx`XF!eb+E0%M zX5#YqnDjN~%C&QmulAMMzMG~{>3Z&rgbi-%dGqja>a-Fh|9uYQkJQMzvaqKvzly!z z8seg)w;_UybTWCW&tYYE4%8}!B<&y77>McMh+gTi!iusd`uZu|EahfDrCVM~cT4%U zpVB=qrN~mw@>7cPQhHd*a6hF-UP@0(>1QdGhxKIH%j&HUna?07!ed@{7zO4fa;o95 z6=T6+KP5k^yPf>_lacwy0q9RBGxCwL2*%=TF+PV{nZO;}SrP?E&_AU7_^6M*L#r0J zeVtNbGZym^vFFC<(U_dDDderjoMNT!ee{GjEpA+vQ`gS*WE+H2a~!xi( z#Yo4@>VS*LwzY=c&BBq==5SM`yBZlMo$`jt!i@9LF`W8wb>WU2phLz#2j7A%KRvMO ztW@QYY&-PpwxXM_Us5oH-j3Rc%wVH*nQX~$?7f}gm~8<@_HrP81zL;XAqBrmk%83nRZiV0m{Bb?kPkvb)&d z)&%jSkcVNGLX8B7ytg#=iVmlGA7ekybRKPU$pOCu^;|BdBSYIONsF9V3No% z$)m5~op~I{P@ztaXteuPMN+3I9o?4KxDTR|Jo+2Fsw73u(&z2^+@&aS*n0FMU-_Hl z`hBuTTc64T*ssIiRL0mlCv`M~^FX0ZzHa3UC64|lIfHi;4QqZlHy*ilgcGkiU(9e~ zKiuA@2)-pj_WEhw5^?bv-UUkuZDv~c-?RQrkR1uw(m*(B()A(sWJ zrBeLtR9D9TwU8ODJ*#;b#4cC+FV*tB@~`pRki~MGkL9Zk%jfFyUjLPv!x@G~L{H@R zXw^T@QWyA5DZ%KXwU}%8*L!=gMVm~W^)0HNogPjZIloLD5K7uSg-72ZkO|aZ&)Ch8 z*0nAXKeF{QkfV2z--9(|38&0oi#`kCGufI6ImNM@>Gf zjO`oQlJW9%h~T5zwa`7QLxWSJl*v)q!N(YtRn-hk4Jq@D_PZl4>Az81|H}>WIzMFs zzZB4`Pk0wH2j-@I8bkKx|JI1_EiV}H{T?(poVY_6F*h{{>mH4zR0oNgDF-d#CPVVP z7X+K`(5&iTFmXp2j}Yj)gu#Ob$^P;RyPY{dh&;hAlQykfHZtndNZ{;G!;M>dfF`|p z$ZoaNeO}qc(cP*otSPYd9;z~rwXxx5!oOv@I z+f8)o`H^(T%MQFkT$J&E9251ajAdNZvGBxNQKvzHpZ|edF z_Ht}x33?p*=_%?}T#4klf*-+Es>hxqD+>%%I)J0cu1{R%5^{9{jvmc^$`DdI1IG#) zH{f`f2XD%63^=~M%7CK^QQ;Q>$Gvq_^}hm+p9?q~90f-k#028l%VdrH@V<49aVig< zWSq*8FufLy%rHAd-OHTR1D|%<^zMRbW}aK^r^lb8EQUfkd55_gu5dNH{xxbCE6kW0 zGwJJ`N#?FYjoAN1oyf=howJHJRUf+XA;;gFuRDhj!fG{e0$k;2M&chFx-aIOych;( z0m@pmdxF|&wQi*rFe-vq1FP?xlj`%HEhfI+f%rotNa&Pps!D&K&tfDL@C)Cn*s8+t z`VXlS$tx~XjqeqOQo+{hLc&Ig(?(475m&&0!+bg$`(YY+PzeC!`8@?~w=p7q>4Y`z-=>VQv?fl0x zWXLu@-~Mj%5%15(U^<{#N%cMaP>!Ng7%2(`5O#rg@i|4J$emr2a(qiugKEr#_`{83 zupn}Io%;r83b2R-la<4Yo5o4~RX`kiaT^ROlB9Z7z@ z`5AtL>8suBJ$g8^cP(Xdvv)*T;(Zm*E7?B(gqcGR=slv{lpLM;HuK~7;Iw()r}|#1 z`uzA#wi+*lOyBW8`TUHS8UHXn`vW)do8i4M^4mSLS2#JNVD~|VwPys=CsMKKgqo^WsS8!uwEmR<_?+uflU5lfW&`4Tx!k+# zOWMja?~T7%dnKUxjDw%g_GiaDNT9@7-+Trhq+m=1DvnuI&+xZk%$rQxtWnSO)bm|> zKINH%^n8h)hdxuRXU<#&vj)amzxK?Lyrz%iPvE@Q+&tCI99~e%(Wb>4TDK33-s1H- zWTEM{Sal<>Xu z?#1s|O`l?2YVoclJEcipHU>=w0T3xA_Hu z`q%C8Sy_n`n0d~OIylpNR#p`648;FVA|b~kiF+lw;J!89oo$)-@eV3XI7x~6ru`9r zvod+v!-09%*<@7DjU=sH;sF6>W#WO0`3WT-P+OryN(VP;o?vMv#lQ!bGF(D~WxbG; zv<|eF^#(wm*i}a`FSshrK(c~hEdv4e-YD19)Q+!oau66j9sa#38x<6R@XxGoApSiz zWjJ|uiLIY1MTfwa^a{fXJ|>HB*gktm<_vPt@_b?MM4OuZ@SmzY`cN==5t@jxf?!6* zd1HLByChWXL#H}`jNkFut6)Qp8bEi;Q3@1;+C2wzMcxf$LHr>MUECF{m= z4{5pnf5rOG1vVNmdD@04PxL{*TdcmVZEj^0Ao^9non!B$#ol*m4FlN4K#T|}7mQM~ z?Wz1+kM?%W>OwSYmi6JnM+|7aEpL6s1YEXAWqVlijQLicCKh`S(l=5UlR9rHYi7td z^RnfGVAt$4#N#y&HRfU7=_L5wZhqMZQ9)wop_sA6HXqdF^K4E197j(Z!7Ko%>%85H zQMYbe8Puztf^f~v zL*U{Ti@jm@H0T=*FOYE3dkOz0w(e*utfazV`eL;soS!3pM^k&UYWX7gq~l0iR2aRR z-M_%wb##w{=DFyc&xSX=3Ww#$G<^l z?jR}**ilwOBtg&YeGM>QfxE8fIq_O$YGSrBHGO8dX(fZr#u~;}2EwhCiFJ*w$2NLL z1RJwGt5RPkK*D=tgQX~BJ{uc7MAwZ4ZF`3|zONgl!!@rWHrKU8*mPE+Jm$u@;s5864l`TQLG z2h+w*rTTV1i2ZsNIdhzv(!#hdyujy(YgVSgjvKqf+v^Mv2ZZuVhpX zv^T^*jx8rXQtb{M$GDfY^NEZoys@`o#9s*YF4|<2;P138X7YohZGXof<2_h63tqFt z1mghQpEwuNv zjoaA<@UJ#=w=#1UAYaqTUFnOUk?h3z7K*0Do4(zrjd7Y1U1MKCz;_0l&Ndk4lF7wE zWAnlZ+#9c)57Au+RlSos<~EOj!?SbMHt%PjewJkm-ZoO`@`v#LpqxPb5?Xf#C~X%2 zI(+6{;DLcV9^}dR)NS71;4`2yPeKMDs#ngh9`#00@^MRL36grnI#H}Ra?z4fDuxR>`s9cwwf=N)%)=i1mO-DD>jzmxp}okFkf zKx_SuP~$cri|b&e59oB>4~=R)5Il!^Ed`#Vy?s~?^&Y?p6})pfo0o;NC4QN{L9Gzu z_Y`BQ$qpfEUZ!)#bf2l(;a%Qhss`v822xE`wg90fi5%H+mlbDDp+?s)tMqBU1H`o9 z4Lef6xed0-y9NeDG_ZionN}k)6`UnL>89Olq5#Kg$!>Ulu9fmPn;+1;qI3z=FQbqa z;Q7h>vKjemD*oYOhKwaW(H&Sx-4W-57@Z|~HO za`h9fy%z5~#KNXs4dUUQZV;nMGP7rA=+j%TuVa?yhOmsM@&s&ej&R$-vJslu%s8oY0Fy?{2viI%mtfvgMNHut_sN0ijZwZE{vxY~Y~ z-K0eM75U)N;*BkEAK&03yb6`oa#@e{7(JS|*e~-8$;jOpPr6f`^ZoQ+S-Sj>yctZH z;ln#rW#SDTQ|O+Zs)@(9*|m4AwTCYX?D3m}+_$Uv7EJ#F(1dvXPC|?y0gbus*JC8a z>r}M^!Xd;pxttmE^{=?%giFunP)z&yjxBVFds$YEEpJZI!0+$^zi{bqke)dYKmuRg z3BKY;>QD#xClEK(O0$)TH-zVO0x(R|;_Z0ZmH#E>-2^SnYk~=B@g7^?vP`usE#4Z0 z-Z`u&h?(e+C}&(XkgL7Ld%4Ax8%w!x&E(?tG8+(rV&la;iImA$O+m0>E#1Wiq4hfm zL_-lJps(?Vt;u?jk}_I6pl!^oO15FD?pwPe+T-`c$2)LUSe#7gf@W7`Au=aU+)QGDH+ za}lQW7iX5Jt@q9t0MV?es^?ttmDuzWfMek6cr%+eV;jQwFSi14fhw#eiQggs?@2|~ zHHhN0k0YZR0#Gi^Ri9ztQNnXI6gCs=9fJ`^xue$#tO5Q7{>sTkD)Bl?0k7X;r@hR5 zZYiEXoG5NWOF1c9O3 zulY@U$;1wU`fvU(nuz|Ey^o=se9T*?06v`wSl+XJkY_#w-R_7!gDQ~@c?{%`4tv)2)L`oYA?e&M zU6eUO{nVsC*TP2L#UK2SXe(3cup}6=#oPL}p{D5Ss?raF1g~s9+)ayLX@A#~N0p=# z@>cOBom<}K{rV&8?i>cujtX%fYVqQh5U9TfB%%@K3KG?`#k<;1l<#C!;saBvtM96X zRsggeUZv|@Al?N0X2J|1H#&}j8p`{8ht754zd5=)791;GSnv?{P9>_>c*A?@C>)5d z0#8Z~EBWhSc?6FXG2|4)*~zOpL_?YO^=mk6 z7fKCS-(14HVf2fa5HNT$-3-NUZ7qm?K-KBQS>#6Grmu3&=CV_aiWQq3+v5(Pu0ySr@Gun+BXaA=jRlNO!8C3 zpVJH*$m+2!k$m>)uJBu*OJ1nbhxw(Sw`8N^3&eIHI`huOgV82bksmqV&QIQ0OyA~l zAp@@nh1Tuv#n*z z)rUkU2rlr|!xa?luI5vHPgX%+Ut$Hfe-+|#AsgMvLx8)`)v%e4B$8=HB~d9_sdDtB>V09h^Qgac`N*zPELM zHffLWL5e~de}~Fr4cu(oU1FoN3-Lh-#HG&-HN{ngCt6{X->Ozjt278QgA1R8_uld= z1#|YC_x0C@eg<+`&URwulh3MKekQY*Y%27Q$~r0)gb%6+B`1zFrbyh7SI#}=j4#nh z*OMuY#6-`?>lN&ph2?%g@1Kx;x3;cN9DG~6ZPuA*ZKTa5pJkg*YL_<#(+_G)slFTg zvs6FiIkzEy_GO3uXD`=0ccuUx=eJ;5%2dkVt@8Q%@&d{?KZkb2MwxoDf)1mD)`mRn zm9{JkBiyR{3)on7u%>b42%08@H^PBx58hzP6~O<>x%~MdRsi@DB1GY(c9DFUQIp?b z=DmEGk>*SFV4h+X)XQ&j0>9xzd_J8dO}@b9`Aw3=N8;OMBYFANjpXCy$_ZqC&1L@K z6?~|@kw4GYxi9er?l-l_{obpYA^m|>{AM-)*2wejH~B7AzWjMVLixt#@`aL96bQ9gLD$BGVk?Wiz3;bWGgq~z`|$QIxGSg0KAS`o zby{v8x-ysM@RfI|il0ahhu?DhD`%xQIFkIT0tVOx^mo|g?SFm?T_t*$H0F2qkY%^5 z!UOelG-vpSN&xW$S%k78iIX8(#!EJh3-Pf4DLiL2V!LY%^p8i)u>J)O;llPq#&Na5 zxZ(UilK&_0{}udyBR&LmmL;ZH=S`E&kLH{oO}T9g9o~Y8725eGzewV~|8BIG)bYdF zXI~S*J*8gbVum?uC(%s>W+Km)F%0kFUt;7U-0h!#bhm{iJW2x9{4H$8iWMwGLloPo zZ3OyC-o|l-kY+u+$<(hPC-`$$?aNjtqr=L;4N*AE7VibVgi|vIdyPEkLn)cX&kW@^ zbGbEH!JNtm9SM_nPG5fqudwS${r&{gDY^-~T-OhH@g-A^{tY+DlzB+x>}lFBj?gvF z!2Dt8e~RI1XP&_Q0O6YD+`7@&e5m+1bfR1mPbl~L?M!GWHVww8nViHW*L$*CxMq#g zgN^U@3?*+{)#{z}8n=8DE)UM$UveTVG3PJji=yO2Nw`u3Uq3Mw&_E7)1Wb_iH-`#W(_Hb_BPpFp#E|) zNj;kyczvbprA~k4pnX|y@iJB+Ijh)f>aH2ide8GKNqN_0hwpg4%ys**-ssSt?v}G7 zgMb>^+0k%SQ^jxr8Y0e`A)%&=PW9ju?gAr%<D}Qr;76m#TUnp}~_3TVPIL08_Z2pPhTf+;fzl#h5^4{WkYXuh5 zuLi!pq0aGXAU)39Kr?`zNrJqMmzh054nHb#s!V3gI!$U1nX37!kCB`;s%y?J_BNj< z3SHY9{-`$)YVF(co5gJN)^o(8vs=wXtc7&ZF@uC&ut;J6&_WQzHEbFZaof_%Lit17 z{u79wr4mEO<6k|9tKnPi%ykUks*!?H1Vzf#yb)&_A8f}w;(Yc#%wwDS0gaoG)1xfK zGUY&W=b%ZQRRhW`*nSq2fPS(x+aw1yEX^X^7L$0Z8fSv?wc*mYs`=Y%xBfP^jSUZ7 z8En}^mrdSRwNPQN7|vqvmTuB}5Tus#8mdw(&!7;CE2)vyllv^5alvOfQ8h6Q-GD`(B0A50ZonFEhu%mYRtK=FGdHf@s^E*p zi)4p2510PS?l9gJ?)9&5`L1x|XAE{lum!z2lFc@6L7~~xRmQzQy=3d{JI{p5RSA&^ z%=q&tPse@=je6sz>71h%39o3eElwKURxfJ4-_ieIdJH{=u1ws1QaiUV zj@|ni3_5_U@b)@C`*wR0y9=Jm8%)ZYLHye3{YlcP?aDDwDe+$5<~^B{_!+aeFNo~2 zhs-bYY$cC!$#1yirx8DRXS(DQl`Oq7rJr%h4=VXslJj(t>PK#WR=M+mU7Jfdq|@Kc z?#=qggt?5yIj_k6bjP>?6ionUowx2EJ?x+m{}VYXlV_Yz%rC-{z`R#@!1WvNgnp)3 ze4lreh@n_Z_n__0kC>uh>LQG$wedC-p?DsV_ZjGW5IhfI27>SsB^)#2{dsB98MvT%9P3d9ds9+5x`L+CbB{-^&9``~^Nn4Nu(pOYnyFhxaRr$TaN} zp_R|;vn~L-mzE%82CwWr!1$JidacKhqnAIpJ`4^$+1((kU@|hS1g0RqIvBX8DWjlc z;TnXl&X_IOwif}TJtvm7yio-KtXj&Sc{(R#E;K-7xtN>H)I|($#9TLu3JiW_KbF69 z1;x&c@DkowBHxfO!kZWqXG(Y`Zym;jWxREm6CTH#V8R&`4#1#rNryq<`Af0Yo6l+R zV!A^nKnb_`|Ix7OW;h$e9p1ASiRatlJyIkJiM=TC0atpzpDLLHe)$|9ep+9`Av)aP+0}_Q8=m8z1 z#Ih%5)bZv1NaAtlmH0|1@$40rW(IAUdd4t6R6|7ZWL!DWXf##buaWsJbC|IFN$V5A zMZL9;8{=?ovg&?yYrY1bno4VLSf{cRiy?Rs3xkLXncFW)y-4}iNck50h@sg0LR0{^ zlEANll68T4EX!%FnsL69ltc^{CIH z7vd^bOSWx6wDTvHeU`ln#$hWTP1N}{45cvbyU03HrzHqBZtH2SEGYnzgR`@R{DcD4 zOPfO^DEJR1@y5-=%IpaEQ$tM<#x`xukvL=R3@?f3ooSEp$(+hK19 zPr4d+9h8CxD*u-4oc~x}9(u%s(fJ>)){aHc%}?pYG-o>K{bCn~GlBdSfSfxPi4X{6 zpbGxUh=Y<&Mc$eV9Kw4-axAQstspKXtnCi(H}2zN`zZUqaEvo^L7@I@;j`4~Uv1qB ztc@A$jYFTm9O4Y|BL>Rphw(v(;7=&~knJBRQzEmZ!T_tq+kj3*qxd857=*2eBv*Xb>A&YsF7fn_$c}{UGQy7@*j7xsFusV5gsAe?*L(-4_(fz}&c0u?V z|K*R>iLLNA)ydPiwyx#*!Biv3H4znJn@li}*comCO{|l~I<(#k6)v?qkC=GwpxhZb z9O{Y522me5O6gD~mO1dJjr_keRJciH3#CX51s+@1J=C%-R0{i_DU7ea<<9EF%P8Fz zVu-syaDHOp{4CQu7zgJ!Lk<%I2V2Hl;P>7q@UuT?#el{Z-;JGEH^+kQGFb-Q zah~vZY#en4NOHy^amm^n!(P=s!S<8yUH1eh!WM5Lm#rwn$z(9yM_}#{9s_agc9`I9 zna%uOHNX7L4CY1>PKq7Tt|?M~GWYON@U0`4HG84$aU(U%aMl|KPo?_*K}NmTU?m_p z+z$Q9Y~_zb;MKGVc9tJY&YF7YW;>ru5q5s|zE0S=lRT{>_(Wn-9a`_foTCUs^xjzK zR}`)Z5}{~6ZO)4W9ARQ7)vP-wHQ?3eJ~}_ewoCtrIMQ^FJFAl4VxPQO`z5wzbVe!! z=Et`%@=|egKSxJnON&FJ)!gUFx3+Xddz0XYk{X`SU^A#_!hO+;DbO5XMZg) zFa-oUob+>) zq2+H5T{?FXAp|Qqw$v^x-|#n)1f5)FZg87K^3Bw^LOLiha{qGi;)%C{*~vD+6{N!I zEiQ9&Cko296D4bvI*jJ=YlNB{XGHE@VsPuVZyxIP>yg zs)Dnp2$ghrIt}f$vu94C)d^nm&!3+h0A9MDKXFfAU3-J1Cx_Yrl(+A;;~Th*KkP6r zXQ18BL%+tsy1?eJbnti6ej-wTZLvMM_=JLb2jx-b@0?T4X7^_Mb z0ym?o<_G5eo_DS5p>iVqMAzLFxTTF=gLg|N1B&YCPtt(M9r2Oh29w_&mbZ#g2raj* zu@9S<8$5+;c4~pVA_k!;*2$SHIyldKFr$#eR1Mr!CJk6~n}Ulj#plCvJ`+Y*`YJCj zpZCm1d$W0!1nyc-_xxM4smJ7V^2p8{0enlo)Hi|O!IHE?RJHpJx9;Z0`z{yGvkR-? z&18R-nz5!jfnU%2-bgI*HJ!^fWm1a=>gCBm7j<&TT&#+7^dMFA6ni=IRj_<8{klVS zCDgv8j>0)q_i6wYS_xyo^c1t1Ah=e5{xr{^<$P>MC=1SjZ{Y){``5@t0|eZ`h|W(dC8C;;#0nS%JgeyC|`^^X7;WAEy}k-DMHEd#H;#j z5kanhBElgFZe#3ic-djav9`feiB{crQsCqQc$S)?KZgoeWw&&|za0l)9`l_=)ow6( z=P(_|rBpZpcnc=)87BL99kq0QVsiXZ%yax;9z!)7!^yu7t0OgBbLX(R{DMuR#}KJU zd{W^{-q-Kmgs-+ z6x-K5Fs~UX4l)ESQ|W8EeapNMbFD;b_K7#gDRUruyNXcfVD#vhWejB{-U`+1mg4$| zTmj_T(~rS(x-jcKv_u;OS$Vy|sbD6PWyksSBM3wq{L-B(trt%?_(kF}iT4h0yvIRq z9xSHoI(n^n+DYA`UJKl*^9jI?IXJv?xI4hhu*92QG#~h;({2mgW1WW?8&amcS`Ofs_0gkwd+`h>VpDo@}aO#iA#P}cX+wGg-;P!=M33_sq_iY*R7=j_p$=WU8DA%IptTQ7Kl< zoUZC%p+)^+$J4Xh6cHeB*PBex>^4ON2;4P`oU_{$5g>5al?du*w~2!d-1P_o{n>4o z*z@7N^sI;gfxAxSIo9^Iz+GSCA()=eM{Wa~c@$TE1>!&A8*-sVk_**;*D~Bg28NUV zq+@Cz0mLsk$W&vpV`!>+jByquYVmKzu-yeeif+|G1E25O-eRfJ81eJMsZ`m1`GL+8 zE=JN?1|!$-RMi?e$u`ArW3v9qJFAnGmkdDM_NY%0DMbZp!i#AD1mj_(nwOo&$IMem$ekRG;4@I9y+UVNbYVl@S zL(yNsB-WK<-PQ_wES~zrN33%(v-pMHw0Nhlavb;%=`3-E1SAFA#DeMugEI#*mhbVE zE?*THa0xD6QoyWndKn`rdRl)%f%BHKAHTow6qfp^vm&VzF6A-r9J9Pzc+@`w_4jM= zfu|+yXz^|y%qfPG%G51l{f!2;ctLBc_E|SY@qd9}#6OHTv0Xf-zNPw}CVaC^E1Wug zk=q)3ce6Dr=j;MORtTO1Vi|pAw|tuNpcgj_X7nwYc;cW87# z=bw$q2Lx<6SK$>bP2!Ezx!KgXnZakZHnF8+S&!AfKBXWKUYdBJaqqE>+mA>zrHT&0 zVL0~o*w~h_iImO=rRzd9uO?(HQBv4s+{dh${{+75t7>}#N~Su+gITd z6K2AQ-V~ThEQN{RQn-G5Y&AlYFH?a$OcSZ$dU95$=+jKs06;zYybsSTMmTvUDb{1+ zM`9W4P5raz^B_+18UQ*`jTxOog?Z?d#H_lEGvQ^&EK6cPa?<3NsqaGgXZuG+S4AqXR|w_uCeUeJ%M^GX-&jf z#E4=Jb!R4UoHPSC=ZFn4WsKVRpRQt;pULsW-yxaTX^q`3-E-zy^gM>}%-;{n|Gsys z*<=OklT;{EEh&$8cw?41I5B6ccD(lsIsnKxytmC;(CF}m`qEMK!A4i~8}^mjTD;A_ zav4wLQ@hjL_SG)mp?v(0D6{-mLYYNpN%+h*9j4dBWeX#TcbbP*>N?6D-gy|;BkhS| zc8E+qwv70!V3QKMTN!xzc)CD7uheBySoa(*MdY&3`?$e%B*Eku=C>Jm)4tZu%iP3g z?wbPSGLq5zgz0M5$H$Qpb{ufcN<_dAL@6dS1jCC@7L6H0-eD@Qd)=Nu3>zx_{_@tXF+wLi^#n-|x` z4Q?!urGm^D6jtp3pd*R4!x{#d>BApJ40BbGIgDI9%LF3Ro97&Ds~^TvgcW7lR8kN; zQ%Q{>v>eSwtUeu{iRcQivuoQeZ*26U0nQ}O>F#A zbu?yuaKyI$ZoV9-L(RYG`qkDfoESd@ZTNVqz@BI)feYHTq6lV?R5d7sX=0tYZ1g>mN=bdEcRlbNgmHxg6MLdzvCOVcuX)61yZ+5PSCe)0z5)5Ke7 z-jK0`V!I1N<*zkvKQ=^=iSpO%GK=Hk6#O(bhUp__+>!hQ=R1o_y``=Kin@ zc0Av`)Z5oxqMI*>H^*Jc{L4(_PcEvQ4#VLT_cel6{OEJTZu6thO$Na7&U`uhvUdA; zS!UJ0Z|jVq{5~`Kc~z@hQ;kB%;!G?9zlFKn%fcmmU%2@IfhK(X1Dz}BaP0Z-<4t@= zZKP(DcqcC=SlVw`=D?gA>BjR{@aVn&iiAC8L>uNd9U`&$E=-b2HC0?po`TZWROpKG z1{b_JoT?l)IGiXNrpxE62FrqR04-qBe`CWIzHLJE97&$qZn5V*MGcKg0EBr2b6MpDXl7 zJ{a*jmo?{u5ntrLO9i8Jojqjve*QwIF!7x#5)F@C)75R zyrNJ2CbU5zw|Vz55Flu9C*hyr=U`ffxT4>00d?aj2T3=(`S zxBulLdRhZYonGvH=X`bdI`HiB!G^^1&RUYGo54#k{Re?us_!?Kcj<9MYjiXeIxcKIb><^I~BVV+kRvo zA3tY!HXDJ2)>Lh%4TlFh7{Cb|R>BRq$D1 z%l7k4F!mw73J>uqGIToULw6&=`%-)zvS}~#cFVt*o#9<)r=z@87fIdLz16KR^+hj& z`ldsvft&HgQB4Q^&d}`5`UmkkR`C=Bl{qglo7un@v!em_k&`)9^22%_&jVC6HzQ zR9?0W_aLY8-{BQn{@Qizn}#r8$cKyr!=G#=L-zf_!~%O~?e31qpn0R?v-~)g|GL%1 zvHSt^L@ zYkTM2$C%moU?+NL=>`&5D1kPJ_dalu%-e_=vyQBmlot=~K>4Tn`4=7_zt%G}yG=a| z+;J<=VY+c+yu1peS^#Lb%Lq(8W=b>Xsjo~!O8d7cQpFB=`RU;bxde@A`=4-&SsrLGgSAB1>hrMg^>zmZkzKT4XUt}jH^WLK>@-`kR zJ8ij}S68qXd-YbZwj#02yX9t!;$C|;)Cx})bWZI-?{$AJN4*`Ole?#|(w)+5zV*pY z@a<(7>W+WWk>k{n$0?P!K^U)DP|+dRjTc`urBa|?E){SBCH#m~ulBPo3mj7HEpnNn z6Gg*wnJhz7g`%v>D=L)e?$!DEF3rzJnx6}IAduHo;P`t_eb3eJr zLe>`P0km7P7O^VkPOrJVZoEz7boQWl_hu}lfX{67Qrq+wLLP|e1_$1E z&W-isT!!2<5UT@w&+}Z`iKO|#oHOeobh-5kAw;%F!3$$xVD3D zo`vuDF0Oc0RO;Ksreg#Xc)G{O_nrcU#-nzBsFcWeZ(Nn&VyW%jYlp8KuMq3A#8ZeD ze3t!uso_+2dv?2BD0#X)m(?U+djqliS5_XCl>z=u~ zTckXdH*`3$2RxY8d4hc1YLCl&1uWwBRYe_h8-I!95sy zf%5%NFnzmAe^co{$g5|B(&q)!KXK{LDE-HI>4%cuaer(uJ;UX@Tlr#n`L=&RK7q1N zkD;HV*535h(5R1ZxSlsMiH--;S~KS5RMqeM7uz^~ zLjC0pM$#>x44cT;TlwA1KwBwzW-g~f#w4_PwBZ)^$1nyL8$e`+QHRfk-f$x@+*c{Aaa7uQ|mo!BJ z2p*y91ggyHc=)7&-o2e9MIS2rF=91a=83BF#i)@>+qT z3H<|=pX9+J0jvNj;VqupqCEq5c4L9f+x!o|M(>*pR7%^F3=iS5^n<9;;jv1mpF#$a zUC*&zEttYe_lMnnY)|aSh1)6M*qnzMM$p{yp)4*qN-fA2{4@!)b+ z7q07tquX@FpeCYokPn+b+BcyelIC1LVp`x}darA&yBf>KTbIyS^G|d5vAX8H%%(j0 z=|ZYxdQgScA1PhO998lfNnH#i+Rlowvz(zZcW`Tic>|Z_PH2Jp5z6e`bkKnbXAlPk zh7w!rBO|&>_TG^yayv48KO1q$l`Y=D?5n9j{lDoFqTfl-Ol-d-Ok)FHO%hhncpB{O z8JI)#D<*RsQGPR_(nfSju|53)cgO%({E+UH4VGbH;mFpq+K;R{ty_Eud87bM!|I}( zR<&5N{zY$Y^;KD>o3jhoZ52Paj17fUL5=krqM14Z`^D@0&*;nX8q~@MA~46eMvdAM zh#%@Y?GTdl%^I~VTAQ41=x-He{ZRYNp}OF$Zv>$v?b#31&VHtD#F?CA{f*nD%#5Xm zB())M0Mo+zMg59cChI^alzE-{?T|FpscpL8s@R;Jki()&#Mc9WY~Q;uz3)JkAUazK zL$BJEmgEQ7cg-a>pPP!FUJxn$q@x%eQ!$4CKV))*0R8s=10L+nHt>sb?}4<0rh1Je zETF(C*X$B68UGsfIY-M3`lmd87Wtps2m3a#4@Apzo9=@5pv!Z}?Dml`!f!wyzTEe3 z8vPR6{H3cm?hPI{sUSFaQbA@pOCk6Qre(FZNZ?qJ7vh9;>5re;dxnCU{q6cLcNu0iWg>|;bU|}YF3tU3l|AG}KcG7#d?^xE zUL~nkRAi)X@L8`Ze{2g^JbpuM`Wpycyf9%5Kb2T(&zny`v^5z$vOaaoed?}H?8>u|ub%JdW@K5K!&~w7JF^-l{6GHk>R&iD8Nh*iTmJ^AWP$ zIR8t%1)^%=WcMywYplav+Ldy?n6${7@^hUaCoPgk+SY>-lO7Hy4-F+R7-H6nzq5?5 zX5si6(;}M@(Z8)=WbVS?%sI${rI$d>Sc)#uEDvW3Zt*xfw@J7Ggo1Kv?x-F*c+b_L9v>CmaH&@i#Xdj zzly5)Vr;9*ck5yUQAl04>SIIQ1eK_&3+7nS-t^md0P!M!2cZh>R?Q96m#J0-j~n!? z&}`LQT*attMgthh{6)x?HcoUEoTw}bLa8e3$ow>1@^N_%8dO$!2)1!ciN1>ehe1g6 zP(!e#jcK9Sjjh2URR!Z#R`$*Q-Lap<{LbOau-l%aUu1_(%iEqm!@`^OMO%-hMC~&y zP;B|tpW}BOKNCzeX1>SX)qT(M8?Bz})o=iC0lA`oV*wV)Z^hMJbV62SLoz z+%E>94Bn?cpTy-IneXrx;&Kgd(112r?9BI=ZXaK3c9~kiE8y(E$y4HNs{y)jog3%G zHHww2O|{_eAB*r)e{lcN-hh!o$PMgsv@H=y9=uVB$c z1v85Vv5z{FjGc~TG>U4x&(*+(s5F&2ASe{=2w~_Q+ryaoRynA!EU2&SVZIUq-+k>? z7VO4Xt_0@mi@C4e%Yxnc%5}heeLDBGs4U10ac6NAFkgS0``V){*n_WJ@x<3;?rYDo zV9(49-hfW9|99J;PGWYwvkn7G_vH_0sVCO3IduNQ?+u+#-Uwuzc{%9(4=&GfJILdQ zQ2F%>mZ$M$@*F{)jw5#FnZrBTD4YDr_vID`;l#e1o;Iu#sNcpX6vD`58;Jw2e=vZd zraI4_wUXOf;Z95U%x+X^ryQ0H^#|JTUxlSX@GDT}Sa+fK9la~!Rn5hb)ODezaq6xx zL$U(l?}gr293h1cet)6R8~4Ch$QF{T>=K(5tT{SD(ro0trpA=mrGn0l`PO~o_&L4X zdwa9qDRV^s$6TdPiP6m|7&`oW-{R9oK6#f@u{w4$4Jjm4o46v*G%Fb|N6>}x-;6a) zkmP_tsNz_2Vf3pmG}=xO7QW%# zLN!<`DH_^QNg_2Ym8FB^+gO&Sib^Cu(rbCc>SZ|h6zA($b%|hXU@(;<&Kb-uGsZKD`^?nd!G*%C6 zLwo%r^Xdl>I@O;y-*lw{a^Da=GP`bxh&-I-O*hy)cEmU6SQdq@%Pq^HAb*Fyzj%Eb z-|++1-I5?qSY>x4-dZ8AyMr@-eZ0{G7|#<~;hZJ&!41)#$+N&Vo%$~Lr2oi}@y8u= z!99XWKU_oYesAgdMFk9|pT%lu?_bw=4S-`P^YjG8y0!VV_wnCsf4BV$|7Q9Ccrxh& zUWSX)RhYwLdv1#UD7J_2rD6qRdnyRg&5oPB=OGAZp#DKV&fc@oo+VG8z2~>~ywaW@ zwCA-v2h+#%3>y0SBcPahT2)^r{Oi|DXLwx41}Sd{$My`X9bTR28BSb=qe+nys+yL- z$)r2o{}fEyxir=H&4;ObMqb@#xw=>Sa^O8jMY)-bz8pngn%7!8CAB*V*t~*5>fN7P zL3*W2F`ETj7abCK3Q^&xw*v7>hJd(aLJxWPi(b4cKsQLR|tcp|7LwW{ddyA(`3hrKtS-sBek~nC{`e0SwRU+aLLp>={fHqCgq3e;keO&z#Bb!g#%MMB7#R&}J8ZFcb4U z7HO;j!|5kIWHja(>_NPzE;5yBCH(gI3-i&#eBOud%+n8B&-30V`3i@8i7)!kNb(0# z#RcjgWAUnz*AGL9(pH6~$PQZ(%R`1^U{%qm0+4~AA*a&xsvd!KnM~c9leLP!3xAPF>Ud!lhIj`R-a^^D! z*4?CuZoKuA{kR*V$#{eh$%!TSRm6X3kHtLByGz-Uqp5_jKRgF_pM7Cnp#C#`u6ZF` zvkT-PAiU$Rdtst#`J7m46BOSt>r2g-2rl5Ql$*G(jZFR3Jm>b_aj$6ai6Z7%^>F^2 z?DC(i{B?QxKY1BB+uC6IM=rg$(yz=*-=K8#50|<0<_6L`>3@`N({JObK;9%MvG}ze z`(OJ|CFkeWJdKi>Z<3h>%lrUvi?t4&dTgf|i2p^FGBXF-=rdBLxr?qc3a?3>ue?W{ z3G3PE-=u!<>5hK@cw;7Y)n9{RbMa|Vi|#{Y+p1z%O@VBO?yd+GMvweIW zjnmAa#8gsiC8kDo1cI3Of%u@jd5REc%)Mn z>ESHXJLws-hz;v@k%XbUywVqR*GC3+fr`-v_PR`M2yq9NNe^iTr|WjM;0LAta>0T! z|F_Ejt2 z88oZ%=lTruWZD)qqT3iHZwwhxt|?50@YhsZ6n#+D+A%QZ)vHj{S=L_1>QNgDtBbtv z3}}w?!Fd<1KC6%Ur;Nafz}ad`_`!|93|4FBI9Ka3BmBvK92qC=qNr^Qy}YGJXVFUa z4A?4C6n!e2FZRuYaPD^t%FZ-t8a0BU-y3t6R5GqqwDVs9rLhlad2m1+#Q1RDEm-(twd13$-tjG^ zRcw`!jNyistfqN!)ZPrQrb*#SQGjhxHT8fQJdQks5GyA<+tX=zo#lExlBT%PZ@rj)!gVSINqnTeyd%R zpM0lPlmF&w%2iRy&|(0n1C&muw2w=#q;;`TR_v@y8ktAVPUJKMjq8!X*@K4FQ(ZZQ z)zMy*E4OB)aQz%gEVo+t_}o4Oh>sO~`08(-T4W?`LIF0lf32M)gp zDsb!W1?D6bIMNDCaW!PAfPbwujdFfly^5p)-q}6V?8#5LvSpKPOSuZA zmhA7~D*7U#8yCg*6R@WV&J|uoo)LxlUAKiw->iRlt6pD%Z=RQC0VyRiAk+81rstIc z6^+EP6tXcxSGrOkwoX>OORy;N@JxP8kUQ6aJy~VnIKI5XDjUZX;n4n3Vj;y`n+f;p z!=^~ZP-QBAX*Mw!Qeg>%(+?L_t*C;?C}Os_m>R{DUhZ9dvoVMs_}R|XlB>7Wc*TZi zKdYXw**Z;*Y^+Vgtqu36jm)1syFj`DJ00(XBb`-G0U3(I4-2%9ud;~YGxn4*k|ysU zZ@c_=NNdrB;B?tb|Bd$R89-;89 zdF0P7If`f-6Ahz{OXUb^U_eVR!q=#jE?@H`QEa(IZYgOD7c(@a4cJ4*C8LrL(R((i z_t(&(2}bciaNemRFBNg0IWX5o@UX7Ky*unSErQ_DX${I{5K=^Z1CP^T~?_qL-IXJ zH0t3Nn-S2A9+qCITVduAO@%h1p^7zufF%7veE%*h1MS=;vf@e+)Xe7YPlI1i#E5YGZ{96_o7?aIX$VoquwM@En~Hj}@dL^8;5`e!ak zBE)tS5NK32q>6MaD@x9oK_$l#@U2yL?fXLou$95*hs{t^f2_6!wNG)y}uiGb*LxL zf0190$&N@T53UxXY35cew8VE4wE+D>>vO7&KlE^p4p}zr3Z;HmxKEm9X`r$n73cG6 zw%$UhJkeTVG!q(j3#|xQE3Tmxdh6C&5!+j>z=>Ph+eWGJCuQf^xghQ69&!)(V7BJp z^J#sN)%i5@+YvuAt9(h~SNW~!VCXkLvtW0E6A0RsId|Xx0=!*|eop(l(GP=D{MrU0WIWKu{2VU4X@n&Ogd)#st`zyWj+ARkh9WiwW$8%x_a;`Cx1GH&6IFcR)Z)|epKpUos215~JnH*t_VWv5X%nU`apYokP z7yV5FuBD1VZ-k}=vYeU14W90yVFNNtuj9D`@V_Kb{!s^#d%o`8@?2wN!0Gd;{s4Hq z{fz(nZQ%Y0^lWlb&6~ap_e2Bc&(b_frY?!2zT#G(a}KWoKtBH`fBXbkQHUWe)E7g6m%mVZNZ>kHanD zf^4&Q%Hum(kk-e_NRwU}b~@sF_|99*SAF|4k}OQYcq1xqHSF$wBU2D#yizJt(VWnf zi8Y#|?v*_>_!nwjdY!j+8Kz~_hsLyqs0C@=Q@l-z#z|@Gci*RLs_bI|)C||3^4auf zDurWm;>3BFo^za7ZQOJV^rW>8B9lJBd##VSYRO2SFDOn8oIsa-=AYxrpN}lOjjsCz zVSLrzdHCg_FeWkPiQxQ4#rI3k30CX+9RslaA8iJ#cD^=_>tj;rB=oa|k%=kZ5v#XD zixbnmUl9-vZvP8jz4lf6@qqyQQOl_77D%x=G%PRulwc-Ct0F!OmF4I#+Nqu_eDb10 z?}l*)>Q;WL?A6O)ZI!jCNI189{TS^kn5&DcIcGrg;sZW2kN{VtSfApWrS zIu2(}d2+R7Dgb9lcMW`mA}?v|bC#M&l>+CJ-m2`>{b^Mv#|IZ%wzS1MbL9@fA$($m zS;|SNfs@PAwO-$TSn+|hQ43O1Lq|D!f+3)~Es8v=78LjXYFvt<(8UBq&~wx;+3@vVS^6H+T8N+S{e@VG3x9MNsPgvZmSUWv=%tInQ(3JZyf--k5JO^&%`I5#3eAIcb{aO8c z*paJIwfA?Tn5EN^-Q5_;v$;WyjiH_1n{QfUjW04`?BOh*tZkQvea}Z+UFYZGZRCu0 zenVzG?#^1TJDxN?f1~*PIJGz0`AsF?Ocy!P9O04=Q}RHUJW5w4o}|4bcbR6TH$6jg zFYB#6?QC~Gm{GPSdPlEztYRwDz+WffhE+CQ7LirYL3#%}VfM1*JcFi*b&ypfUl=V! z+2SlweZVK=x>n*Q~sKczq+;19|m)V$}{O0W@?er?&u^ilJ zcaKs_Ie8m?&oqUWT2e7d)>tzv+UlL=xAZwuWiP^*m$ft#zgUF`1{hP^cam$|od%_} zS`vok!`BEMK4PA$WK<&go*L1BIt);9ynm1ba8@FR8B^P~Xsg%%0GE19BGthS-0I-& zXYuwD1zqC^N%D#uOjmgaJs>%JP!$(XuS47FJup_^6RV?R_OAV^o!9wpeYTVwHYU@% zh$Ca67nw;=_%57Ozxgi^0U~GZKg zlhYv>$K@~u z{2}K@Tz@)x7IwqZSI@#4_^m`7kmki`^AINXp0(rmz zsRAZIW(qd{C4h8J2BMQ?wIsbQkiibfEJ^~TN)Y%@Kn_+nxR~eObyMLJ0204~N9$*k zkuoZ(|5}%6f(TT`{3|3b_1T`DGAgS7T9=W|S7oHKO{%AcjFhQX0sd=UM(-1-j7(?a zW#Y?A#Fi6^)>uKHXzo762kTzr8QdtmzR*3CP#h`cj1zawxIxfe#1ePg5b;an)#T;i zIj=R;!ty%3D?0AVvm-}u(CYmaFlgJBl4l)^(kiw{-nM&n?GTu$CHG3<=keWmx0Cbq zy-eQ^x^Lxg@bkyC3-ILw?^z;!(T>h6j(29Et$q6P?pBVLw;2hp_H+3MlDgk5@*F`% zQ~XHY(!I#RRv`mzo^Wk`DPNxQNiP-8cU&T$JQgSNbyvQuql`o2)#Hs1%D8i@A_BmFsItSP}52LmV>EEOY4g`($& zoJ~{njU3VZ?l?_rcXPF6`ux@>(Y{F}N-jM^m^8^`rY=I(yKr$rj%$2dV0k{Q#jRmw zwubd5KbKB4l3?{{ovX;trS>J|%5I%Y7gN-(&-hKsmD@U(CbV*i3nk^sQ?A4f-{H)v z^Wv#eTs?sWbtro4h2D*qBfR>Tdh73&MGbu3=<@}>93z4p>`8TkHu22(ZBNTmz3|gL_TQ^6ZLjiKKam& z&y&3q`5sEnw{bf8ZcfU#iU>#l+Ab#GH7MUvN%>w#*`+bMoqo_Xz-DXu4!wH<9Uq)6*_8`f|BfkCAr?PJPAn}^>&hx#k z8#yy&UR)#7MAMkh_cl$IlvHv$Lz|)Z)7QE08&-QvCLz7G)ze7H(_tdd{EO$mdS zCGNA5eSo(i%bKfc=UvCFv`gkKOs(Z~*njV#&E5SA{pMZhn#XI)^Syzt`fS&{&%Av1 zovA89t~p(0%Mou<{Qji1XK+$`K4IIWj4f>l8X~g2 z3thx-iO3)#*X!>heoaJoBJ#WwU4-bvJ9(uBr}SW7FQM@m{OgwS_=M?8-#PS(qbhh= z()%~o|2E^%fJ=Ij%g`yIfn|vf+pxSc(WoYeRzNkMc~80TL)DOft}rUuul2C_e4hdX zyw~t^30$L-eqt+a#)bL0r}pIf?YXc#G%zoTMzUSyM+2Lo`pnC8-v_BNS*|e|ts8^9 zs&<@|)Q*?fkF{;bZuBAIu=h#d_gzldsY45W+$UQE5yDc?m4r2x9nK%TJ8pAi@)uGI zqmvDD@T<;(k zkt;l9G``{JD?UCL zPCC=)#--p-U6)fTX09okP9$6u87h;sq}8*Eu4?_6rY`&9rX5Ln_x&z@9ObMmovDxW zp3&m)qOf;;$#I3lN}->H-Z~f!v^2VK7*93fBMGIEyBBZI@CJE|M1hR*vmhC{ksl_n zPR{fT29WT7rgdZ+wa3OKts@(VNUUe)kXWr#h60(La4lJi73iAx56~ArlfmhKv$W9 zR+N*md~Is!4ZhvHoN~o30QWv$li<%TGb5$+CHjI*ba-5Pv4pX4$e2fZQRF5hLeBK=R&yhh5&W7k_NX&uo%Y4#o9aYh{9r+HO;YhUHhEyK6QWt#H+A)fDaZ-V7x zTy$oYguR43WAwg75{>cSH~mxJ?vOYLgZIde0u&91vfpbg(LYv=3#uf}r?#sA9jwI7-%YUVnTVdXq)%5}N1{%+Fw@_6J{VKq>p zOXfZjD_Sc`f%*j^NOAn~?bxhUo}isXT1qZaggB=H0>8Gdi%{!rITdb2DTc z%g>_uIZGQi#pRd5h2dsB`Dp%zip}4U?iWC>uq}iE_GVm_E~uu_+{4@$ znEEcnQPg`=VCr2qB-k&N(@E|TiPU9P%999S+z+wry+&Md@6Q5LWi49Vdvjo_?A0{1 z`#S%`;&MxmmU=I)ZF8cE1Pe^y%;vsXSB4xn0--hT_^c?*#gkRu2Q;AZaE({6`b|L3 zy@MKawxFS5rTY4wxIO4=kFnc^cw3)gy7hsj$y;^l&gT4R-rhkh^LbD@wm&`g=T)$J z1#p4(Fwo|zowy&!pJ(wdmeN_>7|`p82IO&`f+^Q8WH zHOPdq?p7!L@YRzis6H)>@%pwuD!c7CzfbsWx%FQ1CEx2?Ny60CfCK`g_0`aYQ7#ol%GE=F6MMmfT$4 z%%zkE?JF-((G&HMAODShs*j-8q5q^vICEnw7 zS_ms?{SrlDTy)>0uzY7$DV|QRURE5Aq4v+07qu-iXI|36sG3*jEaG~JuFjazK(zBY z_!#6O_}yu|^BSmlh+pOA|mx-BetPR;YaeZw|QLDc<{ zMqAcXdYTuw{pYlUM*ib@8aa&qqe#E*M$_>R#EjV6dbn&1$^?mLLs@x>!5);x>2;Cr zU`Fz?X=xR0FS%Cxd6*m*)^T|-GPQZ}<-rSyzgj{qZ8%gbbRMAH9&d)YvZeoeEe*s)g!Crg~%9_+E5b z<2~kJFE)%EFVd5g*hPeb)$Yiw^Nca{P|Hx97Ir=?TCf%SMbywKu_IM5O`%Le-t{ZD zCoj>+qsCI;5})Q{KA#^RWMW|Ge%i9o={OrB=^t8OF2N*DU{u`Mw5LmIACsn;Yp zC}@9;7f3Q0Cj{D$^$NH>?S}5og*iZg1;3wzaz(6JQlj?{5oA^mHcW{1y zpS(G$4Yiy=BmU?3$s-GY3O~7=qvtq3Igkc(D<|!K_{n33{?GA~eQw*GpY$K}6Zpwt zY;6A}KPkAL9wzgXzyIaO`N=`JJ5Cb$6Z>1)cZxq?KFa~47(}3AwV1uOfQVPfFMKio zL*X}y!wV3yyfqCr2K(71uiTb($?l_y39PQ;DH5bFEM#~lVd@&KD!s2pUi=3kZ!bJh zIU%d$6?@0j)C`w$Kqm<(ze1_2C|vF3Dy%mz_?i`{SfXZ0bZQ`gXx1)J@wB4wQ}4ZU zvm`e>J1BjY#p+HaX0KblyT<^=%E3>HBR9b+3aSf-osA)Bx6rULeCB!&-sTKRb(&io zz2-uxAFl0>$A-uql3Dl!dX;w{QIyt-!`4rEBX?OkjuCJk!KrQre8|rGRr5{FraL*G zxEh){8>?1t9Cp4cy_V8WzP!(c=*~@qg4MENVo}`dcMNf|fVSwtb}jZ^IW=Wm`zqZR zTxlEq7CxhGp|h`dFdkBU#Mpa$1GS>u0*Z);_2)zPjkZ%6)%-b3HOX?>l~iMEkn!1I z^**jS@=Y8!zfv2W0C1Aa@>^v=eobWA@n^D}2oxtzw_2~`0xI`zdAZka zFlc{VSblQ`#vt!Fy;EU?XVc%qB`4D|vCCOOHk06Rj9{y?d3~`h`kp1U@*QJKPm$PJ z(u*gTU0c0tXlt^}cn)nvx4rukoyVkm2l27WJ9WHU_?NkbwYVx2=HZ0WhLNc}j%uDs znbypp3Zx~itQeYHRC=aX|Fx8Cd?;8w%T<1zDo>`zrGElZlb{WwN3R{8J))t#@#qli zX_1azkTqr@nDSs{)Jdt5Pg%>Wys@?NR(JJtuF~-Qk_#Eu2E~L<8B|kxm^o6>4m3|w z*X|AundR*~SjKKcW+7hm2v*C(j_>nGc<8)fxW5&X?CWLILgiI&y3!k&T35Vn^n*{F zy@-iPU**kwZ#$iE?TziDp>HFvv6c0G&6j^MKms4NpJrD>bA#1SAtqAwSyVmu4@rdd z%>A}+V?Q{cWk1+*ZbX~P+;e0fdv~C?_YG3tD&k_6Q~$aNSQH&q#pO(-`K{hx&gS~C z*QHMr)r^NO7Q3n!U)`qalc-vXg@4SEb>0SVFz}sn344=%>5&2Hl}jhV`BJuU(+5Ym zXQZ=>JCkDGhI4FkR-8#<`NWxAe9!ZXb@p302Q58Tx-vbVN9PD;rnntA57B8v zboUhxFg*)u__x^G?^Twvh2eq+yi3MOb#8Z5Dx&1%HTRmLXu$)8kX*QSZYI#!s=cNS zqBj|JA`aES8UuI=&lf8f{`Xqv>c|Nm>HDc$D}WyB4cIt+1gpQMcrwRuN`RuPkYirM z(OzSN=|Y2kuC@hEMw??mx`veF#;fDOg4y0hiSR71I1#S$f{E}-KIrt7%%v_?CZ_T5@Q3S*_Q-d|O)S{!`X9 z2XtFMDqL0k(}ptNjBCUk+gXcCE z)HRo{T`-g2Xcxq=yW%M7BCjsLgj^5{@e27X#F?l`K_Tbg%ggB}X~f;OP`&=HyUJz* zOyKKhk$(}c5N{WLOu2kIp=Q-SHuTA#XUG`^{ z^tQ|1gY2-?{r;i2k$(1B%8n9))eS)=CL#Nf^Be_;R@E(f*_}07&po?m<-9&zU4S=@ zRtj;lqV>MJ(dxfz6P@x)W#WQ1yiw>7W_UBeyLTc}BzkBs>d8?b!mfi2b_4jHG61M?Duz-*TtX`tc=(qq?)^j08GjYbdEXWpoXYve4H67zpZu~Zc9qO zY7B;=o!@#0?pR`Mq1WTLnMUB`$*iO^x|osi(@IA7u6gx4m)uXu<4KP8Z4Rq~(!G&2 z^27Zzys`q+QN34}V0-(rmFau|Wo)gEJt{MYXy+jU__PDq+W|aN01tQdou=fcT=Fkn z@{UO)cOcnbNNo0Qo#$kkezId{Q~lCQ?ptpp+H%E-NEu5Og6wpbtv4IoTKnEOu32#) zfg_=2@3C*0jP7<#KE*Wk^WW1*a`AGV;&>rO&){Df?8l1o6F*)N-fY(F8_ zyV@n>l8{S6uAh+S6}f~wOl`F}AU%)tJf-XW<(Cpadnk|DE&hs-Vs0Oa(B`)A{w3$a zg|-h=Ip5|uQ9OnPo-4kJkc#(r#b=V4;`*Vue)J#3tN2M2e~8L!|P*%pttf9emli@&p#ysQV4hue>eiTE&@`(9Kp7|KV z=RZCYQrRPt%08*Gk@j^b_Dh+25Dl^svpr6q@#PG2B;DJ#@3+m3e{uSeqDY_n$%=pa zxd+5^gUV8}dW*@Ylgmp@*sUO0v$M~&FaaH^e@v;C{WtVK zNYU)!gKik*#0tNdgL7vN&!1~{re7|=2TF(!B=tc17 z8RiC2?|CIB1gqDGz4K1s1&m~}=4M8CkD43gB^{CP;Ef)%M+N9`+_?^Z&1eTE-O1Xc zwM02JPXimq+1|NVq3U6=hCtc(l~hUNgGh%}lunrDjl}z?+$F5?X2zUsSNd}~pKbEC zQP9)_lA9tN={vWHCFD)=oH#zzyP%=ubT+`QPZtlOPx-VVu3W2~#s=xBxc*RLMN^-I zPUw6?S03=eO?Xv7_&ZZR;iqA(SN$Js=I6(5Bn$m#4Sa!e&hbFw@4W5v(2ytW)ncD` zt#;I=9&fpSv*J~MU)6H|=Dd>K@85KzsrKdw{x@o3BQ~m#qt8L%jb-b1_`7r8jF@+} z{M~uF?R82z@qif236@Fsodw@}S4z?COcWl~z;JJs9~8q)HF2hwz61{10si1={*{0{STCC@I5qUd5HeTctDrON}W`Bp8dCI8X5${$zWW9!v$mu-l; z1ewQNW{PE_Ad0p>jL#wS+xqX!slj;W-Wtvz9Dd0dLEuV!@18%|I+^`nP3!MLFYZGh z<_Z_oeSRqF-dyorXhrA94;sr<4>Al7jBY=qCyz!)+P{7DF)0howSO6I(?n>LkNZSZ zz5?Y77p%@fy<{HN6q%>Ug#`_M-fW5~x;N3}k_t%!O2l$^)x=*!3sdw_ZDfA@h zHNDk}$*Hu*T(P~n%=)k@6kt+TY6&4h))_8hnTyCwM67lZJrWV-wJBo$+*}d)t^!7G zBF8otp_aNFDGEjGm3J4BPJ}mN7_?hGZ^DVUeA<2bYoQY=t?s!!PrbL-*)z*O4V^H< zTGw%L=@FsoHQSC$`~CLFQK7lLf~i*>5dBRf1*|D2%&;bQT+9vS=o~8&-S5eX;_`j2 zW-0TkYM`4o_WPmgIfp;|`FR!nM}_7tc;>+&XN6J}VCsP`YC>QgfByrk6I zc3WufsLhLR+|(yrL^d^_=2^EoF1CqN@?hhXB#oQswa0Ly*MAlmy-L}}bK=h;Z9qQm zZTcx+Xpp@_j^#B!CM--rw*>HCNs+ml$BZ9@Bl|ofhAss&c{X+y|El@d!0WKm;1HbV zy>y4Yu6jIZRvb>r^kYEm+^b10(W5hDnFW?aQ<{1+?vkf-^eWe1E+&q)KkU2OzulesS~d3cyY*lpwKiaePcuU!}1)5=zxHF$59jAZ~U!BKWX`TAEH4Jip>O{ zPy!V>L^jUw9)F1iCeEMQ@*AV6BztM0lg-!0HB0APQlLx!eExOiUl#v<%fA7d_wOAJ zSLm|${Fe8DWb*+vh=zQlW&HLqjL-3}f`9k&?{EBLct^LNLGgtJWvT{NqcXA~tk}h{ zhQi5KCt6D#r~rPFu@o_94)58QDt%RCq1?<_-XxYN8#M7wq% zDK~Jt&dy%UQv-U|mh7iTsY?PmHQ`!ZP%KFMSxWD1V>cOxmT=L?j1hzvbFIPOgd3P$ z<=>?T%Jq&y`I@vqWeVURqsr+-1Osme1MldSXnf!{>GwkeH9T7Ph8D&6O^R2 z0sQ*h&=4tLvRqlmzc&I6W;{PUaD6RWz_cu{;4-Eq-bsqWt6Lqc6Sy;5XOt%KW~MZ?29t6=A+iTP5#F0J$u*=$_`as$t2=S?fU)9l&L()SDb8M}s? zL*P^O30@o-^sEh3{2Y+6uS~0l{NdV4Q+KMVv2Ww?k?e5koss;Eo#tm)MzY?`Y+n-f z8*#*L|6a?z$uVlnA0ebc(X{ui*LKhn{?Pp89h7t{jDeD36%#C!S?&6F4fpR_zBDCN z8#_4l_3&UKFXiyjJq3-=rC;#wVYg66j!~H#x9hc!>O8=QqL==%CZs26I(2{#QZE^x z?Ky;ILE3g$4h!rac)r`T{gKxKffojL04D?Y-ev9e=ZRd*AjCI#FVla~b*OyD>Dmlm zsy^s(oGjeN7dH?(BSU{O^(TA$aWTzZ$?fDHAJV*Lj+?4#gEt0P-2EtDcRHTNxi3?M zoL2cs=|M74HRjcdlpX&JhF5WPT@b!4>rzVYNFRHdEc^Eb%9)H!`Jn)U<6Ik~LoUe;@ z&okEDC8hVq1ncI$+bZuEWCIE4XqE;OJD{*uz6IR8UIxmTSz)KGG-?`yi*v|+)(52r&5IA?3_#;v;$d0rV zQ%=i@^h*PY6xK-mqcJXa@B4@(hn9gmfg&+wWEX+^!StG;T^Xq8Z z&m0v8rk(+Pv{157#G7Kr8TpA{834*N$KY4{6Ys75s~A&LOm z4rXQVfBiv}LO#%1zla!8^{hjl&HW!O|D-FQ*;4-TwdeEGRR{V>A5?ao8qjewz?0YQ2Lwp^m1R9Ksp36FMeYE`*MR zwDHC1k~Uxth#9iZFQ2&lpg`p#@XtuWGUScv95*<+y^}cPjhT`+X8z~pjayYA5O$Y0 z2B~_<8#@TZ<&FIC#sF9QZkR7YLSn$;IAxl+vDiBbcx}avnZCF&#s-0XfW(dJgt#Fv z32|c?d48g}5h-GeiB4L1|J<{c4ZUE|?HP?@O|92=U*4FByunjNh#U7C z__z=^^+_?opD1ojceS<^H*R)J(XBr}Mcz19YsIthM%IdM(+17dLh(2I^w(C_iF-|e z*rUABM%37@lCa%DGhxMIyl~d5yaHRlQh zCA_U5XHj`GYlW=1$~Q3SE&#YDoldD)9|EikZ!u36X+fw*=B|wcmXu%PJ$Fi~@xr+J zg{?Jn%(lFmYlu78xjaH`!SW5<0Ll{DY8xR0-6o6}dNpyj1QE4S-xT)`=SW|YiFFC<&BwQ4C@ON}5$#h!@7sWEX zBfYe9q*6N)7j+QETd#^)c;BDPB%V?yI%%25GCk2u_D4$-dKDAepU+&9pE#}Ud`2LV zRO06I*zWPUyr8@$y*QF~lIyy7mt?pPi)l{QlDhP1AhttBHlIytk8;eYJdEileZe__Uo%@z_25 zX)~YYswEiNUwh#QLX-(oo2k|d{+aoFJ%3uw=T}X=6YcYB9Y>f(aR_R5o~rz!hZooh zbF2R7!f(4QJovIBLMId~3(cLp{{62XS~vBM&$|<><_;h{QViFWbi_B zFMD(8@ONHpSU`r=WU$4YE89-*#rBWKrS^Mtq$xG-;y}T>g~uITYC^7!J)bM;|JVDO z9zU?3$!ga>6HAPw{Y+M5@QD8}_A_6wKS|!tNWtXxGd=$8{Y(|G{`32p5kIh>>G40b zpXu>$?Ps3Dg}_h8+yCr-X4|a>j`K$nfj)BWGkr&PF=Xmi>EVBDU;3*s_oB zVKN!}^)LolpB6@c>vXPnY=UpbH`Q2DN{T{+(pIBZA{2py2*ustRoYe$^=>%cVR>Oc z#N&ki`e=-1soyYrb|+A-4aAp6{- zR%-b4xq0;4=_)>KrK{+ctY%h^(Vpdp3*Pi@!EhAQZe-sEj0Swog=8AuVhf_SD4neB zgPt;5(7|+@&q*ec>Vj>5YPHizCJ=>)cHaCb>Qo24i1Hr!1G33t{?Y>6a}dn>Lyr?H^6kqr+!3JqJ2XPuIAnXP@bDk}Q4W zC+K;GdMl3G6G8sp=y`nV!a1N%Sov8<;C1OHcePS*mf4U+f13X1SmaMPeo~Dm^gq(` zv{C(}5#@b4o$)I}{}bDBEIn-5FiMd!^JjJl{ZVH-5>m{4iV5Gbm=?vAJ)FOdZvT7Y zQ3Yix{0A4#mJ}cblG_g`WtxNcPz$`_F%(Zw*nxi#-3-C zUA;ZY_#^>yZ1Ot-`QfVN5Jvfk4UGm~PnC=o?}Sqalu0<`p_WDR@~;@!7^2*v9K}<_@hX``G=RMj3*`r>s*Z z<5nXNi>9Z9Gk=rZ4miFs~3)$hd&|}Cy{g2pL zC`zwT;B`y^Fn_<{b^WQ42Fhwde^KKdqiVS4!Bxph)lb$C5A;Ud$-6$V_H*_OmV{HI zBqN4?*r?k;y0lEbdc=YB>p|sa1L1jnZBx8jm`mI>*G(z*jVKfRuA@{$&9OJ7ygyzh zUbVV>_2fW>`~npAtSe6aj2l$3U-D(;3@P!FJr@Tm+EH=rBa+>|s(LiFEwH!Z7{N;I zKI6F^Rvk8{K0^rxE;<2YTuOlGh4~o?p3j)-M6DBA68DsG>;Y>)o{c~)+3kG%bRvTb z7#23RClH2xqVZ4J75fbz{&@h&TWU$aMCmo8=cn(Ao!yd-9b1QKUH2A6#;#?H>)Ye7 zNAA>Nc(~KvF#o+ow-q508yCmV?}CvI_*O`xC3Y%@TYp@cp?}HOZLTfW=tuCv5&M>{ zZqW6RW2bbtG`*v(bRsgvMUEvB(}+)oVNdj!dKm3>({F7%n|&VJ*-zGOPTpX<^{i0m zZ|)M^lrKCAY3|pyH;(Xey3Kc)dMNfK#fA%NU;!dHMO71(#2{XDpP7~lZ*)%@8b=ro z%^OG9$zYoCNLbo4F$S|RXkiTECyp`fMHwg{kBIQcMJT&Cuq~HAW1ll@C*3&15(35< z^ujFO2(a+3TTpSZ3YN+DeK95@qkehJgSwcL?=c)rgAbah!g;Ez-&9`KoXfSXUgeNe<~ zEsDZAW&bf2FxxwlTFe8|KWTDM@1j=<%?OFyjDAqvaIfYu#|y(IF8cl;BhHFP(IzPF zRWg>W8dS?_;$gdz%ZN))#7QVjD>;+6j6__fiIFD~*F6!}!(_?Bh!Yt&c-h45U9vB6 zK9ix|+ys*;Kh2noh;KL7e~!;2PA&HKPQ2Ld#9%O$@|dM}N*tnN9iUU@kIz4B@TKES z3BH=Azc1^rPkeq62*8f^9R8!Xro%K61n`RlFA4SB5$%M`=`#}Nan(j~Js^#bNQt+g zow1S41WgKSw=3omj?Z_Jjg545Y$Tk&&#qXyHMs&PG!QSWH$am8@u#C?zranEN{>ePWGv6Uiufl3yKHbr>GNIogC@63X^gQodCTFh~| zg2(;OAz1cTU!#)I&aV`aI-D@pp9d&j@Y%#FX%m3 zJ=j4Sr+il@L3-Wg)3ayfYu&LM)-m>nkplDa>96`02j?ikQS0I@n(E+uXT;hD&ZAtI ziG56p8}B{Im(MmIO`-M=?A1!Xd`hvc<;y3CN|G<1be~!e+RB&R#jbygj! z5CHxvqAUEiibM$5Dl(FQFJD3wpY!#vC!`7f6*f6HmpfdCm<;%CQYLt9=66O4r;op)k6YTwOxqFl$(YNnGejH4#artqg z=5s=RbY3U&!Lx+wxI`%VQTG1kXX@XRAN8vGzau}sY~s2Ax`kz1AU4At03*2TXfAu{Iup8^B*>bzK&!|EM$hsxG69w7; zOA;2}4yAs>dva_Vu^Gf4CPsrbY#LKR02WA#$FgZGQ!!sy zG-IBjIQ^vGh7c_N(1+!ia%Tqln8_6~-$o~9@`G;uLPp{IeRstg2*>&N59`0E9}QTi z<9+$%9xDXTODjFgl>B3vK!Pr3x5EjWIbpY5v5N^O@ei=$>)nRTk88^Ibpk;iAmdTp zT-3o7hM3MC3^DnekZ{m#D0XMQ(pbTzYup99)uXtYwg7WY_#(< z`Ota?WI&QdhZ~e$X8NVa0$yoocK!20;r@9MQ}u+( zmvBh^c^_VG3xx-pL{~{|FP8DAIGWZ0YuduzZw97{&z~K=EwijBnzb(;PTl&y&|r`? zKBil|yUs~P(rBI>xcy6_5yXnaJNgL$f6m$FoIb-roud^#O&B)ZJNC-tb6r%0atrS^~hWp8n3FfNKIIid0`KfCdYcm7f z6nZ4ze+R3)&N=Fl3}cSgeSS%wQh47ZWTwBGms@JtpvauwdRRxG<=GIQYNgiooagBPhw=S4NQO7(PPo+d`?ep`Ht{8Epp! zVyC)VgVWp;IwrYRHuIuYcH{j900fIa{@9}okq*IdiXWA}Gqx2XPtqUS)cM~+Z-*5B zC+O|-qW`z(?PS{f-%f7@AN((+H`CX&UT=|3W6a*4vfj!IV#|8F(dN&;wcfsRroZ0i zQ={%8YBBwZ>+MfmSLdo#|E23{I*o3$ zdiqN8dYU1ZSjOR_y>=dKP}&PhHBjRG)i`}@0lQwePW-RpcgNAJe|vr1j@IG-rS?(1FVB=xjrgU$R>bRG?);%hVSw z6GzGN6C4_Les`W{bk;0s$~Z2gd^_6sQ}w~cpzubs=2;R8)vn>q=&$4S-}?RVTK9Hz z`G(ZiPj}M@V3e=f71}55Z4(@i2d;GEw|!-5j~QPd%^}m6?s^6UhXhXbJx2mFs*bp7 zeJFYDo=Ge1`o+X1Y1c1tpHi#(`Vgr`ysJ>z6@|BRW*`R~7w{D+sMC2HRdCxpQc%Nr zm}x_`1#`QvWnj^*2GKc6vQ5~p4UJA6A6G(efX%ZNbLUSSLVe63)O_O%GN$!ru^3>T zfa3XJS6G#z)<^$r%sk@miE@w?o*|w_?O^^dw))I4&7&oaa7k=GB-){&NKuAI@uT5H+b7|%;6`v!RKVsHk(J=qKJ)?TNGI-7HAj1czi+F zl-Wqhs|ibw$cY;yzmQs}XCV@|1?&pjwrHol5_c zE}s-V*6t8HcC}Tlj-M3jn71L6IxoIs4@`YaBeVOiJvPU{3DJsK7-6D|D&PSp}iR;T(cDGeG<78Idz73n3z2YgY%wOa0ktMuaLRtzJ12hiaydD*E|9)N_r2jF#2*9mNY5eyU){+nvyzm zZWGB%*HY4+9^#-~9oFsZ_TD65$+c02mv-g$=Hf_677wUwDLFvr4&PiMw?~t@docov zIG4;qQ6ay+T0VXstSCBZfIDDC5q7?=44^G@0(*YsX(`PT+A*H=#;AaK!9YGMt!%Dvp?TB?E~`DCCGqE9py2LM=y3 zd!8IhQqB?6p@auf`epm-It~@T-@Bv}F}Z$BZfgZzLdoIi(|BA1t(D*}-Vqo4zp}|Z z-1HA?3HyB1F|Dyff7*^DFx3`?J@Acu1DV&d`>K#)J0=@`JCD=8p}#T2UlJAHH?S-u z_6>UxmVPFoe{(&HZxDPP+!5r8NBKIqMQ~vF&NKa5_|EXI#&>4+g73UOpFKmue~YsR zh#LdQzqxs*;U)6Os7zjH@1a|;oY+(o-<|gdXB9;zX7fGU=BXYdq!XnFgz(*&v?#T} zhxT)}a2rSTJA2+{8rJLn-%POR%I0=> zMq1KX+;f>c9;-Lr%Z;!RIp(p7f`dcR{bJ-2LYhlwH{_A^dA$6oEbx4DE4M0_L1yxqd0tq_Q;LY7^fEMBgRo`=^?WUhc1fiX$G0vcpC)r&WMV@j8OM@i) zc=x)LyPY22D|JAo;!rb_%@>r@|Go#>1a_TwDH(8gbERJDN$$pIRWW^<;= z+b+^~MhpjxQBfo+G|)Do$9uI%ZaQ93RJhV&UOq4_<-&-CFOL0;_$1w(-Pg^jd9jcl zX~lT8OkLA`^rC2=O>D6>>WF=LxDv!CN%(UON||O8NS^Y=h`n{0taAFc=4N@2iMC(e znK2JH^HRv;0K$v%ao}o89Rb;CdUxNw!;ZC=@WItIm18TA$3i?eQ&Hhq(B48Z=@9QG zeFo43@6UM63{_wGhu|&0S#bL+a+N`W(A*2os10uZ#RujzLlMsTOZ{cPzbEgT46eas zU;g~y$CeH_nF1Fo{e&3zk@v;20H4wDZg}%jyz;Bv__X-r%K5x+l1nmRUr#Oa$2Ed^-uSSuKZv$}u~R=ow~xCPbd6~* zEPQUm03L<8ik)d-uD`3R@&!Jy6gG4@8QOJXLouBg`wt;1)b63+@(UiFmq66Hk5wIV z-Obm(CGR3Fh#LLq;-&kJK44C0Znrs0-hH9NGl%bvs9%AottZA2HB5EfFu@$0RJ;q9 z#UcIiVkE!x&yQGP8&~Ze$yfA9%j= zGMJ1vHS>G%rc6yD?T1+c`p}!X*;c2|71jLVXse`lA7*w zZIkf{^Kd9Kb-ZX-h67shIxV1d(iO1E5oAif1vW#am>yhjR?}K8gC$)AtK@A7O%Wcv za9Onp_HyPpM}D6X>kWLteSE|RlQ$1Xu`mAIn!4Y2g<4E|9d@Q#wAGvYpiT3NgVb02 zACelZb_4wx=|$o1=H^k*`}t>1Sl`T9Dg7TtK1)D^429qJo_$q|W9K5G8No`~CnS-} zw`?L**$PAz4e&omj@QB)KB~yo^7l_&hToHc)=bpqL)BA@Y+{P3Md0Or`PED#t*zd+ z?(!(~VwPoVg160eDWYYXGz4oxZ{Q3!G>bq4GvVrkY$klQqc4z^52~#Z)n32eV5J+Z z=1s84UXTCE7T;&K_f7GNNrsef@2~Cv=Ma_(tgo; z;2fC*XI4)KCq-~_9USU=sBOLhe!gWdlP|;NOX9cQ>RwcRZ=(DaD&Hrmo-uy;nJT}S zCc+?Z%MpscqT5$Osb29ohw5iYjm_0`ite`$-4rhfzvG=&V#$@qYY~mKZ(c_YU6N{e z8)!n^iK^iSVE7#AH*1YdR^nXG?Fq=$j@Sa|yEu8~TiU{u$#Aqts%#W*XWF}t8YaB7*7z)l7Ez2>p%e#t)0Eoe*<09g2LEm-KBgoQpn7P4Og3nN^n z_moLoBu-_Y$Ofr21h$Bx%*ke68$_57BVF_nUacQ$%2K=Ho3aWtEv|qVH16<`3*+Cfw7!?HJXj2?>Dl~>O`gH8B)s@ohN4la6yp=UPlr=@xT|Mn z8FBn5X+fo&FCFP!pTdBe-^h|fpbAqKMly^mK@i>wt{{tl${PSfdF&cSY5$~Asze*5 zQM&rY%`{|#_xk$l6a!2f5!NcYGfz^u3mQB$C5= zZ^L&!K7UVy@cBVJVh9n!XFU<%Q$T(P5H+>$xeg~M^DCSj&#zl;Bkjkp?wcU2&yRIY zex`b}ntGON@p{Ze`C8$Ay3yj;+f3r=*y^M+A7|5YLyGstzRq#5_S2#2F;`S=xZ~D; zmW1YBQ&zuo%n_Fzjhtnw)e~kIF10X^pu3^!StkzMFY?&8okDY0KGit$j=d(IPS#n1 za>9%%{U~c6%lh|YI(_)acK+uAz_NW=_6 zjgE`LkA9`PALmAt+I)aDO{?Sv0LW*KU}` zYk_raAw|4r02Lp=r-|^vo#Mc4{_tqQDU5JI5d8y7Vqv(He}mG43k$^8@itY^)qAiQ zHDmaOOxau>P#8JQEBb7Q?`pS?B>zA~L>R;W^YS)}#?wc+X}jY&ahk2(rhy`uRo+=Z zjQzSret-zb>6Ywwr2l#1dWZHt;3KxhR*HO$ANS=tp~!rJ(SrZW|MD2V^~7@QUW+SJ ztKo?v172t|bL=MX$&0^lc1^7uq@8)Rb7$)F-Dyisn9J(s?H6&CYWJwt7Wl1wu!z=9 zVCjwPlkL6bt^25A-doloyGC_9*=(YYQh;8*PY&GQMB4xT6Y!Gk>AFC+i*Vp|&$3Rk z&rQftr+8Hq;(B6CS~fMJ=KSyFv(JCRto;=Nr6Yv+lH1h>H4{+ctl2oVQMrc77Seo~ zu%^mpn1)#S5GU#E*A`ZTFH05qu+~59VBMAkYm5(T7OVn0y7CYu=Zox_p7A# zWy=zPu5NqAwQo8w;n_U_!_Q&v=MsR${wO#JonKODdR^@;qtDL_m4Du${-dV#^|y?^ zxvc)iolEO`?)BG9M1Q{0X&byps`{9~(QW8v22byps+ zd~N-rrf=)k-JIW;Qs29&uI|b%%RjIGy6IDF>xR}($hf&mX>VlIUD#Pr6v`p}M|3mw#9s$lZ9ug>`)oUA{`e;REXW9iTwB z4v)JkD_d>2Hlwa@$K_j9%WPWlwIIEf;y^EIvfAD!3n1%jn|3I5MXG^S@Jm-E^#I)9 zg8VfCTbP*uTLV~wvm^m_lL~+2z*O;`R~%8_-JI-4eOmhzoi-w=vOn;K-!1^Orx@~e#y99 z>G7^!;%cg^4K{7FN=W$BP}sc%d`8{6ivo2}>qYtNP-yyziVhOS-R+8a|gDs)|TU9fQ1 z`FZt)yH?nsuCDL7>r)z-vbg@xU0>43lw~&e>kruVEv-#iZA_s4?p<%uY+iY|vLk?i z)(~6A^20jg2w?l<+n9{Q4ErJhHv~-O{S7Mw`ZIt`7DA&l-B^6xbW^q?sjr(R=aF#v z05u7G=d5^Lq4P6o*owvVU+8Ck`Cmcn71B=#6EC3m2Ag4qF$z zWwe}btuIr?cA;ok{Va|aX68rE9aDE@@06P2Lw6M(x}mt|*0G%mr!?!bOdwZW8aga&8St-UB^HK9Z5)}EW<*;hbE_G(Rm$b1TW`MY)J6ZONRUq{%Ft@*7fr#0_&JZg8F>^EFVoXjlaP zrbzpJ(eFwMtXM5F{oIl0gf9CEgTm!ynfw`^&7T|c_%oj3}-ZcRg_-9)7#P*3Nlpem)NZmrnUEtB)%;%g5Tjf(Q>)*j$fDfHN-g-Sb$oT1We zuU1-Uh*FaUs^|4Vb z*f-`kbg`wo_Qs|~b@MOE-{7hms^%EG8&kLLS~_4I8c-MPJ*okiUn%n4E_K12rUo^t zZhkPoIR!xLB?I`?tgfr=IO^>>WPlpFb7RxnRQqLJznuJctd8FGFE(wj|7X)?A6LPq zx9Zk)%wI=Ug$QW1T}HiMH>_j+Cdyvh^nU$65f2>h>VoGs)!G_v%lEo2`JU@n1}*yn zv31m&b;F3X=DjH?^{cvmy#pI5-Wrv4>khE$7^+N%{zFH-Q8$c8YwsJ9fIqFT8H|C6 zH9G~oz7DATei`&2ckqI`b%)05&a=8}dyZOKH|)^-W!C7WezgeJ%dP1?ZiS3R_34AR zwuaR+-WUmCpBk#`hV_i2S?lz>)&mjK65*L{^LJYpt9pJ;{#I6(AUH)31v8)WySe^r zp{@3o(U)X6j0trTdgk{IEKb+h%+Fw$=e7EdHGQZ!TdsbbhbQ(Z@%>;RWB%UWzNEP!knuAjGDPO%YUj4&epy={7yZ1xU zlu~EjRaos={*h(okKZGOR@1Gv{n=xEE$v;IT%X@BK&?!wFF7+weh(G;f%*n}$z6m9 zS`QQ@m#@*E*bj77X@F3Fd9k2vf0xIIOYXEjJyun->)BKPf2cieI<_*oJ;|t`f|W__ z*{vAq$w<-Xp4-E$SjNBA%|5g9? zgx{6w-^%3v?KVKlpvJ9C>feumBIj;{rZ|CE^#lEb|IkH-&ka`c2!hC_ZNu}818O`8 z!5#fE?Aju)0{zF3o=#oL`e|cnd28%1^=Vum{OMJY^GC*5Kvx*(6%BhH?;pm8 z5Z{6i#{Wm~@neHT6IL2NRwm=)N5)=_UTKY9nS_s@ScQguvHmd3a5w#7R>o;UpjR2_ zRW10yW_e?v;!G@QB2(Nl$@>Ct1jF+Rq=7%1O)lcMR+_+6xmw|R!~XocJcB>iWb$Wp zHh*r)rpf}|Ox=b2CU^0d(UCuDz{f81fn;M=k17NG_yv|aex;n@4 z0FUZYC05sPgD${=Y2cCpg{I6Cyg)@Cwizt@Y@0L3jtOMYx{CXhkiqNG<=gWDQ)k&1 zZLE0JLO12PE%svjnmiy-@fjh9je@}7Mcz%)l6UE*mZ+!dWUFSxUT4#s;Qta9LhKom z#gvXj#KjaK#qOtotry;(c@ETv9V-`@mbofB0`C-#dXwsoUEVs6x1)8s+7>&-pqJ5! zl)&I-Z=3Y%yEi}9m2BQ8drlOJW1AqKHtk7JQwCc)#`Ql%O(T-}_}@!UZ=q!h1~S^k zX=*xnfHN%h>5AYdK5Y?PFXZw2r3RPZEkXjn%|>g(3t+BBa0)H*$u~iDIur7#E-=;6 zn<(#PjX{F)WEU975an&QP@M9*Sz%Egmt9lx0~!5?B1jnR?IS&zYqaQ(=6oU==odQzRqJ+ zOV5OaG6ETgMDF%kY-<#<6L~$5(SpLHoycGWW(`=kz~H5^@3D$1iXN0T2xHPRP=i)( zqh7ri4^1tIfl9OzxUxzGO#p^J?^3{(Vl|z$}Q8zmTL97=_`b78p|)&BMpW zfW3J2;`JOahpZc~QH5j$vX!7Rm< zQ^yNu&@uyWeW=w))MXBGzaH=#$(BPNSu{6Gc;mXME_y|hJRR%(m(4?S6hl>A#=`=_sk)DFsvaVo zs%3;zg?(7C+DCqy*Kg*1)b(}vBvvLKQFheKYx(mUci!8lx&x8y!J9E(CUH2a2zh|t zIRJ{=a}}htwOnI3gcYMop6-GcAlIs8xeq$9k%d93KrR$TB*DOW&uR2Y3M^f3qaW*q zh27}5OnQb{7h(4q=$^^5As!gmmh6$xXAhz(hhOiGAdfg0-4WR9&}X5$2skbDmWx53 zi|(QWX`zQN2HlPBlZZ=N=tCES{vf(v#_s8$n=S_YDfGr?j3xk%*8`Fm&t_q;59;E* zmM6mdZ?7M@Vj}PktNA-k^y+A=xX+SeJWFXQF6NaM9vIi|QBr0p9f6M0RZsHTC6B(4 ztuJ}>is+R|3chS3Nq<<3u7$*7fN~q zaJFT(g>b$bG4Yr5ZsEL)`K4WEO%(RX%#6YTnQBouBB2fnr_|)<9g$c^!W<*QS$_~4 za1J93;Rd+o4SqOkM6=b5XyMnh&EL77u6sip)B@g{2+>(EMuMqY5=^2$w_w?fHGN!L zK%665#|4!=M{)Krs~`fL>K-Gq=BRS1kcNY6dKi6iDT_VF%~hl>wjTw=MJOFc36T*> z$53J-QnjWODB|&iD}W*aEOeL`pCzf-1p@dITm{0cpin({fSR2Ydm#Q6^hxS@?C8$K zn#l7oh#7x1OPuXXdUs){YYBk__e%XBN4MhOEe2GCF4y1(v4BFBXe(ri_KM=@lSz;h zI1m(;GE(6a^!o|W0+H}_Fd#YenHhqN0ddupf(%X(H6nvq?6)6gjDvrwVh{fJvuzZi-+WUU)K7$ol9i=4))lkV!%`_r`&nAZ(qWcF{3lteWF6iqeR9NA^XcRK zJ}uq>UOWY?SHTpL)pEX?w+XCglvRe0!L2`Id1e_VE=$z35m6VWO9WpMwj$vNFMz&U zhvWiqa@d8=64+mZnGd>o(6Z7Gowcl<29o^v#|Hg*kdGpHuodALU*rGY=lI&KOvI-&Xa}a?~WpX0z)k4P$*a))}hJ2$6 z)3D6#s*GNnq?M!}hH@3TOGCV~0{DyDysHu=tVg?Q@f&tFgupGhi!-d&*AV&p)L#wQYn*E&6v+c>69kGZthx$ zsib6|nsX|k$>ZrfOWjvr^9Y>+?D-Vo8Qn9hT!s);ubfvRtO_eVnvQ_61nKx|qkc zbe<*qwxHhIf+0PaydAPe0q62jrtQ-*fx$2<^_33u_r8inD~Gv=lgCDQ!AkS@E3w{V z*e{F|4uzkkLz{M-RXqERGILQwSSXi+Lmt$=xEw1>T!Ev$)0JvJV0dNlK zZDF;aho(V(MIcFI!0RuGJ2O_YD2YpUsZ8Y9p&_ywI|dW`Hb4P9l*Y0RRf+fn8|e)y zj*(lKXoO*87Cdo<`Fq@tk!*w97Mj2RE~KR6DJx6|E#~iXzElBI5uQk54dX8ra1;%w z8nsyAErwhVshaCJlI7V_)SSToC|3u6^?pL&UFk5th`@n$DRA9MaZ}8MH27%(;y!?Y zvOCQLnL2atYh~mDg=-%?NPmS53K%}cbfnrAjMVJTx;v<-AEQ9|>>ScZ^Iuv;p z+Z>BDFl1+?;30L+4%fR&P4unf1>}+iTWo5N*geHJ24u*+P9`S zdQ%bsM37*35&y!WggTZZ9>EH}d3Axlgch|Y^(8&#o3Jd1LEFh6vW!?mno?~Oo zf@Pb0o4#5V53y1Pz zDS`}%`M!pN*)kacD3* zi&vxnZxJ^lWWnlD29{P|V0|7Cx@}*hDe_rdmttlFuQRG*b_5Uqt71+h(H2f$FC5@@$80g z;tanu>C7lfB^mgfW=U^wnfaMvle4DOf{R$zTX`lM>>FR8O4p%p=@17&Ai4TIjygw1 zO&ROb#t~eSvA87Q7Ok=ZMDn}9srq!>yl%1Ow^t5ma7!A zBX1bRoXB3IXo>vLC|Vth|Lr0TO5$f) zr4_hPEfeeMU08Sujtxk4ulnmWy(F*9-mBZ(qrMzW0B>`1p! zn;ki<7q{d@>Wtc)NS9G-iM(mlS|S0X)*9jWCS+V|1(nvLm!chx3D$6({P+7yj$@5RZGhHYcgLi!cMTA9K;wIVBV@yFt~*bhCeLng_?Vl zIUQ%YDr`l&R`gs5-%x5LD$y6UN_^HOIyF@v;cKwA$zlEYAD7SS-YGGmfPPBKyg7^q zdV=_QS$>+%n->S*#t;vv>qQ6I1b}zz&7c)$vrz^WP5kIE?KEKMOnc(~bWyi?a|BUV zk$Lm(1?If_g@EY4#q|Xa|5D&@?gxGy=FR=U4?j)+Y+l?-{17BgX2>!1pMEYvoBA*O zMVy)eRi)bR!#c$?taHaB;1Nd15XKCr}v8K`k5ivVhAgJ7^;v&h-(~>Yt+oeynV#z*7rY2NhQJ{IMW`_3uA0 zCq!CpP;M-KrPo^2pQJ{W$t_kT?|=U%$Qgp4`70E#_27^pbVi!q%jFE>hfX5mh4~nI z;4t^VwK0JBA0>!u;vaz$n7wsaV9nq<2_vobgBJ6PH^Y@Fu|hi}x`O1!`7}d2s-ele z1%C~^P}>3=`k6B@qBur7M7X)K{maYD%V@`EVYN|MX3y+j|CD}%7F>A@oxJoCa0gzv zjmmCRaB94*tPX8%E8CLC<6gE$Ehj|p00!&9U@JeQAE29tNA!mA&nb0?<}L+d0KHo| zbgO=8gq_%v9oUhbR<^L+HvG#8d*iCA4FI9tBr8m;kdukMgzOwl74OB1c7ZlMud(}VA5?#YNR;@8hgf2+mo(v58 z2hkZ|25Kf7&tuA5`G5XFke^Ir!T&m0jmg07k1)CoUd)ZC#Da0nq^pAS@E$LgLr-IA zY#t)~8@M`pyIL3h0?yH;*!gZo*l(?_D6QoZ&KgGu15XFHFus$&Wbj9HKb0kmBKEOS@#Xa~xY_?!mK_pNF z`!!it%G7}nR9*5|NKR$JV*r)Pf?*|P=1Ttp9OY7Ce5?Se@!^O{K_H%x`YS|=Q58=+ z(7%CA6j-kNlPp&6$TKglC*4*Bnn*WTPzE*T#my*yAciJb0a#}(WAMZ#4-_fLdX`)YY+flL81=HHmGMZ6jJ^HS&d}`T@vfLMFd8q4CH5rQi=xRv>)szpB3rw zoH`>pK7bhXk^>}|2k`m7$5}hq2TIKwn8}HODbvd5DL9--C81(aOGP1wi~l0F0VY_n zaye)68bCuBwh$0Fm0%bB21BO79-oPj102{r=nOhQMsHC$S)!`DNT3<#jq>y<+$oixsTdK;z3hVGdw4~UL% zyaQ~K&_8$uK?Ea8e2ju7*0SO=S%JEe(u=onGD@>Wg*DE7*BF*5UFah|lnPSr}LLgmw{9AHuBA=~xi8TX8aU zE2@XSgjawDc=lzz@FCufUb%-2>(Oull<9_xdF(UQk>5IF3Na0Go#b_!s%*A#r&ONPW~?p@&pZ@sf5ti`0-w5#tD?x z;WcNxnT8AB#A|U=;C}cb+x8%K-p1ScQ_8mUW&AZQL5FF11AEKcc3o(6Ypg-W2o9Ja zMj3>~_oe-i48lQ6`C3+tZvw8vo1z$0sR03j4Sh0h9L^V^cL(`8pALWkiz#LWgu;%) zRDi5hNFBHVr!)@SItExOQN;p{gpC1dxgf}eX+TyQAaA=M#ELk55dGg!AaNo63Csx0 zh@H_Th35z2Jg<~Nh2u+2Wji5W%8uN_>0V*DUrCYd!+UHWWayHGB$FhIH(}e81#4Zr zCm~$L1H2N8x9v(6>$1j6fBlAlr*Sg`JCY|wB1IhxOoJWrZ9Kk;$+w(=SkS?7MYeq9 zF-iPXEOJ2U#r&Jh{n)TTR8AB_A5uATh*(b2&foPsELwt*& zeOAQ`q7a9!D}@f-IuYD8#p3`&(UruD7IzRj-hWh>PXK+Pj-8`m@jx0xbX8G^+?Iq# z+zQrIP!T>9!YwRf2TfgB#E8x7`{h-G02OHPEEh@B`gkC_>hd9HP5$K+j$f$+xOEO5 zu^az=_&=zkoqxq3ig2BgbOR(D^oB*2;I-ijWC&^+nA?RHU03eIH?5eCJb8gpT2e<5 zRXL~3K}Ml}P@~*%fl>S^qkNJ2mOMxTl`vQ{5kYUK46?>Lb`+q(Tml6Be-{{~Hgy!d z@}3@-RrgPX$HvqV7LFa^%(`{Y5s&CK>E$b`k#=y=d=Xe&Onhnj`p_e>me2#SUBdUk z-4G!TQM^ukE(cqV^y-#e80!tfz_y8^x2ejp742g5NH%eM>lJ9D%s6=I`&vv&M*g~p z`#oT{2PeLk8|c5xSu^({k)o&^Li?+Hb)^w>%sNhGSjX=AkU%In_4mAyqedpKC=Bc0Y~9h zw8nM30M-+zCv+2P1pZs*Z=Z<6&mRx}vzxznXB>XPc=%V}QT%!w{*3YPO+UKhTpYf2 zJpArgtDlI&w~dGY)~PaI9DdPw`2YHKJVs&AKWjYv-*!Ey#o-r^hkt$E#wX+O=ZuH{ z!>3;b{yP6l#>4;q{O5lWhd*~b{KA}fTn7AWlE72i)B>%;aSDRkVEKz1t~=={+=I5b zR8T%;5451n6n1Fa0{%%*2ex|U6Q%!N>UR`k*A|Lkx}23q%7Cc>-nZ2JdsylfNU^?q|-VH~fL ziSXJv`A_TPc;!xn*Y~dM9FF547`-Elf_8cLX)Ur^KLzJ9;a4#2D%Hn8mM58shf)R!pWz< zN0owGps%2xxq^PAj{0={BR^S=izVnrM@1)Np%ZDP9_5xCIERbb=teI^4|6R&n7}MM z_}fjmXh{q6jU9Wxf{QcK!mRkpuTSD)QCgUl@BQE3;^LgNFgLIJ`y%?-bY!0S%uf%Z zV{TfIFBZo-aIqjQ$VoF_%Em=oT9CK4bnL>#;{GaylNRQq z_q`buO2%-Ob-(5_9Dqm3mR*0-uwx2j1NL`gv>EDZz<(L4lzjj8{AcGoreGWhem9zw z=uPS_N0pND|N8VR|KgYe-GKN>O}^eFU`Caa^{ur({LnE48UiJt2P)Q^)K5i~l6d_C zUwaG#;0=!?E+pxMYvVrFF@M7n5qM$b+3DqahW?Fm+`T-eA7QA<1%MFEQB1As%T|n?XBxAd)d+x)dMfkMzT$`(buOMW2 z>`fkQR*GF9?dQ3bp#8ANe$s>Qx7ZIOO1}*M3y?8m*Pmh>u{RDXGV%ZCs**=H0HXU9 z588@(DB+=$2d8-hpR2$#R|MqLwmLtJHmm138|qo%F05a5wL2@*ef6K`xUc@I#eMbH z@O`AN43GKEMiUOLJnS~P%x|7GIa_1S);?sY=$Etl9jE!dCM<)kx(Q#d1wbDGf)7ro z`IkTxN1|c=CEoOMw&NSoypn>1B?*ZEB5}R@>c0dM&j5*U0*Ou{aft9w@GwdwVnE{X zgh+t#4}uRsqDYXy2YY}-fgoYkk-!Jkh#eXNW#Z;@1F_HH%>d_gww=BTBTRSOidHUU zOGBWnMav?#EN06Rwk%~!r&D7)jlDso)roh$iae&EC$HI)x6_li&zW~_ke^v+yJEI0 zVY^bcb9zi+Pu`#>@0cg=tTQh*_@`_Kx9yAOE`R%1hCy2wqtYRwAh31&QELhOxx+1w$Hh~H^Xh7$Cl=KY-*mzw&r~?AJQ&jd>YPpDPEi z0+@0#ps6^TH_XR9a!Ed9vpJ_P)2X#%zzB|JuV>U@U4jpmjwK=teuJtYWaCg{>eZH)&o9gi~s2u0CPLHYHm3PR+cLo$@ zab%oYr@{`II#7$_r0RiWRMpq(xVp6_;JQOy2CjH|whjKq?=l75pf#_P2ng2A_~JCG zoO!@_t84u(9pf!=IKa4FFy^Pm4UB`p*diEjbLAZtYIKYZZpASkgIOG7K?(T8F>VFM zU2%*LD~y|jsV%O&78kyCE*N(T#w~(zhimqA+fAnfz|8+m+W!1O($=!MIy6?scv2(J|hp zFa`&Jai?J1o`kVqu*E=w9LSAtv48GHj~4YzUjZu(c&6V0<7)OyUr<0Ez^vc*nCC_D z8^C|FTl%V@U&c6OB#lGCW z%bdPD;H1`I_;ob+PrpD5YmZ)+G+I*8xIgcN;hYM)@K!Fq(+RwXV0f%BVb9BvWiIoI zox&!qT`FO8QVH)y6NTlyk1edF*G}iD17ejU>ROka2YKQ#eJDD=6E*GznLJb7)N zydF>9eox+EPu@uvWUV?CBn&|(2kdv5 z40Cd8G(Nm}uLj(O0Ut^l5X1pP=)5SY>(qc-qqfIM-lYZ{aG8`-HEe?)L8G6GlUnDR z*6uRFXkh{fiqr(DVLIg;Ne4w6_}pb4ZKpA{c<@;@PA$-WXnxRTo*(d-=O4rWS?Bq! z<`=P-G-N&5soj}_`)^Hd?OEPO1+%LP@Y{1KCc)=%lco@Oe%~kDzN_5GM%=!Kpy z=xeGmtNiC$nN{vu$J;KyKG_tUcl=~qa9;b#9tfK!`yu3DUG!vwEAOBy51zIIx_CHP zcl_l4uEs>W%xx|?892^kvsAuhR5nRvr&Mk-#WgMJAffEoo#I$-WM_3t$lZ<{Gj*fN`O>GI928E`O&=e3@O`I!IX);(vOvk}u zU5fJ5}-G$o@Shm(wc9F9I*5>2}kH0f$3G;I-BZJbe3X)<7? z&}6_$p~-+{(Bx6uAi1>xp-hK{&-4hutpc!JO<@5}VVJ+hPhJCC$BX2dktnN z81Fh5?;V__)_!wVMs#}8yp&Xw`>Vlu|9)~OEf_O>3+E%;6>UEW*M1CMm*-usJh_>d?hQ)0P1trS*#GO32RYYlk=h<<(JbZt z6t+xGZE}8CuC+?}B(EKOj2(ANb+=TXm$D&Lc9)8ya>Qo}>w^8!lbC<(*m3sw$Nq?Ut~wq`xF*x1aMkIN z5xONW9K^SL)O6<2wmab{-HhkD64P0?n$D0knCEw38as;rGx)EU>1-A6_G#B*8q=q< zDt$V;^OC2tB-KvDdWi3K{e5zLmzeNWCbeoNqBx{aVldL&*( zjGxH55W=|veF^wm=sxl!q0;j*q|yd_gOoV@v~U35fHM|;GvlU|910PiE6|^S-_DdX zPtqej%fh0R0Ux=MurdxmEgZl%;H0z%{SvpOWJCxMU4elF{5?n@@x38e9wK3+{75E& z@cKgt-ReElPB4dt|L{yZt!FuXm?Y5tGx$L+fDFex59^;1qTjyD zl4pg8OEg>GAI#|+Gi9u)jyNw-vpN4DJ&_~@S@wu%D3TPUHu};5G&Ch?k%T6`w1A9* zeVMeY_NGHFR6$3fzL++cj3WNlcDmLhwYfl2Bk?$On7IdX8k}RTi7Ab$+bSA}2{Eaz z8JUdaCtXh8Ex&yR$((O?1AdV1(14I#IRk^rfS|(=hR7O8jHoxZo-i8VD#ph&AXyYv zenkHWSswu^h&2f?NHQwyS0M_*^%uPXl3>9a*kQR;UuDykK|Q`7AQys)7`qN%lmB{v^VASHos2G=pI~1AF+N zcb|s;$&1JL@Fc-Hd|n6i2J3vM8W|Nx4vC=o_{kW9bYX=o@xaS)0!c)BN%LwVs!W>F z5>cfQT(G+ymCNkaN9bx8WEQ?tDwIeH%@MJ{+Zf1LTzSUo4O~ttGRbh`p=UDOc<7lF zPUy(A2{MC3W{b>!AtIx~!K9cPP7|)jK&HTz2ZfWg6#gd_nPj+eWRl^=kr~wCB{;KN zkO>f(t#T3RmG4wk;-REq7#pmgn-e#DmL^8&vv!TrEm^;h56t`>}A68RGb;5?6(# zyqXeMK1RVD#AT|Tifxi3OQ*6Bxp4R~X$)60^{-dp?F9yWM}u`ury8X=60F;L3iE8I za!3rYK|buJ=@c?9W|3P@1w>!#c@5^@$ZIM~!nHb4A3VT_JewwnYe=e@)oeXgk9i0F zgx7k&()gMJCfQp~ET5IZHG1(LSf+>fkSP)~PQrV5w6pLY`pUvs?*T7@1qs7@V0~=T z-~A2em(rX!tl*0I#ec@iIUWd}^fQ23W?sQ}+R|=Oq(5C<*@XKveha$tsdw%aH_CSf z)^GzU?^Qh9C);N|WMz4oY?!s8lx6if4D{;R!2|a`h_005XL5`Roqe+uOs2WEp@B7rEV3r)SX~mFuvaa>Hq5#`uXk!(VO(s zrzT(kUhu;s(~9uYv4khltaxA$&SzVR|3!#37kvLb$0WI=?`NQ69DR74UVlG`&(EIo zPMQi_Lx*E+p#!m=P%l22a?U%u?@83H^-ev_-_t9Q#Vr3~6J(Wx;c@+o_+Mv5gF8xb zc&Gx0UsUtbTJQg^U;z9^*x6FDZQ?0iHngk&IpmHpru96L0{}pCe#!XMNgz^^;f(54*3P zkNb>Y!EH0dnJQ-BTDpoeJ$jtk!`1X~BF+?#4y#WeXSzT4Y4>zB_;d_DT?Y3|>v63Q zB8Clk@(_=-WN_@f)1DW5aAONYm#Gl8Odp!JywXe-vi{({DeRtx#3ksS21K{Gw8I!2 zo6q6Xjg9WS6Hcred2qWa?~Dvyj={@uBdr{3q2*g(yc;E8;wm@D_vHCKc~}Yky%CT5 zf5;#It|mFYHtxTz$9Iwwxg>UseI5FOH&!llYRB=jfXk;=w{JxeR$_|Xz6B+ibr(M_ z%cvFj!PX$MWhZWOSGsE!TirDemtsL5Ir7d)g&Q~eA9vQ^&Ns)YbmI>3bA)D%Y~+&jg_@K`nwiF@M~JX? zM7AA2kEa13q%bwe!}#NbTRSQdJ~D_r1hu$#g^v@zA$RhjPPj*krL!_D7nF_Qce@)I za_b>1t$&#_TI*rglprGRFEb==J>r?t=?wJYj+FxiW|0Eo3o~~LiZ+5%D;mTMwGB2aF1odMY(?_>o~>AZH`q$>OKqu$bU_D} znb)9uW#7M|e;*2mF>>V|fJXcxdv2`3Z{>bOTJuZYzLhZ5Z!L8D=HE|HTa~@i24AK+ z`4mv9i2#Q(R8SdUwyRjeC)=oiFx&TRVQTM>5363}8GG@UhHXu+{qNZ_&>&Kw_o~%< z@z?EpS%!4`Ua>_mG&O}F+`iXrL-M=HHX`*p=;`_(|et!+od1A1YZlp244l`iFiP~8NG>d|7%^q>l?9-_g%svsDT|H`$(( zdL2rZ4#kNL*DuKIYBIYMo6%83irKHp?*)7L+3O$CO9cpG7#}f8z}gd|B=|cn!{Mgy z0*i!6ctA8#jtAyQdNsh%%B&zQ(t@q?iKL&EzBg@+^82!_1;6AAJt`ZQvT+th81oo| zXs)zT1Ai1-%ix%A4Jrf(fY|YuT!LEM8&{AAsUY8=g6Nn$&t9}l>7`d@gBD#~z1&Iw zZ!z!NAQHt1HmBJ4vWOKY_Sxcul+?Y_SFZ+>e59^JoZTPEWy%x5wge}$9r zJyvK0C*!Xd%jB#0VNAX{Q`E#NbFbfk(IN%p`^@jv{JYDDfUS{lLwWV7b>Lr}zATT1 z$(2*8F~K4RQWdctk9HhQ^=Xz7pGW&pJomHMV$rY{HN8wim@4K7;Ji|e-wXH~dc`kr zkTi48gvMvZn2`?;s9q$OfcSe6Kuzp|rWMkK@x@}sj0|hjPXzDTs-Y>7yRmbq#H?&( zgbLqgs8FUt1wUJTPFi6K#feak-wXPXS~Q5w5{mRB?6wnr)-h zZ?bWrO++w^EgcP4{f>Ch-=nwwTO>H7rB90pNvlWG!R%!d=@6>A}N@rt@RU)(EFPo&2}DJV?SJL3##p@X%k z69v|945GV=i-WB&dQ?gw4mQad7hKdCn?I$mzg#`R`U_V2xuX8DmSBwaJFf3cPqPFg z_kK8jhm4=R4C6BYY5;3I^RZSkUoFJU*B4^uCoRP2>+>9c+Snx+H8`H)YZ_gK@c!C(ku4Q3VmLuALr*I-`0_!>-;EHb3W zh(2UTVZ!!ja`HhA*8IrOidoM~4{F(efY z|B+%Jf8ZsUR1=aYFf9JphysUjh6wQ^Ey3U>o60^eyacm~TTWl{63jiN>6T!`;;oUJ zs7sjiQ`6t%MTT&iC72(ERWD9f=>xqK-Ph;+C3>$~y%&GSr-icUGtv5sJ_0iq!sRbV z$dHi|>o3%FF5+-zb^FGyzwBc`@|vvlTzviIl?$xDgi~2l3#gIjI64>_)`{eAY7AVP z>=xdW@Gvq@$B9Gye%D`O7hHe&`!VY;aAfhY+dp>w5B{LC+KB_ z_0ZDaV@y9k-3rY1kFo+|O1A<7-PH-??tENi>V}5WlH1g zn_~>jiiVMCdN04;i@z7}TmTDe+8Q_Xqy|3Ir9+bUn}3IJGlz4Z`b8O z>v7@e%6zA0cAC1JH|<;<(_ia8UXNZ_lZX$Ju4Fv_T$63PC%%aRo+iSx;dlrc&vTR_ z3iN1rOfFXKTz{n6wf=Cm>xB=_n=>+8FEr5jT!C0Fp8Ua=RyO=Ku|XHq1_SH7<<-s? z_GjRBAWuBCJTCI{xCGBUt@A!Ajh0(kUR}!LTI`0l&ikU6a?P7Ie#ivXRpr$@$^ca| zK$Q$oB?DB+097(Tl?+fN17M`8np#07nf%Qm`eUbgu$+q!Gi9rw_Qj;7#WtbO3V>d@hiwqRgw zm8&{*prePSyK6(e9s5~&z#r=DILy)`;ZSqONtSL3g*w2HwN+1B@nl$spT*}(g@HlG z+A2py=$FHHRCDZyYD4R)zETkktRCJH1T}6O_^^DqO_gi$2-WazRmLDohWk}H91JWP zKFD&e4G*CWA5+y+&aT-qteZ}Gf)#vt#fq$JSQsKD!vYae*H zR!|F_>sVikwV+^N_ArP((c!Dm&p`O$j(e(k0hAx;_X)wEIn-n zKW=8}`BE_CTj0g)VMhhQEcSlCXyqsv5Z5u_>W=Ni^==vPVO(3@aj&fwgWZh(Z&`utjd27(FyR9g z61=*jnZ-vi2ss9<9#G6h#iJb$+Wb&0;qm+mEWYIcwG~D$un|Rr&(a=G@1a&q_3Q}FKbLXxhsq97?D=7E{*{@nS;6@?WS-0- zm+OM_Z^`V*(xtMzqdhbV>%`%Q#7{jbfM=f=tXX(xxd3qSXbFzgEiZIy)Jsk9LK8;4 zkf8TlR=f~zek*VT?B`RV=U0UBuAs~O7Tg`o0IxLRm8TY-zvK!G&XhNv5I0#-n3NOb&@X|xjW5R>0OFH0s(BFzzJAesgctm=a3SkuFap?h>mUqAh z%^dy@vWygyv73V=7mth%FL^cSz+BLsj2<2+ojSbeU0zr+0&J3zY;&8!u0Rx`ymA|yL7yUzQQ`+!GM6X@iA6!4EC>mz^|0Uamz4F4oJQYzOb|r=IbhkVfeB|`H2<(&U{%8kWyfI3#GA3h$)eFh$XrgN+QHQ@r zdspBPxU$asBe}z93deoT9;I@`xn6q4l~15IJ_ZZu!21azk+s9CUuX5Ah#?VX7&*jv zJM6Wa*H-5wDe7a?RIvb}-VU$OBEuFXX)lS`9lCOONJe(*YFz)7n(RE%^L~8b$6Z<- z8&s#{?=@r}X7N9r<6P$uEZ3hEWJMb(v zf)(-ml!}^F=~s!e_$1xGDL*A%$nZPh8t#>ZYUn-!Ym?na=qD@NX6im9u)L=$^rMyS zat=olc(i99FYS-}lyez}Q5MevuMN*KGwxaDPtDv9Cqtcpzd4NJqaA!OyyL)sCs??# zJF9~U*f_tdHVFZoFZL@e@KkyjsC0k>OL{(l1MNg<5uO15$;zE^4tVh7_m5U~#W_&k z!*7g(c-3A5w!u|G(k^9(*PV7o2*n zNeJQmS&1(~C{-bvtda>3-)45;GmIBUFL&Vh)x9_>En2s z^nN@|YMtl~Vv<8oUv#F#?+D%jit+pUL#2mn;&8VghX=wq6ypC0D-KVW;_y5e;eDZ+of$&o z7u<1Fht9?PD4^>J*y3mvy7RS#(JBnVcQZz-3g!Kb(JBnpi4E#Ut1w)1>?8^pG8Dr+ zUnRrh9R&t6S}j4W-|u(%mSoUd#UgDtH&uDb4d;>rm+3ISKq!S%%yr@iV9vd0dReHqBg|G-I=w?|P)hfGg2PnM zG@5=G3U!R&!Y`_Uq>z+DrN>S}bwJZmt^6*FFDduR;zmXWaKb3x&FBEJ0^H&gwVYHi zS0gSA{e0K~Zg;exo&hu53rYxT>0)pV{O*YGn&30c-oWRU%=h7n5J#hl@LhF80%LFu zIDo&)Ue(WmQ$5aCyo>mR-M4>89ui8QFcJtp1Y|K6&K&L+wvBr4z}&sMV;g7ugTg!x zI6@BMg^{(x9DhYY=s*W19(F>95)LS_!$G#apUh;!rP@9hYVN=^!?x?Z-{(wD65u*G zKK%!#0_0ZI7E6Mwbr{$IGFo)jl8i^*W$;6$0%tH4tXw->FHFVNCq(81G{C-sF=q3r z!%=oEAgg+%1KXBR^6|EUF)|jt?Q^07M%yO>Q4aG&98qbT zKvdc$5M|pp7!?_aviTh^C74SdAnE~!J*GY6Aq)+>(}m-FP2p$bcz#Aw`H65z7r*ec zD21O+vHm#kACHTlZRG`F15L!(Dg3kwimvq`D^>0#AWDybcR&u!MAt`N7afW#DA7cq zDhdj(NDQ~JUqtkY9Ry7=GvOxD6f+ZU3YubO!c9R_%uKk+m<+4oz*LNFz@5dVhuf8* zA#6Ln0$p$E2uV2hH)k+u{G=n>hIqk(anIYC%#C7v$OK?CBg4n7}qNq;B7tGoiNe7Std_1rUpaGo8p$gM39V`PZ z%t&|D;(#R%iK2cIkD`7QkD`95M^WSeqo|+jQ4~3l5=DUnMifPS1UEg3Qn8Z6-= zhRza9F+oI8WQinW$OFIp|(^xp>ObD7)Z$K3BWVH-khP{zG75v1MmDtgqS^|g4t4;|)U zCdgGS`6@DZ9>Wxeox)y6+qbc)L7qqUPWU{g;ZGnPMN_pA;horupb?PYMO!~WUg5z8 zf`Ne|S0IA4wFOQ24k5umpjU*p#XvC|?F&`=FQI+rSc;sgO9{G^qWN@1Q3)u@Nug+=qR0t~ z7J{OwilQ%oqN`FUx?joYevniFlFW*vSs*Dtg`^5a(&Iq05-3hlDBcJZKbb<(;|jm$ z-0Dqyx9=b51%YW6dRbMk+tDj)EMb+>@%xgOt2gY?>641QKLvSHQpkG_|8$yD{<=s^(o>tuInA{lKC~VKGV7 zG%75vS8ZE}#g`S#ZeUTYu$ZB0@HXR{t+y(e5nxfGu((Fm3=xZ))i@)-qEumFk(z6X z#B2pJ2S_*-5|^tQyqfZ6<7X6*0)Snpz-Fr&kh2wRD^zWZh{Tr^$YLOIzd~ZVswp87 zB?^gBYK=l-s;Y4ki!Z2g76OaM6&7Yyb3d_|rC?S7i%NyX6jk#$;ohjAR08gE3T~FF z!C4E$WtFy)K@ySM1?=C-Op9%JMJk_Eb<`wc^QQv)9~m;bweQucpV!sT+v?|C{G_Is z#`AG}e|*$CyL0xej6i=jo+G;UU4FzqI$8IhxQLH>tg#0B7kv?5m#LcUtogru`T%cm z??>O%L6hz?C5`XW2AsHik^vP)o)*TZto|3EIcv&n)mUHa#}w|(bu|zR9UcvZ4zKCJ`AfAtKQP)HI z^=g>sN&Pc$dn&X%(cjARM-%;d`wDNkcjArrAjW&Og6FpY{w;t%d-MR__U{PYFnTz2 z1K`aZJ%P94_lKsAo(oM~b0~D>n&Hr-H6N0MZ-()Hd^LdoimVKs^WK59mp7r#@g~$c z-h?{Wqo_I2qo_FCqp&{_MH<|rFh7S)!qLqdIuJd`uBGf+!LC9Gx(Wg4Dv0;0u7dP$ zdcI5eq0Z=F=s$YCU(0fDv_JIAo*(;FeKhp*o_`3d`f%tcJ>Qiv+5Sg8-Ehqx>;kScYdaUha(^2o9{h^#DFA7d;g0FaIJ__dmhM&#dRSm|r}_ z6$6#}PlnpKYCf&MKMQTR^{#mt<-W_yee<%*eP7LSobnUEs&dDvI^btDzj(g|-;a5r zzX;Ir1$+LOH@xzBo{#{1)xHlurR7r^9WRWaw9vfaeJgHg{qz&~D5Fyg8@D%I+6b0K zoG!ff%jE)WK!jIDa%atJ*QvH!?IVsr2yN?ufkhkA?zQEX zX}gF*MB0XH-n)%WO*`yEjzI7_Qv(plFViAGz@nW7d}78?yKCOLMOvaJ;t14VXW9(- z1)z!ud7y!m+rKS3AZ&mdh`aRpuG<^);StELIEfPqyT0RrgIM-J#@-BI(} zOw~4-th;U65HYZlE})>(<*0e@OM-5kFknzb!tS-%wA183oUSiO!vtMGU>2o?y^pn{ z!h*QGW-A1e>AJfZbP)se8H5m&yzZ>obfapUAPgAH0b%#r(4!A5NYM33)igmDP$+@8 zp0dpWS%N}bUbhRjNo3tU7i1BE63_(>=yW-1-ua?5O%QhTEF0;%*EUx>dNW>YR{}%H znovflA%=iTwuYdNWjC*)B6e%+ImokIA&@0oLMx$<7|UVW=4jmv#k?6yUrI62w-09) zp%sOqWc7q*LO)GgTkD{pz#>-^6uP_%C;3X0D9tJ>G}M$TY9BJ~XbqVfh=N6FYOZ#g zX9YU#C>AFamb!|uOxuB*X)|!hSEyOQgL|Q4!Y`EOP;Gx2-L*m}X;$XgS_cFQ1TR>{ zAWp1trj@`ZuV)7mu}zs|t8fg8O9O(Y_X(roESpOmmM%k}+c3>mVg>ybOG4jWI4x2f z%ePUH6;=_`4rQW(6y!l`vTCP=MWXj8W!Jp(1=TzZip5M7PDNr;@IS<;IKinLc%j*< z2Lz~-4ORh%S<13tHG|}jPB>f$m0PGtBAkqZUemr{2z@v!5wcORfa*_5`y{FrR#0!+ z89MGFUUQXApp;+p-t7vjIN1uR65ZP7fbe{qt|ag(RCm=OK{#=mD;8HG3ZJbD8?J@E zS2a&iO_b)qod6-2lxVwdBE-!~7c5jHs8%RJ$zgwUAQ9@iG7uDO^uy92nQY<&6{i)V zA2nS!4tN_lV}(bX#;BeW~L%!z;|4NXcOoRPq_32ZN7)-6^o|L z(vI__1ddTR0t-}M;TlC>Qv*;fD;&^`e;;sz(V#7@Sc~FxF8m`H1jj}jP(26Ob8~B5 zSz(Xv2KEBI5~X+OKftMg+(B&tZ9#R@nbR6d;tjEbIZy%7Uog)W=I{dSXwwZsr_LSn zHHke4c)&*t0QO)~Q0#%%qG?DsgFV1Bi9Nt78{9$f<0$4T-k@ZIg(yrFYsl3&XNV6h zi&_cGit^MVtYN7LmZEwp)(BG*ypgy_bQ2>Cke7-(aAq_a)zjckT@rVI6pV&S3M1{o zS%Fd<_%xc1&}b-5D2X$~2@?@;wP<19mFSfxCl6scyRBfUj}p5GR-vEeqYnvM`N{WzDf& z+^}F!-BbY#LBpD57*_Vh42v@soP-!wv0+%4t}bd=n74pykut0~3B$_0m|?-7#IP`d z(Xe2X%CIaKGb}x<6LXpypJeiBSUUrM!NAyXH6i8EpM) zGek*Tr4hBdgevg*-hAd3qM|^sLA61;%2BhAItJ8mhF%E&R~Br^Z!kesR8R6t#*k zrzP*-wE|CEJcK7MjQzXty5(f-;(3<^@7ByT&%jQmX77#IJ;Og8g%zl+Y+`ARb(y&& zV*sUf#Vkd6IL>V_n^-y-{P*hqjZ^hbQ_+s7{YFqT+CoYzqzF80HCy(Z`&5g zFqbr91A*B4s61jW+42D{G~z-XFKow!7%C6p;;G~wUAQoe$`5hzL~;-8FcUk6%F#=L zVVVdAFQkRR3u$5SLRvZ|gpoNB3|>eJgBQ}m;Dxljnh-`-G7KeYB@bTc)Flo%8@y%p z_PF>V^hE2fxGrE*6(zeY2bwE=!1koF&8xS`{Nf;=yP3KQj+JC!OYuM{kqq!`FH224wBjwSY#T~vZ~>3` zT37^0c+}U*Vr%rOr00;Zzd>MYCddjOvG1gg*W)m{RcpwaWm{%`s?WZapYG*ev@5%_ z3-{Tv`B5xv3I!S`qg|}dzC$~L$8553Jr;(~2~9#ZfEJt16mI5l9rkY1!9X)xdxLgj zx$;adOl!Z^mF2eO;QX1EPuW9(x=E&^Bz{X_%pPKG+jXYaz?R7$4v;Z4ER*G?jx#>_-T38xEr#+P*A&2@upAw6_N8Cz*!O zdgZR{!X0+-DmI9Z$Zi#Cw%WV2%~_ZjIohC5j{a5oHq*Jny&NutFOlk`dz?#?dk0!PfTV~PV1O@}?E?FHS` zgxE15oWy_;rjf$!q-MLl)gaxw6T-(hr%BC82p_>4&Yx-flp%lM7ZCB2#_JRpK+Q2- z0cNrFkWh0JB%}3$FqA>G0Pu$lEihM}JpwHNbdof>U9ph#(awwXONbv7O_x9L+als8jn^qIfSM6q z0p_x`QnWMBc(lGROf#Sw06zD9uH1gaPzG}>Xx|PE$hV>XsU6A+%&~y!SYZSE)`20Q zwaavnodYliT?Mj(kJC$rJ?=cwtce*oyHOk7_?V*9WfoJ)J~ zCU_EBS2=m7^eLQOxQ%9u@gvI z#lt)m(DngS)U}(2>|I3W8d@z_)C9bNObZaVL9sRyXRxTwbWX^iGXvVD5RfebHpepU zdo}Kw4f~?99kcJFUjjBQg7GY3({u!?vr{a~z8T1xX!HAkYq7Y9r?zN2fGX}ah)wHt;xp|#$YWr$OE8{G zY}$_KOeTMYvw$4NGdE)5Pqk}Zz!X&nOh@gaJdMhCj^g9RM5Z5zXY1@GG99L~LI%G< zE35{x`1;HxfsKuxb z=GYOkmaJ)2et&eE(q-Hsht??e5}T0ew9tXqmxR+mmRfTn(|$zTL1Z8&x-5H4_v{f- zUeTIuM}VNV7kG*mi*o|#V?fqgh%=?HPc>@|&;@hsl(1OD1=Jv|P8cc}bX0h4qpMQ5 zdbexfIa)wo7I8^H(frKGOu8iE)OsDLC@S16o;rFIh-+QY6o>&V>O2BLz!`~l&!Srb z=Gt};zAK~Xr2)%%%Klbgn2Rb zNDD~PO4`mr2Igl@Wzx$K&9>_xn3BT1LT2;~h|^+FA(?P1H&a5GYeenma@HXkJ7Jxi zQS9(3qV~b888$i?rQlCBAo4f@ECV7GkuU5KNbbN~0wnz+9hq7bU0y#0L|$Ts*X0Bx zhcY>n5XqM7Ag&yW3ujS3NTaxv8CUK&0_Ov{h=g)=2~jw@R74SdWdBJzTa;6{#l#_QjBM(`2T&7MX~b# zb%y`nWB7kv?MAmK|KAOI<|O(5dc*%?h6Ra&z3$}n2>_-{dBi7xZV|)Wv93QW+eS~M zxI3ymzSv?hFcv0fk99&oC5Mh(SSc=Dz~_$j5svGf>ju0v{m>uhx}4uztS(xegx7gIFyhJ z2?hw@x%xC`8WG_*vN9Z5mD!FgWGh(bMg<>`iTDP-H_7fd08f#+cdLC5pnhw!le zH@zkvTzJ&_n@Ayfe4sek|9r+~+Ci}Y>5T2c{wFea2Kyh$z)Pafj}8O_Pme}}fhR_f zhfY`7Y&al*#1SjU$7NYkl{_&Rcz}7LdDG!Zq34Y}G4x;0bRcaq9W=jrc(Q$O=#7;h=7x3| zDWW}O-qbcJ7_egsME7XebdyW&oikq<0_^cn5`0J?{$!T*$i=jbydteL#FCvLI8p zP`DF_kLHG&jFeANX&~;34pEdO(?Hx6JDMcTSp;!RQOis(A;RFm1Lm_iD!Bv7+ZAy@ zd2cqQ7YfAAQi4Dk9E^)@PB7qLa!1jLc1Usul)FBakRnh%pBoB{>Uo_a&_LM{9ib>m zpnim6-lv~Y9>1qc&~`Qs$+16nQD zDIJ!4K3k{pG;=pe;|%$!zOxpOLU>J4847RI&y{w&(~49*K1u zd7857XWA7G)&yrmeMr&}6qRri7Y#r%Y%ueYC}W_xoXZ8hI17VIA2HYE(4k41rr3y6 zNzs4;yo+KdJR8_4*_mJoucj*qlQe~BXctm5=4hPaMefMV3_ilQ0lQqz^h!Ss<^`8N zV6M-hg93_3&J+i6E{Pd%*k*7Nt_qx#oQ#~LpVCz#&eKpU5;7oKzyLtxj(p5uBb*hm zn?Z~i>g$?`c%FKBw>g+YZv!MHB_r!_eu^mZijjzs0-TR9vmXIy=1_pS7x<%6G5QJc9{CqKW1UFRftX)c<&@k@ut#*S z>#}5D!MKyrb1;%YC&Q>72Mb$a7^vYw}4uc;y+wStR}rfXAioMGJdQxz@Jz}}(=+MG6_EvQanBU@G0HQ!;hEC7 zX?msy;hDy{Y2;P_v^C*M)O2Jx6exw{R;j)OxJY)TE3WQ?VSSQc=_;$cU&*k3f(#3q zb;*$>a7BhC@ul)F=sY^WMIYs4B({WBNIsxD7=7vk#*$#^nydR}U@R$?U>s)|Fh-Ik z5v+2_P_fZyVtP~2E0B?7OLrE!7Y206v2-=m9WbCvmNkxF$g?C!R&G}U#C`qd>KiwUnzWNZ%BFE3eSMR_%nwE9O& zmK3AB9J!if9do<>N13s$WyZF8G>V7xZG0;fY1=3=He`B_j-EvkH_may&VRvy)kxJs zzd>$>7xTlR+hcWjof3uLAn(F!o5;3$NB0KV%F;FVE=Q+ zPU9qCIucy^t)cLAc8~DwnV7$@yUg^yok$|JIEPu@k+o<;u-|#?EVlVUz9QK-cUw(wc!y)Kn(7*wo9ryZmq zo;VDf0PWj^_EfqHo6$VlB6Ne=uuvOxEC(qmQZB@M{IH@@AqA2K+56MV*AQ)FVnTyU zmoqoQmq;O2ysiVW;$%;%XyFTD-MV~11tO0F$bmq6Mp{Xuc@#Pbaf8roAvEZC6jY>0 zxv*KNs1Pb3X;7S#R=$R4b8GT5sV0X0+K-UFy}_lAGP8n9f)ZP6a_uM{U^_#9?aEJ4 zt_MM+4HO`y>O~4wGvjJDG&I;Q8jS6$;JiRwQO&HIc-c^4@n3e)z!^*E?P@l+~h z;%6zUMiBLsr{S0O;=M9Oy4B}A4<`kI!tf?XszfQ}e+-iY0lDQC)w+SQ|fU^gko5qkO{$AHhkoCIY z9VXss=2JR zXO#!-?R-Q?T>dyAi`NJBg|xy(yRu9^uZF~TM>-Z1lKO4-ZX{6q#_&MMFXW68#@axG zJ(iC4!ZXP;!IJ&J7p(?9CUXH~T{LCeI0;9Ax8|5De-$36P$I*@7N@E`W{~a!Sp$(K`{gh0M+VrNZL7VY?u(mmnKB<PSIwjGai%X-F*S8zRpIhp&`u4m_k&Uo*{Tk+nz zT5wn##^K?iF&UYjjHx^`)%MyeVxEYs9awUl3;%sE>`&8S-%I_}HO2Y_BnGPzom@@o4(M+rU}H++)LSBLe-{ zQ8xIjV(ZknI*~G^52Ov8RSZ2gd^T|YSWz>0%vd>fRx;e1Z9@AT8xtoY$5|8F=R{Gk zz6ybb3Ox)?ol@e_?}TWM4R@0w-3i^uL;ks$Z2*8^PQGA3+KifiM3h1R+m52hK& zjtyj!V%Q0JIzi})IWgO&uh$@()#F#TPM%M{y$fg z`|iOmJYUEDKlR`Ww*BeD7rgboeX#ovmL)9ZQ?_6OAe6AhPyMHH6*~kWdo;gzG9Mcg zC3gC8EOv4;tM!K}oHhAB=JRk)4c`lJ;x%Tc6EBM{p#mlrnR(xh_J9@OE|6=+dz`p}^@lx01dfd&ryJ~X(@fj99B&!a(Rx#^I@ zeing5xe423Ezd4D9WV1O%XVm;<#@wOK`PT498gC7Xwo?b>(7GJr#+*mMfadu?a{Vl*4`+{s>D zl0)0)P(pGj)>+CSghG*$!_|zShI}h1*E$_> zzLjhH%9SoSl!yu(_U+|L862iPs8oOv5b4R=2+YMtM(jvIY&?J@6?{Q zH1&cT$OVu~fN+t32_QP_iV2`eAejAszTbCdcQ!YJhVwkX=YMz}HZ$+_`+o25_r1(s z%Xr#A9neU0L`*lzqwR28nC^f_@IsD@M>NXq`XEQ}0xk(cqUdM`4T+f!`2ug+7VCgo zK^_o^D3rq#a`q%fKTL7dm;If~h*96vVdiqiimWKAQ0yXEGy*XR5CSa>AuOC*YmWyo zM*t|`!wbQeNpF!62njxT0ONrR1HRL}#Nb$hkS!=dxSt@rNEVb}bO49A z?7)EWRIhNDP7speWgOy0u^mG%g5f3T;5$77cfka&w@f&W0A!O*C}b|YNG2OFCIduV z6Jf~7>0V(lg8*bpPi`F3_+nUkKsSmo=!k-Ms+UYSo&Y2tf#sMRuK0jT1ybrUS;9y6&ASbP$B(J9VoH z`@(l3=*AHWQ==&CEgy~`0NLy6UKRF@*990e0OHuFsPs-1CKG_{taYaf`@~rTbmIww z=~3`{s|rUEfaK=&pbGoM&GU~<0f0co1!zJj5dv>~&#JHwoWr732?&WC$7iQx0GS1c z5Epo7B@9fMpO`Q;DFM-r1VlR$5ba1nv?F2uDEW^3lxf;PZGNIQHAzFhhI|eA8uGRI zqolRXpHXA^DYI4o>Y8pZRI;pXe&wSXpO*tep4vNxZe5b_e-wj{4omS&L{5Oj#{3f}(tHf#*xW zF9d!YvsbUtzQ!racZYdFop!pYYfY9Y3eXJ#5dm;)I=5An%3ZTSl&C6=7Qu~S^s)`b z+V{{8u8jJ&xH4)FG5=Xp3?2u&-Yy+T!ndR$D}}RggA~3G(U(zAd=CwyxbxxNERX{r zNK;6z?gQgx*sAgLKsutK%C0e>XNGMT%07gr+{ZZ|7l*Ys;H@BwGVAfQY5|f$_5Bw*iA+97nl;C@n}#FjUN#Vh_QNH+X)7$gLocY z+i=1?8gWEaUHZkPIXG{En;6l0<40VQLBZ}O1ogNmg=9xZxZ=_Smw4=-AYcbjDg-Fd zPs{cX^VrW(G|5hvfM6z1^Kuwy8rLAo?}rer$3-wvW`B+>0ZVz2B4p&?Cx=H#3v9c-GUB?LJ|FsCb~ygAeElm58m^*CNYrgqt35fY3xJxAsTyQ<$JI5YEcpZQc%m4(! z4pzvqpQWgk9e5V3kfXsFqSgc}P$)RY3LL?zWmZ5&0*-0Aadi%H0tyiX2m>SHOFh$w zDHiP7nPU&5#@T5cbVtYU14}LTHn=Gm#eqxQrZ5mRBn)U@@ByO39)SP^w3rV(qqidw zY%q$-P@vivH@JWZz)avY2F^@Cp)k9SD13|p!5n4+3==ol6BFbkJ|MW@cvK^tB@A@Z z2*)fMp%oedXWlPRCD58pXO(dFo2mrd2ztRPf#e;a^o>fuY@~aYaKNe(&h@oQ7)!j+ ztxCwUa)VVR7?dzn0tC-c39uOkH#9_b!a3rGPCDVZMJJpkod6?qVLE|UI6CQsbKg)W zjQbiofyAhkCJ|}y6R|K_8?%I+j9`@6qqdLjo?-HYwG&`kEM3gV zMGYL=wkVW_MH5gG=L)VBP?AS0nzVScCX2?|tG?q=vOayzqhwL~o=0)Lwdp(d9gkY{ zexLCuw0NKMC~4+C=F#yN#-k!&q%|erGj9kPef@yZ-%j-=U_|r13!T4WUr`SmcPgLC z?Z0)?7#sc$If}oX&eK+&&AoFS6*z~ltDVFA7C-kn@$&#*Z&i)??IXc4*q8mJZ5Q1S zaG>&R`$Kqr&{ki0s{L_iWvIO%tMX|3ss(%%0p_#ft^loGoaM*$4QD&fXZg0PL=SF~ zFl-cE%5;trnhjHhD@|$#QURLVLK~n{%w#JKqlN24Y7;QAr3!H2>v0Lo=R+~Ir3$2L zE6Zt$A&gk%S(?D2pkd0;GUg@}5&eLQ52d?jgi)hHgXlgN+BpREK-v9~jd`nK-%uCx z5@SY-5?q&HU`tn7zU;s-s$@)P0ds}0dDL=0y4wZbt1x_27CW8xQ*knXl!+NF6@+2k zQL#y}H9?tBHd#V6g*`gkO>2lTwN4Z2hH6~OaEVDR)fm8#M9m|2j2SNhfoUyw9W|7c zNp%1OO=+p)Q&bXAkjHCgQSi9I?dLYZPuI^Ga_!yzHmUWnLZmP%rNT+rW?`$wd+g8pKz z8l%4<_ea}lv!XFmy->M7*T-@%Je(-;yOH~&?T7nH?vJ)Z@(g!91H^CpACY_N)gt#t z+Y1&5xfiYz6aGTvJ~l74w?-n=v|;qACBxhs9g?MwS$T_rx7c>mu2XG8wk=|9vE&vb z9yQ<=+fDU_-KNeBlWmdPsHwJCX^Vxn80VOTQk+?2G#fEyZaZp;F;O+ZelKc(sf1yC zDbKLGlxhgyH!!zG+caS{+NK$+(KZ|k3J}MptW*SGBPiOyZA1Q|sHbtw-mQ$Uwe(Xz!3T1=qD`T^C# z@WqUtY441NDPU_fOmkSHVKQ-F*SZ-ElSMNct`w|mIvaI zE@q$b^w+T^jBQ~*7~8^fP%7jl#?$E{v}u6dmpm=Z05{ynJZ(&Ox#>RT=?mA~eKzm? zwK?y_G*#_suY|e(fzH3wy5r8jh|gJfapc8;4_bGgFR%G@J;I4!fxSNlw*2HC6S`N>}~!Gdj(eWj+9N z#b3wRWY;d$|81{Usc2P-v|TCRaiv$=<#kmm_O7z+fBMn&t zP{M0JuV~dO&ZVG$;;Ki1p^8?gj>dgxJ4bo#pDM046-V{?FhY{oen!Q?6h+(T)jlwK zQnhNuwU2sI0R|mR@wz^cN23GksuqdV6&10cSG9WTiVC<07Id{qiFW06om1^cy?l-% z*=s+It{jTC!>jE#x>B?QifadT<#kn4R}QahzcLyfP*>ZLD7xB#QF*lkqO1L0F)FY2 zzI9Y*Rr_%-pXI=)PNA!0MLXivb{bvD+AhU)gu0Rmf7r(9b?uZ#6MoQD1rkM9M|f1b zL{~diO5QQltJPRX)vDSXynM<6qiRA|PDQKqMoFb;^@<>sA`s~Gf)s*QioF(zqAQ}6 zSI`Otyp+6SsH$y?jY@W%1ED}J9Oy_=8G)%@?T8XZpsZDU%~93Us8SWzepQT0v2T|N zQ^XcDDp??q3J6-MT6t_#s_QHW1#+RQWR($^?$!1wQ3QImdaqy$MbIi;aqaX9wovSc zktn*_#~jEAL;*!0P}cTZN7V*Gfm~u##DN)JZHHpvzyn^v7OIO!m7%ykPz75k_6j75 zu6FRKm;+G&LPH3YwJp|BwSrI}mlze%Dyt{4`e8~|AIg>7vs}r2C|A>ZmaA!fC|9$4 zmaEx)C|3)5ma7GQC|3{nELRWrp4e8*14fwm-r+HiU}RT-+&!lC#c~AzV+P^T8HMpw@Az>g z!I%zR$5PF-zF0m4V9X*s0wadv>6KWgq!5Vgdk`88slGVA2SAhwjX=nS>Bc02k(`!p zm1AEyEhIA22#vtVg=t3z!ARat58APByd8oOJL9p}J_=(m)nhWj$Zk^i>alO!B!Y1P z;Zcsl*h}^3BpAuR>OnpBjekWjK1_I=7KO2w>M@mIWXG&~_1H&_8DPvKJkB;??6rDK zCm0_lkFI<5*hd~6U|dOfTo8q^m+CQtV9e`TJ@%0+h$A$FMj+%uv?J6Cfw+=f$nMo+ z-?)%Ps|I3s*;{;$Mg&#hJIa9#MHEKC4v7SWQ4$bF!6_Ow0b!H`gi#U@MoE~TA>Z*= zBkD3x)=*4CF&w5*H5AiOOhYkkeulL6*L<+%uN<1`F<#WoftoJ%|6f=<2yv>f3JJyC zM~jUW-%5H_?4Q71iB-SlM`IgB#iplho5fy=O;6h1!_(rdicOE$_TuS@X%(9uwAJBh z`GSf~_uG!+X?0%3rh9GS%BN~QMYJG$rt-;J@A`^OZd+UBBegSwl@Hd=YruCY@TrRX zYdzT1L0_V(ytmft#3R1xQK{6<%)%qS$6D#GowopwIhZVCPX?95Eid(4ZUJWDTne0B z86ILqWvRTT(uN}$75vd6FT$#Dp>e~}z0%<%ueKct&G>p)+Oirug|S?<_#8#;W-6A5 zDS1Wt=w&qny`w9TS5fX-)&%hxm4ZlDg?n`4CX}Y?1E~6*frxq`YEt3OY%HhhLlJqP zDyNW9<+XS7*phTsT#wF)ZVzw*z^ z4h%=^%j?=sJs+Y%iI~Sz&!=xvMkBhjk22m@vHFpO@EG;H8}lC?-vF+IP#HokT#Bj> zMYuwY)%AfFUxIq7c4iTxDb(F4)xO(nKSy(W`+lHxM2h&F2~`7Vr|EM#M=&el(HqD^ zK+WsIl}Jz4zGnc3kGc@@l+oLfXCe>OMMRB&0QPun2KEqLLv*GK>>-5UwTBpch`=y- zz+Mfo_nu-uYhdq)*G^wqYcjEiJO7`o-J%%e1@>xyy(0>!Yr!5qh$FCvDAEzei;9iy z5aC?{dniub3G5*xhmcMO?9pHmjk4?D>Y3{i4Q23Dd(dldr5J*p*c5v_#5bY{FF+r7 z&nJP zFUt}0A%sdbi1~I8Q0#kUJ3eDT+)4(EzV&uWpic#b0Z5G!W4_&(lLCE*W9UO*LZHt( z8ew38J{fySQW5Vn(Z>Tc(N~QiUkCJIuoU00hgcOL?8@LN_HC;DECnk-Q&s}v`&NV( zh%UZh@RU>!(Y2zFLWIP957yREF^DdRD@3;zc_#XxMHEn%xDUmtx2WtMKwz*7^r0a& zD!YQbK;Isq?|s>jT{cuCyQfX`L3SUkJ?J&$1KhU<=!1B~q0f+A?`XuEcQ9gPa9;*A znm`|l3jm2@DKg)Q`!HAvq=5S#tex3__%4+nrPzb2y_KSk2KS|lFLM!IgywrvI@pco zyTA5073)s(%_Ys-2dZyxm#XiKDZD`6{k07i)wj3Ts!zTE)klLBs_*{VnOL^yQuWP9 z$r2wAWAw4^dqjG_8{KzrZJ5yqmDRQGo7N|~ueM9w_qmBa=)QYvb&Kw+?X~WkeF3_U z1}k*my|pv3)Xb|@_(S7^7)P2n+ z`XIdSTBsl48$kE%@3rn*c>%f)gEe%YyLRS+ZgpQ?(K|nZFHiRe!pS$V*krnW!r?QJ zRwcYV!@o0KJK@w(5%TARCucfw!haL48#fKF&D2`LSL3FkWQ2oe`evqACLA(u8@`y( zMO~>Oqiw|K1X6{oWwecTOY*N&m|pU%Os7h?Q`|P-7Cw~eJ_*l>mQ(CIjkXae5T3B` zl8m-@Dx=9YGQA?x9}=z*x6N>q1JsrL8*M|DgsG<0Np@P;y%CO$>C%|q43;Blnb^QL zydXF)rr#o57U8XM+i+A&ITh{+rNVga7e0yUj=*n0M)LryKhnA|wM|QP?0Ix0ct+cp zPz$()b78cNwMX(OWbEK1U&3@Fu;54w!BIXTuK|m@NFa+$zJhQQjJClif|kNBFxvh= zI0L31V0r+;_;cF~H<|pdINoUcE7)5Y@r%XZWPmRgf0OmRSo}?v?_%*cnXQY(-(+$w z7JrkyxLEv6y8c4>TlO0<8m)+$L$G?Jc{?}jV?LB>Gup< z1HJ9R+X;HxYnH@N(VKyT#`mR?u@QWX5=9rTr{4*0P(I(3Ko6V6V6xB*54Zfx=C1LJ zs%Htw*Zdqv#^o-X1hDnEsXmHr9A-CA4!obD=4((i!-gZ~x&6O*k*Jf~M9Dmw7WBCf z`HhuPJh`RDCJ^Mu=p$55ZUe0^qtXpqMCJZ9^cTHi4E%81uJw$s?NQ9CJ63{@<$^OnqhmNGwUgn zaAU9w;5K-M=P4M4fR_T4dj8CGYcx^$2-XT?@&zf zok<5r3I0I`itl(jQxXVIAcR8&5E;Gpy`f(+$FV+H$ig+5nH92?gj_yP}ffkvEeLt1AY zffN>u#$!|mdZJ4mK^h1;BFWSd3k+}?837aWsP50!6Nyou)F5k#O(4-N=Kf0k(f$xp zP`&?z7x-42fh057b$O6sWLQDDI*WaPn*YFyy5&KuDJ%_#=$r}e!`B(4+h@14^ z8FjAFHBQP40t>k?0lDqm03N;!*Ut^7kp(x5@8 z2;x7e+DJ;g4*#Lm8c9<%9o0YvtT_BH3;wG6!Hdw4$xD@k_!91hskD+Y|lj!@ckC$&rWv#`CLlTNQ4ie$wXnbt*-1@T4lqD7cfVsfGQf=!CA zA)VwS$`4vox!&Iw?60x+^ABPXcUd}q^`++{5mzuyePX=v<;xoq<-m-7j(>m+ZEjro zvs-uj8k}xllT-h0m-QhZ1NEPvxW2YI5&$jt@+jrKMKQ4^>u&6!|TBTo)=0Un9bdh+M94K^9wPg+A?^?_O#v{t-w(7^v zQh72?xh?T^$Ve5Y6UN{_Q2!-crQ*L~zyyNORTGJO0LyPTgnMF`J>U# z-TLzgTcD3>5Wn33%onl~aQP3D&TFQhcF0{ju2sq%((qHkSXIO$OW(_dxO#ctsH z)_y933lk{r-3w{VrXA>QPVQ*C=?VZw1;o9Fbw<$d*x(*VmlS^+Oai!FFj4s9y{NJ z^3#BwoLZte4a#OR3f_yK9PL~ZF2Qyl#Ix( z%|sxS^bba<5ueMW-92%IXtd)2G-JgYh3Fh7hqd@$Z2O7EnPGa=VtDb*4|2-K+=T1zUfd5 zsk3y$vg(R3um@OrA#&r-6Jwe324OQa1Zjls zId$^L$4(_r*5EG>s8pZB2+Y7vRpfYsQ~73BLj;U^4EgmWha#O4n5zb5?F6aBv@fycbT@U^8=0wcUZ zr1Lvj`|3?l?l!M9;Sfs6z7s(>1xi}j@B)-T${03`nV+sm#4NBhrj21Ok=W?fwxMqo zACPj=SEN!2p}3<@V0PDHMS9|p9O(bhD{h-VE9nL@2Y1p>!EO4mG4vVQQLv_PX||!> z>RodA+5X}2R)-)qdNKdg=Uhp^kCIevD~@5sYDLdCT(9~c#R-RH4%Pp3vK*M>R7XB! zQ%63Yq>e0bs3TV)?Q!fnyHVA0vG-?%L)8kAROpl=r7uT%q6NeI7KNB^;hw&Fb6)xYbSCi(>KHf%~efJNe?G7e+GVx!<3iFfw{E* zba%zEx3Ftu;qRK4C&6>08c7ukUv7TF;T`t5;@fA#`3zP16E)^KS+TIKc{w%|ZNgnk z&c&*f(X8|D7nCs!)W~RV#hQ0U^Il50KZ!GIIOQ;<{Dz{;w1*OV38y!3?m^ByLAg(% zPMU8 z$S$em9#Z?PRe@V&Sfkh8?!5}$_p(-qYm7Uh{=5H5Fl&;WR;6lpFqP!A@`{CTHDBX8 zN%UIiZ(f|l-GG^C3?Ec1^nqTS1mscD$NaLWi2**zFDIF_bWoD1X(6US4i|c~m0!Lf z9C3m{St3P`lzou!(>+CriUN7u>X!x&fULtT7!dkHP?m|$Shmu4I9EStP?^fiN#a5V zu}xAh64($lc{EuJ#U#8KB3Ju5c|J7J|BVld=g0{GuNux5~$By zP-capKDQJgI9rdC*WA+qQvGC2gBJB^FYTTF?5)m}eV;fB{wQn1d!shJxliOT$$k8x zrB6A%1&`%FlK0pniyq8>gs#cYUFuw!aohac#*KAmfB*hzGp0^*d#5`WKII($U|!zR z+^pQZhn`rr?6F&NmoB->X632Un1l)biq6kz@?9_tGxHz)T+GZvo&h!+#{UEk;KfWh zO@L??{^E8WRQfv8Aw(FeSC4^5gL$|b_-zsTrFcd^`kCyY`Tc8(?-&eG-bov}*gGh{Tvq>bzw@KTU0aARM4v`q&rc)%w zx0%j~?T3I8W8hhwVhng1yE*(KFpqD=s@le9FT2W_UHB6MKGq7oGEJzg}OR1qhGg2C;)NdKR z++GvC{~>5?Phiw&uR-KQflEmd%{fGKPHv7d%gv>8a{{RbcmkP5a{`G5cv2WnPTrO& z7R`-oOL*qHM+Kh zy#A?y5eiQUUr~c({k0QHTAO7`n9NhcKYA%MJk}y_JU<*tQ!J5rVN=AoaGfzh1Q6!x@+b%(~n)K6iusbI;PBGGqIr21N`w8T_Lhxj#usZ9u$85Kq66vDpC8p8H! zPsAeFsL?6>c^CC-L<1FVHLF~XDVqUZV_4j>h-QjK4741JUYmhk>j-HlG* zlu9zAfzB?6fiV6Bjbf39pn38)TxjKu^8Ar!+R4Rh!68qQIjnYO13b5=k*z43?i#H;XZ_&zk<)f zx(!x&6Wo*VK#%-R!a**EmEXMyS5T*>G73TE`f~tK7J>vv?QWx>J9+8gi2f#H{s)=ZN#Q@{5pCGVL=uwFhUe||F zO5hefqiVtrzaw;t6=96nV+P8Iu&qQg>-u*W^idPWN<^n6F)+F#6j6x@%V@;a1ri*2 z1#1dD0U<$AowXGdqkU!!29js>F+|F~N<=z0VmgD*ahhB^(PY{OOrB-T8N-W0i|Yq~ zM3bwq7TMZ?v*x2Z1KcgmXEB@84wQ+)@QB?e7Wi6@6Ns2=s%bdf8lmg%Fb-LplmtFN z6cvk5kg_I78LoCAxf?0fAhUNmhnc zP`y?xXeqsnX=5ET=RiZ!U{v{p=&hiyjO_!eBp;82FuU`-4#OiD&YEDvOb zleQ#3J{T4OLRX@~)(cLfwqc*iOx#b9azOw<)%YK_+WN-Q8C{dKUAa|>>x zU^G}z0BXV490Cz0IF@v#LlJDPq8rRzZRF2!gzvlzyqp(2`(+oO;!CX(p7&UD$!oFtR)I0UHa2p zoHF-&Z2w4t>41I(ANoB>N(+>0jpD1J1jSyCG($mck+r$o)9F}&Z@0+A{tQntyBYS~ zY+4Li;hJC~kC;YCe`@kZ12mim&h(^;ir5IonwHZcC7yJV{;8=@35qJDXNdGK=)x@D zeg;=NqtNCYk4nL-GR@j|T|>z4!w8uNgc26l@gte|y=p)QegaS-F5yFHaq z!}_qD#$Z9s_e|78@v3 zexGG@|C#E42(c^P9zgBxl3Nba-<{-pc6K|%kRNOgusEW$IY4QtRa*8bE&G+019b3m zbfq$y?}lwTqz=Dc9gghgH3RUn~kqxl4*bg4|O4%vz5^v{ohM&VPd*d%IGFMuOBx4K>n0 zHN_eg+G*l;f=p9mNvZo4Dr~KxW*pRvlbhiP9h$kYl_@%mXRJ)gfp^V?DeN(soAR)A zg9hMrz1YUUYwkVnWr*9yz$@+8 z#&C%xkjGmW{-4{QlEZsbu*5O|`%?%D4tW^RiA^d)EyjhP^dny)&!S=kV#n|HWi5wUVjcsh&F?aEZZ7)&r zAlY#7HXsKH&M;==uh`YYWjgNBikFcF+Oox6eMuX&XyP3nX<-@5qeSN${@>W&Lz}#! z+q-B?9ryUCnz6l0?C&weXUrWeI&=mh8M}N)oD4Bi$t?=PEmHmWVpgxK{uEGbtXI{wQTtN(I$ zcTE?=F4z#o!~WDhU4InL2ya9}sI6n<&Eos4LHGJ$in6Vsr#fWL94Q(8ks~}N4rMWN+=VTs1Mzv`9=CA{Hpso+{A@B>D) zf!;FE8!n~%OLLX#pP0ep-d3^c_2zmmSHlT=D>nVEIfx5nIIWJ;4ukJAnky?d`J3x2 zCcNCNtJ*o(h%CxP+nT+C{eq0hZIm)oaKsi);XTLm1i>tOj{n_B97R5v z#f&{JFfX?8enw3dq|4fwTy`M;_7Lu%fDo|cs$(35K98T)N9S*3!?|S|69P4unsLiJpf^N7 zc_2m8J5Bm=sHiyD2K$3ayy{mVw-lSYSIp!6_d|3jM)e>J9mT000gqFx>Pep0tNy1D zv)UCZ67^-$s1yX4h9JOfR9t{c52FGU8L25+T10e|gQU=rjLJI1z|dbV1hcLA5GQ?z zSVBfKf>$pNrO=n^|D_XuIO`;5q0anNS>qdNW7YO>9zs_$hN8hG>7sc~Jc14Y=p>33 zcGc00q1XuvTkfBg)u9_1wJ^nImt1m zK^?KC6SnqI{EGv9Gg2}p2h<^u1U4T$Spm|b@xzXBLxi{xBitJwKBTi86l=lR9Kmz3 z{qgbgvzf;U`8jUNk4S<195>}hs3yqI@n%DQ_Hr%k*+1UQ@*`_C=GN*u&N@+X?0EAG zx*Zeqt(@&ENlv;FD&|a!EUf}{4soIoqjr97U$R69QWgo4)?@?;3*kjm&@cmmLXIJd zp>h=jqKN;yi5wDYpl^U3Qa9na`+(!|^FOCw7~XhP_+Q*!1is=N10SS?03j!}vvN@h zClobZ=8?zbLwOQL2pwM)zcY~F3niI|2-&DDiVuQ+zA{2couLmQ>xk3J{(=l<@Cq=+HSFA?uk5T3$nbjv|muUNS5bW_E`qSILZIj9c55ylCz!4-%N7DD4)2O)yO z`w^C7f~vL@y70$P5Z~vMMz113hQMH{uich^wHz3+O~!}F=wJrL?q9HhH+`Sk3qFa9 z9n$)^8o;)?HJ>IC^9K6woHhpW)(@KySHqT5WA~dH_!ZGz4iu-*-)Q^{1)|&E@EqF& zCKYBCAtAP%S}K%Fkr3NTEfr2%kA&DZYN>Gc8y(vSc5I`jV;c<}+W_EkaM(IF;po_e zvttwK9h%6>>e$A#j%_RuZ4}PV3p*@60?!{Q@W5dQ>=4T?!bCjxo>Kaqz8SKRR7kMXRNCQI4@YzEEVqs z8_q0)b|^#{_e@3m(mewULepjKjO_aqcNSF1(!?rgdvD2y1=oic(LD1d#f}SpX&*q^ z=6tuPoVgk0un}OBLI<8og87-UKg&T6>27!`NhMqJ6;=C8)jp2YlmrXkf)hB{*tb;% za3LxcNpswD-Sg&cc9-#mF@YhMVgPS0L#C_w-C_8n-~MyE4Hfsg%U-1_fgvF;N-VXM zNERjj%xzk)KLXq{X@nTu`FFEWW4eAmw;!(23Fc3w38-A1Mcy7TwOJaLm4yG$63*(Z z!311&)+qXe#8d?n$qcGB2p7N6Q1YP{4g&Id7<|3HF0Y@>RTuu0_sf(-@*fhN0-bH) zOk=#VKLO`>QswGwng}rnLxHR;YPCPNN-f=mmVop8t5gjidV6}5KCgd*tt41b&V5n) zb9j){vl#76*;hS^C_Nk{Icc611E6;#f7aKA=f8k0f(NQnz_TOK0uSl$Z`S^lj_p6* zv3&x4Ix{5(ayuzyt&MQ@9oa7@<7SflZ~G@D;XTI{EZMVqNMv_OaP>fWQH^Y$j;{pG zYu$=7G8Bh$m#reS2Zp?UPY3=w^n%@1262jnce%^fh(ga&AuEgh4TZw*8~oHAJgFB1 zPpRl?WJh==Tj6<86l$K_0iGLr0}mvzC;Y&3x8lc;KRoKYbfI6qU=f5s;QA2KFPoq@;7V=+_xw-mm)DgJ<2!@^ah!h9sDzdHWuion`sH(y zc0`}_M=v`Qk?$nky5do}q%Qw18m2#ic=mhXS*FQN{%qpeJj@bG_T&#&wU0;xSXehB zD(_Lfct-93_jQ0u@a-P(rMs+Bu*!Q>&Vy%Df1Z0DR5lwnl2u=js%!wL>XHyLbg%#IgH(KegMo0t!QKo9%1f^8~unXnK^{^l&tN zK2o#QEKgOVjo;m|@h8x@0X)@!UZO^Oz&BZ-Zt>kPu>M^SOkLkn@b;@_U@BoDHGQo5Dj@SYL( zuC)>f$+C7%$UoLB{NIP?u&3a2S$i_oTGr&B;b;V&<0SSRiFKhjSVI~5<5J3xrCX*@ zf?u3j#m)KO7WEAMm3T*b{y5oRh>jx#VQ$RO&w?TYwA0r+3NABCgiyk$ueDl1Wc`c# z%Vw}ol(}D;bee`YFDI}#q6TjM_0y@KL>t*B-}y-XWWx~t0Q80-4CdeKpPmE@_@g&T z&tay(jxe;e10I~)_o*FTT!ydJo{xJ#Dw145W3EurT!8&=6-n&w8fhlIqV{sLy92RK zuY-yEd(;H}j`FQ0a1Z7GQpP7a19$E}9f^co#dez*-z?nEW{eS$!-6+tZRTsT<}Jfe zrQ$8np=w|iLKy9D(JTP-mrx|#|{Apr3rcX**g;e}g!fvmKrZGY{p8G5WzyOgNw)kR3_nAEVfAWAF<{v-aOM+k{sdz5R z`p#j`=-ptC=1qxG$uIGMp-Vv5wslF(oBBy5k0OaVAOQyeYC{`D&%5s=$k$+8hFnLD zLklE19%Oh<9ADR(eC=!NClyD~ zzU5D(pqtK};wH;%eXjtE{QE0aj%V7!2=g za8#!(T;wkE(pawJhBEZC06#Q}N9)}t2l8;N>7!OzOH%ymmH4YV&|;I4R&B5GHMII# zlccq8peCMOTeV%j@+7Z+@ZGp!=&sE2rH!GV6N03_t5>!!M$Pt633tN67yh~5yG=_% zr02@>$U7f;gqoS^=x;R;WH@5ph49ziGt|Hhzq{9Mn~unke)Y`>HvhMN_)l)znl?gi z;iy2iUF$y`36y;YvW-{^*~7Omu1NSJC{%A2ws)tYx_H5B2| zk`cd2RJ8>Z+!=@eBk(^3|Fd|8wYW6&9*SEal(iKZBC=xIyA@d--W?s@1(!$dPA0m^+H|Zd7(oZq-7;QBp!tC_9K#sCKeSNOA&@n=2& zNVb?;w^o7US}_7E{^eLOIj3rky1oCIh~mFOO~bbfuOOlnTutGDA&P%B4j+uWTW{)j zCX%Byg#QSC%4=Vp6h00APOH~E+jUfp_&wXh|03jpgAte&(@6wh`=y0xh>kU{&cdVg zljj%#cfOlB#-=sPixU4X+goGv5nuZ(9zI9P6c?Mn+h z{uP5un)AOW*l8?<32$tk1XdcPROh5HFF}6cCN;oa()G=wiJkD`pQ&rp2g}+$&hQ@q zKbmC6jy#bZs5VeGiP-X|3T>1pG)N`?Mj!(f16|Gf>ygtDr8*Hz3YE7QOeN$Lr!{=z zQ*6?U!O(poQSg(9Ov3}9#YSopk=tP*+Kg|=_oD2z znpE5fMW8Q)Dipd`@cq$BVjLkPXcc_RJ{{!z4MxRBaD5eS372SL;eVFElQ zC#9dhg251QPIq8lL|qh?{ryz`kCW6)U7B!El_uy2Bt5QbpYX-*WTGwy7Qkgv@$XSn zO=|_Fa{>?J9=Nc6lW26c$4f$@_y?kurLz_P3h>z{FhTnN0UIg)E7dgI0eq#9sQf&y z9jBD+pM{4R;~~}CfO~~qb?&MG9H=*BNO+Ag`2vsMqgF}X%I)%^ z%{W35#`KuzN;##-VUls2X;1$1iocLJ`#bs-wlk4%5%HOZFKASTrbOu@_!;s0=~%f~ z`6M`_U@V^UZ*-U4gP}u`e|#GxITz2SBoA7}0lnLVKZhlaz@4}G@524|A43B{Q{ceO zG^eU91SecAYd>(TksUVJ&+4pXG-4BWA*w(1m)n79ZFBe^2EPRQhn~BOVg-V~;7@RQMUMzV=6?;=dzfb?TaSDp4>q2T@JZhr#?>-1LYe za|ml13L|tmu;^=lxS&iZjm!MAFz=H}{uLFgvsqX8?K#?_!FYl0v1!@KVTJoy(_TW2 z7x|w?+ce!O0BfLmo-w+b!@oA*^SC|?J&i1R(WJputucYc)Jr3TwwMzXbC*f4lgm@TwOv=%8HV~u%ZMy%<(-FVT*LrFGw|uRM`N=+g zlCO2_iv9AN=q%DmJS_cg(^9O?)$0=43BPTDU~#Fi_i03CgTlhz7kt~mvry!0grj=h z8t($I>&~5ynBR8*m45mLC}56jmKu2Giin}lc;OJ;oFQ!%mZ&{xLxSwvY#)C~{#ba_ z%WibzFgeo-Gb#ODGz?1zEa=5xRG7}fU5tmTs>sPBWX#D)YoZlFL(P=xPoM7+A3HnX zVG3@EA5RY^gi!asNF?8ZQ5v`x z`a^#?+WuIg_l*X<55$j8dSSEgj9uDL7v3oJ5QiGf#w;Ab@(n|St2FOi|Lk2h+%6B_ zn61sJW8fW39wDH^l|{8VT4>|Lpe$xB`V}E$0sCTAlN_k1z6$ieAI(JHX9{&BDneiB zUFa+5vq!k$6Z#O5A5~XIyr`ppHz1Ls9M538i}2|-04cB-fR@B%_9yK9jffW(fd@#z z|AAm&Oh?JY3_;QGfe!ef;U`1A<=+jRxB6!2p?sP2SIKVxrBDP*J1ByveE8av^6&Ar z4=Pxx%^DmhJA!`x!ohG>F841>LR9K@L&mDJF-b$yc6bvOjTR)kNBW6dHDPeLEz zZd}t&^Jk64@f=a@cX`rhYpkvD;$8!X{1kV2d|*FM*Suwo={jKq)hd(jM} zf{|FI4+n|iLQ8XU@YxC$FxEG~-~Bv2&qolZQGW;Y3Lm!MPv{fZSLhRCz$R%~%x;_-}EJbTkwJOq7`{lsQ^}NjiyBe`x^O6Wx%I<0pZIOydX`c1?|3?wdD>Bgq~(}F%|ZOMuHZA$+tV>fz$L>$XKgMN zSgC?NM5=Zc?rAk<@My^QajQ~2X(d0Wo%Mx^%0mff9Kr3aP*2&8aJ69v5!pf!*B&@S;0E%K7T$sw z_!rCUFohq(O6s?x#=F#xtW~*!`g{3^jbsB0LY}ymyNqVi)ClTdNA>@P`UF8}1eJ_o zymTf?1&M~FXV|a7L|mVUK3sbM_VwDPqU}lieIc#B=%W^>e92RTZc~gB(u2m-D%Zwz-0|xSH14KkB?>`T;yZ)VIuHh$yGDbvf9qrn$m80oq*ck~ z#}aV<{|iiOBB5V{Ng$VAglw@mNHTE>cN8Q}kT#4O;0;XeH{rR&E7l!e?8Yf}+AQTy zbl}q8bhj47K+0PasS<8c>gRFokzb-p_MGQNz$LEXI(ADPsED{aQ@g3d{rGbni5<%K zrjO(fb$aZ>7>grX2Vum z0z9Ei!84);FhFnf#2d!86>n~UOhTOpCh;Pe8yGU^CVZfgE=?o-=B^q@A_*HICILbw zk(!RnrR*WHcG?zHs!cw|GlV=08Qg#)H?Ni)e><^`}vv0d;qhym*hY}DWxZm;t1$7Y-MnMV7Hz>!DYlfp3}}>=P?`W*0c22(I6EWgV+>AtXUBH&Pyf|z=OBZgBAS={nLC{=6n)7V zu&=xkc1ugVzWO;hmqj$`{Uoss1jH>HSS-;fAx#v2(epfv=JQ@eh!VlIe|u{<&=kJH zpr_)C3|cXuXw~z!{FlAt86srX4p30`x);X!CvI6Y>>2Tln2Uz`}*ruZ0LKs>sofd9Zovk>HuDw>?^Z?pnFL_4>4$ zz=&WVaavAVLm+QB7J<8^H>UCA2 z(gg$jGvC(WBGb_PGf~0;?Bvj$O%DC43pS{P7Uxql-&{Q;ZtixY-_h9sC3b zH2-B+bLd78k?^RGxq{h`F;wyqN}%3<60Ewrgf+q|7I)WJzq0s~sZ7FEWpF8jM7U?r z8|Gr;)1{L8@dy9qF2)X$P60=g~Q+>Dn5lXEo^g zTQZapB z5mp4AMYE@*nI(@F9SdbC=b#5iav^@0-(oX?UCun1KMb}c8{#)s?{`lJIyIm{*^g}; z*r4$_J%gPeA9W5(I0(aIE?ck9$EpnwR`N?O3G#w*3z8_OaxL**C;=Utdeg`b5eEN5 zWPiwmC_-&?gq3ao9r~z=OoNgNWMQ{WbruP|E%Y}o3AhQEJiI^zzJU2J)yE7cdss!B zRq`fM&})DT8}bNXGHw;J81yjR5_7a=Of*?b_SiqeCr_w7th?Y(DKMAd=IL69E`QUv zUq*E)=p>cUXi)AJq+?K`eN#V*^%2^r&y#oXGsYK^}GA;VFad0p;`96UIKMq)s7afvc!X=1lHJDf>sDZJSF_AiYAN|3I7>QNEHdck0zvu zgnx@BI7Py*q6wqqMOD=Ai_w&1QRMk(!U&P@Tr|NU5=x>8gGEA7G$BbOJRMC)6bZ|b zpw&=3ekEo3!dQ3;OC`izEPe(|W{?u-!i&XMMRG>{v{={U= zZ8F&XHw!9(aRc?KX35**N{;JX@&>b{Bd%n6=aOwTM(-bid1Jkg?ObxVS@P|;lBu0b zzG{|yA+BUf=aQ?;k`IfL{+#5*&ZTCVr6$DME7wO6PE7ph-!scx6DtEOCUvtKr*%nulcCX4WnLRUQ{$`e3A6Ig4=aPQ2n=XojlaS zv!9-SDxM4J`H$jx89mb!31ybhvo4P>?@xqAC%(`h3*y+6 zPpTCkdBQe`zhD9d%Ym4szVbahVsd1LA`x4QZ;y8~vZ~e2=vQA(T9TI6m#Kjt4Rq~M z%1p_Cg$^pV|&fV`tM;Q%y>$FOz{e? zn4`u5&9VNA?nx{{hT*f}{1nZN6il^vkTBPek`* zwkIrKk>kHn_I-wrZGP#NwtKV>)y$6y=Hj>sj5tOn6;phVb|_>hfmMkJIl%zyN8zrJ zUE=SfBM#?D)Hapt*J|00;yo*;noA+>2RKenM){2q=OW>cg+0bTQvxF}#CH|6VF8*q zgKW<|K+Dh30UGlUt`Ad-zk$4n{?I?QMZ&LufA!Zd1>%hOrZAH;*eZqJVLt;d2xdj- z{4YOdZ}e4*H%k5s*-z#P#6GW=wN`AHfs?lAG^TiZ9(-sp$zXGth{}^I6A9xMC)57E zn+({|h<+?X?3jmZQ!6=dsmAY$Hn2pUtG*Z}lAi4?TsKX!{-G zxpL+ThvcLEuWb3TgyE}7kk&Gwwo8#gjBIv+|4qN5t zBMWPv@$w>0NSX_sG=ybdSv!sIjRSPrf@uZ4X6d6b&;{Jb05_t(3^#G!#|EkwD4GYC z^F8EH{Hw5mpnmC9iZ%}hIDR3n2ps^shrr6%8kDdqNq_Y)7F24PKceG%@5&D2>xc1C zQwA^65lbH2UJC~q^O?RL-@tD;zUsQp;|pKWVSLxk>CO09`s;x})6q1JyMmZ|X;oDA zUrAS?+7C->-$g07p=#z5$FkWJb7u0=R@!*-KGrpP#~b8r*OUH9u;qh9Ud2BXLE%-7 z@F1oa_J<^4`z{Vt;H#` zt}#fx1^XNCz!cF!@lf0N`1eaE#J|7Z;r-I=_eC z=_434HtK#ZXVxtHZu6vMd;YzcTw=;{x15P>^E*^2`x7~{9Q&LwG5Sp3daFR+WLZnV zy;}~_+c@Hoog^nDC>mntU}_#N>sZpxjHg-Ddtk^N7Ca3_l74Qs-Bxr@a=$oPi0Y>< z_otfswT%4@w4_jsJ}~p5tqV^XkJ!48FqF30D@{DF&)`ICZK%=}JR%B}e;M!V1DUbD z4uOT;9E{0E=HdMQR|S1r@QLNP@TFlV=sb4@vHD#+oLe6o!I7o!VpOE0z3(Hq6hlAB zFV=Zz$md1*@uK`Nqx`qJD*pzRAIRqG*1@8D3H?F)Cl7XLUl@Ub(y&Pm{C94SuCMZ* zTdamk!=jmV{PC6ViW9?EVjTk`cElF`aPlDpZHj6H}tz*799aLgSuXgU*7^fZ0z=?4^m z$$S)do#QAoMu$tlpH9w^HY{`Mzkw+u_kz}s5oXv47EV^}XTj;xTGAC>|EeT~KK{K9 zFQ}63RMK`eXOG75{{KLVN7~SY|6ANR@b6vJjBm>?8;$SV(^bLtCOIKHSwTk5x(u#Z z-iW5EmL8?(=O|#24Y;{YlJONDYskq-v<;>iepyVPu$=6fX}2vdbr*S)@vUVrXIxw@ zD)6|N1_F6f+&~cCkMga67pIYJygy0JJSVMXRAGyHBw|}JpZ2Op5b6BMG4x9>_#^$~ zG`;vDh0;&@qpC+c=fTb~EUHykQ8fgpO#g(`ryP*6)_PBJ&bkr(a@J)#Lrox~Aun!T zb9R>{qCxjR`1j3XG(j==ZHVjVted$pXPxI=#I1rV#jftblz^x*9EDWGu*me%Rat&- z&};WXH;>-n`VR_w_70N_^)Llt3Yib zWQTw%`Hp)aWR3JhLbiy=@~9JJeJy95cfCFiGe>mt8j%(XA9A0aJT)-m2Ah((Nm@G* zDY)$_$(va#tWul!7p?Nc?;wJX1DJoWbULlvvOIAu&+4Oq}p{M zb|)crP9b)mLhLG+9)pRJN~jZ4^mu6ImJfvHupp7B_~$#YWV1y~S+#n={hI!Et6<0f zi{62@Ed%#d%fn6Svuok_TX2xsxV>vPu4`<1HATnD&bRy9wl?gVVW z>3ZO_|(}HJJ6ed1NeJ)Jd74ryd>BK~LRuFE*^K#Gq7KmjYSfscGI))$YbcXEWCU z^7YtL?C{z*VQt=_zqL0i#q)ke*nJs8!Zkvk^|F7Mv;mtz0(sCb%aXAK2JJG($&-D+ zh;i!=>}DaqlCs$m4ct0MWY4DTyG3>@p~w*O z@gmzx*-m7~?3>v1lpze;w*Vrf535mauR-j_;#KwEh%ke!?Iva}{yS3KMcBv=8#e+N zPyB6+ zuq@e2yxao(c+;wA@A+sus$%0isa6mM()$S^ujm}OnJ{Q@^J!`Am3ULufB+G2(9fv@ zdLed7GICH+`pFga;%kRxxe-q}>k77DI|AdqS*fljq_f^*s$sMp|MlZh^-gAgQ(#k^-34Prh*4Pz6VofNC7tfZ2gfzIY^ z_)Pc=M1?s26sKac;Lx7L86mR`?3&&f{u{yRis%{+D@OO9Re81)yLq>fn|E%xS=o>^ zM$BcGP}ej64k5*o&%B`ij#vRHru&Rk|GXd%TRRQ$EK}`sk|D@8ul*nd*`}Y~g@Yf& zQ>5l0$Y=!>Lf=D8!w5f%NA&N*fj*+dn?l*qFK-P;)>^SO!2Ko{UG z8FiBLuaR*{fwW<&69>u3f5E!c>7_Se(H|AD;|wvjz>s&)>zm|i!A-bI0P-3B=wEKf zSoHsoy?24Hs=D@nvmrpD;0lTrt(8Qv5^Jj|zEV-yn#kU|x8eh}T6!7W`somptG^;?UcHoldt}|D0+w7;IsDReUd zoWiTsP99b5;s5F`+F5tou}(hz2Xy1rO8(BK9ge>VPqeLAdn8qJ-}>-GdSZdL`J7@K zul}ght3Hf8JD9{NPOtix8Zu05I0skX8GS)q-RTSOp)A1HLypeso55eFFHEt4qA(l{PX}jOTQKH3{m1d9P*X5L=!uNJ zz=;*SrIQN~gwPq1Ps63q874FZM{IY!RQm+`hqz!MMF)&@vJO;p)+ctWb}z_ zeW6Wo2)WkDxyH3lA}Kg*rE#R^lpQjx0+-#vPw;+|Wj~_qrSt+mv9rH@-A`Y?Ot$s+ ze-wZC+K&HK_(Q)g{;=;~<_|9%`?2}M<^6im+o9+mq5l5Q^M_b^D)*LeZ!rGA6+r%} z?v!)i9HQU;93n%12jmYAMtb%4dVHMzH{lQMI-tU0_K*3)XIK2s<`2&b4k3T=a*V8bt2B3N}LL=fm@`PhDcPmbunKbM${;(Y-5 zq57j<{XLKV{%^t`*1h?0`NNQ<|FikSe+dpDf7t$kF@U!}JTWI&+hF|Rd&&;^L$k}S zSN5M=_ASZ|`NQvB_7Y{!Av?n#LStjEcnYI}Z*lgF&D?L5`)@{PzJahb0!v@C@!jFk z>Ni_Bo_WmeHw8&oCTZ$xS{A`iN?K3P$XL~+Vxn5^3nu=}YC8^fLH0<@=r4@0BV?On z)yTW((?Jf$HQA%MX20c=_ee_~}vzxgAnwBsEhx5W$m}|PUL$7w8OYCh= zIo|A+vfut4wQ#fCX>0AANR~+@qZUdPtN~L@Wh2N!xYrq3>&+5`)X@UGL7g*zR4%z8 zkPEfjf`wvy5UtF04`fM{KS|D zH6+>ZjaJ3Af77-&v?Fl80QF*z{W3T}`U9DL6H{A>Hk2Ml_fc61zl8&&cm8`8pXmJ8 z^_aJLhCrj6TNE2OK&(_cC~r&ZUUXX}6Mz4|l@L~#5YpU+VgwsAPi-Y=Q7Zp&T= zSQ1+HrmK}G+Y*fjHy5ytm8a;;gw*VVeeQ@NKZnV6g&S7?{kEcqxeudKY$;cP6J6q8PrwFc> zB3Slh$jDLu9+kD~G2l~g7OO96;xhE*;A%SIanwC~f7{jLrVd`qNBbME9ye|9T=KfC zSC5-AcoIoa_-g`6$gPjvZ4`bGNx{G;jF~^J?2y;@ciB10-nQ7X=P5g6=5PGBef{5* z3Yy5y^uITM;2dw?_9ENfIRoHjcteAr5n7llx_Lug7jNicFS>%m>%wsHhBHHw8_w~A zb8I{H)1-(u#7kfBX32g7Z_uR&#V$=;D;{R{)h5WFSjxT6? zrw3m+L_9%e(YJyP^~M!k*r+VRcXZ!_FZ8gb(;_vZ?)$oUB9e>y${xD+L-{B8KLBTBk@ZfvB`gT2i>*5bOViWQQ?I%CL z@?;QDZ_w(Ee&Sa^7nkVnRa~hrmR1DVB3dB^+F_?d8?lUOx8mkVD8!w1_|D z7_`}>mZ>NVVN|ANQhdM5W|ZL%ZhtwnaQ9{qZhtwnaT|v?C*%;>_M#IVi+DnC30Xwv zP9ySdyCCw{7a0$@PuU@hXmQzpRrWHMJww?ci)eJ&Yn1&E*#=Mcmv^wI)FnamFe#e| zA@Si&z!#d7=kl0g5ifwC85SW&_t2#L6~`i&ekVS_sWTf;pM6cTm{(IPe9&gWC9sIN zJT7Fac4lQ*#ALl>n1hoe;Nflqs#f-G(t3*#C)jvCrhWNu^t>1K?7i?{ZNrd+9){Cr1(C6RX?~*ln9-zWSL3>_e0ql9L zT<>sH26PDo&I1K&vV@82WKH&xkqrr0MCYHnwZVCSGi%#RPQq@V(s+YA&gA;j*Z!Bh zPY$sEHQr@q?SF||0Fhq_A|dJj?H%I`Ti=DYSN_2`!z^WojAOaWepK1NbJ-J>9dd^M zblLUFPLZAEf+c(M-&ZlZ`GbiNgz4+z56=Uzp8UZ!s6+lB)@ka67zG5a4eB8qyE*kt z;e_K6;U@L1q;#nm*XyO{Cbg)_I}m^PbjTk*j-Fu-5C_yVyxQ+Guw;LBSsZzIvpz7? zM9bi8^=;!aykRq`T>?C#jhDU*Cy9IK{}nC~_s-*9ve$xd4-Wali>d>Dz$oAgxJk1& zTrt>j2l#=a`1YxrRPh~CZu*H=J4wi~A0OzFFWh<+`ffbd){7^6^W;9|k+w&(_(Ld< z7=QR_NN-@{#NKrsOI;y<_y&FYnEc@Y`o+iQ55^Z#ocinSHqhE38DjQ<`9Vg#5Kri# zUp)Sj;iRd(?>L_DkM)Z;7G$x8kEdVUOx@~VU;IJp#R2%kSeKQ>A3i4(NDrAQh=ly% znO5TuOWuOQfBUHMhwGIc@`vBJ?C&f4-(B|k$`1L%JuZ8$vTr6ki$B;dcX}Ll6YY=V zRN8+^p7*0A+6Av1phGK%l&oQYybFI~rBe!~zH4$$%%75{tnS4us&<%PIutq*N9+kzuGcgUi7JjR*z@oLsmj7Os&0T=hx1oo_WS)_+cq@5cP z-Lx&}?gIQy!QpzeKfUkvwcn?sH9udIX@A0cV#Qe(`b}Ox)BcgJ{m*LroC3VkDwyQbN84yn8t>JYMGmKR#uAYm!n(<3h-JGp1s63`BX3lHb zvm`lNaH=C7se&oJ`uE}0`6 z^OM}lmrUbkQF(*SnCrpz;Onjj=lko47#FWD&r|cnfM`GxC&sw9=#_k?tQDsbz4Dxz zuwD=A_wQqGIBM^|pzViU^ycu{Y`LM{KRlT45T^J12S`629y;Zt7BYtmJF zz0ld>!)8Ou!D)YbatDXQ2^wYXbN?v~W=)b;`!oqQQLZc7gLAAaE-!jeU-)73-+BfdIHa?bU8VCG$0x5cK6zC^)%3g^VwI(0xO!cP z5z`&$in$PEI1{CZ)cg(h`w}7!w%@!rjCt?S4^Hx}^UXP_hRMo4Hbc~_c@}A#Ga8|r zFd;uqGK0KVa}Q+`eoOSJGkMVIUwL$9csF&~i5 zsFPWI#sXlIIhNWPJn+1sNeOIcE)KDI@#=ATkvcX5_H}qQ>s@mg0#zga#s1Qu#Okbk z7$my7hn8Y;GBxPaiZ9bkKI0pIX=`YT6a5ncW`{$}r>#@z84LR8)DYLH`_w7x5Yl(+ zaX=$u4^ut!L#(=ubk)U;1JuRgxb6Y6vk^2trvZ932`#78XCA-QXE9K|MjaYRZ+nnw z^{tax${qZT{<`8(V3?ozcAe%LYqozi9Ms&oD(8ZlXIAa$#BVB0168>f!GDNXOMkvA zeU#GWRd4AHUFn5N|9vLi9f03Sy~CBR!|hi7H(liml>W0!`t_E+!&~%R%^RM7MJ9O` z4`tp{Z${f+iZ;GI0tA?+sd>dVZ@ijnL(uY{#r*rHFiRJwzj6HBm|tt&zv;>a*i7al z*iYhs)lR7ilHbE!2%L|k1kW@7$0wPQsypP$dNS=L&Wf{dRAwD|k-Ls@|NLSha%&xu zSyj*mgi*!n1R41rQAyRs>D;qospxR?WR-tvJcZG>bg4J%ue>0AU0RqZUb;J~qZ^Xc zVG2ZnTeOkbVTp+y^66v`!qJnnH^%x?8CJ+T+Kv{+8r#gJ^L5i@%5V!r07ZLaQFwSVaQFn_OV~3pKQ4=RxGTI}q8y z^z&HhMsJq9fnx;s$FA?)t)Mi^%j*u{BpM3IRSCa#Jmq74`f7g4>gIf%pM-z^4g3Uk zD-A?d0@0V0p0aeN)=u`ORmhp;trC>(s%%Hn-#&zVnzD)$DJu*FT>}a+BsiOAc%AtO z``-#Z!!Ipt{XAm~^^E-{q;-uBU~80I%y7CM80a(@*{)JS`hB#XAT&q z!GDvwnU}tV^Vi9W{zZpYTQ`}Hd0k(AtWR1g32m(lDHZ+8Kt2A>9tY_0m-Z+bq4g*B z2nFP{`t}Hfa$3L3BVEXn^mU^Hi^b12cZ>3y{%VWG($|pHpMJn3{prdM6@kCF?8lWo z&t-p6*-L4FrRIK@{iw2Ml0Dn;v(uTj-u%pD3U@210##ofTx!Vf)yTdtCJ_zaWodV! z&I3XOasoX-C7O@Vxg(BonHWIJGTjcbQoK-fr9~HXOac5ynZr% zg+Vn)j1+W8b6rhyVbw4$fnvL>G}``J1{CGP*=zYsHZ&6cqy<34LF2y- zsuh5Q+{dZHFoL__{@>4ME0q~8zkj1bk7M-yepNxD;sFv-gcnc}&i`E0NDJ-%a& z+og4`>xklOI=oQDH*~7}ADvUI$ecgOoKr+jYEUSt^exZ<;`ip@1q5|)Mvt#^hyr>z z0otzTU1VK&kdi9DVP~n4r>sQf4AVbt8~uj;*Q>6j@30L3A$#dt11g99lWpAP7p~V` z{?sX0VcTzKSIwyZT;&7m&{X=y5m&Ev2Fp#`55jTNy~o1t&CItRf2wN6W1r*BB1-AA zv%=46t|3ACCU@yncl7h_xljeT3CXKb6yjL*-V?lgoTElA%i%V5j+O)$8RWlHFZrJ~@%au^a*up314L%L`k7iFpnC&GPcOHQ|}h{m++dM{JO&gV-SP2P@k> zT450YW(SuyI<_OvYpm`##@o41iF&=P?*9Ff58S!WdlD&EW6EmOhZ&{8$#cNzG4CG5 zlWD!2nz2{fYJRWv7QKT0R)=Rov(KYw|G-QYtrI9op;_VC(Cm{bpQaF5tjD{%ra7w06-e#z01|gMplUudT-c&zbf3B$r*R>;jj)QrY2pJj7)mqwJl(U_I{E zC%O*5$AWcBGG*b)iZ!^EfEh;wP)l(_r&l_O&DHrJVNjc_{9Zzob^9~ zh?3r{(LUsY8jIg9k$FJJe8Tnb>Wxk1{%R zPiJ1?0Aa+tTk8)R9UA8tul7q!PuQW~=&Mxa@UT-e3h-2#U-4-=m84UO!7%I);t_bW zenmm3b$A(HvQ1O56@^OjiS7Q)JK-2w`l9bl>t>fwE893;(CP}56Y z__T^R)H^?+VQmf$r=yTI8$P>rS{qjqMWO^Bs9Nr5(EM`t`IcAQr~&f@-K!5CscR}B^AvD9Jid)}?+!QP^yfNj1j zc>MY4nnwy4K)USw=BV~ns{4pbp~P%^@P6?oqOvmWh_Ve#KMBl4eEMd0R1?>+tLVw@ z1STG@tkEKwC~5p@Dy(?{nKzC7lS zAhtqY!iOKn@}i|Xz1muG%dxv3mMGog^xtHpCE;Ifg{qgiV*??JxNhle!h7f{#&|l3 zIb%=%Y4K!f+tf1JyB1ybqe#WcJl@tX-uQZ6GXFhN`c-^NDgC=sax0nlYjc$l&&Qf6 zed=yH!OXgwqa*>#)?P(oPBMLTLCMNQ>86U!aY&J{pHw%olT(wWmCrLVRoXRJS+OKZ zy@IrEdveS_Lo-TuYt&tcdt4q2 zfPhDyxKQMbP`4katqayW?rY87!9ZTaTB_|K2{)bB4U@ZA0&2S?kUl^qQip{A@I6}Mivrc^ZChhj-Fyg!x~TD5R2L$8ptxk!BX#C_AX9~sUsBjL*KBOE<rswjT6VSij1D>hF~IRo3je4&F$7w}0N1hrL>d z_~nkvgSzUxY@dCm1IqRkNW!GezvQR@McyYztq>yTLhOgqjMuw z^LknT16AFtzH?(KqVWe|eV6jfm8Be+XUC;+D}BSreJS0PJ)6CSDAii3b(Q@Fn^W-h zD)=8#(xBUK0+%f!JNS{DFqq-Ro6W`?vfLXkWV+-CZzzvhjo7!)P9_#DdN`S0Gk>YhJ|R&q^ebsh|%m z0L^b4%5Lt^gg+?eU&$mL@;Iy~$8Q3CtiDS~>xh-Eo_eYxy`@fx6|;cE^vx&4r@2Jr zU<)Vb?-2hGe+d2)in4jRZfVJG(z9?#_$xX;!yyj~Vit8A>iSjOtPUy1DzTn%wb_;2 zOgX#vdS>;B8ZPLI8V;S@xFpZ}GyJZ3>hTQrfc19K@Ba0JJbs6~%D6=L_VKaQ8Q>JO z!zz`&7+ws{pW`jM7#g}AWZDLD?r}J>lf`XnA<-`LZDBhl=8t#dNpdwR6X@o*cYDTP zEnec~T&9Sp?->$z;z$zMr;u{cfDwCw+8-c!GmX^R$jxWPJL9F#O+6xB{2WZr2qNK6 zB+^?Y(rYr$Vj{U!Yj(*RI4~EWglkwY7BE#CKn2`(Bx7mWPn=kDK; zZI^VfFL4RnbcEQ=0W0i47I`IXf-#oWbW~nV{Hdvz<4<;PG(DkN;m!$)8(BJaY`prr zc{oQ4)wmrhHIP+vl%%4gcS$O$L?p)H%-0QR!^`}REEOPJcTwcpw(8F-S;*z^5A-w% zj7wXZwQ?K78iuq_#x;SN)~cEhDO5A5rxI za?L^Xu`Ivkw@$8+wxtEVpO0r7GqlK6)GwaCh)5l4bF3uC1lrk2z5 z^Dtk15UEg*h6_Wc*hEUdier=lFB6+oN^a#~rNGj{6s~)|NB%x)t4mU3(R1rD^2d?S zB7Z#W}X(Ca_tCvKm{Tk$*cS1T~wcKOak9y(L+^7DKfJ9`EkoN>-89?ABYt_xz1cfo)6TYu`!=M)DDf zM>a8+UiG6YEsF*8!8!M}v=l;_iwS_TSH=wk+&HP-NdgJ!Rs{N05cgLm)8iwt^u?Y2 z+8z*ITfMal!cCMe%ir3L)+y0diY~CN=pXeDv+W$+LP2eZ#;RLE@Am}bHPcT|L^iS! zQ86g#AE~BsqMSM%SQo^K*~9e+6P9OUY)JH>+%p@0sSuumY3pACS=mahjXyB;< z&_u5QR68y=icF1&u3%=FTg77%Spjs>19$qxeZ=F50PaFAqCDKz+R`wa~-lKbH6UAFvtN9J#j!lv9 zN?+mQE_!~RUP8|+;%m1PCeEuB`L>?JAIW{v1w%+^oeKvACfL{%Hfxp|@mnuU=N^X0 zabbE`QNmx{I)PNRHSIsbPuk{WEdb{4gL0c$0;Jq#EdiK0&H(?MYCDjYyhVp3(qCo; zxC}IF@}EVsjW)InhxJEiw$S?)TLE_P6wPmnwl~mu7{qhD8;4q|3{!63LXcUTC|(Pa zO<*abyMqri<#rxL66vF{KoK3zl-rokq8-aC$4R_)7P;^NZ533$92#da%-Ek08pvJxl-#Ws@y=O9Iztx`6| ztM{@Jh~9dv1R*>V>0zHJS(z+dTd@U|I*wk;K(BRt{>6}wtgLt@?!St(10Q(eZGFl6;DnrD%iT`DO|p!xZ4*M*T+f6jBCiAZ zSY(4&{X431clCD3Yq+*G!&g`p#B#dq8Gi=KU#Vi82?SmO$1#xnc>0SGY#`AP zAO>3!6Mem zgNeKx@mDl%8$NTJO*SEAw?XawXH^U&v}xLWcr#&Jbh`WFzkxUL7#qpW8;?L{)+?{q~}{kxS>?-0d2kp zSIO@Pg+&PtwyG)o58s`o^^7=?;K^8)jJjVcKRx&h@zRx3E0L@YiWjd;`oojp3JQDW z^=Mt*tf|x}E5{Xy$QqiCRd+@zzA7!71ESZ~th{4PY{fw8fqksQSc2n6mAy&aLpnn} zq->{TL4Tm#P4)+sC5(Gx+nE&`!hqD>^vQgf-dEFb$A9WR8x)UFUNKSSMM*8I7|Na9 z@`?~tdJlILhVrK{G?U`w6`^RD(s|eIez#QdL59?)f{(EXCrcppJzll0I&S^4;i!%0 zT3ejE?`^y&Jq)W%ymT$c^YkV6csm|-Q70o~Svyv#phSMvo+?7hS(#_Gsxh2c{(2~v z&4AdJMDfPh%ssZO-Cd?OCHBY;mL9U_>25xCJkNxt_{whhROzfNf3-Mv`7FV62Eal@ z1!bJn=}-nGq<}dq@Yh8V|F(_*`^9fU3NUu_obYB{JDa3hVRRFXiJl{P;L9GOr&p&` z1U*(5&K4;UZ!$d$3gl9p0y!a9cM@VxD@sC33ksD(!nLGebR8b^o&tEd&D2Q!@)msy zO!8`Fg(Wr5g-$GK7+Zr!*E}UY6$$^zq0@UzTN43-&Ct#|_q(sIyj99^#l=efsIL4i z-uhRJ)!T=4R(xJ>AJmn<&D(&Ak$T%(SN;xf11mnEw>@>`@A5XN0(a4}p&fPQ z+ff07xE&JcGV)%xbWCR$Z&O{p`y7oeW0y7m=M4UK%h`sv8-=$oGn4;{oPGOGy74w6 z4bPM`>~DY}dDXWFe{KPSTCX#5xYJ|kj%0Dx-)lnrEI0gIQ+be>tXHF*R~dF2w>kvf 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

}P+n9Yw}TR8Hu5Rfmy$c!#HRQnz?j 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�m2gJx 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

91AO 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 !BLa2`?a6tkT6t5A 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

    @ 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�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%0D*b-w-%DvJDPzkSdPy3>IxAHQ()Z{GCFv@= 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

    PKT!^cFQwK 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%0Af!B)jDZOl6kd`)pxRb}) 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%0AHid>fv6<gh^b4fIR!!nfM*+58=Nj^=gY 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%0AU3IbAix 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%0DS7*`C&F;PT- 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%0AY!0E~BF-!&6Hldx!Sf_s7O`Bct*V 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%0D`11O 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 literal 0 HcmV?d00001 diff --git a/netty-util/src/main/java/module-info.java b/netty-util/src/main/java/module-info.java index 827e6bd..d066d4c 100644 --- a/netty-util/src/main/java/module-info.java +++ b/netty-util/src/main/java/module-info.java @@ -5,13 +5,16 @@ module org.xbib.io.netty.util { exports io.netty.util.internal to org.xbib.io.netty.buffer, org.xbib.io.netty.channel, + org.xbib.io.netty.channel.epoll, org.xbib.io.netty.channel.unix, org.xbib.io.netty.handler, org.xbib.io.netty.handler.codec, org.xbib.io.netty.handler.codec.compression, org.xbib.io.netty.handler.codec.http, org.xbib.io.netty.handler.codec.httptwo, + org.xbib.io.netty.handler.codec.httpthree, org.xbib.io.netty.handler.codec.protobuf, + org.xbib.io.netty.handler.codec.quic, org.xbib.io.netty.handler.codec.rtsp, org.xbib.io.netty.handler.codec.spdy, org.xbib.io.netty.handler.ssl, @@ -19,13 +22,16 @@ module org.xbib.io.netty.util { exports io.netty.util.internal.logging to org.xbib.io.netty.buffer, org.xbib.io.netty.channel, + org.xbib.io.netty.channel.epoll, org.xbib.io.netty.channel.unix, org.xbib.io.netty.handler, org.xbib.io.netty.handler.codec, org.xbib.io.netty.handler.codec.compression, org.xbib.io.netty.handler.codec.http, org.xbib.io.netty.handler.codec.httptwo, + org.xbib.io.netty.handler.codec.httpthree, org.xbib.io.netty.handler.codec.protobuf, + org.xbib.io.netty.handler.codec.quic, org.xbib.io.netty.handler.codec.rtsp, org.xbib.io.netty.handler.codec.spdy, org.xbib.io.netty.handler.ssl, diff --git a/settings.gradle b/settings.gradle index 9b00221..4aac97e 100644 --- a/settings.gradle +++ b/settings.gradle @@ -59,18 +59,21 @@ dependencyResolutionManagement { include 'netty-buffer' include 'netty-bzip2' include 'netty-channel' +include 'netty-channel-epoll' include 'netty-channel-unix' -include 'netty-jctools' include 'netty-handler' include 'netty-handler-codec' include 'netty-handler-codec-compression' include 'netty-handler-codec-http' include 'netty-handler-codec-http2' +include 'netty-handler-codec-http3' include 'netty-handler-codec-protobuf' +include 'netty-handler-codec-quic' include 'netty-handler-codec-rtsp' include 'netty-handler-codec-spdy' include 'netty-handler-ssl' include 'netty-internal-tcnative' +include 'netty-jctools' include 'netty-resolver' include 'netty-util' include 'netty-zlib'

    m7mDBz*G9F!S3r1Bkc1Lij`LzTIyhPF( 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�t}_9JZVA0%w;RbK7OL5;4r7zv~AR%sLGtz;^7 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�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%0Al*pLQHFkh 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