* Addresses: Add utility toString() methods

* Transport: Log tweaks
This commit is contained in:
zzz
2011-12-18 13:25:51 +00:00
parent 5b37df5bc9
commit 937d2c54c8
6 changed files with 97 additions and 49 deletions

View File

@@ -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<String> a = getAddresses(false, false);

View File

@@ -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);

View File

@@ -122,9 +122,11 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
public DetectedIP[] getAddress() {
_log.info("UP&P.getAddress() is called \\o/");
if(isDisabled) {
if (_log.shouldLog(Log.WARN))
_log.warn("Plugin has been disabled previously, ignoring request.");
return null;
} else if(!isNATPresent()) {
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;
}
@@ -132,6 +134,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
DetectedIP result = null;
final String natAddress = getNATAddress();
if (natAddress == null || natAddress.length() <= 0) {
if (_log.shouldLog(Log.WARN))
_log.warn("No external address returned");
return null;
}
@@ -141,12 +144,14 @@ 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
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);
if (_log.shouldLog(Log.WARN))
_log.warn("Successful UP&P discovery :" + result);
return new DetectedIP[] { result };
@@ -159,15 +164,18 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
public void deviceAdded(Device dev) {
synchronized (lock) {
if(isDisabled) {
if (_log.shouldLog(Log.WARN))
_log.warn("Plugin has been disabled previously, ignoring new device.");
return;
}
}
if(!ROUTER_DEVICE.equals(dev.getDeviceType()) || !dev.isRootDevice()) {
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?
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,6 +190,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
return;
}
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,6 +240,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
_service = current2.getService(WAN_PPP_CONNECTION);
if(_service == null) {
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)
@@ -244,6 +254,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
}
public boolean tryAddMapping(String protocol, int port, String description, ForwardPort fp) {
if (_log.shouldLog(Log.WARN))
_log.warn("Registering a port mapping for " + port + "/" + protocol);
int nbOfTries = 0;
boolean isPortForwarded = false;
@@ -255,6 +266,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
Thread.sleep(5000);
} catch (InterruptedException e) {}
}
if (_log.shouldLog(Log.WARN))
_log.warn((isPortForwarded ? "Mapping is successful!" : "Mapping has failed!") + " ("+ nbOfTries + " tries)");
return isPortForwarded;
}
@@ -268,6 +280,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
}
public void deviceRemoved(Device dev ){
if (_log.shouldLog(Log.WARN))
_log.warn("UP&P device removed : " + dev.getFriendlyName() + " UDN: " + dev.getUDN());
synchronized (lock) {
if(_router == null) return;
@@ -277,6 +290,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
dev.isRootDevice() &&
stringEquals(_router.getFriendlyName(), dev.getFriendlyName()) &&
stringEquals(_router.getUDN(), dev.getUDN())) {
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,6 +673,7 @@ class UPnP extends ControlPoint implements DeviceChangeListener, EventListener {
public void onChangePublicPorts(Set<ForwardPort> ports, ForwardPortCallback cb) {
Set<ForwardPort> portsToDumpNow = null;
Set<ForwardPort> portsToForwardNow = null;
if (_log.shouldLog(Log.WARN))
_log.warn("UP&P Forwarding "+ports.size()+" ports...");
synchronized(lock) {
if(forwardCallback != null && forwardCallback != cb && cb != null) {

View File

@@ -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);

View File

@@ -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()));

View File

@@ -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()));