Home / Class/ HttpSnoopServerHandler Class — netty Architecture

HttpSnoopServerHandler Class — netty Architecture

Architecture documentation for the HttpSnoopServerHandler class in HttpSnoopServerHandler.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  0dc0edc6_a74a_0a99_9be5_a85731fba901["HttpSnoopServerHandler"]
  ce2a2fa9_4134_875c_6be6_319b248b66c6["HttpSnoopServerHandler.java"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|defined in| ce2a2fa9_4134_875c_6be6_319b248b66c6
  5e664409_6ead_fb29_fa51_af144dcf456d["channelReadComplete()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| 5e664409_6ead_fb29_fa51_af144dcf456d
  38a6ac21_703f_7d5d_2772_e7831e8a40e0["channelRead0()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| 38a6ac21_703f_7d5d_2772_e7831e8a40e0
  0aad675e_3307_6c46_ca2d_aa6d08dda7eb["appendDecoderResult()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| 0aad675e_3307_6c46_ca2d_aa6d08dda7eb
  47526183_e8b0_7ed5_2265_4a4123e1c6fb["writeResponse()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| 47526183_e8b0_7ed5_2265_4a4123e1c6fb
  d078845a_94ac_2931_f123_c42b07e3a660["send100Continue()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| d078845a_94ac_2931_f123_c42b07e3a660
  f7bfde77_a892_5464_c0d7_258b56b8f3cb["exceptionCaught()"]
  0dc0edc6_a74a_0a99_9be5_a85731fba901 -->|method| f7bfde77_a892_5464_c0d7_258b56b8f3cb

Relationship Graph

Source Code

example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java lines 48–197

public class HttpSnoopServerHandler extends SimpleChannelInboundHandler<Object> {

    private HttpRequest request;
    /** Buffer that stores the response content */
    private final StringBuilder buf = new StringBuilder();

    @Override
    public void channelReadComplete(ChannelHandlerContext ctx) {
        ctx.flush();
    }

    @Override
    protected void channelRead0(ChannelHandlerContext ctx, Object msg) {
        if (msg instanceof HttpRequest) {
            HttpRequest request = this.request = (HttpRequest) msg;

            if (HttpUtil.is100ContinueExpected(request)) {
                send100Continue(ctx);
            }

            buf.setLength(0);
            buf.append("WELCOME TO THE WILD WILD WEB SERVER\r\n");
            buf.append("===================================\r\n");

            buf.append("VERSION: ").append(request.protocolVersion()).append("\r\n");
            buf.append("HOSTNAME: ").append(request.headers().get(HttpHeaderNames.HOST, "unknown")).append("\r\n");
            buf.append("REQUEST_URI: ").append(request.uri()).append("\r\n\r\n");

            HttpHeaders headers = request.headers();
            if (!headers.isEmpty()) {
                for (Map.Entry<String, String> h: headers) {
                    CharSequence key = h.getKey();
                    CharSequence value = h.getValue();
                    buf.append("HEADER: ").append(key).append(" = ").append(value).append("\r\n");
                }
                buf.append("\r\n");
            }

            QueryStringDecoder queryStringDecoder = new QueryStringDecoder(request.uri());
            Map<String, List<String>> params = queryStringDecoder.parameters();
            if (!params.isEmpty()) {
                for (Entry<String, List<String>> p: params.entrySet()) {
                    String key = p.getKey();
                    List<String> vals = p.getValue();
                    for (String val : vals) {
                        buf.append("PARAM: ").append(key).append(" = ").append(val).append("\r\n");
                    }
                }
                buf.append("\r\n");
            }

            appendDecoderResult(buf, request);
        }

        if (msg instanceof HttpContent) {
            HttpContent httpContent = (HttpContent) msg;

            ByteBuf content = httpContent.content();
            if (content.isReadable()) {
                buf.append("CONTENT: ");
                buf.append(content.toString(CharsetUtil.UTF_8));
                buf.append("\r\n");
                appendDecoderResult(buf, request);
            }

            if (msg instanceof LastHttpContent) {
                buf.append("END OF CONTENT\r\n");

                LastHttpContent trailer = (LastHttpContent) msg;
                if (!trailer.trailingHeaders().isEmpty()) {
                    buf.append("\r\n");
                    for (CharSequence name: trailer.trailingHeaders().names()) {
                        for (CharSequence value: trailer.trailingHeaders().getAll(name)) {
                            buf.append("TRAILING HEADER: ");
                            buf.append(name).append(" = ").append(value).append("\r\n");
                        }
                    }
                    buf.append("\r\n");
                }

                if (!writeResponse(trailer, ctx)) {

Frequently Asked Questions

What is the HttpSnoopServerHandler class?
HttpSnoopServerHandler is a class in the netty codebase, defined in example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java.
Where is HttpSnoopServerHandler defined?
HttpSnoopServerHandler is defined in example/src/main/java/io/netty/example/http/snoop/HttpSnoopServerHandler.java at line 48.

Analyze Your Own Codebase

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

Try Supermodel Free