diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 845b98904..61159c5e8 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/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/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 diff --git a/history.txt b/history.txt index 760700ad4..1955fa030 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,13 @@ +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 + 2012-06-21 zzz * I2CP: Make separate message ID counters per-destination, use atomic, increase max (could have caused "local loopback" problems) @@ -5,6 +15,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..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 = 17; + public final static long BUILD = 19; /** 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",