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