From f3f7537ec650e516e23197ad0583ee86fc3cd23e Mon Sep 17 00:00:00 2001
From: sponge <sponge@mail.i2p>
Date: Sat, 11 Oct 2008 07:45:30 +0000
Subject: [PATCH] Set BOB source/target to JDK 5 (AKA 1.5) Minor bugfixes/code
 cleanup on BOB Add/Cleanup some documentation to streaming lib javadocs

---
 apps/BOB/nbproject/project.properties         |  4 +-
 apps/BOB/src/net/i2p/BOB/BOB.java             |  8 +--
 apps/BOB/src/net/i2p/BOB/I2Plistener.java     | 12 ++---
 apps/BOB/src/net/i2p/BOB/I2PtoTCP.java        |  8 +--
 apps/BOB/src/net/i2p/BOB/MUXlisten.java       |  8 +--
 apps/BOB/src/net/i2p/BOB/Main.java            |  4 +-
 apps/BOB/src/net/i2p/BOB/TCPio.java           | 12 ++---
 apps/BOB/src/net/i2p/BOB/TCPlistener.java     | 39 ++++++++++-----
 apps/BOB/src/net/i2p/BOB/TCPtoI2P.java        | 16 +++---
 apps/BOB/src/net/i2p/BOB/UDPIOthread.java     | 50 +++++++++----------
 apps/BOB/src/net/i2p/BOB/doCMDS.java          |  5 ++
 apps/BOB/src/net/i2p/BOB/nickname.java        | 19 +++----
 .../client/streaming/ConnectionManager.java   |  2 +-
 .../streaming/I2PSocketManagerFull.java       |  2 +
 14 files changed, 103 insertions(+), 86 deletions(-)

diff --git a/apps/BOB/nbproject/project.properties b/apps/BOB/nbproject/project.properties
index fcc825dcea..89d7ad1da6 100644
--- a/apps/BOB/nbproject/project.properties
+++ b/apps/BOB/nbproject/project.properties
@@ -40,8 +40,8 @@ javac.classpath=\
 # Space-separated list of extra javac options
 javac.compilerargs=
 javac.deprecation=false
-javac.source=1.4
-javac.target=1.4
+javac.source=1.5
+javac.target=1.5
 javac.test.classpath=\
     ${javac.classpath}:\
     ${build.classes.dir}:\
diff --git a/apps/BOB/src/net/i2p/BOB/BOB.java b/apps/BOB/src/net/i2p/BOB/BOB.java
index b9b48dcfa7..0221723410 100644
--- a/apps/BOB/src/net/i2p/BOB/BOB.java
+++ b/apps/BOB/src/net/i2p/BOB/BOB.java
@@ -39,7 +39,7 @@ import net.i2p.util.SimpleTimer;
 /**
  *
  * BOB, main command socket listener, launches the command parser engine.
- * 
+ *
  * @author sponge
  */
 public class BOB {
@@ -53,7 +53,7 @@ public class BOB {
 
 	/**
 	 * Log a warning
-	 * 
+	 *
 	 * @param arg
 	 */
 	public static void warn(String arg) {
@@ -63,7 +63,7 @@ public class BOB {
 
 	/**
 	 * Log an error
-	 * 
+	 *
 	 * @param arg
 	 */
 	public static void error(String arg) {
@@ -73,7 +73,7 @@ public class BOB {
 
 	/**
 	 * Listen for incoming connections and handle them
-	 * 
+	 *
 	 * @param args
 	 */
 	public static void main(String[] args) {
diff --git a/apps/BOB/src/net/i2p/BOB/I2Plistener.java b/apps/BOB/src/net/i2p/BOB/I2Plistener.java
index a077346bfd..c306c0ebf2 100644
--- a/apps/BOB/src/net/i2p/BOB/I2Plistener.java
+++ b/apps/BOB/src/net/i2p/BOB/I2Plistener.java
@@ -58,16 +58,15 @@ public class I2Plistener implements Runnable {
 		this.info = info;
 		this._log = _log;
 		this.socketManager = S;
-		serverSocket = socketManager.getServerSocket();
+		serverSocket = this.socketManager.getServerSocket();
 		tgwatch = 1;
 	}
 
 	/**
 	 * Simply listen on I2P port, and thread connections
 	 *
-	 * @throws RuntimeException
 	 */
-	public void run() throws RuntimeException {
+	public void run() {
 		boolean g = false;
 		I2PSocket sessSocket = null;
 
@@ -105,7 +104,7 @@ public class I2Plistener implements Runnable {
 				}
 
 			} catch(I2PException e) {
-			//	System.out.println("Exception " + e);
+				//	System.out.println("Exception " + e);
 			}
 		}
 
@@ -123,7 +122,8 @@ public class I2Plistener implements Runnable {
 				// nop
 				}
 		}
-//		System.out.println("STOP Thread count " + Thread.activeCount());
+
+		//		System.out.println("STOP Thread count " + Thread.activeCount());
 		// need to kill off the socket manager too.
 		I2PSession session = socketManager.getSession();
 		if(session != null) {
@@ -134,7 +134,5 @@ public class I2Plistener implements Runnable {
 			}
 //			System.out.println("destroySession Thread count " + Thread.activeCount());
 		}
-
-
 	}
 }
diff --git a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java
index 7e68c6a2b1..4d5f239c6c 100644
--- a/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java
+++ b/apps/BOB/src/net/i2p/BOB/I2PtoTCP.java
@@ -30,18 +30,18 @@ import net.i2p.client.streaming.I2PSocket;
 
 /**
  * Process I2P->TCP
- * 
+ *
  * @author sponge
  */
 public class I2PtoTCP implements Runnable {
 
 	private I2PSocket I2P;
-	private nickname info, database;
+	private nickname info,  database;
 	private Socket sock;
 
 	/**
 	 * Constructor
-	 * 
+	 *
 	 * @param I2Psock
 	 * @param info
 	 * @param database
@@ -54,7 +54,7 @@ public class I2PtoTCP implements Runnable {
 
 	/**
 	 * I2P stream to TCP stream thread starter
-	 * 
+	 *
 	 */
 	public void run() {
 
diff --git a/apps/BOB/src/net/i2p/BOB/MUXlisten.java b/apps/BOB/src/net/i2p/BOB/MUXlisten.java
index c640a81d4d..bfdf2b3de7 100644
--- a/apps/BOB/src/net/i2p/BOB/MUXlisten.java
+++ b/apps/BOB/src/net/i2p/BOB/MUXlisten.java
@@ -34,7 +34,7 @@ import net.i2p.util.Log;
 /**
  *
  * Multiplex listeners for TCP and I2P
- * 
+ *
  * @author sponge
  */
 public class MUXlisten implements Runnable {
@@ -48,7 +48,7 @@ public class MUXlisten implements Runnable {
 
 	/**
 	 * Constructor
-	 * 
+	 *
 	 * @param info
 	 * @param database
 	 * @param _log
@@ -73,13 +73,13 @@ public class MUXlisten implements Runnable {
 		this.info.add("STARTING", Boolean.TRUE);
 		this.info.releaseWriteLock();
 		this.database.releaseWriteLock();
-		
+
 		socketManager = I2PSocketManagerFactory.createManager(prikey, Q);
 	}
 
 	/**
 	 * MUX sockets, fire off a thread to connect, get destination info, and do I/O
-	 * 
+	 *
 	 */
 	public void run() {
 
diff --git a/apps/BOB/src/net/i2p/BOB/Main.java b/apps/BOB/src/net/i2p/BOB/Main.java
index 3dfc9af211..26823ff390 100644
--- a/apps/BOB/src/net/i2p/BOB/Main.java
+++ b/apps/BOB/src/net/i2p/BOB/Main.java
@@ -21,7 +21,6 @@
  *
  * ...for any additional details and liscense questions.
  */
-
 package net.i2p.BOB;
 
 import net.i2p.client.streaming.RetransmissionTimer;
@@ -29,11 +28,10 @@ import net.i2p.util.SimpleTimer;
 
 /**
  * Start from command line
- * 
+ *
  * @author sponge
  *
  */
-
 public class Main {
 
 	/**
diff --git a/apps/BOB/src/net/i2p/BOB/TCPio.java b/apps/BOB/src/net/i2p/BOB/TCPio.java
index bce2cdde1e..f6286f3290 100644
--- a/apps/BOB/src/net/i2p/BOB/TCPio.java
+++ b/apps/BOB/src/net/i2p/BOB/TCPio.java
@@ -40,7 +40,7 @@ public class TCPio implements Runnable {
 
 	/**
 	 * Constructor
-	 * 
+	 *
 	 * @param Ain
 	 * @param Aout
 	 * @param info
@@ -60,7 +60,7 @@ public class TCPio implements Runnable {
 	 * Copy from source to destination...
 	 * and yes, we are totally OK to block here on writes,
 	 * The OS has buffers, and I intend to use them.
-	 * 
+	 *
 	 */
 	public void run() {
 		int b;
@@ -87,11 +87,11 @@ public class TCPio implements Runnable {
 					}
 				} else {
 					/* according to the specs:
-					 * 
-					 * The total number of bytes read into the buffer, 
-					 * or -1 if there is no more data because the end of 
+					 *
+					 * The total number of bytes read into the buffer,
+					 * or -1 if there is no more data because the end of
 					 * the stream has been reached.
-					 * 
+					 *
 					 */
 					return;
 				}
diff --git a/apps/BOB/src/net/i2p/BOB/TCPlistener.java b/apps/BOB/src/net/i2p/BOB/TCPlistener.java
index f06b1da276..519970d6e5 100644
--- a/apps/BOB/src/net/i2p/BOB/TCPlistener.java
+++ b/apps/BOB/src/net/i2p/BOB/TCPlistener.java
@@ -41,7 +41,7 @@ import net.i2p.util.Log;
  */
 public class TCPlistener implements Runnable {
 
-	private nickname info, database;
+	private nickname info,  database;
 	private Log _log;
 	private int tgwatch;
 	public I2PSocketManager socketManager;
@@ -65,11 +65,12 @@ public class TCPlistener implements Runnable {
 
 	/**
 	 * Simply listen on TCP port, and thread connections
-	 * @throws java.lang.RuntimeException
+	 *
 	 */
-	public void run() throws RuntimeException {
+	public void run() {
 		boolean g = false;
-				database.getReadLock();
+		boolean spin = true;
+		database.getReadLock();
 		info.getReadLock();
 		if(info.exists("OUTPORT")) {
 			tgwatch = 2;
@@ -79,15 +80,14 @@ public class TCPlistener implements Runnable {
 			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();
-		database.releaseReadLock();
-		boolean spin = true;
-		while(spin) {
-			database.getReadLock();
-			info.getReadLock();
-			spin = info.get("RUNNING").equals(Boolean.TRUE);
 			info.releaseReadLock();
 			database.releaseReadLock();
+			while(spin) {
+				database.getReadLock();
+				info.getReadLock();
+				spin = info.get("RUNNING").equals(Boolean.TRUE);
+				info.releaseReadLock();
+				database.releaseReadLock();
 //				System.out.println("Thread count " + Thread.activeCount());
 				try {
 					server = listener.accept();
@@ -101,11 +101,24 @@ public class TCPlistener implements Runnable {
 					Thread t = new Thread(conn_c, "BOBTCPtoI2P");
 					t.start();
 					g = false;
-				} 
+				}
 			}
 			listener.close();
 		} catch(IOException ioe) {
-			// throw new RuntimeException(ioe);
+			// Fatal failure, cause a stop event
+			database.getReadLock();
+			info.getReadLock();
+			spin = info.get("RUNNING").equals(Boolean.TRUE);
+			info.releaseReadLock();
+			database.releaseReadLock();
+			if(spin) {
+				database.getWriteLock();
+				info.getWriteLock();
+				info.add("STOPPING", new Boolean(true));
+				info.add("RUNNING", new Boolean(false));
+				info.releaseWriteLock();
+				database.releaseWriteLock();
+			}
 		}
 
 //System.out.println("STOP!");
diff --git a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java
index 00b306fca4..dd199ecb7c 100644
--- a/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java
+++ b/apps/BOB/src/net/i2p/BOB/TCPtoI2P.java
@@ -37,7 +37,7 @@ import net.i2p.data.Destination;
 import net.i2p.i2ptunnel.I2PTunnel;
 
 /**
- * 
+ *
  * Process TCP->I2P
  *
  * @author sponge
@@ -45,17 +45,17 @@ import net.i2p.i2ptunnel.I2PTunnel;
 public class TCPtoI2P implements Runnable {
 
 	private I2PSocket I2P;
-	private nickname info, database;
+	private nickname info,  database;
 	private Socket sock;
 	private I2PSocketManager socketManager;
 
 	/**
-	 * This is a more forgiving readline, 
+	 * This is a more forgiving readline,
 	 * it works on unbuffered streams
-	 * 
+	 *
 	 * @param in
 	 * @return line of text as a String
-	 * @throws Exception 
+	 * @throws Exception
 	 */
 	public static String Lread(InputStream in) throws Exception {
 		String S;
@@ -85,7 +85,7 @@ public class TCPtoI2P implements Runnable {
 	 * @param i2p
 	 * @param socket
 	 * @param info
-	 * @param database 
+	 * @param database
 	 */
 	TCPtoI2P(I2PSocketManager i2p, Socket socket, nickname info, nickname database) {
 		this.sock = socket;
@@ -96,7 +96,7 @@ public class TCPtoI2P implements Runnable {
 
 	/**
 	 * Print an error message to out
-	 * 
+	 *
 	 * @param e
 	 * @param out
 	 * @throws java.io.IOException
@@ -153,7 +153,7 @@ public class TCPtoI2P implements Runnable {
 						}
 					}
 
-				} catch(I2PException e) {					
+				} catch(I2PException e) {
 					Emsg("ERROR " + e.toString(), out);
 				} catch(ConnectException e) {
 					Emsg("ERROR " + e.toString(), out);
diff --git a/apps/BOB/src/net/i2p/BOB/UDPIOthread.java b/apps/BOB/src/net/i2p/BOB/UDPIOthread.java
index deb22b223c..0dce4a0c27 100644
--- a/apps/BOB/src/net/i2p/BOB/UDPIOthread.java
+++ b/apps/BOB/src/net/i2p/BOB/UDPIOthread.java
@@ -21,7 +21,6 @@
  *
  * ...for any additional details and liscense questions.
  */
-
 package net.i2p.BOB;
 
 import java.io.DataInputStream;
@@ -34,10 +33,9 @@ import net.i2p.client.I2PSessionListener;
 import net.i2p.data.Destination;
 import net.i2p.util.Log;
 
-
 /**
  * UDP IO on I2P
- * 
+ *
  *  FIX ME: Untested, and incomplete!
  *  I have no personal need to UDP yet,
  *  however alot of p2p apps pretty much demand it.
@@ -55,24 +53,26 @@ public class UDPIOthread implements I2PSessionListener, Runnable {
 	private I2PSession _session;
 	private Destination _peerDestination;
 	private boolean up;
-	
-/**
- * Constructor
- * @param info
- * @param _log
- * @param socket
- * @param _session
- */	UDPIOthread(nickname info, Log _log, Socket socket, I2PSession _session) {
+
+	/**
+	 * Constructor
+	 * @param info
+	 * @param _log
+	 * @param socket
+	 * @param _session
+	 */
+	UDPIOthread(nickname info, Log _log, Socket socket, I2PSession _session) {
 		this.info = info;
 		this._log = _log;
 		this.socket = socket;
 		this._session = _session;
 
 	}
-/**
- * 
- */
- public void run() {
+
+	/**
+	 *
+	 */
+	public void run() {
 		byte data[] = new byte[1024];
 		up = true;
 		try {
@@ -103,12 +103,13 @@ public class UDPIOthread implements I2PSessionListener, Runnable {
 			}
 		}
 	}
-/**
- * 
- * @param session
- * @param msgId
- * @param size
- */
+
+	/**
+	 *
+	 * @param session
+	 * @param msgId
+	 * @param size
+	 */
 	public void messageAvailable(I2PSession session, int msgId, long size) {
 //		_log.debug("Message available: id = " + msgId + " size = " + size);
 		try {
@@ -123,22 +124,21 @@ public class UDPIOthread implements I2PSessionListener, Runnable {
 	}
 
 	// Great, can these be used to kill ourselves.
-
 	/** required by {@link I2PSessionListener I2PSessionListener} to notify of disconnect */
 	public void disconnected(I2PSession session) {
 		_log.debug("Disconnected");
-		// up = false;
+	// up = false;
 	}
 
 	/** required by {@link I2PSessionListener I2PSessionListener} to notify of error */
 	public void errorOccurred(I2PSession session, String message, Throwable error) {
 		_log.debug("Error occurred: " + message, error);
-		// up = false;
+	// up = false;
 	}
 
 	/** required by {@link I2PSessionListener I2PSessionListener} to notify of abuse */
 	public void reportAbuse(I2PSession session, int severity) {
 		_log.debug("Abuse reported of severity " + severity);
-		// up = false;
+	// up = false;
 	}
 }
diff --git a/apps/BOB/src/net/i2p/BOB/doCMDS.java b/apps/BOB/src/net/i2p/BOB/doCMDS.java
index b1527997e5..2fb363b189 100644
--- a/apps/BOB/src/net/i2p/BOB/doCMDS.java
+++ b/apps/BOB/src/net/i2p/BOB/doCMDS.java
@@ -70,6 +70,9 @@ public class doCMDS implements Runnable {
 	private static final String P_RUNNING = "RUNNING";
 	private static final String P_STARTING = "STARTING";
 	private static final String P_STOPPING = "STOPPING";
+//	private static final String P_INSTATE = "INSTATE";
+//	private static final String P_OUTSTATE = "OUTSTATE";
+
 	/* command strings */
 	private static final String C_help = "help";
 	private static final String C_clear = "clear";
@@ -490,6 +493,8 @@ 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);
diff --git a/apps/BOB/src/net/i2p/BOB/nickname.java b/apps/BOB/src/net/i2p/BOB/nickname.java
index cef5950d9d..d1ece7be79 100644
--- a/apps/BOB/src/net/i2p/BOB/nickname.java
+++ b/apps/BOB/src/net/i2p/BOB/nickname.java
@@ -25,18 +25,19 @@ package net.i2p.BOB;
 
 /**
  * Internal database to relate nicknames to options to values
- * 
+ *
  * @author sponge
  */
 public class nickname {
 
 	private static final int maxWritersWaiting = 2;
 	private volatile Object[][] data;
-	private volatile int index, writersWaiting, readers;
+	private volatile int index,  writersWaiting,  readers;
 	private volatile boolean writingInProgress;
+
 	/**
 	 * make initial NULL object
-	 * 
+	 *
 	 */
 	public nickname() {
 		this.data = new Object[1][2];
@@ -94,7 +95,7 @@ public class nickname {
 
 	/**
 	 * Delete an object from array if it exists
-	 * 
+	 *
 	 * @param key
 	 */
 	public synchronized void kill(Object key) {
@@ -110,7 +111,7 @@ public class nickname {
 		}
 		olddata = new Object[index + 2][2];
 		// copy to olddata, skipping 'k'
-		for(i = 0          , l = 0; l < index; i++, l++) {
+		for(i = 0            , l = 0; l < index; i++, l++) {
 			if(i == k) {
 				l++;
 				didsomething++;
@@ -126,7 +127,7 @@ public class nickname {
 
 	/**
 	 * Add object to the array, deletes the old one if it exists
-	 * 
+	 *
 	 * @param key
 	 * @param val
 	 */
@@ -149,7 +150,7 @@ public class nickname {
 
 	/**
 	 * Get the object, and return it, throws RuntimeException
-	 * 
+	 *
 	 * @param key
 	 * @return Object
 	 * @throws java.lang.RuntimeException
@@ -165,7 +166,7 @@ public class nickname {
 
 	/**
 	 * returns true if an object exists, else returns false
-	 * 
+	 *
 	 * @param key
 	 * @return true if an object exists, else returns false
 	 */
@@ -180,7 +181,7 @@ public class nickname {
 	}
 
 	/**
-	 * 
+	 *
 	 * @param i index
 	 * @return an indexed Object
 	 * @throws java.lang.RuntimeException
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
index 762260ea20..1e500d997b 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java
@@ -113,7 +113,7 @@ public class ConnectionManager {
     public void setAllowIncomingConnections(boolean allow) { 
         _connectionHandler.setActive(allow);
     }
-    /** should we acceot connections, or just reject everyone? */
+    /** @return if we should accept connections */
     public boolean getAllowIncomingConnections() {
         return _connectionHandler.getActive();
     }
diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
index c647741b59..764b4089df 100644
--- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
+++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java
@@ -181,6 +181,7 @@ public class I2PSocketManagerFull implements I2PSocketManager {
      * @param peer Destination to connect to
      * @param options I2P socket options to be used for connecting
      *
+     * @return I2PSocket if successful
      * @throws NoRouteToHostException if the peer is not found or not reachable
      * @throws I2PException if there is some other I2P-related problem
      */
@@ -215,6 +216,7 @@ public class I2PSocketManagerFull implements I2PSocketManager {
      *
      * @param peer Destination to connect to
      *
+     * @return I2PSocket if successful
      * @throws NoRouteToHostException if the peer is not found or not reachable
      * @throws I2PException if there is some other I2P-related problem
      */
-- 
GitLab