List of usage examples for io.netty.handler.codec.http DefaultHttpContent copy
@Override
public HttpContent copy()
From source file:com.difference.historybook.proxy.littleproxy.LittleProxy.java
License:Apache License
private HttpFiltersSource getFiltersSource() { return new HttpFiltersSourceAdapter() { @Override// ww w . ja va 2s . c o m public HttpFilters filterRequest(HttpRequest originalRequest) { return new HttpFiltersAdapter(originalRequest) { private final ProxyFilter filter = filterFactory != null ? filterFactory.getInstance() : null; private EmbeddedChannel bufferChannel = null; @Override public HttpResponse clientToProxyRequest(HttpObject httpObject) { if (filter != null && httpObject instanceof DefaultHttpRequest) { filter.processRequest(new LittleProxyRequest((DefaultHttpRequest) httpObject)); } return null; } @Override public HttpObject proxyToClientResponse(HttpObject httpObject) { if (httpObject instanceof DefaultHttpResponse) { DefaultHttpResponse response = (DefaultHttpResponse) httpObject; Map<String, String> headers = new HashMap<>(); response.headers().forEach(e -> { headers.put(e.getKey(), e.getValue()); }); if (selector != null && selector.test(new ProxyTransactionInfo(originalRequest.getUri(), response.getStatus().code(), headers))) { bufferChannel = new EmbeddedChannel(new HttpResponseDecoder(), new HttpContentDecompressor(), new HttpObjectAggregator(maxBufferSize)); DefaultHttpResponse copiedResponse = new DefaultHttpResponse( response.getProtocolVersion(), response.getStatus()); copiedResponse.headers().add(response.headers()); bufferChannel.writeInbound(copiedResponse); } } else if (httpObject instanceof DefaultHttpContent && bufferChannel != null) { DefaultHttpContent httpContent = (DefaultHttpContent) httpObject; bufferChannel.writeInbound(httpContent.copy()); if (ProxyUtils.isLastChunk(httpObject)) processChunkedResponse(); } else if (httpObject instanceof LastHttpContent && bufferChannel != null) { LastHttpContent httpContent = (LastHttpContent) httpObject; bufferChannel.writeInbound(httpContent.copy()); processChunkedResponse(); } else if (filter != null && httpObject instanceof FullHttpResponse) { filter.processResponse(new LittleProxyResponse((FullHttpResponse) httpObject)); } return httpObject; }; private void processChunkedResponse() { bufferChannel.flush(); bufferChannel.finish(); FullHttpResponse fullResponse = (FullHttpResponse) bufferChannel.readInbound(); filter.processResponse(new LittleProxyResponse(fullResponse)); bufferChannel = null; } }; }; }; }