diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java index 7e666e7dd219babd1e9304ed6564d308eef5bdf1..5c69959adee60df464c1a72ced733e1a01b9aadf 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelHTTPServer.java @@ -3,6 +3,7 @@ */ package net.i2p.i2ptunnel; +import java.io.BufferedInputStream; import java.io.File; import java.io.IOException; import java.io.InputStream; @@ -219,6 +220,8 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { // shadows _log in super() private final Log _log; + private static final int BUF_SIZE = 16*1024; + public CompressedRequestor(Socket webserver, I2PSocket browser, String headers, I2PAppContext ctx, Log log) { _webserver = webserver; _browser = browser; @@ -259,7 +262,7 @@ public class I2PTunnelHTTPServer extends I2PTunnelServer { // at java.lang.Thread.run(Thread.java:619) // at net.i2p.util.I2PThread.run(I2PThread.java:71) try { - serverin = _webserver.getInputStream(); + serverin = new BufferedInputStream(_webserver.getInputStream(), BUF_SIZE); } catch (NullPointerException npe) { throw new IOException("getInputStream NPE"); } diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java index b9540f416429c28976f18300df0a1ef06ab43caa..81b92484b1d19cbd7f0a607d3af27f255171111a 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelRunner.java @@ -3,6 +3,7 @@ */ package net.i2p.i2ptunnel; +import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InterruptedIOException; @@ -17,6 +18,7 @@ import net.i2p.data.ByteArray; import net.i2p.util.ByteCache; import net.i2p.util.Clock; import net.i2p.util.I2PAppThread; +import net.i2p.util.InternalSocket; import net.i2p.util.Log; public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErrorListener { @@ -167,6 +169,8 @@ public class I2PTunnelRunner extends I2PAppThread implements I2PSocket.SocketErr _log.debug("Initial data " + (initialI2PData != null ? initialI2PData.length : 0) + " written to I2P, " + (initialSocketData != null ? initialSocketData.length : 0) + " written to the socket, starting forwarders"); + if (!(s instanceof InternalSocket)) + in = new BufferedInputStream(in, 2*NETWORK_BUFFER_SIZE); Thread t1 = new StreamForwarder(in, i2pout, true); Thread t2 = new StreamForwarder(i2pin, out, false); synchronized (finishLock) { diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java index 8eeaad05f963ae59bc64849f412ff5832d6a7605..ed670149f5050fd7ff0ace47cced15b54ff6260b 100644 --- a/core/java/src/net/i2p/client/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/I2PSessionImpl.java @@ -9,6 +9,7 @@ package net.i2p.client; * */ +import java.io.BufferedInputStream; import java.io.EOFException; import java.io.IOException; import java.io.InputStream; @@ -116,7 +117,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa protected volatile boolean _closing; /** have we received the current date from the router yet? */ - private boolean _dateReceived; + private volatile boolean _dateReceived; /** lock that we wait upon, that the SetDateMessageHandler notifies */ private final Object _dateReceivedLock = new Object(); @@ -154,6 +155,8 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa } public static final int LISTEN_PORT = 7654; + + private static final int BUF_SIZE = 32*1024; /** for extension */ protected I2PSessionImpl(I2PAppContext context, Properties options) { @@ -353,7 +356,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa _out.write(I2PClient.PROTOCOL_BYTE); _out.flush(); _writer = new ClientWriterRunner(_out, this); - InputStream in = _socket.getInputStream(); + InputStream in = new BufferedInputStream(_socket.getInputStream(), BUF_SIZE); _reader = new I2CPMessageReader(in, this); } Thread notifier = new I2PAppThread(_availabilityNotifier, "ClientNotifier " + getPrefix(), true); diff --git a/core/java/src/net/i2p/client/I2PSimpleSession.java b/core/java/src/net/i2p/client/I2PSimpleSession.java index 2881f80689d111aaa68d47ad6c4597a334564feb..2ada1c26f4c591628ca5de45b171af534b503e78 100644 --- a/core/java/src/net/i2p/client/I2PSimpleSession.java +++ b/core/java/src/net/i2p/client/I2PSimpleSession.java @@ -5,6 +5,7 @@ package net.i2p.client; * with no warranty of any kind, either expressed or implied. */ +import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.net.Socket; @@ -28,6 +29,8 @@ import net.i2p.internal.QueuedI2CPMessageReader; */ class I2PSimpleSession extends I2PSessionImpl2 { + private static final int BUF_SIZE = 1024; + /** * Create a new session for doing naming and bandwidth queries only. Do not create a destination. * @@ -68,7 +71,7 @@ class I2PSimpleSession extends I2PSessionImpl2 { _out.write(I2PClient.PROTOCOL_BYTE); _out.flush(); _writer = new ClientWriterRunner(_out, this); - InputStream in = _socket.getInputStream(); + InputStream in = new BufferedInputStream(_socket.getInputStream(), BUF_SIZE); _reader = new I2CPMessageReader(in, this); } // we do not receive payload messages, so we do not need an AvailabilityNotifier diff --git a/core/java/src/net/i2p/util/EepGet.java b/core/java/src/net/i2p/util/EepGet.java index af6055129673c8e66a724c52695dc621a6854d39..30f969381af2dc50eaa54764e88183b8899d0cd3 100644 --- a/core/java/src/net/i2p/util/EepGet.java +++ b/core/java/src/net/i2p/util/EepGet.java @@ -1,5 +1,6 @@ package net.i2p.util; +import java.io.BufferedInputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; @@ -1057,6 +1058,8 @@ public class EepGet { //} } _proxyIn = _proxy.getInputStream(); + if (!(_proxy instanceof InternalSocket)) + _proxyIn = new BufferedInputStream(_proxyIn); _proxyOut = _proxy.getOutputStream(); if (timeout != null) diff --git a/core/java/src/net/i2p/util/InternalServerSocket.java b/core/java/src/net/i2p/util/InternalServerSocket.java index c5a43a493c7d7641043969497e34775ae6c2b466..a5b1230631645951e7e2bb93ecee6eaef547b192 100644 --- a/core/java/src/net/i2p/util/InternalServerSocket.java +++ b/core/java/src/net/i2p/util/InternalServerSocket.java @@ -27,7 +27,7 @@ public class InternalServerSocket extends ServerSocket { private static final ConcurrentHashMap<Integer, InternalServerSocket> _sockets = new ConcurrentHashMap(4); private final BlockingQueue<InternalSocket> _acceptQueue; private final Integer _port; - private boolean _running; + private volatile boolean _running; //private static Log _log = I2PAppContext.getGlobalContext().logManager().getLog(InternalServerSocket.class); /** diff --git a/core/java/src/net/i2p/util/SSLEepGet.java b/core/java/src/net/i2p/util/SSLEepGet.java index 2e58d61638dc6246f86ec81f38977dbc7fde0b35..ab552cabeb63063940181726563c658fd8d7ff2d 100644 --- a/core/java/src/net/i2p/util/SSLEepGet.java +++ b/core/java/src/net/i2p/util/SSLEepGet.java @@ -37,6 +37,7 @@ package net.i2p.util; * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; @@ -675,6 +676,8 @@ public class SSLEepGet extends EepGet { // this is an IOE throw sslhe; } + + _proxyIn = new BufferedInputStream(_proxyIn); if (_log.shouldLog(Log.DEBUG)) _log.debug("Request flushed"); diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index c635b3c13a0bdc532db45f2a5956dc675c26ce1a..600539a5c1150caef149f169ef3b144092d9aa18 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -8,6 +8,7 @@ package net.i2p.router.client; * */ +import java.io.BufferedInputStream; import java.io.EOFException; import java.io.IOException; import java.io.OutputStream; @@ -96,6 +97,8 @@ class ClientConnectionRunner { // e.g. on local access private static final int MAX_MESSAGE_ID = 0x4000000; + private static final int BUF_SIZE = 32*1024; + /** @since 0.9.2 */ private static final String PROP_TAGS = "crypto.tagsToSend"; private static final String PROP_THRESH = "crypto.lowTagThreshold"; @@ -124,7 +127,8 @@ class ClientConnectionRunner { */ public void startRunning() { try { - _reader = new I2CPMessageReader(_socket.getInputStream(), new ClientMessageEventListener(_context, this, true)); + _reader = new I2CPMessageReader(new BufferedInputStream(_socket.getInputStream(), BUF_SIZE), + new ClientMessageEventListener(_context, this, true)); _writer = new ClientWriterRunner(_context, this); I2PThread t = new I2PThread(_writer); t.setName("I2CP Writer " + ++__id);