View Javadoc
1   /*
2    * Copyright 2025 The Netty Project
3    *
4    * The Netty Project licenses this file to you under the Apache License,
5    * version 2.0 (the "License"); you may not use this file except in compliance
6    * with the License. You may obtain a copy of the License at:
7    *
8    *   https://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
12   * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
13   * License for the specific language governing permissions and limitations
14   * under the License.
15   */
16  package io.netty.testsuite_jpms.main;
17  
18  import io.netty.buffer.ByteBuf;
19  import io.netty.buffer.Unpooled;
20  import io.netty.channel.ChannelHandlerContext;
21  import io.netty.handler.codec.http3.DefaultHttp3DataFrame;
22  import io.netty.handler.codec.http3.DefaultHttp3HeadersFrame;
23  import io.netty.handler.codec.http3.Http3DataFrame;
24  import io.netty.handler.codec.http3.Http3HeadersFrame;
25  import io.netty.handler.codec.http3.Http3RequestStreamInboundHandler;
26  import io.netty.handler.codec.quic.QuicStreamChannel;
27  import io.netty.util.ReferenceCountUtil;
28  
29  import java.nio.charset.StandardCharsets;
30  
31  public class Http3HelloWorldServerHandler extends Http3RequestStreamInboundHandler {
32  
33      @Override
34      protected void channelRead(ChannelHandlerContext ctx, Http3HeadersFrame frame) {
35          ReferenceCountUtil.release(frame);
36      }
37  
38      @Override
39      protected void channelRead(ChannelHandlerContext ctx, Http3DataFrame frame) {
40          ReferenceCountUtil.release(frame);
41      }
42  
43      @Override
44      protected void channelInputClosed(ChannelHandlerContext ctx) {
45  
46          String hello = HttpHelloWorldServer.content(ctx);
47          ByteBuf data = Unpooled.copiedBuffer(hello, StandardCharsets.UTF_8);
48  
49          Http3HeadersFrame headersFrame = new DefaultHttp3HeadersFrame();
50          headersFrame.headers().status("200");
51          headersFrame.headers().add("server", "netty");
52          headersFrame.headers().addInt("content-length", data.readableBytes());
53          ctx.write(headersFrame);
54          ctx.writeAndFlush(new DefaultHttp3DataFrame(data))
55                  .addListener(QuicStreamChannel.SHUTDOWN_OUTPUT);
56      }
57  }