Response wrapResponse(ChannelHandlerContext ctx, HttpObject msg) { log.debug("wrapResponse msg={}", msg); final Response response; if (msg instanceof FullHttpResponse) { response = new FullHttp1Response((FullHttpResponse) msg); } else if (msg instanceof HttpResponse) { response = new SegmentedHttp1Response((HttpResponse) msg); } else if (msg instanceof HttpContent) { response = getProxyRequestQueue(ctx) .currentResponse() .map(r -> new SegmentedResponseData(r, new Http1SegmentedData((HttpContent) msg))) .orElse(null); } else { // TODO(CK): throw an exception if response is null? response = null; } return getProxyRequestQueue(ctx) .currentProxiedH2StreamId() .<Response>map( streamId -> { if (response instanceof SegmentedResponseData) { return new ProxySegmentedResponseData((SegmentedResponseData) response, streamId); } else { return new ProxyResponse(response, streamId); } }) .orElse(response); }
/** 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(); } }
new SegmentedResponseData( stream3Response0, new Http1SegmentedData(new DefaultHttpContent(Unpooled.EMPTY_BUFFER))); new SegmentedResponseData( stream3Response0, new Http1SegmentedData(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER))); new SegmentedResponseData( stream5Response0, new Http1SegmentedData(new DefaultHttpContent(Unpooled.EMPTY_BUFFER))); new SegmentedResponseData( stream5Response0, new Http1SegmentedData(new DefaultLastHttpContent(Unpooled.EMPTY_BUFFER)));