diff --git a/apps/i2psnark/java/build.xml b/apps/i2psnark/java/build.xml index 3d23a8ba6..627f68e42 100644 --- a/apps/i2psnark/java/build.xml +++ b/apps/i2psnark/java/build.xml @@ -4,8 +4,8 @@ - - + + @@ -29,9 +29,59 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java index e970a6954..4651cbdfb 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java +++ b/apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java @@ -192,6 +192,15 @@ public class I2PSnarkUtil { /** hook between snark's logger and an i2p log */ void debug(String msg, int snarkDebugLevel, Throwable t) { + if (t instanceof OutOfMemoryError) { + try { Thread.sleep(100); } catch (InterruptedException ie) {} + try { + t.printStackTrace(); + } catch (Throwable tt) {} + try { + System.out.println("OOM thread: " + Thread.currentThread().getName()); + } catch (Throwable tt) {} + } switch (snarkDebugLevel) { case 0: case 1: diff --git a/apps/i2psnark/java/src/org/klomp/snark/Peer.java b/apps/i2psnark/java/src/org/klomp/snark/Peer.java index ef3fe2b27..5a8d6f09e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Peer.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Peer.java @@ -283,6 +283,9 @@ public class Peer implements Comparable PeerConnectionOut out = s.out; if (out != null) out.disconnect(); + PeerListener pl = s.listener; + if (pl != null) + pl.disconnected(this); } } diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java index 35b428a9c..83a04e0ce 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java @@ -172,8 +172,9 @@ class PeerConnectionIn implements Runnable } catch (Throwable t) { - Snark.debug(peer + ": " + t, Snark.ERROR); - t.printStackTrace(); + I2PSnarkUtil.instance().debug(peer.toString(), Snark.ERROR, t); + if (t instanceof OutOfMemoryError) + throw (OutOfMemoryError)t; } finally { diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java index 00f9f42fd..91562415e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java @@ -62,13 +62,13 @@ class PeerConnectionOut implements Runnable { try { - while (!quit) + while (!quit && peer.isConnected()) { Message m = null; PeerState state = null; synchronized(sendQueue) { - while (!quit && sendQueue.isEmpty()) + while (!quit && peer.isConnected() && sendQueue.isEmpty()) { try { @@ -86,7 +86,7 @@ class PeerConnectionOut implements Runnable } } state = peer.state; - if (!quit && state != null) + if (!quit && state != null && peer.isConnected()) { // Piece messages are big. So if there are other // (control) messages make sure they are send first. @@ -149,8 +149,9 @@ class PeerConnectionOut implements Runnable } catch (Throwable t) { - Snark.debug(peer + ": " + t, Snark.ERROR); - t.printStackTrace(); + I2PSnarkUtil.instance().debug(peer.toString(), Snark.ERROR, t); + if (t instanceof OutOfMemoryError) + throw (OutOfMemoryError)t; } finally { diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 84666d9f0..3fa5144cf 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -536,8 +536,8 @@ public class PeerCoordinator implements PeerListener public void disconnected(Peer peer) { - if (Snark.debug >= Snark.INFO) - Snark.debug("Disconnected " + peer, Snark.INFO); + if (_log.shouldLog(Log.INFO)) + _log.info("Disconnected " + peer); synchronized(peers) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java index ab915f6fc..c29d2015e 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java +++ b/apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java @@ -231,8 +231,9 @@ public class TrackerClient extends I2PThread } catch (Throwable t) { - Snark.debug("TrackerClient: " + t, Snark.ERROR); - t.printStackTrace(); + I2PSnarkUtil.instance().debug("TrackerClient: " + t, Snark.ERROR, t); + if (t instanceof OutOfMemoryError) + throw (OutOfMemoryError)t; } finally { diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/RunStandalone.java b/apps/i2psnark/java/src/org/klomp/snark/web/RunStandalone.java new file mode 100644 index 000000000..c3d4548ed --- /dev/null +++ b/apps/i2psnark/java/src/org/klomp/snark/web/RunStandalone.java @@ -0,0 +1,47 @@ +package org.klomp.snark.web; + +import java.io.File; + +import net.i2p.util.FileUtil; +import org.mortbay.jetty.Server; + +public class RunStandalone { + private Server _server; + + static { + System.setProperty("org.mortbay.http.Version.paranoid", "true"); + System.setProperty("org.mortbay.xml.XmlParser.NotValidating", "true"); + } + + private RunStandalone(String args[]) {} + + public static void main(String args[]) { + RunStandalone runner = new RunStandalone(args); + runner.start(); + } + + public void start() { + File workDir = new File("work"); + boolean workDirRemoved = FileUtil.rmdir(workDir, false); + if (!workDirRemoved) + System.err.println("ERROR: Unable to remove Jetty temporary work directory"); + boolean workDirCreated = workDir.mkdirs(); + if (!workDirCreated) + System.err.println("ERROR: Unable to create Jetty temporary work directory"); + + try { + _server = new Server("jetty-i2psnark.xml"); + _server.start(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void stop() { + try { + _server.stop(); + } catch (InterruptedException ie) { + ie.printStackTrace(); + } + } +} diff --git a/apps/i2psnark/jetty-i2psnark.xml b/apps/i2psnark/jetty-i2psnark.xml new file mode 100644 index 000000000..bb0aab700 --- /dev/null +++ b/apps/i2psnark/jetty-i2psnark.xml @@ -0,0 +1,114 @@ + + + + + + + + + + + + + + + + + + + + + + 0.0.0.0 + 8002 + + + 3 + 10 + 30000 + 1000 + 8443 + 8443 + main + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + i2psnark + + / + i2psnark.war + + + + + + + + ./logs/yyyy_mm_dd.i2psnark-request.log + 90 + true + false + false + GMT + + + + + + + 2000 + false + + diff --git a/apps/i2psnark/readme-standalone.txt b/apps/i2psnark/readme-standalone.txt new file mode 100644 index 000000000..2f641db89 --- /dev/null +++ b/apps/i2psnark/readme-standalone.txt @@ -0,0 +1,6 @@ +To run I2PSnark from the command line, run "java -jar lib/i2psnark.jar", but +to run it with the web UI, run "java -jar launch-i2psnark.jar". I2PSnark is +GPL'ed software, based on Snark (http://www.klomp.org/) to run on top of I2P +(http://www.i2p.net/) within a webserver (such as the bundled Jetty from +http://jetty.mortbay.org/). For more information about I2PSnark, get in touch +with the folks at http://forum.i2p.net/ \ No newline at end of file diff --git a/apps/syndie/java/src/net/i2p/syndie/web/RunStandalone.java b/apps/syndie/java/src/net/i2p/syndie/web/RunStandalone.java index d5dcea0d1..ffef2957d 100644 --- a/apps/syndie/java/src/net/i2p/syndie/web/RunStandalone.java +++ b/apps/syndie/java/src/net/i2p/syndie/web/RunStandalone.java @@ -10,6 +10,7 @@ public class RunStandalone { static { System.setProperty("org.mortbay.http.Version.paranoid", "true"); + System.setProperty("org.mortbay.xml.XmlParser.NotValidating", "true"); System.setProperty("syndie.rootDir", "."); System.setProperty("syndie.defaultSingleUserArchives", "http://syndiemedia.i2p.net:8000/archive/archive.txt"); System.setProperty("syndie.defaultProxyHost", ""); diff --git a/build.xml b/build.xml index ed229b8f4..ffc1b1afe 100644 --- a/build.xml +++ b/build.xml @@ -9,6 +9,7 @@ + @@ -152,6 +153,7 @@ + @@ -453,4 +455,8 @@ + + + + diff --git a/history.txt b/history.txt index b6c11a1d4..2f4f98d16 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,19 @@ -$Id: history.txt,v 1.361 2005/12/16 22:47:04 jrandom Exp $ +$Id: history.txt,v 1.362 2005/12/17 04:22:07 jrandom Exp $ + +2005-12-18 jrandom + * Added a standalone runner for the I2PSnark web ui (build with the + command "ant i2psnark", unzip i2psnark-standalone.zip somewhere, run + with "java -jar launch-i2psnark.jar", and go to http://localhost:8002/). + * Further I2PSnark error handling + +2005-12-17 jrandom + * Let multiuser accounts authorize themselves to access the remote + functionality again (thanks Ch0Hag!) + * Adjust the JVM heap size to 128MB for new installs (existing users can + accomplish this by editing wrapper.config, adding the line + "wrapper.java.maxmemory=128", and then doing a full shutdown and startup + of the router). This is relevent for heavy usage of I2PSnark in the + router console. 2005-12-17 jrandom * Use our faster SHA1, rather than the JVM's within I2PSnark, and let