Home / Class/ HttpServerExpectContinueHandler Class — netty Architecture

HttpServerExpectContinueHandler Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  dc8fa8a8_909d_5919_73f2_7917c9341dcd["HttpServerExpectContinueHandler"]
  1e62f796_eaf2_2084_df89_a0c9dc81eba6["HttpServerExpectContinueHandler.java"]
  dc8fa8a8_909d_5919_73f2_7917c9341dcd -->|defined in| 1e62f796_eaf2_2084_df89_a0c9dc81eba6
  7ab4a15c_ec57_7b5e_d8e8_982bfd2745d5["HttpResponse()"]
  dc8fa8a8_909d_5919_73f2_7917c9341dcd -->|method| 7ab4a15c_ec57_7b5e_d8e8_982bfd2745d5
  63218365_8866_2931_4131_02bdfe3bcfb6["channelRead()"]
  dc8fa8a8_909d_5919_73f2_7917c9341dcd -->|method| 63218365_8866_2931_4131_02bdfe3bcfb6

Relationship Graph

Source Code

codec-http/src/main/java/io/netty/handler/codec/http/HttpServerExpectContinueHandler.java lines 47–97

public class HttpServerExpectContinueHandler extends ChannelInboundHandlerAdapter {

    private static final FullHttpResponse EXPECTATION_FAILED = new DefaultFullHttpResponse(
            HTTP_1_1, HttpResponseStatus.EXPECTATION_FAILED, Unpooled.EMPTY_BUFFER);

    private static final FullHttpResponse ACCEPT = new DefaultFullHttpResponse(
            HTTP_1_1, CONTINUE, Unpooled.EMPTY_BUFFER);

    static {
        EXPECTATION_FAILED.headers().set(CONTENT_LENGTH, 0);
        ACCEPT.headers().set(CONTENT_LENGTH, 0);
    }

    /**
     * Produces a {@link HttpResponse} for {@link HttpRequest}s which define an expectation. Returns {@code null} if the
     * request should be rejected. See {@link #rejectResponse(HttpRequest)}.
     */
    protected HttpResponse acceptMessage(@SuppressWarnings("unused") HttpRequest request) {
        return ACCEPT.retainedDuplicate();
    }

    /**
     * Returns the appropriate 4XX {@link HttpResponse} for the given {@link HttpRequest}.
     */
    protected HttpResponse rejectResponse(@SuppressWarnings("unused") HttpRequest request) {
        return EXPECTATION_FAILED.retainedDuplicate();
    }

    @Override
    public void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {
        if (msg instanceof HttpRequest) {
            HttpRequest req = (HttpRequest) msg;

            if (HttpUtil.is100ContinueExpected(req)) {
                HttpResponse accept = acceptMessage(req);

                if (accept == null) {
                    // the expectation failed so we refuse the request.
                    HttpResponse rejection = rejectResponse(req);
                    ReferenceCountUtil.release(msg);
                    ctx.writeAndFlush(rejection).addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
                    return;
                }

                ctx.writeAndFlush(accept).addListener(ChannelFutureListener.CLOSE_ON_FAILURE);
                req.headers().remove(HttpHeaderNames.EXPECT);
            }
        }
        super.channelRead(ctx, msg);
    }
}

Frequently Asked Questions

What is the HttpServerExpectContinueHandler class?
HttpServerExpectContinueHandler is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/HttpServerExpectContinueHandler.java.
Where is HttpServerExpectContinueHandler defined?
HttpServerExpectContinueHandler is defined in codec-http/src/main/java/io/netty/handler/codec/http/HttpServerExpectContinueHandler.java at line 47.

Analyze Your Own Codebase

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

Try Supermodel Free