From 55880844a5ed7952d2b2f51e65e342c09f905978 Mon Sep 17 00:00:00 2001 From: zzz Date: Sun, 19 May 2013 15:18:45 +0000 Subject: [PATCH] * SSUDemo: Adapt for NTCP testing too * RouterAddress and RouterInfo toString() cleanups; don't cache RI in _stringified * NTCP: Fix publishing address when host specified but interface is not * log tweaks --- core/java/src/net/i2p/data/RouterAddress.java | 4 +-- core/java/src/net/i2p/data/RouterInfo.java | 34 +++++++++++-------- .../router/transport/ntcp/EstablishState.java | 8 ++--- .../router/transport/ntcp/NTCPTransport.java | 5 +++ .../test/junit/net/i2p/router/SSUDemo.java | 22 ++++++++---- 5 files changed, 46 insertions(+), 27 deletions(-) diff --git a/core/java/src/net/i2p/data/RouterAddress.java b/core/java/src/net/i2p/data/RouterAddress.java index da95901e1..adec96f6d 100644 --- a/core/java/src/net/i2p/data/RouterAddress.java +++ b/core/java/src/net/i2p/data/RouterAddress.java @@ -309,10 +309,10 @@ public class RouterAddress extends DataStructureImpl { public String toString() { StringBuilder buf = new StringBuilder(128); buf.append("[RouterAddress: "); - buf.append("\n\tTransportStyle: ").append(_transportStyle); + buf.append("\n\tType: ").append(_transportStyle); buf.append("\n\tCost: ").append(_cost); //buf.append("\n\tExpiration: ").append(_expiration); - buf.append("\n\tOptions: #: ").append(_options.size()); + buf.append("\n\tOptions (").append(_options.size()).append("):"); for (Map.Entry e : _options.entrySet()) { String key = (String) e.getKey(); String val = (String) e.getValue(); diff --git a/core/java/src/net/i2p/data/RouterInfo.java b/core/java/src/net/i2p/data/RouterInfo.java index e8155b782..7bc911db0 100644 --- a/core/java/src/net/i2p/data/RouterInfo.java +++ b/core/java/src/net/i2p/data/RouterInfo.java @@ -61,7 +61,7 @@ public class RouterInfo extends DatabaseEntry { private final Properties _options; private volatile boolean _validated; private volatile boolean _isValid; - private volatile String _stringified; + //private volatile String _stringified; private volatile byte _byteified[]; private volatile int _hashCode; private volatile boolean _hashCodeInitialized; @@ -612,30 +612,34 @@ public class RouterInfo extends DatabaseEntry { @Override public String toString() { - if (_stringified != null) return _stringified; - StringBuilder buf = new StringBuilder(5*1024); + //if (_stringified != null) return _stringified; + StringBuilder buf = new StringBuilder(1024); buf.append("[RouterInfo: "); buf.append("\n\tIdentity: ").append(_identity); buf.append("\n\tSignature: ").append(_signature); - buf.append("\n\tPublished on: ").append(new Date(_published)); - buf.append("\n\tAddresses: #: ").append(_addresses.size()); - for (RouterAddress addr : _addresses) { - buf.append("\n\t\tAddress: ").append(addr); + buf.append("\n\tPublished: ").append(new Date(_published)); + if (_peers != null) { + buf.append("\n\tPeers (").append(_peers.size()).append("):"); + for (Hash hash : _peers) { + buf.append("\n\t\tPeer hash: ").append(hash); + } } - Set peers = getPeers(); - buf.append("\n\tPeers: #: ").append(peers.size()); - for (Hash hash : peers) { - buf.append("\n\t\tPeer hash: ").append(hash); - } - buf.append("\n\tOptions: #: ").append(_options.size()); + buf.append("\n\tOptions (").append(_options.size()).append("):"); for (Map.Entry e : _options.entrySet()) { String key = (String) e.getKey(); String val = (String) e.getValue(); buf.append("\n\t\t[").append(key).append("] = [").append(val).append("]"); } + if (!_addresses.isEmpty()) { + buf.append("\n\tAddresses (").append(_addresses.size()).append("):"); + for (RouterAddress addr : _addresses) { + buf.append("\n\t").append(addr); + } + } buf.append("]"); - _stringified = buf.toString(); - return _stringified; + String rv = buf.toString(); + //_stringified = rv; + return rv; } /** diff --git a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java index 04da0506b..9955268e9 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EstablishState.java @@ -261,8 +261,8 @@ class EstablishState { // ok, we are onto the encrypted area while (src.hasRemaining() && !_corrupt) { - if (_log.shouldLog(Log.DEBUG)) - _log.debug(prefix()+"Encrypted bytes available (" + src.hasRemaining() + ")"); + //if (_log.shouldLog(Log.DEBUG)) + // _log.debug(prefix()+"Encrypted bytes available (" + src.hasRemaining() + ")"); while (_curEncryptedOffset < _curEncrypted.length && src.hasRemaining()) { _curEncrypted[_curEncryptedOffset++] = src.get(); _received++; @@ -299,8 +299,8 @@ class EstablishState { } catch (IOException ioe) { if (_log.shouldLog(Log.ERROR)) _log.error(prefix()+"Error writing to the baos?", ioe); } - if (_log.shouldLog(Log.DEBUG)) - _log.debug(prefix()+"subsequent block decrypted (" + _sz_aliceIdent_tsA_padding_aliceSig.size() + ")"); + //if (_log.shouldLog(Log.DEBUG)) + // _log.debug(prefix()+"subsequent block decrypted (" + _sz_aliceIdent_tsA_padding_aliceSig.size() + ")"); if (_sz_aliceIdent_tsA_padding_aliceSig.size() >= _sz_aliceIdent_tsA_padding_aliceSigSize) { verifyInbound(); diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index 3be51b3df..20b00f399 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -490,8 +490,13 @@ public class NTCPTransport extends TransportImpl { port = _ssuPort; RouterAddress myAddress = bindAddress(port); if (myAddress != null) { + // fixed interface, or bound to the specified host replaceAddress(myAddress); + } else if (addr != null) { + // specified host, bound to wildcard + replaceAddress(addr); } else if (port > 0) { + // all detected interfaces for (InetAddress ia : getSavedLocalAddresses()) { OrderedProperties props = new OrderedProperties(); props.setProperty(RouterAddress.PROP_HOST, ia.getHostAddress()); diff --git a/router/java/test/junit/net/i2p/router/SSUDemo.java b/router/java/test/junit/net/i2p/router/SSUDemo.java index ef301a3c8..fb622294c 100644 --- a/router/java/test/junit/net/i2p/router/SSUDemo.java +++ b/router/java/test/junit/net/i2p/router/SSUDemo.java @@ -27,15 +27,16 @@ public class SSUDemo { RouterContext _us; public static void main(String args[]) { + boolean testNTCP = args.length > 0 && args[0].equals("ntcp"); SSUDemo demo = new SSUDemo(); - demo.run(); + demo.run(testNTCP); } public SSUDemo() {} - public void run() { + public void run(boolean testNTCP) { String cfgFile = "router.config"; - Properties envProps = getEnv(); + Properties envProps = getEnv(testNTCP); Router r = new Router(cfgFile, envProps); r.runRouter(); _us = r.getContext(); @@ -51,27 +52,36 @@ public class SSUDemo { loadPeers(); } - private static Properties getEnv() { + private static Properties getEnv(boolean testNTCP) { Properties envProps = new Properties(); - // disable the NTCP transport and UPnP - envProps.setProperty("i2np.ntcp.enable", "false"); + // disable one of the transports and UPnP + if (testNTCP) + envProps.setProperty("i2np.udp.enable", "false"); + else + envProps.setProperty("i2np.ntcp.enable", "false"); envProps.setProperty("i2np.upnp.enable", "false"); // we want SNTP synchronization for replay prevention envProps.setProperty("time.disabled", "false"); // allow 127.0.0.1/10.0.0.1/etc (useful for testing). If this is false, // peers who say they're on an invalid IP are banlisted envProps.setProperty("i2np.udp.allowLocal", "true"); + envProps.setProperty("i2np.ntcp.allowLocal", "true"); // IPv6 envProps.setProperty("i2np.udp.ipv6", "enable"); + envProps.setProperty("i2np.ntcp.ipv6", "enable"); // explicit IP+port. at least one router on the net has to have their IP+port // set, since there has to be someone to detect one's IP off. most don't need // to set these though //envProps.setProperty("i2np.udp.host", "127.0.0.1"); envProps.setProperty("i2np.udp.host", "::1"); + envProps.setProperty("i2np.ntcp.autoip", "false"); + envProps.setProperty("i2np.ntcp.hostname", "::1"); // we don't have a context yet to use its random String port = Integer.toString(44000 + (((int) System.currentTimeMillis()) & (16384 - 1))); envProps.setProperty("i2np.udp.internalPort", port); envProps.setProperty("i2np.udp.port", port); + envProps.setProperty("i2np.ntcp.autoport", "false"); + envProps.setProperty("i2np.ntcp.port", port); // disable I2CP, the netDb, peer testing/profile persistence, and tunnel // creation/management envProps.setProperty("i2p.dummyClientFacade", "true");