From 4fdcb6ce29c20306f3e0110b92eb1e5542504255 Mon Sep 17 00:00:00 2001
From: zzz <zzz@mail.i2p>
Date: Sat, 30 May 2015 14:13:13 +0000
Subject: [PATCH] I2CP: Prevent sending lookup or bw limit messages before
 handshake with router is complete

---
 .../src/net/i2p/client/I2PSessionImpl.java    | 25 ++++++++++++++-----
 1 file changed, 19 insertions(+), 6 deletions(-)

diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java
index a6652556ce..540695a4a3 100644
--- a/core/java/src/net/i2p/client/I2PSessionImpl.java
+++ b/core/java/src/net/i2p/client/I2PSessionImpl.java
@@ -1202,10 +1202,15 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
             if (rv != null)
                 return rv;
         }
-        if (isClosed()) {
-            if (_log.shouldLog(Log.INFO))
-                _log.info("Session closed, cannot lookup " + h);
-            return null;
+        synchronized (_stateLock) {
+            // not before GOTDATE
+            if (_state == State.CLOSED ||
+                _state == State.INIT ||
+                _state == State.OPENING) {
+                if (_log.shouldLog(Log.INFO))
+                    _log.info("Session closed, cannot lookup " + h);
+                return null;
+            }
         }
         LookupWaiter waiter;
         long nonce;
@@ -1341,8 +1346,16 @@ public abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2
      *  @return null on failure
      */
     public int[] bandwidthLimits() throws I2PSessionException {
-        if (isClosed())
-            return null;
+        synchronized (_stateLock) {
+            // not before GOTDATE
+            if (_state == State.CLOSED ||
+                _state == State.INIT ||
+                _state == State.OPENING) {
+                if (_log.shouldLog(Log.INFO))
+                    _log.info("Session closed, cannot get bw limits");
+                return null;
+            }
+        }
         sendMessage(new GetBandwidthLimitsMessage());
         try {
             synchronized (_bwReceivedLock) {
-- 
GitLab