From 97b05b1dbfed60ec3a1955bd58a99bc18d1fa07d Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 24 Jun 2012 11:38:37 +0000 Subject: [PATCH 1/3] * I2PTunnel: Fix NPE on shared client creation, thx kytv * Transport: Add Ethiopia to hidden mode list * Log and javadoc tweaks --- .../src/net/i2p/i2ptunnel/I2PTunnelClientBase.java | 2 +- core/java/src/net/i2p/client/I2PSessionImpl.java | 2 +- history.txt | 5 +++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- .../net/i2p/router/message/SendMessageDirectJob.java | 10 ++++++++++ .../src/net/i2p/router/transport/BadCountries.java | 3 ++- 6 files changed, 20 insertions(+), 4 deletions(-) diff --git a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java index 1e69e0e18..d9fea9743 100644 --- a/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java +++ b/apps/i2ptunnel/java/src/net/i2p/i2ptunnel/I2PTunnelClientBase.java @@ -511,7 +511,7 @@ public abstract class I2PTunnelClientBase extends I2PTunnelTask implements Runna if (sm == null) return; Properties props = tunnel.getClientOptions(); - sm.setDefaultOptions(sockMgr.buildOptions(props)); + sm.setDefaultOptions(sm.buildOptions(props)); } /** diff --git a/core/java/src/net/i2p/client/I2PSessionImpl.java b/core/java/src/net/i2p/client/I2PSessionImpl.java index 60f67236a..9dc50b12b 100644 --- a/core/java/src/net/i2p/client/I2PSessionImpl.java +++ b/core/java/src/net/i2p/client/I2PSessionImpl.java @@ -584,7 +584,7 @@ abstract class I2PSessionImpl implements I2PSession, I2CPMessageReader.I2CPMessa } else { if (_log.shouldLog(Log.DEBUG)) _log.debug(getPrefix() + "Message received of type " + message.getType() - + " to be handled by " + handler); + + " to be handled by " + handler.getClass().getSimpleName()); handler.handleMessage(message, this); } } diff --git a/history.txt b/history.txt index 760700ad4..ccc1e43c9 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,7 @@ +2012-06-24 zzz + * I2PTunnel: Fix NPE on shared client creation, thx kytv + * Transport: Add Ethiopia to hidden mode list + 2012-06-21 zzz * I2CP: Make separate message ID counters per-destination, use atomic, increase max (could have caused "local loopback" problems) @@ -5,6 +9,7 @@ streaming messages don't get split up unnecessarily * OCMOSJ, ElG, Streaming: log tweaks * TunnelInfo: Change msg counter from long to int + * TunnelPeerSelectors: Minor refactoring to store context * TunnelPool: Fix bug where a tunnel was marked as reused when it wasn't * TunnelPoolManager: Use one ClientPeerSelector for all pools diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 8ab24107c..80cfb9c84 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 = 17; + public final static long BUILD = 18; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/message/SendMessageDirectJob.java b/router/java/src/net/i2p/router/message/SendMessageDirectJob.java index 5ded790ab..8880a7785 100644 --- a/router/java/src/net/i2p/router/message/SendMessageDirectJob.java +++ b/router/java/src/net/i2p/router/message/SendMessageDirectJob.java @@ -21,6 +21,13 @@ import net.i2p.router.ReplyJob; import net.i2p.router.RouterContext; import net.i2p.util.Log; +/** + * Send a message directly to another router, i.e. not through a tunnel. + * This is safe to run inline via runJob(). + * If the RouterInfo for the Hash is not found locally, it will + * queue a lookup and register itself to be run again when the lookup + * succeeds or times out. + */ public class SendMessageDirectJob extends JobImpl { private final Log _log; private final I2NPMessage _message; @@ -39,9 +46,11 @@ public class SendMessageDirectJob extends JobImpl { public SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, int timeoutMs, int priority) { this(ctx, message, toPeer, null, null, null, null, timeoutMs, priority); } + public SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority) { this(ctx, message, toPeer, null, onSuccess, onFail, selector, timeoutMs, priority); } + public SendMessageDirectJob(RouterContext ctx, I2NPMessage message, Hash toPeer, Job onSend, ReplyJob onSuccess, Job onFail, MessageSelector selector, int timeoutMs, int priority) { super(ctx); _log = getContext().logManager().getLog(SendMessageDirectJob.class); @@ -66,6 +75,7 @@ public class SendMessageDirectJob extends JobImpl { } public String getName() { return "Send Message Direct"; } + public void runJob() { long now = getContext().clock().now(); diff --git a/router/java/src/net/i2p/router/transport/BadCountries.java b/router/java/src/net/i2p/router/transport/BadCountries.java index 1431dcb60..f5d36b64a 100644 --- a/router/java/src/net/i2p/router/transport/BadCountries.java +++ b/router/java/src/net/i2p/router/transport/BadCountries.java @@ -16,7 +16,7 @@ abstract class BadCountries { // zzz.i2p/topics/969 // List created based on the Press Freedom Index. Those countries with a score of higher than 50 are included: // http://en.wikipedia.org/wiki/Press_Freedom_Index - // Except: + // Except (quote): // I don't really think that is usage of I2P is dangerous in countries from CIS // General situation is really bad (like in Russia) but people here doesn't have problems with Ecnryption usage. @@ -32,6 +32,7 @@ abstract class BadCountries { /* Democratic Republic of the Congo */ "CD", /* Equatorial Guinea */ "GQ", /* Eritrea */ "ER", + /* Ethiopia */ "ET", /* Fiji */ "FJ", /* Honduras */ "HN", /* Iran */ "IR", From 1671e3b126e0a14c5346b4aa4cb6d2182d13eca7 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 24 Jun 2012 19:23:05 +0000 Subject: [PATCH 2/3] Fix bad size estimate when tags are included in the AES block, resulting in trailing zeros after the random padding in the unencrypted AES data block. The number of zeros equaled the number of tags included (typ. 6 or 40). As the data size is rounded up to the next multiple of 16, this increased the size of the data by 0, 16, 32, or 48 bytes when tags were included. Bug introduced 2004-10-30. --- core/java/src/net/i2p/crypto/ElGamalAESEngine.java | 1 - 1 file changed, 1 deletion(-) diff --git a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java index c31a20482..8b6cce5f1 100644 --- a/core/java/src/net/i2p/crypto/ElGamalAESEngine.java +++ b/core/java/src/net/i2p/crypto/ElGamalAESEngine.java @@ -599,7 +599,6 @@ public class ElGamalAESEngine { //_log.debug("Encrypting AES"); if (tagsForDelivery == null) tagsForDelivery = Collections.EMPTY_SET; int size = 2 // sizeof(tags) - + tagsForDelivery.size() + SessionTag.BYTE_LENGTH*tagsForDelivery.size() + 4 // payload length + Hash.HASH_LENGTH From ff0bfb9f127623b0e042167040a61b934a0dd203 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 24 Jun 2012 19:26:23 +0000 Subject: [PATCH 3/3] * i2psnark: Don't create a new PeerCoordinator after restart, as the TrackerClient holds on to the old one and that causes it to not get peers. Possibly fixes ticket #563. --- .../java/src/org/klomp/snark/PeerCoordinator.java | 10 +++++++++- apps/i2psnark/java/src/org/klomp/snark/Snark.java | 15 ++++----------- history.txt | 6 ++++++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 4 files changed, 20 insertions(+), 13 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 45b6ef82a..fe924f79c 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -125,7 +125,7 @@ class PeerCoordinator implements PeerListener /** partial pieces - lock by synching on wantedPieces - TODO store Requests, not PartialPieces */ private final List partialPieces; - private boolean halted = false; + private volatile boolean halted; private final MagnetState magnetState; private final CoordinatorListener listener; @@ -429,6 +429,14 @@ class PeerCoordinator implements PeerListener } } + /** + * @since 0.9.1 + */ + public void restart() { + halted = false; + timer.schedule((CHECK_PERIOD / 2) + _random.nextInt((int) CHECK_PERIOD)); + } + public void connected(Peer peer) { if (halted) diff --git a/apps/i2psnark/java/src/org/klomp/snark/Snark.java b/apps/i2psnark/java/src/org/klomp/snark/Snark.java index acf5f15ed..138f2dd2c 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/Snark.java +++ b/apps/i2psnark/java/src/org/klomp/snark/Snark.java @@ -553,21 +553,14 @@ public class Snark } stopped = false; - boolean coordinatorChanged = false; if (coordinator.halted()) { - // ok, we have already started and stopped, but the coordinator seems a bit annoying to - // restart safely, so lets build a new one to replace the old + coordinator.restart(); if (_peerCoordinatorSet != null) - _peerCoordinatorSet.remove(coordinator); - PeerCoordinator newCoord = new PeerCoordinator(_util, id, infoHash, meta, storage, this, this); - if (_peerCoordinatorSet != null) - _peerCoordinatorSet.add(newCoord); - coordinator = newCoord; - coordinatorChanged = true; + _peerCoordinatorSet.add(coordinator); } - if (!trackerclient.started() && !coordinatorChanged) { + if (!trackerclient.started()) { trackerclient.start(); - } else if (trackerclient.halted() || coordinatorChanged) { + } else if (trackerclient.halted()) { if (storage != null) { try { storage.reopen(rootDataDir); diff --git a/history.txt b/history.txt index ccc1e43c9..1955fa030 100644 --- a/history.txt +++ b/history.txt @@ -1,4 +1,10 @@ 2012-06-24 zzz + * ElGamalAESEngine: Fix bad size estimate when tags are included, + resulting in trailing zeros after the padding + in the unencrypted data + * i2psnark: Don't create a new PeerCoordinator after restart, as the + TrackerClient holds on to the old one and that causes it + to not get peers. Possibly fixes ticket #563. * I2PTunnel: Fix NPE on shared client creation, thx kytv * Transport: Add Ethiopia to hidden mode list diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 80cfb9c84..5b1ba79e3 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 = 18; + public final static long BUILD = 19; /** for example "-test" */ public final static String EXTRA = "";