I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 8737a6a4 authored by zzz's avatar zzz
Browse files

i2ptunnel: Filter server response headers even if not compressing

parent a9a5d13e
No related branches found
No related tags found
No related merge requests found
......@@ -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 {
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment