diff --git a/core/java/src/net/i2p/util/Addresses.java b/core/java/src/net/i2p/util/Addresses.java index 60662e937..97e19cf54 100644 --- a/core/java/src/net/i2p/util/Addresses.java +++ b/core/java/src/net/i2p/util/Addresses.java @@ -16,9 +16,9 @@ import java.util.TreeSet; /** - * Get the local addresses + * Methods to get the local addresses, and other IP utilities * - * @since 0.8.3 moved to core + * @since 0.8.3 moved to core from router/transport * @author zzz */ public abstract class Addresses { @@ -114,6 +114,44 @@ public abstract class Addresses { (ia instanceof Inet4Address)); } + /** + * Convenience method to convert an IP address to a String + * without throwing an exception. + * @return "null" for null, and "bad IP length x" if length is invalid + * @since 0.8.12 + */ + public static String toString(byte[] addr) { + if (addr == null) + return "null"; + try { + return InetAddress.getByAddress(addr).getHostAddress(); + } catch (UnknownHostException uhe) { + return "bad IP length " + addr.length; + } + } + + /** + * Convenience method to convert an IP address and port to a String + * without throwing an exception. + * @return "ip:port" + * @since 0.8.12 + */ + public static String toString(byte[] addr, int port) { + if (addr == null) + return "null:" + port; + try { + String ip = InetAddress.getByAddress(addr).getHostAddress(); + if (addr.length != 16) + return ip + ':' + port; + return '[' + ip + "]:" + port; + } catch (UnknownHostException uhe) { + return "(bad IP length " + addr.length + "):" + port; + } + } + + /** + * Print out the local addresses + */ public static void main(String[] args) { System.err.println("External Addresses:"); Set a = getAddresses(false, false); diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java index eb07c5603..b9f88ac98 100644 --- a/router/java/src/net/i2p/router/transport/TransportImpl.java +++ b/router/java/src/net/i2p/router/transport/TransportImpl.java @@ -212,9 +212,10 @@ public abstract class TransportImpl implements Transport { if (msToSend > 1000) { if (_log.shouldLog(Log.WARN)) - _log.warn("afterSend slow: [success=" + sendSuccessful + "] " + msg.getMessageSize() + " byte " - + msg.getMessageType() + " " + msg.getMessageId() + " to " - + msg.getTarget().getIdentity().calculateHash().toBase64().substring(0,6) + " took " + msToSend); + _log.warn(getStyle() + " afterSend slow: " + (sendSuccessful ? "success " : "FAIL ") + + msg.getMessageSize() + " byte " + + msg.getMessageType() + ' ' + msg.getMessageId() + " to " + + msg.getTarget().getIdentity().calculateHash().toBase64().substring(0,6) + " took " + msToSend + " ms"); } //if (true) // _log.error("(not error) I2NP message sent? " + sendSuccessful + " " + msg.getMessageId() + " after " + msToSend + "/" + msg.getTransmissionTime()); @@ -225,21 +226,22 @@ public abstract class TransportImpl implements Transport { if (!sendSuccessful) level = Log.INFO; if (_log.shouldLog(level)) - _log.log(level, "afterSend slow (" + lifetime + "/" + msToSend + "): [success=" + sendSuccessful + "] " + msg.getMessageSize() + " byte " + _log.log(level, getStyle() + " afterSend slow (" + (sendSuccessful ? "success " : "FAIL ") + + lifetime + "/" + msToSend + "): " + msg.getMessageSize() + " byte " + msg.getMessageType() + " " + msg.getMessageId() + " from " + _context.routerHash().toBase64().substring(0,6) + " to " + msg.getTarget().getIdentity().calculateHash().toBase64().substring(0,6) + ": " + msg.toString()); } else { if (_log.shouldLog(Log.INFO)) - _log.info("afterSend: [success=" + sendSuccessful + "] " + msg.getMessageSize() + " byte " + _log.info(getStyle() + " afterSend: " + (sendSuccessful ? "success " : "FAIL ") + + msg.getMessageSize() + " byte " + msg.getMessageType() + " " + msg.getMessageId() + " from " + _context.routerHash().toBase64().substring(0,6) + " to " + msg.getTarget().getIdentity().calculateHash().toBase64().substring(0,6) + "\n" + msg.toString()); } if (sendSuccessful) { if (_log.shouldLog(Log.DEBUG)) - _log.debug("Send message " + msg.getMessageType() + " to " - + msg.getTarget().getIdentity().getHash().toBase64() + " with transport " - + getStyle() + " successfully"); + _log.debug(getStyle() + " Sent " + msg.getMessageType() + " successfully to " + + msg.getTarget().getIdentity().getHash().toBase64()); Job j = msg.getOnSendJob(); if (j != null) _context.jobQueue().addJob(j); @@ -247,9 +249,9 @@ public abstract class TransportImpl implements Transport { msg.discardData(); } else { if (_log.shouldLog(Log.INFO)) - _log.info("Failed to send message " + msg.getMessageType() + _log.info(getStyle() + " Failed to send " + msg.getMessageType() + " to " + msg.getTarget().getIdentity().getHash().toBase64() - + " with transport " + getStyle() + " (details: " + msg + ")"); + + " (details: " + msg + ')'); if (msg.getExpiration() < _context.clock().now()) _context.statManager().addRateData("transport.expiredOnQueueLifetime", lifetime, lifetime); diff --git a/router/java/src/net/i2p/router/transport/UPnP.java b/router/java/src/net/i2p/router/transport/UPnP.java index 37c57d16c..1689c47d5 100644 --- a/router/java/src/net/i2p/router/transport/UPnP.java +++ b/router/java/src/net/i2p/router/transport/UPnP.java @@ -122,17 +122,20 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { public DetectedIP[] getAddress() { _log.info("UP&P.getAddress() is called \\o/"); if(isDisabled) { - _log.warn("Plugin has been disabled previously, ignoring request."); + if (_log.shouldLog(Log.WARN)) + _log.warn("Plugin has been disabled previously, ignoring request."); return null; } else if(!isNATPresent()) { - _log.warn("No UP&P device found, detection of the external ip address using the plugin has failed"); + if (_log.shouldLog(Log.WARN)) + _log.warn("No UP&P device found, detection of the external ip address using the plugin has failed"); return null; } DetectedIP result = null; final String natAddress = getNATAddress(); if (natAddress == null || natAddress.length() <= 0) { - _log.warn("No external address returned"); + if (_log.shouldLog(Log.WARN)) + _log.warn("No external address returned"); return null; } try { @@ -141,13 +144,15 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { short status = DetectedIP.NOT_SUPPORTED; thinksWeAreDoubleNatted = !TransportImpl.isPubliclyRoutable(detectedIP.getAddress()); // If we have forwarded a port AND we don't have a private address - _log.warn("NATAddress: \"" + natAddress + "\" detectedIP: " + detectedIP + " double? " + thinksWeAreDoubleNatted); + if (_log.shouldLog(Log.WARN)) + _log.warn("NATAddress: \"" + natAddress + "\" detectedIP: " + detectedIP + " double? " + thinksWeAreDoubleNatted); if((portsForwarded.size() > 1) && (!thinksWeAreDoubleNatted)) status = DetectedIP.FULL_INTERNET; result = new DetectedIP(detectedIP, status); - _log.warn("Successful UP&P discovery :" + result); + if (_log.shouldLog(Log.WARN)) + _log.warn("Successful UP&P discovery :" + result); return new DetectedIP[] { result }; } catch (UnknownHostException e) { @@ -159,16 +164,19 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { public void deviceAdded(Device dev) { synchronized (lock) { if(isDisabled) { - _log.warn("Plugin has been disabled previously, ignoring new device."); + if (_log.shouldLog(Log.WARN)) + _log.warn("Plugin has been disabled previously, ignoring new device."); return; } } if(!ROUTER_DEVICE.equals(dev.getDeviceType()) || !dev.isRootDevice()) { - _log.warn("UP&P non-IGD device found, ignoring : " + dev.getFriendlyName()); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P non-IGD device found, ignoring : " + dev.getFriendlyName()); return; // ignore non-IGD devices } else if(isNATPresent()) { // maybe we should see if the old one went away before ignoring the new one? - _log.warn("UP&P ignoring additional IGD device found: " + dev.getFriendlyName() + " UDN: " + dev.getUDN()); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P ignoring additional IGD device found: " + dev.getFriendlyName() + " UDN: " + dev.getUDN()); /********** seems a little drastic isDisabled = true; @@ -182,7 +190,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { return; } - _log.warn("UP&P IGD found : " + dev.getFriendlyName() + " UDN: " + dev.getUDN() + " lease time: " + dev.getLeaseTime()); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P IGD found : " + dev.getFriendlyName() + " UDN: " + dev.getUDN() + " lease time: " + dev.getLeaseTime()); synchronized(lock) { _router = dev; } @@ -231,7 +240,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { _service = current2.getService(WAN_PPP_CONNECTION); if(_service == null) { - _log.warn(_router.getFriendlyName()+ " doesn't seems to be using PPP; we won't be able to extract bandwidth-related informations out of it."); + if (_log.shouldLog(Log.WARN)) + _log.warn(_router.getFriendlyName()+ " doesn't seems to be using PPP; we won't be able to extract bandwidth-related informations out of it."); _service = current2.getService(WAN_IP_CONNECTION); if(_service == null) _log.error(_router.getFriendlyName()+ " doesn't export WAN_IP_CONNECTION either: we won't be able to use it!"); @@ -244,7 +254,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { } public boolean tryAddMapping(String protocol, int port, String description, ForwardPort fp) { - _log.warn("Registering a port mapping for " + port + "/" + protocol); + if (_log.shouldLog(Log.WARN)) + _log.warn("Registering a port mapping for " + port + "/" + protocol); int nbOfTries = 0; boolean isPortForwarded = false; while(nbOfTries++ < 5) { @@ -255,7 +266,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { Thread.sleep(5000); } catch (InterruptedException e) {} } - _log.warn((isPortForwarded ? "Mapping is successful!" : "Mapping has failed!") + " ("+ nbOfTries + " tries)"); + if (_log.shouldLog(Log.WARN)) + _log.warn((isPortForwarded ? "Mapping is successful!" : "Mapping has failed!") + " ("+ nbOfTries + " tries)"); return isPortForwarded; } @@ -268,7 +280,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { } public void deviceRemoved(Device dev ){ - _log.warn("UP&P device removed : " + dev.getFriendlyName() + " UDN: " + dev.getUDN()); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P device removed : " + dev.getFriendlyName() + " UDN: " + dev.getUDN()); synchronized (lock) { if(_router == null) return; // I2P this wasn't working @@ -277,7 +290,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { dev.isRootDevice() && stringEquals(_router.getFriendlyName(), dev.getFriendlyName()) && stringEquals(_router.getUDN(), dev.getUDN())) { - _log.warn("UP&P IGD device removed : " + dev.getFriendlyName()); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P IGD device removed : " + dev.getFriendlyName()); _router = null; _service = null; } @@ -287,7 +301,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { /** event callback - unused for now - how many devices support events? */ public void eventNotifyReceived(String uuid, long seq, String varName, String value) { if (_log.shouldLog(Log.WARN)) - _log.error("Event: " + uuid + ' ' + seq + ' ' + varName + '=' + value); + _log.warn("Event: " + uuid + ' ' + seq + ' ' + varName + '=' + value); } /** compare two strings, either of which could be null */ @@ -647,7 +661,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { portsForwarded.remove(fp); } - if(!noLog) + if(_log.shouldLog(Log.WARN) && !noLog) _log.warn("UPnP: Removed mapping for "+fp.name+" "+port+" / "+protocol); return retval; } @@ -659,7 +673,8 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener { public void onChangePublicPorts(Set ports, ForwardPortCallback cb) { Set portsToDumpNow = null; Set portsToForwardNow = null; - _log.warn("UP&P Forwarding "+ports.size()+" ports..."); + if (_log.shouldLog(Log.WARN)) + _log.warn("UP&P Forwarding "+ports.size()+" ports..."); synchronized(lock) { if(forwardCallback != null && forwardCallback != cb && cb != null) { _log.error("ForwardPortCallback changed from "+forwardCallback+" to "+cb+" - using new value, but this is very strange!"); diff --git a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java index f659c59f8..4212d21cf 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java @@ -12,6 +12,7 @@ import net.i2p.data.RouterIdentity; import net.i2p.data.SessionKey; import net.i2p.data.Signature; import net.i2p.router.RouterContext; +import net.i2p.util.Addresses; import net.i2p.util.Log; /** @@ -93,7 +94,7 @@ class InboundEstablishState { _bobIP = new byte[req.readIPSize()]; req.readIP(_bobIP, 0); if (_log.shouldLog(Log.DEBUG)) - _log.debug("Receive sessionRequest, BobIP = " + Base64.encode(_bobIP)); + _log.debug("Receive sessionRequest, BobIP = " + Addresses.toString(_bobIP)); if (_currentState == STATE_UNKNOWN) _currentState = STATE_REQUEST_RECEIVED; packetReceived(); @@ -186,10 +187,8 @@ class InboundEstablishState { buf.append("Signing sessionCreated:"); buf.append(" ReceivedX: ").append(Base64.encode(_receivedX)); buf.append(" SentY: ").append(Base64.encode(_sentY)); - buf.append(" AliceIP: ").append(Base64.encode(_aliceIP)); - buf.append(" AlicePort: ").append(_alicePort); - buf.append(" BobIP: ").append(Base64.encode(_bobIP)); - buf.append(" BobPort: ").append(_bobPort); + buf.append(" Alice: ").append(Addresses.toString(_aliceIP, _alicePort)); + buf.append(" Bob: ").append(Addresses.toString(_bobIP, _bobPort)); buf.append(" RelayTag: ").append(_sentRelayTag); buf.append(" SignedOn: ").append(_sentSignedOnTime); buf.append(" signature: ").append(Base64.encode(_sentSignature.getData())); @@ -346,12 +345,8 @@ class InboundEstablishState { buf.append(" ReceivedX: ").append(Base64.encode(_receivedX, 0, 4)); if (_sentY != null) buf.append(" SentY: ").append(Base64.encode(_sentY, 0, 4)); - if (_aliceIP != null) - buf.append(" AliceIP: ").append(Base64.encode(_aliceIP)); - buf.append(" AlicePort: ").append(_alicePort); - if (_bobIP != null) - buf.append(" BobIP: ").append(Base64.encode(_bobIP)); - buf.append(" BobPort: ").append(_bobPort); + buf.append(" Alice: ").append(Addresses.toString(_aliceIP, _alicePort)); + buf.append(" Bob: ").append(Addresses.toString(_bobIP, _bobPort)); buf.append(" RelayTag: ").append(_sentRelayTag); buf.append(" SignedOn: ").append(_sentSignedOnTime); buf.append(" state: ").append(_currentState); diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java index ee7f5f321..835c74dad 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java @@ -13,6 +13,7 @@ import net.i2p.data.SessionKey; import net.i2p.data.Signature; import net.i2p.router.OutNetMessage; import net.i2p.router.RouterContext; +import net.i2p.util.Addresses; import net.i2p.util.Log; /** @@ -165,7 +166,7 @@ class OutboundEstablishState { if (_log.shouldLog(Log.DEBUG)) _log.debug("Receive session created:\neSig: " + Base64.encode(_receivedEncryptedSignature) + "\nreceivedIV: " + Base64.encode(_receivedIV) - + "\nAliceIP: " + Base64.encode(_aliceIP) + + "\nAliceIP: " + Addresses.toString(_aliceIP) + " RelayTag: " + _receivedRelayTag + " SignedOn: " + _receivedSignedOnTime + "\nthis: " + this.toString()); @@ -290,10 +291,8 @@ class OutboundEstablishState { if (!valid || _log.shouldLog(Log.DEBUG)) { StringBuilder buf = new StringBuilder(128); buf.append("Signed sessionCreated:"); - buf.append(" AliceIP: ").append(Base64.encode(_aliceIP)); - buf.append(" AlicePort: ").append(_alicePort); - buf.append(" BobIP: ").append(Base64.encode(_bobIP)); - buf.append(" BobPort: ").append(_bobPort); + buf.append(" Alice: ").append(Addresses.toString(_aliceIP, _alicePort)); + buf.append(" Bob: ").append(Addresses.toString(_bobIP, _bobPort)); buf.append(" RelayTag: ").append(_receivedRelayTag); buf.append(" SignedOn: ").append(_receivedSignedOnTime); buf.append(" signature: ").append(Base64.encode(_receivedSignature.getData())); diff --git a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java index e1a8030a0..b2ef22a1d 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -16,6 +16,7 @@ import net.i2p.data.RouterIdentity; import net.i2p.data.SessionKey; import net.i2p.data.Signature; import net.i2p.util.ByteCache; +import net.i2p.util.Addresses; import net.i2p.util.Log; /** @@ -596,10 +597,8 @@ class PacketBuilder { if (_log.shouldLog(Log.DEBUG)) { StringBuilder buf = new StringBuilder(128); buf.append("Sending sessionCreated:"); - buf.append(" AliceIP: ").append(Base64.encode(sentIP)); - buf.append(" AlicePort: ").append(state.getSentPort()); - buf.append(" BobIP: ").append(Base64.encode(state.getReceivedOurIP())); - buf.append(" BobPort: ").append(externalPort); + buf.append(" Alice: ").append(Addresses.toString(sentIP, state.getSentPort())); + buf.append(" Bob: ").append(Addresses.toString(state.getReceivedOurIP(), externalPort)); buf.append(" RelayTag: ").append(state.getSentRelayTag()); buf.append(" SignedOn: ").append(state.getSentSignedOnTime()); buf.append(" signature: ").append(Base64.encode(state.getSentSignature().getData()));