package hudson.plugins.tfs; import io.netty.channel.ChannelHandlerContext; import io.netty.handler.codec.http.FullHttpRequest; import io.netty.handler.codec.http.FullHttpResponse; import io.netty.handler.codec.http.HttpObject; import io.netty.handler.codec.http.HttpRequest; import io.netty.handler.codec.http.HttpResponse; import org.littleshoot.proxy.HttpFilters; import org.littleshoot.proxy.HttpFiltersAdapter; import org.littleshoot.proxy.HttpFiltersSourceAdapter; import java.util.ArrayList; import java.util.List; public class LoggingFiltersSourceAdapter extends HttpFiltersSourceAdapter { private final List<FullHttpRequest> requests = new ArrayList<FullHttpRequest>(); private final List<FullHttpResponse> responses = new ArrayList<FullHttpResponse>(); /* https://github.com/adamfisk/LittleProxy """ To enable aggregator and inflater you have to return a value greater than 0 in your `HttpFiltersSource#get(Request/Response)BufferSizeInBytes()` methods. This provides to you a `FullHttp(Request/Response)` with the complete content in your filter uncompressed. Otherwise you have to handle the chunks yourself. """ */ @Override public int getMaximumRequestBufferSizeInBytes() { return 10 * 1024 * 1024; } @Override public int getMaximumResponseBufferSizeInBytes() { return 10 * 1024 * 1024; } @Override public HttpFilters filterRequest(final HttpRequest originalRequest, final ChannelHandlerContext ctx) { return new HttpFiltersAdapter(originalRequest, ctx) { @Override public HttpResponse clientToProxyRequest(final HttpObject httpObject) { requests.add((FullHttpRequest) httpObject); return /* "[return] null to continue processing as usual" */ null; } @Override public HttpObject serverToProxyResponse(final HttpObject httpObject) { responses.add((FullHttpResponse) httpObject); return /* [return] the unmodified HttpObject */ httpObject; } }; } public boolean proxyWasUsed() { return requests.size() > 0; } public void reset() { requests.clear(); responses.clear(); } }