From 3ef89f49e7e94c8f535182895b229a7cdeec349b Mon Sep 17 00:00:00 2001 From: zzz Date: Sat, 22 Nov 2014 17:19:40 +0000 Subject: [PATCH] SAM: Fix v3 bug accepting incoming connections It was starting both the v3 and v1 acceptors. --- .../java/src/net/i2p/sam/SAMStreamSession.java | 15 ++++++++++++--- .../java/src/net/i2p/sam/SAMv3StreamSession.java | 2 +- history.txt | 1 + router/java/src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 15 insertions(+), 5 deletions(-) diff --git a/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java index 75aedae57..750407271 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java +++ b/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java @@ -82,7 +82,7 @@ class SAMStreamSession { * Create a new SAM STREAM session. * * @param dest Base64-encoded destination and private keys (same format as PrivateKeyFile) - * @param dir Session direction ("RECEIVE", "CREATE" or "BOTH") + * @param dir Session direction ("RECEIVE", "CREATE" or "BOTH") or "__v3__" if extended by SAMv3StreamSession * @param props Properties to setup the I2P session * @param recv Object that will receive incoming data * @throws IOException @@ -98,7 +98,7 @@ class SAMStreamSession { * Create a new SAM STREAM session. * * @param destStream Input stream containing the destination and private keys (same format as PrivateKeyFile) - * @param dir Session direction ("RECEIVE", "CREATE" or "BOTH") + * @param dir Session direction ("RECEIVE", "CREATE" or "BOTH") or "__v3__" if extended by SAMv3StreamSession * @param props Properties to setup the I2P session * @param recv Object that will receive incoming data * @throws IOException @@ -111,15 +111,24 @@ class SAMStreamSession { _log = I2PAppContext.getGlobalContext().logManager().getLog(getClass()); boolean canReceive; + boolean startAcceptor; if (dir.equals("BOTH")) { canCreate = true; canReceive = true; + startAcceptor = true; + } else if (dir.equals("__v3__")) { + // we are super to SAMv3StreamSession, don't start thread, he handles it + canCreate = true; + canReceive = true; + startAcceptor = false; } else if (dir.equals("CREATE")) { canCreate = true; canReceive = false; + startAcceptor = false; } else if (dir.equals("RECEIVE")) { canCreate = false; canReceive = true; + startAcceptor = true; } else { _log.error("BUG! Wrong direction passed to SAMStreamSession: " + dir); @@ -162,7 +171,7 @@ class SAMStreamSession { forceFlush = Boolean.parseBoolean(allprops.getProperty(PROP_FORCE_FLUSH, DEFAULT_FORCE_FLUSH)); - if (canReceive) { + if (startAcceptor) { server = new SAMStreamSessionServer(); Thread t = new I2PAppThread(server, "SAMStreamSessionServer"); diff --git a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java index ef732200f..99854637e 100644 --- a/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java +++ b/apps/sam/java/src/net/i2p/sam/SAMv3StreamSession.java @@ -61,7 +61,7 @@ class SAMv3StreamSession extends SAMStreamSession implements SAMv3Handler.Sessi public SAMv3StreamSession(String login) throws IOException, DataFormatException, SAMException { - super(getDB().get(login).getDest(), "BOTH", + super(getDB().get(login).getDest(), "__v3__", getDB().get(login).getProps(), getDB().get(login).getHandler()); this.nick = login ; diff --git a/history.txt b/history.txt index 8909dcb78..7a6560702 100644 --- a/history.txt +++ b/history.txt @@ -1,6 +1,7 @@ 2014-11-22 zzz * PeerSelector: If non-DSA, don't use incompatible peers for exploratory tunnels or closest-hop in client tunnels + * SAM: Fix v3 bug accepting incoming connections 2014-11-17 zzz * NetDB: Exclude A1/A2 "countries" from auto-floodfill diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 74605163f..47667df53 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 8; + public final static long BUILD = 9; /** for example "-test" */ public final static String EXTRA = "-rc";