Home / Class/ ServerHandler Class — netty Architecture

ServerHandler Class — netty Architecture

Architecture documentation for the ServerHandler class in DefaultHttp2PushPromiseFrameTest.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  aea56fba_78b6_5518_b4b4_901b1cae9633["ServerHandler"]
  5b2ea007_15cc_23b9_2b36_e512a7fce7c3["DefaultHttp2PushPromiseFrameTest.java"]
  aea56fba_78b6_5518_b4b4_901b1cae9633 -->|defined in| 5b2ea007_15cc_23b9_2b36_e512a7fce7c3
  facc03cb_72c6_5e6c_d53a_96dfd538894c["channelRead()"]
  aea56fba_78b6_5518_b4b4_901b1cae9633 -->|method| facc03cb_72c6_5e6c_d53a_96dfd538894c

Relationship Graph

Source Code

codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2PushPromiseFrameTest.java lines 103–163

    private final class ServerHandler extends Http2ChannelDuplexHandler {

        @Override
        public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {

            if (msg instanceof Http2HeadersFrame) {
                final Http2HeadersFrame receivedFrame = (Http2HeadersFrame) msg;

                Http2Headers pushRequestHeaders = new DefaultHttp2Headers();
                pushRequestHeaders.path("/meow")
                        .method("GET")
                        .scheme("https")
                        .authority("localhost:5555");

                // Write PUSH_PROMISE request headers
                final Http2FrameStream newPushFrameStream = newStream();
                Http2PushPromiseFrame pushPromiseFrame = new DefaultHttp2PushPromiseFrame(pushRequestHeaders);
                pushPromiseFrame.stream(receivedFrame.stream());
                pushPromiseFrame.pushStream(newPushFrameStream);
                ctx.writeAndFlush(pushPromiseFrame).addListener(future -> {
                    contentMap.put(newPushFrameStream.id(), "Meow, I am Pushed via HTTP/2");

                    // Write headers for actual request
                    Http2Headers http2Headers = new DefaultHttp2Headers();
                    http2Headers.status("200");
                    http2Headers.add("push", "false");
                    Http2HeadersFrame headersFrame = new DefaultHttp2HeadersFrame(http2Headers, false);
                    headersFrame.stream(receivedFrame.stream());
                    ChannelFuture channelFuture = ctx.writeAndFlush(headersFrame);

                    // Write Data of actual request
                    channelFuture.addListener(f -> {
                        Http2DataFrame dataFrame = new DefaultHttp2DataFrame(
                                Unpooled.wrappedBuffer("Meow".getBytes()), true);
                        dataFrame.stream(receivedFrame.stream());
                        ctx.writeAndFlush(dataFrame);
                    });
                });
            } else if (msg instanceof Http2PriorityFrame) {
                Http2PriorityFrame priorityFrame = (Http2PriorityFrame) msg;
                String content = contentMap.get(priorityFrame.stream().id());
                if (content == null) {
                    ctx.writeAndFlush(new DefaultHttp2GoAwayFrame(Http2Error.REFUSED_STREAM));
                    return;
                }

                // Write headers for Priority request
                Http2Headers http2Headers = new DefaultHttp2Headers();
                http2Headers.status("200");
                http2Headers.add("push", "true");
                Http2HeadersFrame headersFrame = new DefaultHttp2HeadersFrame(http2Headers, false);
                headersFrame.stream(priorityFrame.stream());
                ctx.writeAndFlush(headersFrame);

                // Write Data of Priority request
                Http2DataFrame dataFrame = new DefaultHttp2DataFrame(Unpooled.wrappedBuffer(content.getBytes()), true);
                dataFrame.stream(priorityFrame.stream());
                ctx.writeAndFlush(dataFrame);
            }
        }
    }

Frequently Asked Questions

What is the ServerHandler class?
ServerHandler is a class in the netty codebase, defined in codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2PushPromiseFrameTest.java.
Where is ServerHandler defined?
ServerHandler is defined in codec-http2/src/test/java/io/netty/handler/codec/http2/DefaultHttp2PushPromiseFrameTest.java at line 103.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free