diff --git a/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java b/apps/sam/java/src/net/i2p/sam/SAMStreamSession.java index 75aedae578..7504072714 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 ef732200f5..99854637e7 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 8909dcb782..7a65607027 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 74605163f6..47667df539 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";