diff --git a/history.txt b/history.txt index a7a8368282b1e2ea065cecd5e7f7073130f6a2f1..78eb5f9fcf046c91624ed356ff9bb3fff68b5fd3 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,6 @@ +2014-01-28 zzz + * I2CP: Use client tunnels for b32 lookups (ticket #1166) + 2014-01-27 zzz Prop from i2p.i2p.zzz.i2cp: * I2CP: diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index c10128fe6223a59f4fa2320e38c3309487438a87..fecba78d6973d87e9930d631de787e05fec2a510 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 = 6; + public final static long BUILD = 7; /** for example "-test" */ public final static String EXTRA = ""; diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index 9b4dbed3ba82bc9c2b0a220d9431ac343e5f5e9e..5fa987de5bba554aacd1954e865509e7564a2892 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -182,7 +182,10 @@ class ClientConnectionRunner { //_manager = null; } - /** current client's config */ + /** + * Current client's config, + * will be null before session is established + */ public SessionConfig getConfig() { return _config; } /** @@ -209,6 +212,10 @@ class ClientConnectionRunner { public LeaseSet getLeaseSet() { return _currentLeaseSet; } void setLeaseSet(LeaseSet ls) { _currentLeaseSet = ls; } + /** + * Equivalent to getConfig().getDestination().calculateHash(); + * will be null before session is established + */ public Hash getDestHash() { return _destHashCache; } /** current client's sessionId */ diff --git a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java index 9518a21934acd4cd40c2a06751f2665dfdbe6720..7707813a3702849328bb155b5ec2341ac34ce4f8 100644 --- a/router/java/src/net/i2p/router/client/ClientMessageEventListener.java +++ b/router/java/src/net/i2p/router/client/ClientMessageEventListener.java @@ -222,7 +222,7 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi _runner.sessionEstablished(cfg); if (_log.shouldLog(Log.DEBUG)) - _log.debug("after sessionEstablished for " + message.getSessionConfig().getDestination().calculateHash().toBase64()); + _log.debug("after sessionEstablished for " + _runner.getDestHash()); startCreateSessionJob(); } @@ -355,7 +355,7 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi } if (_log.shouldLog(Log.INFO)) _log.info("New lease set granted for destination " - + message.getLeaseSet().getDestination().calculateHash().toBase64()); + + _runner.getDestHash()); // leaseSetCreated takes care of all the LeaseRequestState stuff (including firing any jobs) _runner.leaseSetCreated(message.getLeaseSet()); @@ -363,7 +363,8 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi /** override for testing */ protected void handleDestLookup(DestLookupMessage message) { - _context.jobQueue().addJob(new LookupDestJob(_context, _runner, message.getHash())); + _context.jobQueue().addJob(new LookupDestJob(_context, _runner, message.getHash(), + _runner.getDestHash())); } /** @@ -373,7 +374,8 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi protected void handleHostLookup(HostLookupMessage message) { _context.jobQueue().addJob(new LookupDestJob(_context, _runner, message.getReqID(), message.getTimeout(), message.getSessionId(), - message.getHash(), message.getHostname())); + message.getHash(), message.getHostname(), + _runner.getDestHash())); } /** @@ -394,7 +396,7 @@ class ClientMessageEventListener implements I2CPMessageReader.I2CPMessageEventLi return; } _runner.getConfig().getOptions().putAll(message.getSessionConfig().getOptions()); - Hash dest = _runner.getConfig().getDestination().calculateHash(); + Hash dest = _runner.getDestHash(); ClientTunnelSettings settings = new ClientTunnelSettings(dest); Properties props = new Properties(); props.putAll(_runner.getConfig().getOptions()); diff --git a/router/java/src/net/i2p/router/client/LookupDestJob.java b/router/java/src/net/i2p/router/client/LookupDestJob.java index d5ab0877509d121844fdbcf9598609b09f35785f..be08388ba2c195dc4fc89e364819ba1b12307968 100644 --- a/router/java/src/net/i2p/router/client/LookupDestJob.java +++ b/router/java/src/net/i2p/router/client/LookupDestJob.java @@ -29,21 +29,24 @@ class LookupDestJob extends JobImpl { private final Hash _hash; private final String _name; private final SessionId _sessID; + private final Hash _fromLocalDest; private static final long DEFAULT_TIMEOUT = 15*1000; - public LookupDestJob(RouterContext context, ClientConnectionRunner runner, Hash h) { - this(context, runner, -1, DEFAULT_TIMEOUT, null, h, null); + public LookupDestJob(RouterContext context, ClientConnectionRunner runner, Hash h, Hash fromLocalDest) { + this(context, runner, -1, DEFAULT_TIMEOUT, null, h, null, fromLocalDest); } /** * One of h or name non-null * @param reqID must be >= 0 if name != null * @param sessID must non-null if reqID >= 0 + * @param fromLocalDest use these tunnels for the lookup, or null for exploratory * @since 0.9.11 */ public LookupDestJob(RouterContext context, ClientConnectionRunner runner, - long reqID, long timeout, SessionId sessID, Hash h, String name) { + long reqID, long timeout, SessionId sessID, Hash h, String name, + Hash fromLocalDest) { super(context); if ((h == null && name == null) || (h != null && name != null) || @@ -54,6 +57,7 @@ class LookupDestJob extends JobImpl { _reqID = reqID; _timeout = timeout; _sessID = sessID; + _fromLocalDest = fromLocalDest; if (name != null && name.length() == 60) { // convert a b32 lookup to a hash lookup String nlc = name.toLowerCase(Locale.US); @@ -84,7 +88,7 @@ class LookupDestJob extends JobImpl { returnFail(); } else { DoneJob done = new DoneJob(getContext()); - getContext().netDb().lookupLeaseSet(_hash, done, done, _timeout); + getContext().netDb().lookupLeaseSet(_hash, done, done, _timeout, _fromLocalDest); } }