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