From c8c109093dbd7f26e169c3c73fed09b232a02fe8 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Tue, 13 Sep 2005 01:12:43 +0000 Subject: [PATCH] 2005-09-12 jrandom * Bugfix for skewed store which could kill a UDP thread (causing complete comm failure and eventual OOM) --- history.txt | 6 ++++- .../src/net/i2p/router/RouterVersion.java | 4 ++-- .../router/transport/TransportManager.java | 11 ++++++--- .../i2p/router/transport/udp/UDPAddress.java | 23 ++++++++++--------- .../tunnel/InboundMessageDistributor.java | 13 +++++++---- 5 files changed, 36 insertions(+), 21 deletions(-) diff --git a/history.txt b/history.txt index 21d53ebb91..533a10bd61 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,8 @@ -$Id: history.txt,v 1.244 2005/09/10 22:22:52 jrandom Exp $ +$Id: history.txt,v 1.245 2005/09/12 19:12:04 jrandom Exp $ + +2005-09-12 jrandom + * Bugfix for skewed store which could kill a UDP thread (causing complete + comm failure and eventual OOM) 2005-09-12 jrandom * More aggressively publish updated routerInfo. diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 48cd8b190b..13d3ae9902 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.231 $ $Date: 2005/09/10 22:22:52 $"; + public final static String ID = "$Revision: 1.232 $ $Date: 2005/09/12 19:12:00 $"; public final static String VERSION = "0.6.0.5"; - public final static long BUILD = 6; + public final static long BUILD = 7; 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/TransportManager.java b/router/java/src/net/i2p/router/transport/TransportManager.java index 06eca971fa..335efc5e2b 100644 --- a/router/java/src/net/i2p/router/transport/TransportManager.java +++ b/router/java/src/net/i2p/router/transport/TransportManager.java @@ -214,9 +214,14 @@ public class TransportManager implements TransportEventListener { public void messageReceived(I2NPMessage message, RouterIdentity fromRouter, Hash fromRouterHash) { if (_log.shouldLog(Log.DEBUG)) _log.debug("I2NPMessage received: " + message.getClass().getName(), new Exception("Where did I come from again?")); - int num = _context.inNetMessagePool().add(message, fromRouter, fromRouterHash); - if (_log.shouldLog(Log.DEBUG)) - _log.debug("Added to in pool: "+ num); + try { + int num = _context.inNetMessagePool().add(message, fromRouter, fromRouterHash); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Added to in pool: "+ num); + } catch (IllegalArgumentException iae) { + if (_log.shouldLog(Log.WARN)) + _log.warn("Error receiving message", iae); + } } public List getMostRecentErrorMessages() { diff --git a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java index 9431b368f7..bca6884b0b 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java @@ -42,20 +42,21 @@ public class UDPAddress { public String toString() { StringBuffer rv = new StringBuffer(64); - rv.append("[SSU "); - if (_host != null) - rv.append("host: ").append(_host).append(' '); - if (_port > 0) - rv.append("port: ").append(_port).append(' '); - if (_introKey != null) - rv.append("key: ").append(Base64.encode(_introKey)).append(' '); if (_introHosts != null) { for (int i = 0; i < _introHosts.length; i++) { - rv.append("intro[" + i + "]: ").append(_introHosts[i]); - rv.append(':').append(_introPorts[i]); - rv.append('/').append(Base64.encode(_introKeys[i])).append(' '); + rv.append("ssu://"); + rv.append(_introTags[i]).append('@'); + rv.append(_introHosts[i]).append(':').append(_introPorts[i]); + //rv.append('/').append(Base64.encode(_introKeys[i])); + if (i + 1 < _introKeys.length) + rv.append(", "); } - } + } else { + if ( (_host != null) && (_port > 0) ) + rv.append("ssu://").append(_host).append(':').append(_port);//.append('/').append(Base64.encode(_introKey)); + else + rv.append("ssu://autodetect.not.yet.complete:").append(_port); + } return rv.toString(); } diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java index e724088f35..23915ff5fb 100644 --- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java +++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java @@ -114,10 +114,15 @@ public class InboundMessageDistributor implements GarlicMessageReceiver.CloveRec // treat db store explicitly, since we don't want to republish (or flood) // unnecessarily DatabaseStoreMessage dsm = (DatabaseStoreMessage)data; - if (dsm.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) - _context.netDb().store(dsm.getKey(), dsm.getLeaseSet()); - else - _context.netDb().store(dsm.getKey(), dsm.getRouterInfo()); + try { + if (dsm.getValueType() == DatabaseStoreMessage.KEY_TYPE_LEASESET) + _context.netDb().store(dsm.getKey(), dsm.getLeaseSet()); + else + _context.netDb().store(dsm.getKey(), dsm.getRouterInfo()); + } catch (IllegalArgumentException iae) { + if (_log.shouldLog(Log.WARN)) + _log.warn("Bad store attempt", iae); + } } else { _context.inNetMessagePool().add(data, null, null); } -- GitLab