diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java index bd368ec3ac51c65df24f051455a7a895f7add19e..014a0beea1a85802eb8db283c830f07a8fe32603 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java @@ -570,13 +570,8 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { else s.setSoTimeout(SERVER_READ_TIMEOUT_POST); - Runnable t; - if (allowGZIP && useGZIP) { - t = new CompressedRequestor(s, socket, modifiedHeader, getTunnel().getContext(), _log); - } else { - t = new I2PTunnelRunner(s, socket, slock, null, DataHelper.getUTF8(modifiedHeader), - null, (I2PTunnelRunner.FailCallback) null); - } + boolean compress = allowGZIP && useGZIP; + Runnable t = new CompressedRequestor(s, socket, modifiedHeader, getTunnel().getContext(), _log, compress); // run in the unlimited client pool //t.start(); _clientExecutor.execute(t); @@ -634,20 +629,24 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { private final I2PAppContext _ctx; // shadows _log in super() private final Log _log; + private final boolean _shouldCompress; private static final int BUF_SIZE = 8*1024; - public CompressedRequestor(Socket webserver, I2PSocket browser, String headers, I2PAppContext ctx, Log log) { + /** + * @param shouldCompress if false, don't compress, just filter server headers + */ + public CompressedRequestor(Socket webserver, I2PSocket browser, String headers, + I2PAppContext ctx, Log log, boolean shouldCompress) { _webserver = webserver; _browser = browser; _headers = headers; _ctx = ctx; _log = log; + _shouldCompress = shouldCompress; } public void run() { - if (_log.shouldDebug()) - _log.debug("Compressed requestor running"); OutputStream serverout = null; OutputStream browserout = null; InputStream browserin = null; @@ -691,21 +690,22 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { } catch (NullPointerException npe) { throw new IOException("getInputStream NPE"); } - CompressedResponseOutputStream compressedOut = new CompressedResponseOutputStream(browserout); //Change headers to protect server identity StringBuilder command = new StringBuilder(128); Map<String, List<String>> headers = readHeaders(null, serverin, command, SERVER_SKIPHEADERS, _ctx); String modifiedHeaders = formatHeaders(headers, command); - compressedOut.write(DataHelper.getUTF8(modifiedHeaders)); - s = new Sender(compressedOut, serverin, "server: server to browser", _log); - if (_log.shouldDebug()) - _log.debug("Before pumping the compressed response"); + if (_shouldCompress) { + CompressedResponseOutputStream compressedOut = new CompressedResponseOutputStream(browserout); + compressedOut.write(DataHelper.getUTF8(modifiedHeaders)); + s = new Sender(compressedOut, serverin, "server: server to browser compressor", _log); + } else { + browserout.write(DataHelper.getUTF8(modifiedHeaders)); + s = new Sender(browserout, serverin, "server: server to browser uncompressed", _log); + } s.run(); // same thread - if (_log.shouldDebug()) - _log.debug("After pumping the compressed response: " + compressedOut.getTotalRead() + "/" + compressedOut.getTotalCompressed()); } catch (SSLException she) { _log.error("SSL error", she); try {