From 1ad6dde146c3c6b87043112b6fbfc1055af7e1b9 Mon Sep 17 00:00:00 2001 From: jrandom <jrandom> Date: Mon, 26 Apr 2004 00:57:10 +0000 Subject: [PATCH] allow a whole set of OOM listeners on threads, not just one cache the hash's base64 value too use the context's logging more logging updates --- core/java/src/net/i2p/crypto/AESEngine.java | 3 ++- .../net/i2p/crypto/DummyElGamalEngine.java | 11 +++++--- core/java/src/net/i2p/data/Hash.java | 10 +++++++ core/java/src/net/i2p/util/I2PThread.java | 27 ++++++++++++++----- core/java/src/net/i2p/util/LogManager.java | 3 +++ 5 files changed, 43 insertions(+), 11 deletions(-) diff --git a/core/java/src/net/i2p/crypto/AESEngine.java b/core/java/src/net/i2p/crypto/AESEngine.java index 1cdfcff16b..c90453a37f 100644 --- a/core/java/src/net/i2p/crypto/AESEngine.java +++ b/core/java/src/net/i2p/crypto/AESEngine.java @@ -31,6 +31,8 @@ public class AESEngine { public AESEngine(I2PAppContext ctx) { _context = ctx; _log = _context.logManager().getLog(AESEngine.class); + if (getClass() == AESEngine.class) + _log.warn("Warning: AES is disabled"); } /** Encrypt the payload with the session key @@ -44,7 +46,6 @@ public class AESEngine { || (initializationVector.length != 16)) return null; byte cyphertext[] = new byte[payload.length + (16 - (payload.length % 16))]; - _log.warn("Warning: AES is disabled"); System.arraycopy(payload, 0, cyphertext, 0, payload.length); return cyphertext; } diff --git a/core/java/src/net/i2p/crypto/DummyElGamalEngine.java b/core/java/src/net/i2p/crypto/DummyElGamalEngine.java index 8a6376a50c..780288f3f8 100644 --- a/core/java/src/net/i2p/crypto/DummyElGamalEngine.java +++ b/core/java/src/net/i2p/crypto/DummyElGamalEngine.java @@ -25,7 +25,7 @@ import net.i2p.I2PAppContext; * @author jrandom */ public class DummyElGamalEngine extends ElGamalEngine { - private final static Log _log = new Log(DummyElGamalEngine.class); + private Log _log; /** * The ElGamal engine should only be constructed and accessed through the @@ -35,6 +35,7 @@ public class DummyElGamalEngine extends ElGamalEngine { */ public DummyElGamalEngine(I2PAppContext context) { super(context); + _log = context.logManager().getLog(DummyElGamalEngine.class); _log.log(Log.CRIT, "Dummy ElGamal engine in use! NO DATA SECURITY. Danger Will Robinson, Danger!", new Exception("I really hope you know what you're doing")); } @@ -93,11 +94,13 @@ public class DummyElGamalEngine extends ElGamalEngine { } Hash calcHash = SHA256Generator.getInstance().calculateHash(rv); if (calcHash.equals(hash)) { - _log.debug("Hash matches: " + DataHelper.toString(hash.getData(), hash.getData().length)); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Hash matches: " + DataHelper.toString(hash.getData(), hash.getData().length)); return rv; } else { - _log.debug("Doesn't match hash [calc=" + calcHash + " sent hash=" + hash + "]\ndata = " + new String(rv), - new Exception("Doesn't match")); + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Doesn't match hash [calc=" + calcHash + " sent hash=" + hash + "]\ndata = " + new String(rv), + new Exception("Doesn't match")); return null; } } diff --git a/core/java/src/net/i2p/data/Hash.java b/core/java/src/net/i2p/data/Hash.java index 3058855189..8c7c3df777 100644 --- a/core/java/src/net/i2p/data/Hash.java +++ b/core/java/src/net/i2p/data/Hash.java @@ -25,6 +25,7 @@ public class Hash extends DataStructureImpl { private final static Log _log = new Log(Hash.class); private byte[] _data; private volatile String _stringified; + private volatile String _base64ed; public final static int HASH_LENGTH = 32; public final static Hash FAKE_HASH = new Hash(new byte[HASH_LENGTH]); @@ -44,11 +45,13 @@ public class Hash extends DataStructureImpl { public void setData(byte[] data) { _data = data; _stringified = null; + _base64ed = null; } public void readBytes(InputStream in) throws DataFormatException, IOException { _data = new byte[HASH_LENGTH]; _stringified = null; + _base64ed = null; int read = read(in, _data); if (read != HASH_LENGTH) throw new DataFormatException("Not enough bytes to read the hash"); } @@ -82,4 +85,11 @@ public class Hash extends DataStructureImpl { } return _stringified; } + + public String toBase64() { + if (_base64ed == null) { + _base64ed = super.toBase64(); + } + return _base64ed; + } } \ No newline at end of file diff --git a/core/java/src/net/i2p/util/I2PThread.java b/core/java/src/net/i2p/util/I2PThread.java index 4efb27de9d..804ab05d39 100644 --- a/core/java/src/net/i2p/util/I2PThread.java +++ b/core/java/src/net/i2p/util/I2PThread.java @@ -9,6 +9,11 @@ package net.i2p.util; * */ + +import java.util.Set; +import java.util.HashSet; +import java.util.Iterator; + /** * In case its useful later... * (e.g. w/ native programatic thread dumping, etc) @@ -16,7 +21,7 @@ package net.i2p.util; */ public class I2PThread extends Thread { private static Log _log; - private static OOMEventListener _lsnr; + private static Set _listeners = new HashSet(4); public I2PThread() { super(); @@ -38,19 +43,29 @@ public class I2PThread extends Thread { try { super.run(); } catch (Throwable t) { - if ((t instanceof OutOfMemoryError) && (_lsnr != null)) _lsnr.outOfMemory((OutOfMemoryError) t); + if (t instanceof OutOfMemoryError) + fireOOM((OutOfMemoryError)t); // we cant assume log is created if (_log == null) _log = new Log(I2PThread.class); _log.log(Log.CRIT, "Killing thread " + getName(), t); } } + + private void fireOOM(OutOfMemoryError oom) { + for (Iterator iter = _listeners.iterator(); iter.hasNext(); ) { + OOMEventListener listener = (OOMEventListener)iter.next(); + listener.outOfMemory(oom); + } + } - public static void setOOMEventListener(OOMEventListener lsnr) { - _lsnr = lsnr; + /** register a new component that wants notification of OOM events */ + public static void addOOMEventListener(OOMEventListener lsnr) { + _listeners.add(lsnr); } - public static OOMEventListener getOOMEventListener() { - return _lsnr; + /** unregister a component that wants notification of OOM events */ + public static void removeOOMEventListener(OOMEventListener lsnr) { + _listeners.remove(lsnr); } public interface OOMEventListener { diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 5357f37a6e..6277fce8dd 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -269,6 +269,9 @@ public class LogManager { _consoleBufferSize = DEFAULT_CONSOLEBUFFERSIZE; } + if (_log.shouldLog(Log.DEBUG)) + _log.debug("Log set to use the base log file as " + _baseLogfilename); + parseLimits(config); } -- GitLab