From 8e87ae08fbf4dbee638c1fb506bc973f879bbe36 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Fri, 30 Dec 2005 20:57:53 +0000 Subject: [PATCH] 2005-12-30 jrandom * Small streaming lib bugfixes for the modified timeouts * Minor Syndie/Sucker RSS html fix * Small synchronization fix in I2PSnark (thanks fsm!) --- .../java/src/org/klomp/snark/PeerState.java | 4 +++- .../client/streaming/I2PSocketOptionsImpl.java | 2 +- .../net/i2p/client/streaming/Connection.java | 18 ++++++++++-------- .../client/streaming/ConnectionOptions.java | 1 + .../client/streaming/MessageInputStream.java | 18 +++++++++++------- .../client/streaming/MessageOutputStream.java | 7 ++++++- .../src/net/i2p/client/streaming/Packet.java | 3 ++- .../syndie/java/src/net/i2p/syndie/Sucker.java | 4 +++- history.txt | 7 ++++++- .../java/src/net/i2p/router/RouterVersion.java | 4 ++-- .../transport/udp/InboundMessageState.java | 4 ++-- 11 files changed, 47 insertions(+), 25 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java index 6820999e79..29c66bba6b 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java @@ -401,7 +401,9 @@ class PeerState // Are there outstanding requests that have to be resend? if (resend) { - out.sendRequests(outstandingRequests); + synchronized (this) { + out.sendRequests(outstandingRequests); + } resend = false; } diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java index bd4efb28b7..eb58b68715 100644 --- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java +++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java @@ -13,7 +13,7 @@ class I2PSocketOptionsImpl implements I2PSocketOptions { private int _maxBufferSize; public static final int DEFAULT_BUFFER_SIZE = 1024*64; - public static final int DEFAULT_WRITE_TIMEOUT = 60*1000; + public static final int DEFAULT_WRITE_TIMEOUT = -1; public static final int DEFAULT_CONNECT_TIMEOUT = 60*1000; public I2PSocketOptionsImpl() { diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java index 74b52900c2..469a115e3a 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java @@ -123,8 +123,8 @@ public class Connection { _context.statManager().createRateStat("stream.con.windowSizeAtCongestion", "How large was our send window when we send a dup?", "Stream", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("stream.chokeSizeBegin", "How many messages were outstanding when we started to choke?", "Stream", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); _context.statManager().createRateStat("stream.chokeSizeEnd", "How many messages were outstanding when we stopped being choked?", "Stream", new long[] { 60*1000, 10*60*1000, 60*60*1000 }); - if (_log.shouldLog(Log.DEBUG)) - _log.debug("New connection created with options: " + _options); + if (_log.shouldLog(Log.INFO)) + _log.info("New connection created with options: " + _options); } public long getNextOutboundPacketNum() { @@ -164,11 +164,13 @@ public class Connection { started = true; if ( (_outboundPackets.size() >= _options.getWindowSize()) || (_activeResends > 0) || (_lastSendId - _highestAckedThrough > _options.getWindowSize()) ) { - if (writeExpire > 0) { + if (timeoutMs > 0) { if (timeLeft <= 0) { - _log.error("Outbound window is full of " + _outboundPackets.size() - + " with " + _activeResends + " active resends" - + " and we've waited too long (" + writeExpire + "ms)"); + if (_log.shouldLog(Log.INFO)) + _log.info("Outbound window is full of " + _outboundPackets.size() + + " with " + _activeResends + " active resends" + + " and we've waited too long (" + (0-(timeLeft - timeoutMs)) + "ms): " + + toString()); return false; } if (_log.shouldLog(Log.DEBUG)) @@ -387,8 +389,8 @@ public class Connection { _ackedPackets++; if (p.getNumSends() > 1) { _activeResends--; - if (_log.shouldLog(Log.INFO)) - _log.info("Active resend of " + p + " successful, # active left: " + _activeResends); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Active resend of " + p + " successful, # active left: " + _activeResends); } } } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java index e7cf733540..1df36bc3b2 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java @@ -355,6 +355,7 @@ public class ConnectionOptions extends I2PSocketOptionsImpl { buf.append(" cwin=").append(_windowSize); buf.append(" maxResends=").append(_maxResends); buf.append(" writeTimeout=").append(getWriteTimeout()); + buf.append(" readTimeout=").append(getReadTimeout()); buf.append(" inactivityTimeout=").append(_inactivityTimeout); buf.append(" inboundBuffer=").append(_inboundBufferSize); buf.append(" maxWindowSize=").append(_maxWindowSize); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java index c894f98e34..df7abbcc29 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java @@ -158,7 +158,11 @@ public class MessageInputStream extends InputStream { * but if it is 0, do not block at all) */ public int getReadTimeout() { return _readTimeout; } - public void setReadTimeout(int timeout) { _readTimeout = timeout; } + public void setReadTimeout(int timeout) { + if (_log.shouldLog(Log.INFO)) + _log.info("Changing read timeout from " + _readTimeout + " to " + timeout); + _readTimeout = timeout; + } public void closeReceived() { synchronized (_dataLock) { @@ -302,8 +306,8 @@ public class MessageInputStream extends InputStream { throwAnyError(); } else { // readTimeout == 0 // noop, don't block - if (_log.shouldLog(Log.INFO)) - _log.info("read(...," + offset+", " + length+ ")[" + i + if (_log.shouldLog(Log.DEBUG)) + _log.debug("read(...," + offset+", " + length+ ")[" + i + ") with nonblocking setup: " + toString()); return i; } @@ -320,8 +324,8 @@ public class MessageInputStream extends InputStream { // we looped a few times then got data, so this pass doesnt count i--; } else if (_readyDataBlocks.size() <= 0) { - if (_log.shouldLog(Log.INFO)) - _log.info("read(...," + offset+", " + length+ ")[" + i + if (_log.shouldLog(Log.DEBUG)) + _log.debug("read(...," + offset+", " + length+ ")[" + i + "] no more ready blocks, returning"); return i; } else { @@ -351,7 +355,7 @@ public class MessageInputStream extends InputStream { } // synchronized (_dataLock) if (_log.shouldLog(Log.DEBUG)) - _log.info("read(...," + offset+", " + length+ ") read fully total read: " +_readTotal); + _log.debug("read(...," + offset+", " + length+ ") read fully total read: " +_readTotal); return length; } @@ -370,7 +374,7 @@ public class MessageInputStream extends InputStream { } } if (_log.shouldLog(Log.DEBUG)) - _log.info("available(): " + numBytes + " " + toString()); + _log.debug("available(): " + numBytes + " " + toString()); return numBytes; } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java index 453733a2b3..16b0a0734f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java @@ -68,7 +68,12 @@ public class MessageOutputStream extends OutputStream { _log.debug("MessageOutputStream created"); } - public void setWriteTimeout(int ms) { _writeTimeout = ms; } + public void setWriteTimeout(int ms) { + if (_log.shouldLog(Log.INFO)) + _log.info("Changing write timeout from " + _writeTimeout + " to " + ms); + + _writeTimeout = ms; + } public int getWriteTimeout() { return _writeTimeout; } public void setBufferSize(int size) { _nextBufferSize = size; } diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java index da81000818..593863564f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java @@ -516,7 +516,8 @@ public class Packet { boolean ok = ctx.dsa().verifySignature(_optionSignature, buffer, 0, size, from.getSigningPublicKey()); if (!ok) { Log l = ctx.logManager().getLog(Packet.class); - l.error("Signature failed on " + toString(), new Exception("moo")); + if (l.shouldLog(Log.WARN)) + l.warn("Signature failed on " + toString(), new Exception("moo")); if (false) { l.error(Base64.encode(buffer, 0, size)); l.error("Signature: " + Base64.encode(_optionSignature.getData())); diff --git a/apps/syndie/java/src/net/i2p/syndie/Sucker.java b/apps/syndie/java/src/net/i2p/syndie/Sucker.java index d66b4f20b1..b11ba31b0b 100644 --- a/apps/syndie/java/src/net/i2p/syndie/Sucker.java +++ b/apps/syndie/java/src/net/i2p/syndie/Sucker.java @@ -581,8 +581,10 @@ public class Sucker { a=htmlTagLowerCase.indexOf("href=\"")+6; b=a+1; - while(htmlTagLowerCase.charAt(b)!='\"') + while ( (b < htmlTagLowerCase.length()) && (htmlTagLowerCase.charAt(b)!='\"') ) b++; + if (b >= htmlTagLowerCase.length()) + return null; // abort the b0rked tag String link=htmlTag.substring(a,b); if(link.indexOf("http")<0) link=baseUrl+"/"+link; diff --git a/history.txt b/history.txt index 98541049dd..74aa22c2c0 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,9 @@ -$Id: history.txt,v 1.372 2005/12/29 08:07:22 jrandom Exp $ +$Id: history.txt,v 1.373 2005/12/30 13:16:46 jrandom Exp $ + +2005-12-30 jrandom + * Small streaming lib bugfixes for the modified timeouts + * Minor Syndie/Sucker RSS html fix + * Small synchronization fix in I2PSnark (thanks fsm!) 2005-12-30 jrandom * Replaced the bundled linux jcpuid (written in C++) with scintilla's diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 6447723c19..a316f02630 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -15,9 +15,9 @@ import net.i2p.CoreVersion; * */ public class RouterVersion { - public final static String ID = "$Revision: 1.319 $ $Date: 2005/12/27 08:20:54 $"; + public final static String ID = "$Revision: 1.320 $ $Date: 2005/12/29 08:07:24 $"; public final static String VERSION = "0.6.1.8"; - public final static long BUILD = 3; + public final static long BUILD = 4; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID); diff --git a/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java b/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java index 31f6e94e68..be8d03cd0d 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java @@ -53,7 +53,7 @@ public class InboundMessageState { public boolean receiveFragment(UDPPacketReader.DataReader data, int dataFragment) { int fragmentNum = data.readMessageFragmentNum(dataFragment); if ( (fragmentNum < 0) || (fragmentNum > _fragments.length)) { - _log.error("Invalid fragment " + fragmentNum + "/" + _fragments.length); + _log.warn("Invalid fragment " + fragmentNum + "/" + _fragments.length); return false; } if (_fragments[fragmentNum] == null) { @@ -73,7 +73,7 @@ public class InboundMessageState { + ", isLast=" + isLast + ", data=" + Base64.encode(message.getData(), 0, size)); } catch (ArrayIndexOutOfBoundsException aioobe) { - _log.error("Corrupt SSU fragment " + fragmentNum, aioobe); + _log.warn("Corrupt SSU fragment " + fragmentNum, aioobe); return false; } } else { -- GitLab