/** Wrap the HttpObject with the appropriate type and fire read on the next handler. */ private void wrapRequest(ChannelHandlerContext ctx, HttpObject msg) { Http1MessageSession session = setDefaultMessageSession(ctx); try { Request request; if (msg instanceof FullHttpRequest) { request = new FullHttp1Request((FullHttpRequest) msg); session.onRequest(request); } else if (msg instanceof HttpRequest) { request = new SegmentedHttp1Request((HttpRequest) msg); session.onRequest(request); } else if (msg instanceof HttpContent) { SegmentedData data = new Http1SegmentedData((HttpContent) msg); session.onRequestData(data); Request sessionRequest = session.currentRequest(); if (sessionRequest == null) { // We don't have a sessionRequest so we can't construct a SegmentedRequestData. // Don't log as session.onRequestData should have logged. return; } request = new SegmentedRequestData(sessionRequest, data); } else { log.error("Dropping unsupported http object: {}", msg); return; } ctx.fireChannelRead(request); } finally { session.flush(); } }
try { session.onResponse(response); Request request = session.currentRequest();
@Test public void testFlush() { Request request = DefaultFullRequest.builder() .body(Unpooled.EMPTY_BUFFER) .headers(new DefaultHeaders()) .method(GET) .path("/") .build(); session.onRequest(request); assertTrue(session.initialRequest().requestFinished); assertFalse(session.initialRequest().responseFinished); session.flush(); assertNotNull(session.currentRequest()); Response response = DefaultFullResponse.builder() .body(Unpooled.EMPTY_BUFFER) .status(OK) .headers(new DefaultHeaders()) .build(); session.onResponse(response); assertTrue(session.initialRequest().requestFinished); assertTrue(session.initialRequest().responseFinished); session.flush(); assertNull(session.currentRequest()); } }