diff --git a/apps/BOB/src/net/i2p/BOB/MUXlisten.java b/apps/BOB/src/net/i2p/BOB/MUXlisten.java index bfdf2b3de78599c71d9b42908b9afbd3baeac8a4..08b75efbb1ff24699a73abb4976f15274f820039 100644 --- a/apps/BOB/src/net/i2p/BOB/MUXlisten.java +++ b/apps/BOB/src/net/i2p/BOB/MUXlisten.java @@ -25,6 +25,8 @@ package net.i2p.BOB; import java.io.ByteArrayInputStream; import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; import java.util.Properties; import net.i2p.I2PException; import net.i2p.client.streaming.I2PSocketManager; @@ -45,9 +47,12 @@ public class MUXlisten implements Runnable { private ByteArrayInputStream prikey; private ThreadGroup tg; private String N; - + private ServerSocket listener; + private int backlog = 50; // should this be more? less? + boolean go_out; + boolean come_in; /** - * Constructor + * Constructor Will fail if INPORT is occupied. * * @param info * @param database @@ -56,6 +61,8 @@ public class MUXlisten implements Runnable { * @throws java.io.IOException */ MUXlisten(nickname database, nickname info, Log _log) throws I2PException, IOException { + int port = 0; + InetAddress host = null; this.database = database; this.info = info; this._log = _log; @@ -68,13 +75,28 @@ public class MUXlisten implements Runnable { this.database.releaseReadLock(); this.info.releaseReadLock(); + this.database.getReadLock(); + this.info.getReadLock(); + this.go_out = info.exists("OUTPORT"); + this.come_in = info.exists("INPORT"); + if(this.come_in) { + port = Integer.parseInt(info.get("INPORT").toString()); + host = InetAddress.getByName(info.get("INHOST").toString()); + } + this.database.releaseReadLock(); + this.info.releaseReadLock(); + + socketManager = I2PSocketManagerFactory.createManager(prikey, Q); + if(this.come_in) { + this.listener = new ServerSocket(port, backlog, host); + } + + // Everything is OK as far as we can tell. this.database.getWriteLock(); this.info.getWriteLock(); this.info.add("STARTING", Boolean.TRUE); this.info.releaseWriteLock(); this.database.releaseWriteLock(); - - socketManager = I2PSocketManagerFactory.createManager(prikey, Q); } /** @@ -95,12 +117,6 @@ public class MUXlisten implements Runnable { // toss the connections to a new threads. // will wrap with TCP and UDP when UDP works - this.database.getReadLock(); - this.info.getReadLock(); - boolean go_out = info.exists("OUTPORT"); - boolean come_in = info.exists("INPORT"); - this.database.releaseReadLock(); - this.info.releaseReadLock(); if(go_out) { // I2P -> TCP @@ -111,7 +127,7 @@ public class MUXlisten implements Runnable { if(come_in) { // TCP -> I2P - TCPlistener conn = new TCPlistener(socketManager, info, database, _log); + TCPlistener conn = new TCPlistener(listener, socketManager, info, database, _log); Thread q = new Thread(tg, conn, "BOBTCPlistener" + N); q.start(); } diff --git a/apps/BOB/src/net/i2p/BOB/TCPlistener.java b/apps/BOB/src/net/i2p/BOB/TCPlistener.java index 519970d6e57fe80c5e33f33dddc8560b4399f76a..9134c0a47fa5c147a27d5a3db445066b144306a1 100644 --- a/apps/BOB/src/net/i2p/BOB/TCPlistener.java +++ b/apps/BOB/src/net/i2p/BOB/TCPlistener.java @@ -24,7 +24,6 @@ package net.i2p.BOB; import java.io.IOException; -import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; import java.net.SocketTimeoutException; @@ -46,7 +45,7 @@ public class TCPlistener implements Runnable { private int tgwatch; public I2PSocketManager socketManager; public I2PServerSocket serverSocket; - private int backlog = 50; // should this be more? less? + private ServerSocket listener; /** * Constructor @@ -55,11 +54,12 @@ public class TCPlistener implements Runnable { * @param database * @param _log */ - TCPlistener(I2PSocketManager S, nickname info, nickname database, Log _log) { + TCPlistener(ServerSocket listener, I2PSocketManager S, nickname info, nickname database, Log _log) { this.database = database; this.info = info; this._log = _log; this.socketManager = S; + this.listener = listener; tgwatch = 1; } @@ -77,7 +77,6 @@ public class TCPlistener implements Runnable { } try { // System.out.println("Starting thread count " + Thread.activeCount()); - ServerSocket listener = new ServerSocket(Integer.parseInt(info.get("INPORT").toString()), backlog, InetAddress.getByName(info.get("INHOST").toString())); Socket server = new Socket(); listener.setSoTimeout(1000); info.releaseReadLock(); diff --git a/apps/BOB/src/net/i2p/BOB/doCMDS.java b/apps/BOB/src/net/i2p/BOB/doCMDS.java index e6c7b6fd78e66f16da648806a8f10bbcd4d40300..8b2ffc6a3335f913b16e9fcab8898e8d487b4c91 100644 --- a/apps/BOB/src/net/i2p/BOB/doCMDS.java +++ b/apps/BOB/src/net/i2p/BOB/doCMDS.java @@ -493,8 +493,6 @@ public class doCMDS implements Runnable { wlock(); database.add(Arg, nickinfo); nickinfo.add(P_NICKNAME, Arg); -// nickinfo.add(P_INSTATE,new Boolean(false)); -// nickinfo.add(P_OUTSTATE,new Boolean(false)); nickinfo.add(P_STARTING, Boolean.FALSE); nickinfo.add(P_RUNNING, Boolean.FALSE); nickinfo.add(P_STOPPING, Boolean.FALSE);