diff --git a/history.txt b/history.txt index 6bcfd655869d3a6221615b4bd22c0c5b449e19e6..50315edcd199ca59741c0f48c30d5bc4525d01c7 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,8 @@ +2009-04-21 sponge + * Code janator work, basic corrections involving @Override, and + appling final where it is important. Also fixed some equals methods + and commented places that need fixing. + 2009-04-18 Complication * Fix typo in "news.xml", no build number increase. diff --git a/router/java/src/net/i2p/data/i2np/DataMessage.java b/router/java/src/net/i2p/data/i2np/DataMessage.java index 7e839117fa040ddadb4aa0bb85d1f789f3134b20..8ba6b13460e579a88e5898e44859a49242574595 100644 --- a/router/java/src/net/i2p/data/i2np/DataMessage.java +++ b/router/java/src/net/i2p/data/i2np/DataMessage.java @@ -12,7 +12,7 @@ import java.io.IOException; import net.i2p.I2PAppContext; import net.i2p.data.DataHelper; -import net.i2p.util.Log; +// import net.i2p.util.Log; /** * Defines a message containing arbitrary bytes of data @@ -20,11 +20,11 @@ import net.i2p.util.Log; * @author jrandom */ public class DataMessage extends I2NPMessageImpl { - private final static Log _log = new Log(DataMessage.class); + // private final static Log _log = new Log(DataMessage.class); public final static int MESSAGE_TYPE = 20; private byte _data[]; - private static final int MAX_SIZE = 64*1024; + // private static final int MAX_SIZE = 64*1024; // LINT -- field hides another field, and not used public DataMessage(I2PAppContext context) { super(context); @@ -81,6 +81,7 @@ public class DataMessage extends I2NPMessageImpl { return curIndex; } + @Override protected void written() { super.written(); _data = null; @@ -88,10 +89,12 @@ public class DataMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getData()); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DataMessage) ) { DataMessage msg = (DataMessage)object; @@ -101,6 +104,7 @@ public class DataMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DataMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java index 4a6da92e3f148ad1342cca30131e6fed4a8e6b28..79dec2ee9b41d0ba257e3d2fbf0b9d2e934fdfee 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseLookupMessage.java @@ -215,6 +215,7 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getSearchKey()) + DataHelper.hashCode(getFrom()) + @@ -222,6 +223,7 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { DataHelper.hashCode(_dontIncludePeers); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DatabaseLookupMessage) ) { DatabaseLookupMessage msg = (DatabaseLookupMessage)object; @@ -234,6 +236,7 @@ public class DatabaseLookupMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DatabaseLookupMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java index 2f1bc87e708f9253a97b0926bbcedbaeae490652..c8dc9aa901bc651814ce1124e2318a136e8cb5cf 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseSearchReplyMessage.java @@ -110,6 +110,7 @@ public class DatabaseSearchReplyMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DatabaseSearchReplyMessage) ) { DatabaseSearchReplyMessage msg = (DatabaseSearchReplyMessage)object; @@ -121,12 +122,14 @@ public class DatabaseSearchReplyMessage extends I2NPMessageImpl { } } + @Override public int hashCode() { return DataHelper.hashCode(getSearchKey()) + DataHelper.hashCode(getFromHash()) + DataHelper.hashCode(_peerHashes); } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DatabaseSearchReplyMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/DatabaseStoreMessage.java b/router/java/src/net/i2p/data/i2np/DatabaseStoreMessage.java index cb838daca3d6898ecdaa34fd6ea6e56c37059442..04ef417d3adfc776afcd465daa0f10452b83d378 100644 --- a/router/java/src/net/i2p/data/i2np/DatabaseStoreMessage.java +++ b/router/java/src/net/i2p/data/i2np/DatabaseStoreMessage.java @@ -231,6 +231,7 @@ public class DatabaseStoreMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getKey()) + DataHelper.hashCode(getLeaseSet()) + @@ -241,6 +242,7 @@ public class DatabaseStoreMessage extends I2NPMessageImpl { DataHelper.hashCode(getReplyGateway()); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DatabaseStoreMessage) ) { DatabaseStoreMessage msg = (DatabaseStoreMessage)object; @@ -256,6 +258,7 @@ public class DatabaseStoreMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DatabaseStoreMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/DateMessage.java b/router/java/src/net/i2p/data/i2np/DateMessage.java index 554c31ef29c040cf604b2ebf02de3bb639a45ce3..b5388eda5ae8373d0e6c8607125511d4fd99b8f0 100644 --- a/router/java/src/net/i2p/data/i2np/DateMessage.java +++ b/router/java/src/net/i2p/data/i2np/DateMessage.java @@ -53,10 +53,12 @@ public class DateMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return (int)getNow(); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DateMessage) ) { DateMessage msg = (DateMessage)object; @@ -66,6 +68,7 @@ public class DateMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DateMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/DeliveryInstructions.java b/router/java/src/net/i2p/data/i2np/DeliveryInstructions.java index 3e46fc8fe5b3fa95f6397fe019b416463d3b0c77..8ad3ddff28c269a48c07b605acf182d2c84d926f 100644 --- a/router/java/src/net/i2p/data/i2np/DeliveryInstructions.java +++ b/router/java/src/net/i2p/data/i2np/DeliveryInstructions.java @@ -350,6 +350,7 @@ public class DeliveryInstructions extends DataStructureImpl { + getAdditionalInfoSize(); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof DeliveryInstructions)) return false; @@ -364,6 +365,7 @@ public class DeliveryInstructions extends DataStructureImpl { DataHelper.eq(getTunnelId(), instr.getTunnelId()); } + @Override public int hashCode() { return (int)getDelaySeconds() + getDeliveryMode() + @@ -373,6 +375,7 @@ public class DeliveryInstructions extends DataStructureImpl { DataHelper.hashCode(getTunnelId()); } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("[DeliveryInstructions: "); diff --git a/router/java/src/net/i2p/data/i2np/DeliveryStatusMessage.java b/router/java/src/net/i2p/data/i2np/DeliveryStatusMessage.java index 9f1d61b45acef64443bb8a4695be1deb14470582..ff8ad12cbdc4da0f3997379a6b8e552d481d116e 100644 --- a/router/java/src/net/i2p/data/i2np/DeliveryStatusMessage.java +++ b/router/java/src/net/i2p/data/i2np/DeliveryStatusMessage.java @@ -64,10 +64,12 @@ public class DeliveryStatusMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return (int)getMessageId() + (int)getArrival(); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof DeliveryStatusMessage) ) { DeliveryStatusMessage msg = (DeliveryStatusMessage)object; @@ -78,6 +80,7 @@ public class DeliveryStatusMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[DeliveryStatusMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/EndPointPrivateKey.java b/router/java/src/net/i2p/data/i2np/EndPointPrivateKey.java index 8f5763ae4819af4c7e30715ee8d001abd4d6cf67..4b3f919c84d9a8ed1839f9240ee315558f1162c7 100644 --- a/router/java/src/net/i2p/data/i2np/EndPointPrivateKey.java +++ b/router/java/src/net/i2p/data/i2np/EndPointPrivateKey.java @@ -44,17 +44,20 @@ public class EndPointPrivateKey extends DataStructureImpl { _key.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof EndPointPublicKey)) return false; return DataHelper.eq(getKey(), ((EndPointPublicKey)obj).getKey()); } + @Override public int hashCode() { if (_key == null) return 0; return getKey().hashCode(); } + @Override public String toString() { return "[EndPointPrivateKey: " + getKey() + "]"; } diff --git a/router/java/src/net/i2p/data/i2np/EndPointPublicKey.java b/router/java/src/net/i2p/data/i2np/EndPointPublicKey.java index 3920d0bda2ae6a3dedb5eb21efd2853dab6085a4..a366bf73bf83943741ae31dfd9c3b682f4c4df68 100644 --- a/router/java/src/net/i2p/data/i2np/EndPointPublicKey.java +++ b/router/java/src/net/i2p/data/i2np/EndPointPublicKey.java @@ -44,17 +44,20 @@ public class EndPointPublicKey extends DataStructureImpl { _key.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof EndPointPublicKey)) return false; return DataHelper.eq(getKey(), ((EndPointPublicKey)obj).getKey()); } + @Override public int hashCode() { if (_key == null) return 0; return getKey().hashCode(); } + @Override public String toString() { return "[EndPointPublicKey: " + getKey() + "]"; } diff --git a/router/java/src/net/i2p/data/i2np/GarlicClove.java b/router/java/src/net/i2p/data/i2np/GarlicClove.java index cb6808756fc3a5b4129ddd5aa7930d121cebf393..aa37994a07fe0539bbc26a6ad12b3beff4048a54 100644 --- a/router/java/src/net/i2p/data/i2np/GarlicClove.java +++ b/router/java/src/net/i2p/data/i2np/GarlicClove.java @@ -156,6 +156,7 @@ public class GarlicClove extends DataStructureImpl { _log.debug("Written cert: " + _certificate); } + @Override public byte[] toByteArray() { byte rv[] = new byte[estimateSize()]; int offset = 0; @@ -186,6 +187,7 @@ public class GarlicClove extends DataStructureImpl { + _certificate.size(); // certificate } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof GarlicClove)) return false; @@ -197,6 +199,7 @@ public class GarlicClove extends DataStructureImpl { DataHelper.eq(getInstructions(), clove.getInstructions()); } + @Override public int hashCode() { return DataHelper.hashCode(getCertificate()) + (int)getCloveId() + @@ -205,6 +208,7 @@ public class GarlicClove extends DataStructureImpl { DataHelper.hashCode(getInstructions()); } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("[GarlicClove: "); diff --git a/router/java/src/net/i2p/data/i2np/GarlicMessage.java b/router/java/src/net/i2p/data/i2np/GarlicMessage.java index 5d76a2b224b3dbecdf5d885f0c263a6616ac9d04..357e7d2f5ee0603db1853e22155063ddf5b2c03c 100644 --- a/router/java/src/net/i2p/data/i2np/GarlicMessage.java +++ b/router/java/src/net/i2p/data/i2np/GarlicMessage.java @@ -67,15 +67,18 @@ public class GarlicMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getData()); } + @Override protected void written() { super.written(); _data = null; } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof GarlicMessage) ) { GarlicMessage msg = (GarlicMessage)object; @@ -85,6 +88,7 @@ public class GarlicMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[GarlicMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java index b745db9c0dd423f243c62ed63e98a93678e06739..e241ff1f4a349b294d8cdbad5ad94939faef186f 100644 --- a/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java +++ b/router/java/src/net/i2p/data/i2np/I2NPMessageImpl.java @@ -187,6 +187,7 @@ public abstract class I2NPMessageImpl extends DataStructureImpl implements I2NPM return calculateWrittenLength()+5; } + @Override public byte[] toByteArray() { byte data[] = new byte[getMessageSize()]; int written = toByteArray(data); diff --git a/router/java/src/net/i2p/data/i2np/TunnelCreateMessage.java b/router/java/src/net/i2p/data/i2np/TunnelCreateMessage.java index f89e4b8989796b5443e48ee8a09f67197faf694d..b611f46728173e34c2b49f1b05972859b83ad2e1 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelCreateMessage.java +++ b/router/java/src/net/i2p/data/i2np/TunnelCreateMessage.java @@ -232,6 +232,7 @@ public class TunnelCreateMessage extends I2NPMessageImpl { } + @Override public byte[] toByteArray() { byte rv[] = super.toByteArray(); if (rv == null) @@ -239,6 +240,7 @@ public class TunnelCreateMessage extends I2NPMessageImpl { return rv; } + @Override public int hashCode() { return DataHelper.hashCode(getNextRouter()) + DataHelper.hashCode(getNextTunnelId()) + @@ -246,6 +248,7 @@ public class TunnelCreateMessage extends I2NPMessageImpl { DataHelper.hashCode(getReplyTunnel()); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof TunnelCreateMessage) ) { TunnelCreateMessage msg = (TunnelCreateMessage)object; @@ -258,6 +261,7 @@ public class TunnelCreateMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[TunnelCreateMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/TunnelCreateStatusMessage.java b/router/java/src/net/i2p/data/i2np/TunnelCreateStatusMessage.java index a5994f26de70308922e2faac825331862b479006..515436f5dd019e13fd606465ba9281812ef94983 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelCreateStatusMessage.java +++ b/router/java/src/net/i2p/data/i2np/TunnelCreateStatusMessage.java @@ -87,12 +87,14 @@ public class TunnelCreateStatusMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getReceiveTunnelId()) + getStatus() + (int)getNonce(); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof TunnelCreateStatusMessage) ) { TunnelCreateStatusMessage msg = (TunnelCreateStatusMessage)object; @@ -104,6 +106,7 @@ public class TunnelCreateStatusMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[TunnelCreateStatusMessage: "); diff --git a/router/java/src/net/i2p/data/i2np/TunnelDataMessage.java b/router/java/src/net/i2p/data/i2np/TunnelDataMessage.java index a07b99069a0cce3a70aa40ac37149f3ec1e3918d..77c967f5871a3d19d772c479b9dab842033ab4b3 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelDataMessage.java +++ b/router/java/src/net/i2p/data/i2np/TunnelDataMessage.java @@ -112,11 +112,13 @@ public class TunnelDataMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return (int)_tunnelId + DataHelper.hashCode(_data); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof TunnelDataMessage) ) { TunnelDataMessage msg = (TunnelDataMessage)object; @@ -127,6 +129,7 @@ public class TunnelDataMessage extends I2NPMessageImpl { } } + @Override public byte[] toByteArray() { byte rv[] = super.toByteArray(); if (rv == null) @@ -134,6 +137,7 @@ public class TunnelDataMessage extends I2NPMessageImpl { return rv; } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[TunnelDataMessage:"); diff --git a/router/java/src/net/i2p/data/i2np/TunnelGatewayMessage.java b/router/java/src/net/i2p/data/i2np/TunnelGatewayMessage.java index 8fc7c9fd9e947c196ae771181396ad4682e76259..a436472e4319d679d1ff9d5ba3021a95cbb10d77 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelGatewayMessage.java +++ b/router/java/src/net/i2p/data/i2np/TunnelGatewayMessage.java @@ -90,6 +90,7 @@ public class TunnelGatewayMessage extends I2NPMessageImpl { I2NPMessageHandler h = new I2NPMessageHandler(_context); readMessage(data, offset, dataSize, type, h); } + @Override public void readMessage(byte data[], int offset, int dataSize, int type, I2NPMessageHandler handler) throws I2NPMessageException, IOException { if (type != MESSAGE_TYPE) throw new I2NPMessageException("Message type is incorrect for this message"); int curIndex = offset; @@ -110,11 +111,13 @@ public class TunnelGatewayMessage extends I2NPMessageImpl { public int getType() { return MESSAGE_TYPE; } + @Override public int hashCode() { return DataHelper.hashCode(getTunnelId()) + DataHelper.hashCode(_msg); } + @Override public boolean equals(Object object) { if ( (object != null) && (object instanceof TunnelGatewayMessage) ) { TunnelGatewayMessage msg = (TunnelGatewayMessage)object; @@ -126,6 +129,7 @@ public class TunnelGatewayMessage extends I2NPMessageImpl { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("[TunnelGatewayMessage:"); diff --git a/router/java/src/net/i2p/data/i2np/TunnelSessionKey.java b/router/java/src/net/i2p/data/i2np/TunnelSessionKey.java index b73cbfa792037ad9d7154ed8b78522fcd6f21f22..c4effc3034ced8c3ea10419b6a9c1ccf1c058330 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelSessionKey.java +++ b/router/java/src/net/i2p/data/i2np/TunnelSessionKey.java @@ -44,17 +44,20 @@ public class TunnelSessionKey extends DataStructureImpl { _key.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof TunnelSessionKey)) return false; return DataHelper.eq(getKey(), ((TunnelSessionKey)obj).getKey()); } + @Override public int hashCode() { if (_key == null) return 0; return getKey().hashCode(); } + @Override public String toString() { return "[TunnelSessionKey: " + getKey() + "]"; } diff --git a/router/java/src/net/i2p/data/i2np/TunnelSigningPrivateKey.java b/router/java/src/net/i2p/data/i2np/TunnelSigningPrivateKey.java index ec1f887465b7dccac4a65a842e8e699ed2f769d0..03d017915f8b242ddafd659ce412e0ed781a472b 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelSigningPrivateKey.java +++ b/router/java/src/net/i2p/data/i2np/TunnelSigningPrivateKey.java @@ -45,17 +45,20 @@ public class TunnelSigningPrivateKey extends DataStructureImpl { _key.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof TunnelSigningPrivateKey)) return false; return DataHelper.eq(getKey(), ((TunnelSigningPrivateKey)obj).getKey()); } + @Override public int hashCode() { if (_key == null) return 0; return getKey().hashCode(); } + @Override public String toString() { return "[EndPointPrivateKey: " + getKey() + "]"; } diff --git a/router/java/src/net/i2p/data/i2np/TunnelSigningPublicKey.java b/router/java/src/net/i2p/data/i2np/TunnelSigningPublicKey.java index 9ce7e79adecc30fc5805b6f1cb121e66237e95e3..1f3530949226645b2d532685b39b92103ce7998d 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelSigningPublicKey.java +++ b/router/java/src/net/i2p/data/i2np/TunnelSigningPublicKey.java @@ -44,17 +44,20 @@ public class TunnelSigningPublicKey extends DataStructureImpl { _key.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof TunnelSigningPublicKey)) return false; return DataHelper.eq(getKey(), ((TunnelSigningPublicKey)obj).getKey()); } + @Override public int hashCode() { if (_key == null) return 0; return getKey().hashCode(); } + @Override public String toString() { return "[TunnelSigningPublicKey: " + getKey() + "]"; } diff --git a/router/java/src/net/i2p/data/i2np/TunnelVerificationStructure.java b/router/java/src/net/i2p/data/i2np/TunnelVerificationStructure.java index aec62c93eb03b4970bb66353c112c35b211dce9f..7c2e4f00168a394b4cd295f8e350eb0ef22fadc1 100644 --- a/router/java/src/net/i2p/data/i2np/TunnelVerificationStructure.java +++ b/router/java/src/net/i2p/data/i2np/TunnelVerificationStructure.java @@ -69,6 +69,7 @@ public class TunnelVerificationStructure extends DataStructureImpl { _authSignature.writeBytes(out); } + @Override public boolean equals(Object obj) { if ( (obj == null) || !(obj instanceof TunnelVerificationStructure)) return false; @@ -77,11 +78,13 @@ public class TunnelVerificationStructure extends DataStructureImpl { DataHelper.eq(getAuthorizationSignature(), str.getAuthorizationSignature()); } + @Override public int hashCode() { if ( (_msgHash == null) || (_authSignature == null) ) return 0; return getMessageHash().hashCode() + getAuthorizationSignature().hashCode(); } + @Override public String toString() { return "[TunnelVerificationStructure: " + getMessageHash() + " " + getAuthorizationSignature() + "]"; } diff --git a/router/java/src/net/i2p/router/Blocklist.java b/router/java/src/net/i2p/router/Blocklist.java index 4e94d77095aeaebaf4b02947503e1f6cea5c7ad4..791cc333c0189cbda314d0b7b52e9046b031263a 100644 --- a/router/java/src/net/i2p/router/Blocklist.java +++ b/router/java/src/net/i2p/router/Blocklist.java @@ -13,14 +13,12 @@ import java.net.InetAddress; import java.net.UnknownHostException; import java.util.*; -import net.i2p.I2PAppContext; import net.i2p.data.Base64; import net.i2p.data.DataHelper; import net.i2p.data.Hash; import net.i2p.data.RouterAddress; import net.i2p.data.RouterInfo; import net.i2p.router.networkdb.kademlia.FloodfillNetworkDatabaseFacade; -import net.i2p.util.HexDump; import net.i2p.util.Log; /** @@ -55,22 +53,22 @@ public class Blocklist { private RouterContext _context; private long _blocklist[]; private int _blocklistSize; - private Object _lock; + private final Object _lock = new Object(); private Entry _wrapSave; - private Set _inProcess; - private Map _peerBlocklist; - private Set _singleIPBlocklist; + private final Set _inProcess = new HashSet(0); + private Map _peerBlocklist = new HashMap(0); + private final Set _singleIPBlocklist = new HashSet(0); public Blocklist(RouterContext context) { _context = context; _log = context.logManager().getLog(Blocklist.class); _blocklist = null; _blocklistSize = 0; - _lock = new Object(); + // _lock = new Object(); _wrapSave = null; - _inProcess = new HashSet(0); - _peerBlocklist = new HashMap(0); - _singleIPBlocklist = new HashSet(0); + // _inProcess = new HashSet(0); + // _peerBlocklist = new HashMap(0); + // _singleIPBlocklist = new HashSet(0); } public Blocklist() { diff --git a/router/java/src/net/i2p/router/ClientTunnelSettings.java b/router/java/src/net/i2p/router/ClientTunnelSettings.java index e0f95e611bc3e19ec2b22ebb6ec5069816c69bce..6cd3981954c642a23d53395f4b649dd98fe8f15b 100644 --- a/router/java/src/net/i2p/router/ClientTunnelSettings.java +++ b/router/java/src/net/i2p/router/ClientTunnelSettings.java @@ -44,6 +44,7 @@ public class ClientTunnelSettings { _outboundSettings.writeToProperties("outbound.", props); } + @Override public String toString() { StringBuffer buf = new StringBuffer(); Properties p = new Properties(); diff --git a/router/java/src/net/i2p/router/InNetMessagePool.java b/router/java/src/net/i2p/router/InNetMessagePool.java index 4ab5c77b41d1d190e99e04bf2bcce80e8d15f1f7..802aedec0a6903aa2b15dc2fbd837073a00cdb62 100644 --- a/router/java/src/net/i2p/router/InNetMessagePool.java +++ b/router/java/src/net/i2p/router/InNetMessagePool.java @@ -35,9 +35,9 @@ public class InNetMessagePool implements Service { private Log _log; private RouterContext _context; private HandlerJobBuilder _handlerJobBuilders[]; - private List _pendingDataMessages; - private List _pendingDataMessagesFrom; - private List _pendingGatewayMessages; + private final List _pendingDataMessages; + private final List _pendingDataMessagesFrom; + private final List _pendingGatewayMessages; private SharedShortCircuitDataJob _shortCircuitDataJob; private SharedShortCircuitGatewayJob _shortCircuitGatewayJob; private boolean _alive; diff --git a/router/java/src/net/i2p/router/JobImpl.java b/router/java/src/net/i2p/router/JobImpl.java index 84190940bbbea99ae9273ea36535452ba433bcdd..a72f852967f3053345d2ba8b811a36787a1baae9 100644 --- a/router/java/src/net/i2p/router/JobImpl.java +++ b/router/java/src/net/i2p/router/JobImpl.java @@ -33,6 +33,7 @@ public abstract class JobImpl implements Job { public final RouterContext getContext() { return _context; } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append(super.toString()); diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java index 915288cc667899c9afcf415302b96da26833beab..8ec40f56e51d7c3243274fc145cf627879d88869 100644 --- a/router/java/src/net/i2p/router/JobQueue.java +++ b/router/java/src/net/i2p/router/JobQueue.java @@ -33,7 +33,7 @@ public class JobQueue { private RouterContext _context; /** Integer (runnerId) to JobQueueRunner for created runners */ - private HashMap _queueRunners; + private final HashMap _queueRunners; /** a counter to identify a job runner */ private volatile static int _runnerId = 0; /** list of jobs that are ready to run ASAP */ @@ -41,7 +41,7 @@ public class JobQueue { /** list of jobs that are scheduled for running in the future */ private ArrayList _timedJobs; /** job name to JobStat for that job */ - private SortedMap _jobStats; + private final SortedMap _jobStats; /** how many job queue runners can go concurrently */ private int _maxRunners = 1; private QueuePumper _pumper; @@ -50,7 +50,7 @@ public class JobQueue { /** have we been killed or are we alive? */ private boolean _alive; - private Object _jobLock; + private final Object _jobLock; /** default max # job queue runners operating */ private final static int DEFAULT_MAX_RUNNERS = 1; @@ -94,7 +94,7 @@ public class JobQueue { * queue runners wait on this whenever they're not doing anything, and * this gets notified *once* whenever there are ready jobs */ - private Object _runnerLock = new Object(); + private final Object _runnerLock = new Object(); public JobQueue(RouterContext context) { _context = context; diff --git a/router/java/src/net/i2p/router/JobStats.java b/router/java/src/net/i2p/router/JobStats.java index d3cf345d0253eeb08a5600df8375958099d9dbdd..ec571299311603df7e0e13c74999b8e1d6019931 100644 --- a/router/java/src/net/i2p/router/JobStats.java +++ b/router/java/src/net/i2p/router/JobStats.java @@ -59,7 +59,9 @@ class JobStats { return 0; } + @Override public int hashCode() { return _job.hashCode(); } + @Override public boolean equals(Object obj) { if ( (obj != null) && (obj instanceof JobStats) ) { JobStats stats = (JobStats)obj; @@ -73,6 +75,7 @@ class JobStats { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("Over ").append(getRuns()).append(" runs, job <b>").append(getName()).append("</b> took "); diff --git a/router/java/src/net/i2p/router/KeyManager.java b/router/java/src/net/i2p/router/KeyManager.java index 4e2ed2c51891800665b5dbda10a52113538bcb37..9fc62a70f29a0213f450a8109faa26d13cd80e3d 100644 --- a/router/java/src/net/i2p/router/KeyManager.java +++ b/router/java/src/net/i2p/router/KeyManager.java @@ -41,7 +41,7 @@ public class KeyManager { private PublicKey _publicKey; private SigningPrivateKey _signingPrivateKey; private SigningPublicKey _signingPublicKey; - private Map _leaseSetKeys; // Destination --> LeaseSetKeys + private final Map _leaseSetKeys; // Destination --> LeaseSetKeys private SynchronizeKeysJob _synchronizeJob; public final static String PROP_KEYDIR = "router.keyBackupDir"; diff --git a/router/java/src/net/i2p/router/LeaseSetKeys.java b/router/java/src/net/i2p/router/LeaseSetKeys.java index c88b0808afed3650f338c4b556d4b86fbc095af3..1017ab43db5c322d7b6e47488a40bad0013ae6fd 100644 --- a/router/java/src/net/i2p/router/LeaseSetKeys.java +++ b/router/java/src/net/i2p/router/LeaseSetKeys.java @@ -73,6 +73,7 @@ public class LeaseSetKeys extends DataStructureImpl { _revocationKey.writeBytes(out); } + @Override public int hashCode() { int rv = 0; rv += DataHelper.hashCode(_dest); @@ -81,6 +82,7 @@ public class LeaseSetKeys extends DataStructureImpl { return rv; } + @Override public boolean equals(Object obj) { if ( (obj != null) && (obj instanceof LeaseSetKeys) ) { LeaseSetKeys keys = (LeaseSetKeys)obj; diff --git a/router/java/src/net/i2p/router/MessageHistory.java b/router/java/src/net/i2p/router/MessageHistory.java index d88d653de03ff70c24e358f5931d82c5edac73d2..cafbadd1cd5bb0cb23ce3725d9536c29c47e522c 100644 --- a/router/java/src/net/i2p/router/MessageHistory.java +++ b/router/java/src/net/i2p/router/MessageHistory.java @@ -26,7 +26,7 @@ import net.i2p.util.Log; public class MessageHistory { private Log _log; private RouterContext _context; - private List _unwrittenEntries; // list of raw entries (strings) yet to be written + private final List _unwrittenEntries = new ArrayList(64); // list of raw entries (strings) yet to be written private String _historyFile; // where to write private String _localIdent; // placed in each entry to uniquely identify the local router private boolean _doLog; // true == we want to log @@ -104,7 +104,7 @@ public class MessageHistory { _doLog = DEFAULT_KEEP_MESSAGE_HISTORY; _historyFile = filename; _localIdent = getName(_context.routerHash()); - _unwrittenEntries = new ArrayList(64); + // _unwrittenEntries = new ArrayList(64); updateSettings(); // clear the history file on startup if (_firstPass) { diff --git a/router/java/src/net/i2p/router/MultiRouter.java b/router/java/src/net/i2p/router/MultiRouter.java index 144c4e1db8a9059f9d92d66ded03f5c306e2d1ea..d8d316ae8aa0291d51e3ce370f0fb7aea4d553b6 100644 --- a/router/java/src/net/i2p/router/MultiRouter.java +++ b/router/java/src/net/i2p/router/MultiRouter.java @@ -58,6 +58,7 @@ public class MultiRouter { _defaultContext.clock().setOffset(0); Runtime.getRuntime().addShutdownHook(new Thread() { + @Override public void run() { Thread.currentThread().setName("Router* Shutdown"); try { Thread.sleep(120*1000); } catch (InterruptedException ie) {} diff --git a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java index e4a5ce08b663a7da1c9fc9752104dc33875bae0a..e1169b455a29aac32d8d54a5884e26001b8116c2 100644 --- a/router/java/src/net/i2p/router/NetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/NetworkDatabaseFacade.java @@ -10,10 +10,6 @@ package net.i2p.router; import java.io.IOException; import java.io.Writer; -import java.util.Collections; -import java.util.HashMap; -import java.util.HashSet; -import java.util.Map; import java.util.Set; import net.i2p.data.Hash; diff --git a/router/java/src/net/i2p/router/OutNetMessage.java b/router/java/src/net/i2p/router/OutNetMessage.java index 2240af423c2465094b244823441be641b505b4ff..e1cd2a896622d6aa3489375315f843f36ec725b5 100644 --- a/router/java/src/net/i2p/router/OutNetMessage.java +++ b/router/java/src/net/i2p/router/OutNetMessage.java @@ -302,6 +302,7 @@ public class OutNetMessage { super.finalize(); } */ + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("[OutNetMessage contains "); @@ -365,6 +366,7 @@ public class OutNetMessage { } } + @Override public int hashCode() { int rv = 0; rv += DataHelper.hashCode(_message); @@ -373,7 +375,10 @@ public class OutNetMessage { return rv; } + @Override public boolean equals(Object obj) { + if(obj == null) return false; + if(obj.getClass() != OutNetMessage.class) return false; return obj == this; // two OutNetMessages are different even if they contain the same message } } diff --git a/router/java/src/net/i2p/router/PeerManagerFacade.java b/router/java/src/net/i2p/router/PeerManagerFacade.java index 791b77616a5600e669af4a103bd37bf92e2a4efc..61b1d3799e5d56a9c2d5d10cb09c609bb85e9605 100644 --- a/router/java/src/net/i2p/router/PeerManagerFacade.java +++ b/router/java/src/net/i2p/router/PeerManagerFacade.java @@ -8,7 +8,6 @@ package net.i2p.router; * */ -import java.io.Writer; import java.util.List; import net.i2p.data.Hash; diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java index d02275ea20c72bbb045269d74e52ac1d494ff1df..f1f4fe55a117bfb0fb09714b14f41c8aad871b68 100644 --- a/router/java/src/net/i2p/router/PersistentKeyRing.java +++ b/router/java/src/net/i2p/router/PersistentKeyRing.java @@ -4,16 +4,12 @@ import java.io.IOException; import java.io.Writer; import java.util.Iterator; -import java.util.Map; -import java.util.TreeMap; -import net.i2p.data.Base64; import net.i2p.data.DataFormatException; import net.i2p.data.Destination; import net.i2p.data.Hash; import net.i2p.data.LeaseSet; import net.i2p.data.SessionKey; -import net.i2p.router.TunnelPoolSettings; import net.i2p.util.KeyRing; /** @@ -31,6 +27,7 @@ public class PersistentKeyRing extends KeyRing { addFromProperties(); } + @Override public SessionKey put(Hash h, SessionKey sk) { SessionKey old = super.put(h, sk); if (!sk.equals(old)) { @@ -67,6 +64,7 @@ public class PersistentKeyRing extends KeyRing { } } + @Override public void renderStatusHTML(Writer out) throws IOException { StringBuffer buf = new StringBuffer(1024); buf.append("\n<table border=\"1\"><tr><th align=\"left\">Destination Hash<th align=\"left\">Name or Dest.<th align=\"left\">Session Key</tr>"); diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index 37215f6c4b579129da3ee6ea784ebd72820a74e9..a4a707926efd30e64a14545c4d94e39e02fe73bd 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -9,7 +9,6 @@ package net.i2p.router; */ import java.io.File; -import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.Writer; @@ -53,7 +52,7 @@ import net.i2p.util.SimpleTimer; public class Router { private Log _log; private RouterContext _context; - private Properties _config; + private final Properties _config; private String _configFilename; private RouterInfo _routerInfo; private long _started; @@ -64,7 +63,7 @@ public class Router { private int _gracefulExitCode; private I2PThread.OOMEventListener _oomListener; private ShutdownHook _shutdownHook; - private I2PThread _gracefulShutdownDetector; + private final I2PThread _gracefulShutdownDetector; public final static String PROP_CONFIG_FILE = "router.configLocation"; @@ -1350,6 +1349,7 @@ private static class ShutdownHook extends Thread { _context = ctx; _id = ++__id; } + @Override public void run() { setName("Router " + _id + " shutdown"); Log l = _context.logManager().getLog(Router.class); diff --git a/router/java/src/net/i2p/router/RouterClock.java b/router/java/src/net/i2p/router/RouterClock.java index 3174e60276db72a52c40fedd1bf9d140d306dd99..d071013b2d3b13d0553f30560bd97c67b5a4bfbe 100644 --- a/router/java/src/net/i2p/router/RouterClock.java +++ b/router/java/src/net/i2p/router/RouterClock.java @@ -15,11 +15,11 @@ import net.i2p.util.Log; */ public class RouterClock extends Clock { - RouterContext _context; + RouterContext _contextRC; // LINT field hides another field public RouterClock(RouterContext context) { super(context); - _context = context; + _contextRC = context; } /** @@ -27,6 +27,7 @@ public class RouterClock extends Clock { * value means that we are slow, while a negative value means we are fast. * */ + @Override public void setOffset(long offsetMs, boolean force) { if (false) return; @@ -53,10 +54,10 @@ public class RouterClock extends Clock { } // If so configured, check sanity of proposed clock offset - if (Boolean.valueOf(_context.getProperty("router.clockOffsetSanityCheck","true")).booleanValue() == true) { + if (Boolean.valueOf(_contextRC.getProperty("router.clockOffsetSanityCheck","true")).booleanValue() == true) { // Try calculating peer clock skew - Long peerClockSkew = _context.commSystem().getFramedAveragePeerClockSkew(50); + Long peerClockSkew = _contextRC.commSystem().getFramedAveragePeerClockSkew(50); if (peerClockSkew != null) { @@ -88,9 +89,9 @@ public class RouterClock extends Clock { getLog().info("Updating clock offset to " + offsetMs + "ms from " + _offset + "ms"); if (!_statCreated) - _context.statManager().createRateStat("clock.skew", "How far is the already adjusted clock being skewed?", "Clock", new long[] { 10*60*1000, 3*60*60*1000, 24*60*60*60 }); + _contextRC.statManager().createRateStat("clock.skew", "How far is the already adjusted clock being skewed?", "Clock", new long[] { 10*60*1000, 3*60*60*1000, 24*60*60*60 }); _statCreated = true; - _context.statManager().addRateData("clock.skew", delta, 0); + _contextRC.statManager().addRateData("clock.skew", delta, 0); } else { getLog().log(Log.INFO, "Initializing clock offset to " + offsetMs + "ms from " + _offset + "ms"); } diff --git a/router/java/src/net/i2p/router/RouterContext.java b/router/java/src/net/i2p/router/RouterContext.java index ba82fb839365677049205a9b15c7231037903dcc..782bc8a87550fffd01b3620a64e587a4aae36f12 100644 --- a/router/java/src/net/i2p/router/RouterContext.java +++ b/router/java/src/net/i2p/router/RouterContext.java @@ -58,7 +58,7 @@ public class RouterContext extends I2PAppContext { private MessageValidator _messageValidator; private MessageStateMonitor _messageStateMonitor; private RouterThrottle _throttle; - private RouterClock _clock; + private RouterClock _clockX; // LINT field hides another field, hope rename won't break anything. private Calculator _integrationCalc; private Calculator _speedCalc; private Calculator _capacityCalc; @@ -262,6 +262,7 @@ public class RouterContext extends I2PAppContext { /** how do we rank the capacity of profiles? */ public Calculator capacityCalculator() { return _capacityCalc; } + @Override public String toString() { StringBuffer buf = new StringBuffer(512); buf.append("RouterContext: ").append(super.toString()).append('\n'); @@ -294,6 +295,7 @@ public class RouterContext extends I2PAppContext { * I2PAppContext says. * */ + @Override public String getProperty(String propName) { if (_router != null) { String val = _router.getConfigSetting(propName); @@ -306,6 +308,7 @@ public class RouterContext extends I2PAppContext { * I2PAppContext says. * */ + @Override public String getProperty(String propName, String defaultVal) { if (_router != null) { String val = _router.getConfigSetting(propName); @@ -317,6 +320,7 @@ public class RouterContext extends I2PAppContext { /** * Return an int with an int default */ + @Override public int getProperty(String propName, int defaultVal) { if (_router != null) { String val = _router.getConfigSetting(propName); @@ -339,14 +343,16 @@ public class RouterContext extends I2PAppContext { * that it triggers initializeClock() of which we definitely * need the local version to run. */ + @Override public Clock clock() { if (!_clockInitialized) initializeClock(); - return _clock; + return _clockX; } + @Override protected void initializeClock() { synchronized (this) { - if (_clock == null) - _clock = new RouterClock(this); + if (_clockX == null) + _clockX = new RouterClock(this); _clockInitialized = true; } } diff --git a/router/java/src/net/i2p/router/RouterDoSThrottle.java b/router/java/src/net/i2p/router/RouterDoSThrottle.java index c161ddda584547957b42f5e30b0440afbde5ff7e..79471627a24996782fc018d6d0a5616812c7a887 100644 --- a/router/java/src/net/i2p/router/RouterDoSThrottle.java +++ b/router/java/src/net/i2p/router/RouterDoSThrottle.java @@ -19,6 +19,7 @@ class RouterDoSThrottle extends RouterThrottleImpl { private static final long LOOKUP_THROTTLE_PERIOD = 10*1000; private static final long LOOKUP_THROTTLE_MAX = 20; + @Override public boolean acceptNetDbLookupRequest(Hash key) { // if we were going to refuse it anyway, drop it boolean shouldAccept = super.acceptNetDbLookupRequest(key); diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 450adcf28995877df39879b32a562c700c4a4985..1d4797d6fc46971d6b640b96122df2e67994299a 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -17,7 +17,7 @@ import net.i2p.CoreVersion; public class RouterVersion { public final static String ID = "$Revision: 1.548 $ $Date: 2008-06-07 23:00:00 $"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 0; + public final static long BUILD = 1; public static void main(String args[]) { System.out.println("I2P Router version: " + VERSION + "-" + BUILD); System.out.println("Router ID: " + RouterVersion.ID); diff --git a/router/java/src/net/i2p/router/Shitlist.java b/router/java/src/net/i2p/router/Shitlist.java index 29d384de90acc327720d158a3e145bfe443f7a05..1416cc9fe4dc5dda858680187d4a3e16c951341b 100644 --- a/router/java/src/net/i2p/router/Shitlist.java +++ b/router/java/src/net/i2p/router/Shitlist.java @@ -13,8 +13,6 @@ import java.io.Writer; import java.util.concurrent.ConcurrentHashMap; import java.util.ArrayList; import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; diff --git a/router/java/src/net/i2p/router/TunnelManagerFacade.java b/router/java/src/net/i2p/router/TunnelManagerFacade.java index da0482e6ffd4072eac1416e95e3397cf0222fd20..8ddc1e060f59ea9fdcafb1488024b1374a749ce1 100644 --- a/router/java/src/net/i2p/router/TunnelManagerFacade.java +++ b/router/java/src/net/i2p/router/TunnelManagerFacade.java @@ -8,8 +8,6 @@ package net.i2p.router; * */ -import java.io.IOException; -import java.io.Writer; import java.util.Set; import net.i2p.data.Destination; diff --git a/router/java/src/net/i2p/router/TunnelPoolSettings.java b/router/java/src/net/i2p/router/TunnelPoolSettings.java index a92470d2ee14114fd8095016a7fece2558bc2ee1..fab33d919a077b1d5af69126aca2e734f66fcc2b 100644 --- a/router/java/src/net/i2p/router/TunnelPoolSettings.java +++ b/router/java/src/net/i2p/router/TunnelPoolSettings.java @@ -185,6 +185,7 @@ public class TunnelPoolSettings { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(); Properties p = new Properties(); diff --git a/router/java/src/net/i2p/router/TunnelSettings.java b/router/java/src/net/i2p/router/TunnelSettings.java index 3ea8baa5671fe87e4846a47f69919bcad2a22c7c..99249f7c75f3c7042349711874b7e54b81e26ba3 100644 --- a/router/java/src/net/i2p/router/TunnelSettings.java +++ b/router/java/src/net/i2p/router/TunnelSettings.java @@ -105,6 +105,7 @@ public class TunnelSettings extends DataStructureImpl { } + @Override public int hashCode() { int rv = 0; rv += _includeDummy ? 100 : 0; @@ -118,6 +119,7 @@ public class TunnelSettings extends DataStructureImpl { return rv; } + @Override public boolean equals(Object obj) { if ( (obj != null) && (obj instanceof TunnelSettings) ) { TunnelSettings settings = (TunnelSettings)obj; diff --git a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java index 4f979c5c937a28a5638ebbf46a3398e1a33d3e80..5611f13774680f50cbf22d1743f6e6e3b6d5d78a 100644 --- a/router/java/src/net/i2p/router/client/ClientConnectionRunner.java +++ b/router/java/src/net/i2p/router/client/ClientConnectionRunner.java @@ -13,7 +13,6 @@ import java.io.OutputStream; import java.net.Socket; import java.util.concurrent.ConcurrentHashMap; import java.util.ArrayList; -import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; @@ -73,7 +72,7 @@ public class ClientConnectionRunner { * This contains the last 10 MessageIds that have had their (non-ack) status * delivered to the client (so that we can be sure only to update when necessary) */ - private List _alreadyProcessed; + private final List _alreadyProcessed; private ClientWriterRunner _writer; private Hash _destHashCache; /** are we, uh, dead */ @@ -111,7 +110,7 @@ public class ClientConnectionRunner { t.setDaemon(true); t.setPriority(I2PThread.MAX_PRIORITY); t.start(); - _out = _socket.getOutputStream(); + _out = _socket.getOutputStream(); // LINT -- OWCH! needs a better way so it can be final. _reader.startReading(); } catch (IOException ioe) { _log.error("Error starting up the runner", ioe); @@ -412,7 +411,7 @@ public class ClientConnectionRunner { } if (_log.shouldLog(Log.DEBUG)) _log.debug("after writeMessage("+ msg.getClass().getName() + "): " - + (_context.clock().now()-before) + "ms");; + + (_context.clock().now()-before) + "ms"); } catch (I2CPMessageException ime) { _log.error("Message exception sending I2CP message: " + ime); stopRunning(); @@ -464,7 +463,7 @@ public class ClientConnectionRunner { // this *should* be mod 65536, but UnsignedInteger is still b0rked. FIXME private final static int MAX_MESSAGE_ID = 32767; private static volatile int _messageId = RandomSource.getInstance().nextInt(MAX_MESSAGE_ID); // messageId counter - private static Object _messageIdLock = new Object(); + private final static Object _messageIdLock = new Object(); static int getNextMessageId() { synchronized (_messageIdLock) { diff --git a/router/java/src/net/i2p/router/client/ClientManager.java b/router/java/src/net/i2p/router/client/ClientManager.java index 9b5eb7c4ccbe24886646d0c011f1aeceba41ee6d..85e7d9ec76c0bd7cf8dea1608af4b35d89e72a31 100644 --- a/router/java/src/net/i2p/router/client/ClientManager.java +++ b/router/java/src/net/i2p/router/client/ClientManager.java @@ -41,8 +41,8 @@ import net.i2p.util.Log; public class ClientManager { private Log _log; private ClientListenerRunner _listener; - private HashMap _runners; // Destination --> ClientConnectionRunner - private Set _pendingRunners; // ClientConnectionRunner for clients w/out a Dest yet + private final HashMap _runners; // Destination --> ClientConnectionRunner + private final Set _pendingRunners; // ClientConnectionRunner for clients w/out a Dest yet private RouterContext _ctx; /** ms to wait before rechecking for inbound messages to deliver to clients */ diff --git a/router/java/src/net/i2p/router/client/ClientManagerFacadeImpl.java b/router/java/src/net/i2p/router/client/ClientManagerFacadeImpl.java index 51b8b4cb2513a67ba24cd2b44fb41f42af5102c8..eddf13dd8e8d672e31cc5679811f390e3d2e8fef 100644 --- a/router/java/src/net/i2p/router/client/ClientManagerFacadeImpl.java +++ b/router/java/src/net/i2p/router/client/ClientManagerFacadeImpl.java @@ -74,9 +74,11 @@ public class ClientManagerFacadeImpl extends ClientManagerFacade { startup(); } + @Override public boolean isAlive() { return _manager != null && _manager.isAlive(); } private static final long MAX_TIME_TO_REBUILD = 10*60*1000; + @Override public boolean verifyClientLiveliness() { if (_manager == null) return true; boolean lively = true; @@ -167,6 +169,7 @@ public class ClientManagerFacadeImpl extends ClientManagerFacade { } } + @Override public boolean shouldPublishLeaseSet(Hash destinationHash) { return _manager.shouldPublishLeaseSet(destinationHash); } public void messageDeliveryStatusUpdate(Destination fromDest, MessageId id, boolean delivered) { @@ -196,6 +199,7 @@ public class ClientManagerFacadeImpl extends ClientManagerFacade { } } + @Override public void renderStatusHTML(Writer out) throws IOException { if (_manager != null) _manager.renderStatusHTML(out); @@ -206,6 +210,7 @@ public class ClientManagerFacadeImpl extends ClientManagerFacade { * * @return set of Destination objects */ + @Override public Set listClients() { if (_manager != null) return _manager.listClients(); diff --git a/router/java/src/net/i2p/router/message/CloveSet.java b/router/java/src/net/i2p/router/message/CloveSet.java index 1774c9be02a6640cc8da59615e5f644ed524caed..d18aa55b44baed89829747cf5e0b0b4475ec8784 100644 --- a/router/java/src/net/i2p/router/message/CloveSet.java +++ b/router/java/src/net/i2p/router/message/CloveSet.java @@ -42,6 +42,7 @@ public class CloveSet { public long getExpiration() { return _expiration; } public void setExpiration(long expiration) { _expiration = expiration; } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("{"); diff --git a/router/java/src/net/i2p/router/message/GarlicConfig.java b/router/java/src/net/i2p/router/message/GarlicConfig.java index 3b6359a89d4c2b72955ebf0c7a086da536902c04..ead346e0067f239af6f7caca0acdab0f66f549e9 100644 --- a/router/java/src/net/i2p/router/message/GarlicConfig.java +++ b/router/java/src/net/i2p/router/message/GarlicConfig.java @@ -156,6 +156,7 @@ public class GarlicConfig { protected String getSubData() { return ""; } private final static String NL = System.getProperty("line.separator"); + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("<garlicConfig>").append(NL); diff --git a/router/java/src/net/i2p/router/message/GarlicMessageParser.java b/router/java/src/net/i2p/router/message/GarlicMessageParser.java index 3e99e0731688dba7b279126ac3825f600ae9b5e6..84ed50b2c56baf9b41cd6642dc759d2df31bf1f9 100644 --- a/router/java/src/net/i2p/router/message/GarlicMessageParser.java +++ b/router/java/src/net/i2p/router/message/GarlicMessageParser.java @@ -9,8 +9,6 @@ package net.i2p.router.message; */ import java.util.Date; -import java.util.HashSet; -import java.util.Set; import net.i2p.data.Certificate; import net.i2p.data.DataFormatException; diff --git a/router/java/src/net/i2p/router/message/HandleGarlicMessageJob.java b/router/java/src/net/i2p/router/message/HandleGarlicMessageJob.java index a114764f6a0286e0d30aff5e5bf95c3319c03303..05aecfb89b4ab0980a81831d0023b6f6bdd56949 100644 --- a/router/java/src/net/i2p/router/message/HandleGarlicMessageJob.java +++ b/router/java/src/net/i2p/router/message/HandleGarlicMessageJob.java @@ -106,6 +106,7 @@ public class HandleGarlicMessageJob extends JobImpl implements GarlicMessageRece } } + @Override public void dropped() { getContext().messageHistory().messageProcessingError(_message.getUniqueId(), _message.getClass().getName(), diff --git a/router/java/src/net/i2p/router/message/OutboundClientMessageStatus.java b/router/java/src/net/i2p/router/message/OutboundClientMessageStatus.java index b24154d6f63ec475fdc6e60b9a045adde3608c50..3d15ce07cd6179475a405bb9990287d0430c4109 100644 --- a/router/java/src/net/i2p/router/message/OutboundClientMessageStatus.java +++ b/router/java/src/net/i2p/router/message/OutboundClientMessageStatus.java @@ -20,7 +20,7 @@ class OutboundClientMessageStatus { private ClientMessage _msg; private PayloadGarlicConfig _clove; private LeaseSet _leaseSet; - private Set _sent; + private final Set _sent; private int _numLookups; private boolean _success; private boolean _failure; @@ -114,6 +114,7 @@ class OutboundClientMessageStatus { public Hash getGateway() { return _gateway; } public TunnelId getTunnel() { return _tunnel; } + @Override public int hashCode() { int rv = 0; if (_gateway != null) @@ -123,6 +124,7 @@ class OutboundClientMessageStatus { return rv; } + @Override public boolean equals(Object o) { if (o == null) return false; if (o.getClass() != Tunnel.class) return false; diff --git a/router/java/src/net/i2p/router/message/PayloadGarlicConfig.java b/router/java/src/net/i2p/router/message/PayloadGarlicConfig.java index eb2c0488634cd8c3a88672a1bf3d12037689dafa..2b2a8f9c88741c865d0a6640bf2e0e7d6d9d45a5 100644 --- a/router/java/src/net/i2p/router/message/PayloadGarlicConfig.java +++ b/router/java/src/net/i2p/router/message/PayloadGarlicConfig.java @@ -33,6 +33,7 @@ public class PayloadGarlicConfig extends GarlicConfig { } public I2NPMessage getPayload() { return _payload; } + @Override protected String getSubData() { StringBuffer buf = new StringBuffer(); buf.append("<payloadMessage>").append(_payload).append("</payloadMessage>"); diff --git a/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java b/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java index a953bd59595d65fb7887ac690334a187c0cc2dbb..76bc897ed149d6acb7329284fad17b52417e0565 100644 --- a/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/HandleDatabaseLookupMessageJob.java @@ -262,6 +262,7 @@ public class HandleDatabaseLookupMessageJob extends JobImpl { public String getName() { return "Handle Database Lookup Message"; } + @Override public void dropped() { getContext().messageHistory().messageProcessingError(_message.getUniqueId(), _message.getClass().getName(), diff --git a/router/java/src/net/i2p/router/networkdb/HandleDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/HandleDatabaseStoreMessageJob.java index 3a395db0ace649c6a49d1c0041f0bbba6eaab899..c4a0b9f451af4ecc04515fae490be2ab43d266c4 100644 --- a/router/java/src/net/i2p/router/networkdb/HandleDatabaseStoreMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/HandleDatabaseStoreMessageJob.java @@ -132,6 +132,7 @@ public class HandleDatabaseStoreMessageJob extends JobImpl { public String getName() { return "Handle Database Store Message"; } + @Override public void dropped() { getContext().messageHistory().messageProcessingError(_message.getUniqueId(), _message.getClass().getName(), "Dropped due to overload"); } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java index 388afa8869627306fbbc7c0f47b6d1cfb720e175..e8e0a01f102212832cd5ba92f5fe17dc8cbf6476 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/ExploreJob.java @@ -11,7 +11,6 @@ package net.i2p.router.networkdb.kademlia; import java.util.List; import net.i2p.data.Hash; -import net.i2p.data.RouterInfo; import net.i2p.data.TunnelId; import net.i2p.data.i2np.DatabaseLookupMessage; import net.i2p.router.RouterContext; @@ -41,11 +40,11 @@ class ExploreJob extends SearchJob { /** only send the closest "dont tell me about" refs... * Override to make this bigger because we want to include both the * floodfills and the previously-queried peers */ - static final int MAX_CLOSEST = 20; + static final int MAX_CLOSEST = 20; // LINT -- field hides another field, this isn't an override. /** Override to make this shorter, since we don't sort out the * unresponsive ff peers like we do in FloodOnlySearchJob */ - static final int PER_FLOODFILL_PEER_TIMEOUT = 5*1000; + static final int PER_FLOODFILL_PEER_TIMEOUT = 5*1000; // LINT -- field hides another field, this isn't an override. /** * Create a new search for the routingKey specified @@ -78,6 +77,7 @@ class ExploreJob extends SearchJob { * @param replyGateway gateway for the reply tunnel * @param expiration when the search should stop */ + @Override protected DatabaseLookupMessage buildMessage(TunnelId replyTunnelId, Hash replyGateway, long expiration) { DatabaseLookupMessage msg = new DatabaseLookupMessage(getContext(), true); msg.setSearchKey(getState().getTarget()); @@ -112,11 +112,13 @@ class ExploreJob extends SearchJob { * replies sent back to us directly). This uses the similar overrides as the other buildMessage above. * */ + @Override protected DatabaseLookupMessage buildMessage(long expiration) { return buildMessage(null, getContext().router().getRouterInfo().getIdentity().getHash(), expiration); } /** max # of concurrent searches */ + @Override protected int getBredth() { return EXPLORE_BREDTH; } @@ -125,6 +127,7 @@ class ExploreJob extends SearchJob { * number of peers that we didn't know about before. * */ + @Override protected void newPeersFound(int numNewPeers) { // who cares about how many new peers. well, maybe we do. but for now, // we'll do the simplest thing that could possibly work. @@ -139,5 +142,6 @@ class ExploreJob extends SearchJob { * */ + @Override public String getName() { return "Kademlia NetDb Explore"; } } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlyLookupSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlyLookupSelector.java index b8c46fc33eecf366c8b523a438e1c697c6bdc5be..ff98d1429b5233a2f29870bc9d4782d5de706b43 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlyLookupSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlyLookupSelector.java @@ -3,7 +3,6 @@ package net.i2p.router.networkdb.kademlia; import net.i2p.data.i2np.DatabaseSearchReplyMessage; import net.i2p.data.i2np.DatabaseStoreMessage; import net.i2p.data.i2np.I2NPMessage; -import net.i2p.router.JobImpl; import net.i2p.router.MessageSelector; import net.i2p.router.RouterContext; import net.i2p.util.Log; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java index 5e68863026152c5ba58561df3759bfb06fc6c6ee..e5b5e962d6b076a2bde7f651b3f8ca08aef6661f 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodOnlySearchJob.java @@ -8,11 +8,7 @@ import java.util.List; import net.i2p.data.Hash; import net.i2p.data.i2np.DatabaseLookupMessage; -import net.i2p.data.i2np.DatabaseSearchReplyMessage; -import net.i2p.data.i2np.DatabaseStoreMessage; -import net.i2p.data.i2np.I2NPMessage; import net.i2p.router.Job; -import net.i2p.router.JobImpl; import net.i2p.router.MessageSelector; import net.i2p.router.OutNetMessage; import net.i2p.router.ReplyJob; @@ -44,8 +40,8 @@ class FloodOnlySearchJob extends FloodSearchJob { protected Log _log; private FloodfillNetworkDatabaseFacade _facade; protected Hash _key; - private List _onFind; - private List _onFailed; + private final List _onFind; + private final List _onFailed; private long _expiration; protected int _timeoutMs; private long _origExpiration; @@ -54,9 +50,9 @@ class FloodOnlySearchJob extends FloodSearchJob { private volatile boolean _dead; private long _created; private boolean _shouldProcessDSRM; - private HashSet _unheardFrom; + private final HashSet _unheardFrom; - protected List _out; + protected final List _out; protected MessageSelector _replySelector; protected ReplyJob _onReply; protected Job _onTimeout; @@ -83,6 +79,7 @@ class FloodOnlySearchJob extends FloodSearchJob { _created = System.currentTimeMillis(); _shouldProcessDSRM = false; } + @Override void addDeferred(Job onFind, Job onFailed, long timeoutMs, boolean isLease) { if (_dead) { getContext().jobQueue().addJob(onFailed); @@ -91,10 +88,12 @@ class FloodOnlySearchJob extends FloodSearchJob { if (onFailed != null) synchronized (_onFailed) { _onFailed.add(onFailed); } } } + @Override public long getExpiration() { return _expiration; } public long getCreated() { return _created; } public boolean shouldProcessDSRM() { return _shouldProcessDSRM; } private static final int CONCURRENT_SEARCHES = 2; + @Override public void runJob() { // pick some floodfill peers and send out the searches List floodfillPeers = _facade.getFloodfillPeers(); @@ -184,10 +183,14 @@ class FloodOnlySearchJob extends FloodSearchJob { failed(); } } + @Override public String getName() { return "NetDb flood search (phase 1)"; } + @Override Hash getKey() { return _key; } + @Override void decrementRemaining() { if (_lookupsRemaining > 0) _lookupsRemaining--; } + @Override int getLookupsRemaining() { return _lookupsRemaining; } /** Note that we heard from the peer */ void decrementRemaining(Hash peer) { @@ -197,6 +200,7 @@ class FloodOnlySearchJob extends FloodSearchJob { } } + @Override void failed() { synchronized (this) { if (_dead) return; @@ -224,6 +228,7 @@ class FloodOnlySearchJob extends FloodSearchJob { } } } + @Override void success() { synchronized (this) { if (_dead) return; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java index 575de5e7b356fc37e94ff5f77660576d0490900a..3772b18d1ee2694f0e542ac20f2b462d73c3cc4f 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillNetworkDatabaseFacade.java @@ -31,7 +31,7 @@ import net.i2p.util.Log; */ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacade { public static final char CAPACITY_FLOODFILL = 'f'; - private Map _activeFloodQueries; + private final Map _activeFloodQueries; private boolean _floodfillEnabled; /** for testing, see isFloodfill() below */ private static String _alwaysQuery; @@ -55,11 +55,13 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad _context.statManager().createRateStat("netDb.republishQuantity", "How many peers do we need to send a found leaseSet to?", "NetworkDatabase", new long[] { 10*60*1000l, 60*60*1000l, 3*60*60*1000l, 24*60*60*1000l }); } + @Override public void startup() { super.startup(); _context.jobQueue().addJob(new FloodfillMonitorJob(_context, this)); } + @Override protected void createHandlers() { _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseLookupMessage.MESSAGE_TYPE, new FloodfillDatabaseLookupMessageHandler(_context)); _context.inNetMessagePool().registerHandlerJobBuilder(DatabaseStoreMessage.MESSAGE_TYPE, new FloodfillDatabaseStoreMessageHandler(_context, this)); @@ -70,6 +72,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad /** * @throws IllegalArgumentException if the local router info is invalid */ + @Override public void publish(RouterInfo localRouterInfo) throws IllegalArgumentException { if (localRouterInfo == null) throw new IllegalArgumentException("wtf, null localRouterInfo?"); if (_context.router().isHidden()) return; // DE-nied! @@ -77,6 +80,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad sendStore(localRouterInfo.getIdentity().calculateHash(), localRouterInfo, null, null, PUBLISH_TIMEOUT, null); } + @Override public void sendStore(Hash key, DataStructure ds, Job onSuccess, Job onFailure, long sendTimeout, Set toIgnore) { // if we are a part of the floodfill netDb, don't send out our own leaseSets as part // of the flooding - instead, send them to a random floodfill peer so *they* can flood 'em out. @@ -131,6 +135,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad private static final int FLOOD_PRIORITY = 200; private static final int FLOOD_TIMEOUT = 30*1000; + @Override protected PeerSelector createPeerSelector() { return new FloodfillPeerSelector(_context); } public void setFloodfillEnabled(boolean yes) { _floodfillEnabled = yes; } @@ -183,6 +188,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad * without any match) * */ + @Override SearchJob search(Hash key, Job onFindJob, Job onFailedLookupJob, long timeoutMs, boolean isLease) { //if (true) return super.search(key, onFindJob, onFailedLookupJob, timeoutMs, isLease); if (key == null) throw new IllegalArgumentException("searchin for nothin, eh?"); @@ -282,6 +288,7 @@ public class FloodfillNetworkDatabaseFacade extends KademliaNetworkDatabaseFacad * Search for a newer router info, drop it from the db if the search fails, * unless just started up or have bigger problems. */ + @Override protected void lookupBeforeDropping(Hash peer, RouterInfo info) { // following are some special situations, we don't want to // drop the peer in these cases @@ -356,8 +363,8 @@ class FloodSearchJob extends JobImpl { private Log _log; private FloodfillNetworkDatabaseFacade _facade; private Hash _key; - private List _onFind; - private List _onFailed; + private final List _onFind; + private final List _onFailed; private long _expiration; private int _timeoutMs; private long _origExpiration; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java index 7504e660a02070e18b284bc779709b9ddbcf73b9..049140397fc4127a8cbe7adc501a2475ea89f68e 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillPeerSelector.java @@ -31,10 +31,12 @@ class FloodfillPeerSelector extends PeerSelector { * * @return List of Hash for the peers selected */ + @Override public List selectMostReliablePeers(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { return selectNearestExplicitThin(key, maxNumRouters, peersToIgnore, kbuckets, true); } + @Override public List selectNearestExplicitThin(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { return selectNearestExplicitThin(key, maxNumRouters, peersToIgnore, kbuckets, false); } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java index f3880597d8334de33014b199d9758255dcb311f4..7c37cfc18ee1ab1d8d189a7138a12889233ef5aa 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/FloodfillStoreJob.java @@ -34,17 +34,21 @@ class FloodfillStoreJob extends StoreJob { _facade = facade; } + @Override protected int getParallelization() { return 1; } + @Override protected int getRedundancy() { return 1; } /** * Send was totally successful */ + @Override protected void succeed() { super.succeed(); if (_state != null) getContext().jobQueue().addJob(new FloodfillVerifyStoreJob(getContext(), _state.getTarget(), _facade)); } + @Override public String getName() { return "Floodfill netDb store"; } } \ No newline at end of file diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseLookupMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseLookupMessageJob.java index e3a6b6df9d372192c2118b1c5c63440a01d446aa..f8c7adf42492e52ad45f3393bf30531003cbd8ae 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseLookupMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseLookupMessageJob.java @@ -30,6 +30,7 @@ public class HandleFloodfillDatabaseLookupMessageJob extends HandleDatabaseLooku super(ctx, receivedMessage, from, fromHash); } + @Override protected boolean answerAllQueries() { if (!FloodfillNetworkDatabaseFacade.floodfillEnabled(getContext())) return false; return FloodfillNetworkDatabaseFacade.isFloodfill(getContext().router().getRouterInfo()); @@ -40,6 +41,7 @@ public class HandleFloodfillDatabaseLookupMessageJob extends HandleDatabaseLooku * This gets the word out to routers that we are no longer floodfill, so they * will stop bugging us. */ + @Override protected void sendClosest(Hash key, Set routerInfoSet, Hash toPeer, TunnelId replyTunnel) { super.sendClosest(key, routerInfoSet, toPeer, replyTunnel); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java index 1b00a1b251373fdc084e0357b2c3173491951327..505638ecbdb31246eec5110d01c4d80c5cc9a8a4 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/HandleFloodfillDatabaseStoreMessageJob.java @@ -184,6 +184,7 @@ public class HandleFloodfillDatabaseStoreMessageJob extends JobImpl { public String getName() { return "Handle Database Store Message"; } + @Override public void dropped() { getContext().messageHistory().messageProcessingError(_message.getUniqueId(), _message.getClass().getName(), "Dropped due to overload"); } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java index 5d8e186f50728db534008019467733dab36e6705..c6668a41e4fcefd5527dce2c5f0682228202cb2e 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketImpl.java @@ -26,7 +26,7 @@ import net.i2p.util.RandomSource; class KBucketImpl implements KBucket { private Log _log; /** set of Hash objects for the peers in the kbucket */ - private List _entries; + private final List _entries; /** we center the kbucket set on the given hash, and derive distances from this */ private Hash _local; /** include if any bits equal or higher to this bit (in big endian order) */ @@ -328,6 +328,7 @@ class KBucketImpl implements KBucket { return BigInteger.ZERO.setBit(_begin); } + @Override public String toString() { StringBuffer buf = new StringBuffer(1024); buf.append("KBucketImpl: "); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketSet.java b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketSet.java index 6b3ca79d6c3544a63139ce72fa673b820ea38c61..ddbfb06f7f176a35a51fb976aafa8877c32426f2 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KBucketSet.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KBucketSet.java @@ -138,6 +138,7 @@ class KBucketSet { _log.info(toString()); } + @Override public String toString() { BigInteger us = new BigInteger(1, _us.getData()); StringBuffer buf = new StringBuffer(1024); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java index 6ff82c6a415f66aeab9dabb9dfb3892f37106f61..9b1a1c7acdc4901b41801364b923d177a808e470 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/KademliaNetworkDatabaseFacade.java @@ -53,7 +53,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { private DataStore _ds; // hash to DataStructure mapping, persisted when necessary /** where the data store is pushing the data */ private String _dbDir; - private Set _exploreKeys; // set of Hash objects that we should search on (to fill up a bucket, not to get data) + private final Set _exploreKeys = new HashSet(64); // set of Hash objects that we should search on (to fill up a bucket, not to get data) private boolean _initialized; /** Clock independent time of when we started up */ private long _started; @@ -69,7 +69,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { * removed when the job decides to stop running. * */ - private Map _publishingLeaseSets; + private final Map _publishingLeaseSets; /** * Hash of the key currently being searched for, pointing the SearchJob that @@ -77,7 +77,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { * added on to the list of jobs fired on success/failure * */ - private Map _activeRequests; + private final Map _activeRequests; /** * The search for the given key is no longer active @@ -176,7 +176,8 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _initialized = false; _kb = null; _ds = null; - _exploreKeys = null; + _exploreKeys.clear(); // hope this doesn't cause an explosion, it shouldn't. + // _exploreKeys = null; } public void restart() { @@ -218,7 +219,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _kb = new KBucketSet(_context, ri.getIdentity().getHash()); _ds = new PersistentDataStore(_context, dbDir, this); //_ds = new TransientDataStore(); - _exploreKeys = new HashSet(64); +// _exploreKeys = new HashSet(64); _dbDir = dbDir; createHandlers(); @@ -331,6 +332,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { return rv; } + @Override public int getKnownRouters() { if (_kb == null) return 0; CountRouters count = new CountRouters(); @@ -349,11 +351,13 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } } + @Override public int getKnownLeaseSets() { if (_ds == null) return 0; return _ds.countLeaseSets(); } - + + /* aparently, not used?? should be public if used elsewhere. */ private class CountLeaseSets implements SelectionCollector { private int _count; public int size() { return _count; } @@ -364,7 +368,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { _count++; } } - + /** * This is fast and doesn't use synchronization, * but it includes both routerinfos and leasesets. @@ -868,6 +872,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { } } + @Override public void renderRouterInfoHTML(Writer out, String routerPrefix) throws IOException { StringBuffer buf = new StringBuffer(4*1024); buf.append("<h2>Network Database RouterInfo Lookup</h2>\n"); @@ -895,6 +900,7 @@ public class KademliaNetworkDatabaseFacade extends NetworkDatabaseFacade { renderStatusHTML(out, true); } + @Override public void renderStatusHTML(Writer out, boolean full) throws IOException { int size = getKnownRouters() * 512; if (full) diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java index 26c1799a36e044655d21915d293eb694802b66fd..c88897a127031dcc818d5d5302ca5ef1e19cdaaa 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/PeerSelector.java @@ -42,7 +42,7 @@ public class PeerSelector { * * @return ordered list of Hash objects */ - public List selectMostReliablePeers(Hash key, int numClosest, Set alreadyChecked, KBucketSet kbuckets) { + public List selectMostReliablePeers(Hash key, int numClosest, Set alreadyChecked, KBucketSet kbuckets) {// LINT -- Exporting non-public type through public API // get the peers closest to the key List nearest = selectNearestExplicit(key, numClosest, alreadyChecked, kbuckets); return nearest; @@ -55,7 +55,7 @@ public class PeerSelector { * * @return List of Hash for the peers selected, ordered by bucket (but intra bucket order is not defined) */ - public List selectNearestExplicit(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { + public List selectNearestExplicit(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) {// LINT -- Exporting non-public type through public API if (true) return selectNearestExplicitThin(key, maxNumRouters, peersToIgnore, kbuckets); @@ -91,7 +91,7 @@ public class PeerSelector { * * @return List of Hash for the peers selected, ordered by bucket (but intra bucket order is not defined) */ - public List selectNearestExplicitThin(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { + public List selectNearestExplicitThin(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { // LINT -- Exporting non-public type through public API if (peersToIgnore == null) peersToIgnore = new HashSet(1); peersToIgnore.add(_context.router().getRouterInfo().getIdentity().getHash()); @@ -195,7 +195,7 @@ public class PeerSelector { * * @return List of Hash for the peers selected, ordered by bucket (but intra bucket order is not defined) */ - public List selectNearest(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { + public List selectNearest(Hash key, int maxNumRouters, Set peersToIgnore, KBucketSet kbuckets) { // LINT -- Exporting non-public type through public API // sure, this may not be exactly correct per kademlia (peers on the border of a kbucket in strict kademlia // would behave differently) but I can see no reason to keep around an /additional/ more complicated algorithm. // later if/when selectNearestExplicit gets costly, we may revisit this (since kbuckets let us cache the distance() diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java index 5d0d219dbe6fe125bbb698d0bcb49724f783b114..0186bd922529992315586b6649f40c1be397d5f3 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/PersistentDataStore.java @@ -56,15 +56,18 @@ class PersistentDataStore extends TransientDataStore { writer.start(); } + @Override public void restart() { _dbDir = _facade.getDbDir(); } + @Override public DataStructure remove(Hash key) { _context.jobQueue().addJob(new RemoveJob(key)); return super.remove(key); } + @Override public void put(Hash key, DataStructure data) { if ( (data == null) || (key == null) ) return; super.put(key, data); @@ -105,7 +108,7 @@ class PersistentDataStore extends TransientDataStore { * Queue up writes, write up to 600 files every 10 minutes */ private class Writer implements Runnable { - private Map _keys; + private final Map _keys; private List _keyOrder; public Writer() { _keys = new HashMap(64); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java index ac191a96c745d7495c77371a543828bde144d703..95af13a4322fa493abc30a702f592a76e946bfd8 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/RepublishLeaseSetJob.java @@ -23,7 +23,7 @@ import net.i2p.util.Log; public class RepublishLeaseSetJob extends JobImpl { private Log _log; private final static long REPUBLISH_LEASESET_DELAY = 5*60*1000; - public final static long REPUBLISH_LEASESET_TIMEOUT = 60*1000; + public final /* static */ long REPUBLISH_LEASESET_TIMEOUT = 60*1000; private Hash _dest; private KademliaNetworkDatabaseFacade _facade; /** this is actually last attempted publish */ diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java index 868c6b1084cc7c776e60e1a7d12fbb937511ea63..161f2900128e32e9c6c92a9675535b2445a7ab95 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchJob.java @@ -47,7 +47,7 @@ class SearchJob extends JobImpl { private boolean _isLease; private Job _pendingRequeueJob; private PeerSelector _peerSelector; - private List _deferredSearches; + private final List _deferredSearches; private boolean _deferredCleared; private long _startedOn; private boolean _floodfillPeersExhausted; @@ -780,6 +780,7 @@ class SearchJob extends JobImpl { public String getName() { return "Kademlia NetDb Search"; } + @Override public String toString() { return super.toString() + " started " + DataHelper.formatDuration((getContext().clock().now() - _startedOn)) + " ago"; diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchMessageSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchMessageSelector.java index 4f3869072fef05e5568bea99325e6f7f0c131461..73b3ddf24ece64c6c882e342a5e12abe5ea08a7b 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchMessageSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchMessageSelector.java @@ -36,6 +36,7 @@ class SearchMessageSelector implements MessageSelector { _log.debug("[" + _id + "] Created: " + toString()); } + @Override public String toString() { return "Search selector [" + _id + "] looking for a reply from " + _peer + " with regards to " + _state.getTarget(); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SearchState.java b/router/java/src/net/i2p/router/networkdb/kademlia/SearchState.java index da00483ab4cca89f05d8679c0ba24ca698010da4..a12f58fd74e5f377f5a620ae7b15dc72eb589ec8 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SearchState.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SearchState.java @@ -17,12 +17,12 @@ import net.i2p.router.RouterContext; */ class SearchState { private RouterContext _context; - private HashSet _pendingPeers; + private final HashSet _pendingPeers; private HashMap _pendingPeerTimes; - private HashSet _attemptedPeers; - private HashSet _failedPeers; - private HashSet _successfulPeers; - private HashSet _repliedPeers; + private final HashSet _attemptedPeers; + private final HashSet _failedPeers; + private final HashSet _successfulPeers; + private final HashSet _repliedPeers; private Hash _searchKey; private volatile long _completed; private volatile long _started; @@ -166,6 +166,7 @@ class SearchState { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(256); buf.append("Searching for ").append(_searchKey); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/SingleSearchJob.java b/router/java/src/net/i2p/router/networkdb/kademlia/SingleSearchJob.java index 3ec005ec5ede2de0629d45ad2624468b83ae2435..74c75cb5a3a5fead94240739b3cfdc31d540b463 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/SingleSearchJob.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/SingleSearchJob.java @@ -2,7 +2,6 @@ package net.i2p.router.networkdb.kademlia; import net.i2p.data.Hash; import net.i2p.data.i2np.DatabaseLookupMessage; -import net.i2p.router.JobImpl; import net.i2p.router.RouterContext; import net.i2p.router.OutNetMessage; import net.i2p.router.TunnelInfo; @@ -23,8 +22,11 @@ class SingleSearchJob extends FloodOnlySearchJob { super(ctx, null, key, null, null, 5*1000, false); _to = to; } + @Override public String getName() { return "NetDb search key from DSRM"; } + @Override public boolean shouldProcessDSRM() { return false; } // don't loop + @Override public void runJob() { _onm = getContext().messageRegistry().registerPending(_replySelector, _onReply, _onTimeout, _timeoutMs); DatabaseLookupMessage dlm = new DatabaseLookupMessage(getContext(), true); @@ -44,8 +46,10 @@ class SingleSearchJob extends FloodOnlySearchJob { getContext().tunnelDispatcher().dispatchOutbound(dlm, outTunnel.getSendTunnelId(0), _to); _lookupsRemaining = 1; } + @Override void failed() { getContext().messageRegistry().unregisterPending(_onm); } + @Override void success() {} } diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreMessageSelector.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreMessageSelector.java index 26d4fda1317a9770f9fca79f94521c18efe91fa1..e8f0eca7ea290d66d5e21ee10a1ea1db2f9e34d2 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreMessageSelector.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreMessageSelector.java @@ -55,6 +55,7 @@ class StoreMessageSelector implements MessageSelector { } } + @Override public String toString() { StringBuffer rv = new StringBuffer(64); rv.append("Waiting for netDb confirm from ").append(_peer.toBase64()).append(", found? "); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java b/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java index e7bfe3292620ee119396511f88ca1344839ee8fe..184c337a9bc587436a37842ea35b2be1ad273514 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/StoreState.java @@ -15,12 +15,12 @@ class StoreState { private RouterContext _context; private Hash _key; private DataStructure _data; - private HashSet _pendingPeers; + private final HashSet _pendingPeers; private HashMap _pendingPeerTimes; - private HashSet _successfulPeers; - private HashSet _successfulExploratoryPeers; - private HashSet _failedPeers; - private HashSet _attemptedPeers; + private final HashSet _successfulPeers; + private final HashSet _successfulExploratoryPeers; + private final HashSet _failedPeers; + private final HashSet _attemptedPeers; private int _completeCount; private volatile long _completed; private volatile long _started; @@ -147,6 +147,7 @@ class StoreState { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(256); buf.append("Storing ").append(_key); diff --git a/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java b/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java index d2114146827258c172ed19cf1a8f9f838795317b..5fd28cebff279c4336ece63f39dc1c1fa49d2490 100644 --- a/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java +++ b/router/java/src/net/i2p/router/networkdb/kademlia/TransientDataStore.java @@ -10,9 +10,7 @@ package net.i2p.router.networkdb.kademlia; import java.util.Date; import java.util.concurrent.ConcurrentHashMap; -import java.util.HashMap; import java.util.HashSet; -import java.util.Iterator; import java.util.Map; import java.util.Set; @@ -119,14 +117,17 @@ class TransientDataStore implements DataStore { } } + @Override public int hashCode() { return DataHelper.hashCode(_data); } + @Override public boolean equals(Object obj) { if ( (obj == null) || (obj.getClass() != getClass()) ) return false; TransientDataStore ds = (TransientDataStore)obj; return DataHelper.eq(ds._data, _data); } + @Override public String toString() { StringBuffer buf = new StringBuffer(); buf.append("Transient DataStore: ").append(_data.size()).append("\nKeys: "); diff --git a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java index 87d13c16e2f03e65aab4920d29d0cf1b80400538..a1b9d7c2b14dc98503722452b618fe94f00e9185 100644 --- a/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java +++ b/router/java/src/net/i2p/router/peermanager/CapacityCalculator.java @@ -44,6 +44,7 @@ public class CapacityCalculator extends Calculator { /** the calculator estimates over a 1 hour period */ private static long ESTIMATE_PERIOD = 60*60*1000; + @Override public double calc(PeerProfile profile) { RateStat acceptStat = profile.getTunnelCreateResponseTime(); RateStat rejectStat = profile.getTunnelHistory().getRejectionRate(); diff --git a/router/java/src/net/i2p/router/peermanager/IntegrationCalculator.java b/router/java/src/net/i2p/router/peermanager/IntegrationCalculator.java index 26aa2b911b1da99ca0f316bc1e7ee62408018a0f..7fdc5fbce21aed41be4a5181fb74f0221aabba66 100644 --- a/router/java/src/net/i2p/router/peermanager/IntegrationCalculator.java +++ b/router/java/src/net/i2p/router/peermanager/IntegrationCalculator.java @@ -17,6 +17,7 @@ public class IntegrationCalculator extends Calculator { _log = context.logManager().getLog(IntegrationCalculator.class); } + @Override public double calc(PeerProfile profile) { // give more weight to recent counts long val = profile.getDbIntroduction().getRate(24*60*60*1000l).getCurrentEventCount(); diff --git a/router/java/src/net/i2p/router/peermanager/PeerManager.java b/router/java/src/net/i2p/router/peermanager/PeerManager.java index 1c265ee6768e49bb6f22fffb7f54000d26f144fc..146e6a3f9b05e7622a605d1bb970f9d9225205f2 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerManager.java +++ b/router/java/src/net/i2p/router/peermanager/PeerManager.java @@ -37,7 +37,7 @@ class PeerManager { private ProfileOrganizer _organizer; private ProfilePersistenceHelper _persistenceHelper; private List _peersByCapability[]; - private Map _capabilitiesByPeer; + private final Map _capabilitiesByPeer; public PeerManager(RouterContext context) { _context = context; diff --git a/router/java/src/net/i2p/router/peermanager/PeerProfile.java b/router/java/src/net/i2p/router/peermanager/PeerProfile.java index 2f311b52f90f0cdbeb30b1c937b9b2149180b2b0..ec05f69f61e09e5f881ec8adf7b9f79f6a546179 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerProfile.java +++ b/router/java/src/net/i2p/router/peermanager/PeerProfile.java @@ -445,7 +445,9 @@ public class PeerProfile { private boolean calculateIsFailing() { return false; } void setIsFailing(boolean val) { _isFailing = val; } + @Override public int hashCode() { return (_peer == null ? 0 : _peer.hashCode()); } + @Override public boolean equals(Object obj) { if (obj == null) return false; if (obj.getClass() != PeerProfile.class) return false; @@ -453,6 +455,7 @@ public class PeerProfile { PeerProfile prof = (PeerProfile)obj; return _peer.equals(prof.getPeer()); } + @Override public String toString() { return "Profile: " + getPeer().toBase64(); } /** diff --git a/router/java/src/net/i2p/router/peermanager/PeerTestJob.java b/router/java/src/net/i2p/router/peermanager/PeerTestJob.java index 6c7aef92721b024bdde34485753d04eabaf5ccbc..c4ba39db59447f63971753d99313809c25e5419c 100644 --- a/router/java/src/net/i2p/router/peermanager/PeerTestJob.java +++ b/router/java/src/net/i2p/router/peermanager/PeerTestJob.java @@ -50,7 +50,7 @@ public class PeerTestJob extends JobImpl { /** number of peers to test each round */ private int getTestConcurrency() { return 1; } - public void startTesting(PeerManager manager) { + public void startTesting(PeerManager manager) { // LINT -- Exporting non-public type through public API _manager = manager; _keepTesting = true; getContext().jobQueue().addJob(this); @@ -222,6 +222,7 @@ public class PeerTestJob extends JobImpl { return false; } public boolean matchFound() { return _matchFound; } + @Override public String toString() { StringBuffer buf = new StringBuffer(64); buf.append("Test peer ").append(_peer.toBase64().substring(0,4)); diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java index 1a42a244c6c1a459c19fbda3cdff133ec430ce01..089d5f1e7b4109104f255781735621ace530df07 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizer.java @@ -84,7 +84,7 @@ public class ProfileOrganizer { public static final int DEFAULT_MINIMUM_HIGH_CAPACITY_PEERS = 10; /** synchronized against this lock when updating the tier that peers are located in (and when fetching them from a peer) */ - private Object _reorganizeLock = new Object(); + private final Object _reorganizeLock = new Object(); /** incredibly weak PRNG, just used for shuffling peers. no need to waste the real PRNG on this */ private Random _random = new Random(); diff --git a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java index 2671c8be05ad8e72927bc983d97d7feaba383c49..b665f495c156d4e0c18378ff515dbf0eeff0e225 100644 --- a/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java +++ b/router/java/src/net/i2p/router/peermanager/ProfileOrganizerRenderer.java @@ -3,10 +3,8 @@ package net.i2p.router.peermanager; import java.io.IOException; import java.io.Writer; import java.text.DecimalFormat; -import java.text.DecimalFormatSymbols; import java.util.Comparator; import java.util.Iterator; -import java.util.Locale; import java.util.Set; import java.util.TreeSet; diff --git a/router/java/src/net/i2p/router/peermanager/SpeedCalculator.java b/router/java/src/net/i2p/router/peermanager/SpeedCalculator.java index a7fc9334778883cfadcbff336fc59137b9c970ca..c5ac1c3c56d26871dc33beec002063983fd5c70b 100644 --- a/router/java/src/net/i2p/router/peermanager/SpeedCalculator.java +++ b/router/java/src/net/i2p/router/peermanager/SpeedCalculator.java @@ -18,6 +18,7 @@ public class SpeedCalculator extends Calculator { public SpeedCalculator(RouterContext context) { } + @Override public double calc(PeerProfile profile) { // measures 1 minute throughput of individual tunnels double d = (profile.getPeakTunnel1mThroughputKBps()*1024d) + profile.getSpeedBonus(); diff --git a/router/java/src/net/i2p/router/transport/BandwidthLimitedInputStream.java b/router/java/src/net/i2p/router/transport/BandwidthLimitedInputStream.java index ffd041019108e6ce92b4bd7ce942e56543fdd547..f47394eff1e764932c59a137ae760ade310e72f4 100644 --- a/router/java/src/net/i2p/router/transport/BandwidthLimitedInputStream.java +++ b/router/java/src/net/i2p/router/transport/BandwidthLimitedInputStream.java @@ -41,6 +41,7 @@ public class BandwidthLimitedInputStream extends FilterInputStream { _log = context.logManager().getLog(BandwidthLimitedInputStream.class); } + @Override public int read() throws IOException { if (_pullFromOutbound) _currentRequest = _context.bandwidthLimiter().requestOutbound(1, _peerSource); @@ -56,10 +57,12 @@ public class BandwidthLimitedInputStream extends FilterInputStream { return in.read(); } + @Override public int read(byte dest[]) throws IOException { return read(dest, 0, dest.length); } + @Override public int read(byte dest[], int off, int len) throws IOException { int read = in.read(dest, off, len); if (read == -1) return -1; @@ -84,6 +87,7 @@ public class BandwidthLimitedInputStream extends FilterInputStream { } return read; } + @Override public long skip(long numBytes) throws IOException { long skip = in.skip(numBytes); @@ -105,6 +109,7 @@ public class BandwidthLimitedInputStream extends FilterInputStream { return skip; } + @Override public void close() throws IOException { synchronized (this) { if (_currentRequest != null) diff --git a/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java b/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java index df37d951416303c7c57d0cfc4c434d0ab19b3831..0327fd25ed3cdd9346816304c68bb5530f778da8 100644 --- a/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java +++ b/router/java/src/net/i2p/router/transport/BandwidthLimitedOutputStream.java @@ -37,6 +37,7 @@ public class BandwidthLimitedOutputStream extends FilterOutputStream { public FIFOBandwidthLimiter.Request getCurrentRequest() { return _currentRequest; } + @Override public void write(int val) throws IOException { if (_log.shouldLog(Log.DEBUG)) _log.debug("Writing a single byte!", new Exception("Single byte from...")); @@ -49,9 +50,11 @@ public class BandwidthLimitedOutputStream extends FilterOutputStream { _log.warn("Waiting to write a byte took too long [" + waited + "ms"); out.write(val); } + @Override public void write(byte src[]) throws IOException { write(src, 0, src.length); } + @Override public void write(byte src[], int off, int len) throws IOException { if (_log.shouldLog(Log.DEBUG)) _log.debug("Writing " + len + " bytes"); @@ -83,6 +86,7 @@ public class BandwidthLimitedOutputStream extends FilterOutputStream { } } + @Override public void close() throws IOException { synchronized (this) { if (_currentRequest != null) diff --git a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java index 0eafb8fa9755da49cfbad97329af462a56d0011b..371ab7d2fdd3e61e2803ddad604bd0ff74450bdc 100644 --- a/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java +++ b/router/java/src/net/i2p/router/transport/CommSystemFacadeImpl.java @@ -58,14 +58,18 @@ public class CommSystemFacadeImpl extends CommSystemFacade { _manager.restart(); } + @Override public int countActivePeers() { return (_manager == null ? 0 : _manager.countActivePeers()); } + @Override public int countActiveSendPeers() { return (_manager == null ? 0 : _manager.countActiveSendPeers()); } + @Override public boolean haveCapacity() { return (_manager == null ? false : _manager.haveCapacity()); } /** * Framed average clock skew of connected peers in seconds, or null if we cannot answer. * Average is calculated over the middle "percentToInclude" peers. */ + @Override public Long getFramedAveragePeerClockSkew(int percentToInclude) { if (_manager == null) { if (_log.shouldLog(Log.INFO)) @@ -121,14 +125,17 @@ public class CommSystemFacadeImpl extends CommSystemFacade { GetBidsJob.getBids(_context, this, msg); } + @Override public boolean isBacklogged(Hash dest) { return _manager.isBacklogged(dest); } + @Override public boolean isEstablished(Hash dest) { return _manager.isEstablished(dest); } + @Override public boolean wasUnreachable(Hash dest) { return _manager.wasUnreachable(dest); } @@ -137,21 +144,26 @@ public class CommSystemFacadeImpl extends CommSystemFacade { return _manager.getIP(dest); } + @Override public List getMostRecentErrorMessages() { return _manager.getMostRecentErrorMessages(); } + @Override public short getReachabilityStatus() { if (_manager == null) return CommSystemFacade.STATUS_UNKNOWN; if (_context.router().isHidden()) return CommSystemFacade.STATUS_OK; return _manager.getReachabilityStatus(); } + @Override public void recheckReachability() { _manager.recheckReachability(); } + @Override public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException { _manager.renderStatusHTML(out, urlBase, sortFlags); } + @Override public Set createAddresses() { Map addresses = null; boolean newCreated = false; @@ -225,6 +237,7 @@ public class CommSystemFacadeImpl extends CommSystemFacade { /** * UDP changed addresses, tell NTCP and restart */ + @Override public void notifyReplaceAddress(RouterAddress UDPAddr) { if (UDPAddr == null) return; diff --git a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java index 86ba394e4b27f7436fd81f4dca39bb3d75384795..b1b1b24a0dc3ce6c6bb4a8a4ba11736874f6bcba 100644 --- a/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java +++ b/router/java/src/net/i2p/router/transport/FIFOBandwidthLimiter.java @@ -12,8 +12,8 @@ import net.i2p.util.Log; public class FIFOBandwidthLimiter { private Log _log; private I2PAppContext _context; - private List _pendingInboundRequests; - private List _pendingOutboundRequests; + private final List _pendingInboundRequests; + private final List _pendingOutboundRequests; /** how many bytes we can consume for inbound transmission immediately */ private volatile int _availableInbound; /** how many bytes we can consume for outbound transmission immediately */ @@ -54,7 +54,7 @@ public class FIFOBandwidthLimiter { private static int __id = 0; - static long now() { + public /* static */ long now() { // dont use the clock().now(), since that may jump return System.currentTimeMillis(); } @@ -769,6 +769,7 @@ public class FIFOBandwidthLimiter { } public void attach(Object obj) { _attachment = obj; } public Object attachment() { return _attachment; } + @Override public String toString() { return getRequestName(); } } diff --git a/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java b/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java index c5ca48f57acf64b5e5f7fe462e49be2177bbb583..17108a8e87c2cf67dd28d8f6c4f10af24dafad0a 100644 --- a/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java +++ b/router/java/src/net/i2p/router/transport/OutboundMessageRegistry.java @@ -30,11 +30,11 @@ import net.i2p.util.SimpleTimer; public class OutboundMessageRegistry { private Log _log; /** list of currently active MessageSelector instances */ - private List _selectors; + private final List _selectors; /** map of active MessageSelector to either an OutNetMessage or a List of OutNetMessages causing it (for quick removal) */ - private Map _selectorToMessage; + private final Map _selectorToMessage; /** set of active OutNetMessage (for quick removal and selector fetching) */ - private Set _activeMessages; + private final Set _activeMessages; private CleanupTask _cleanupTask; private RouterContext _context; diff --git a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java index 0c062fa6cf2330a47f11dcd091a0638f51e8b936..24ac63c6b28bfde33a0b98eb85306bbf9c9ea5a1 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java +++ b/router/java/src/net/i2p/router/transport/ntcp/EventPumper.java @@ -33,11 +33,11 @@ public class EventPumper implements Runnable { private Log _log; private boolean _alive; private Selector _selector; - private List _bufCache; - private List _wantsRead; - private List _wantsWrite; - private List _wantsRegister; - private List _wantsConRegister; + private final List _bufCache; + private final List _wantsRead = new ArrayList(16); + private final List _wantsWrite = new ArrayList(4); + private final List _wantsRegister = new ArrayList(1); + private final List _wantsConRegister = new ArrayList(4); private NTCPTransport _transport; private long _expireIdleWriteTime; @@ -66,10 +66,10 @@ public class EventPumper implements Runnable { public void startPumping() { if (_log.shouldLog(Log.INFO)) _log.info("Starting pumper"); - _wantsRead = new ArrayList(16); - _wantsWrite = new ArrayList(4); - _wantsRegister = new ArrayList(1); - _wantsConRegister = new ArrayList(4); +// _wantsRead = new ArrayList(16); +// _wantsWrite = new ArrayList(4); +// _wantsRegister = new ArrayList(1); +// _wantsConRegister = new ArrayList(4); try { _selector = Selector.open(); _alive = true; diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPAddress.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPAddress.java index 71d395e5f0b9b0b94622c4c5ad2c91419fcae415..860634d8f5620d47b9809b27afd40ea66c36f870 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPAddress.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPAddress.java @@ -124,8 +124,10 @@ public class NTCPAddress { } } + @Override public String toString() { return _host + ":" + _port; } + @Override public int hashCode() { int rv = 0; rv += _port; @@ -136,6 +138,7 @@ public class NTCPAddress { return rv; } + @Override public boolean equals(Object val) { if ( (val != null) && (val instanceof NTCPAddress) ) { NTCPAddress addr = (NTCPAddress)val; diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java index 070caae84c9cda31c058b3f9c85ed53674c34c3d..95152c6a07519c3c00f302bb384619835c495deb 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPConnection.java @@ -56,13 +56,13 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { private SocketChannel _chan; private SelectionKey _conKey; /** list of ByteBuffer containing data we have read and are ready to process, oldest first */ - private List _readBufs; + private final List _readBufs; /** * list of ByteBuffers containing fully populated and encrypted data, ready to write, * and already cleared through the bandwidth limiter. */ - private List _writeBufs; - private List _bwRequests; + private final List _writeBufs; + private final List _bwRequests; private boolean _established; private long _establishedOn; private EstablishState _establishState; @@ -75,7 +75,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { /** * pending unprepared OutNetMessage instances */ - private List _outbound; + private final List _outbound; /** current prepared OutNetMessage, or null */ private OutNetMessage _currentOutbound; private SessionKey _sessionKey; @@ -96,7 +96,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { private long _created; private long _nextMetaTime; /** unencrypted outbound metadata buffer */ - private byte _meta[] = new byte[16]; + private final byte _meta[] = new byte[16]; private boolean _sendingMeta; /** how many consecutive sends were failed due to (estimated) send queue time */ private int _consecutiveBacklog; @@ -704,7 +704,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { private static int NUM_PREP_BUFS = 5; private static int __liveBufs = 0; private static int __consecutiveExtra; - private static List _bufs = new ArrayList(NUM_PREP_BUFS); + private final static List _bufs = new ArrayList(NUM_PREP_BUFS); private PrepBuffer acquireBuf() { synchronized (_bufs) { if (_bufs.size() > 0) { @@ -1093,11 +1093,17 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { // enqueueInfoMessage(); // this often? } + @Override public int hashCode() { return System.identityHashCode(this); } - public boolean equals(Object obj) { return obj == this; } + @Override + public boolean equals(Object obj) { + if(obj == null) return false; + if(obj.getClass() != NTCPConnection.class) return false; + return obj == this; + } - private static List _i2npHandlers = new ArrayList(4); - private static I2NPMessageHandler acquireHandler(RouterContext ctx) { + private final static List _i2npHandlers = new ArrayList(4); + private final static I2NPMessageHandler acquireHandler(RouterContext ctx) { I2NPMessageHandler rv = null; synchronized (_i2npHandlers) { if (_i2npHandlers.size() > 0) @@ -1127,7 +1133,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { } private static int MAX_DATA_READ_BUFS = 16; - private static List _dataReadBufs = new ArrayList(16); + private final static List _dataReadBufs = new ArrayList(16); private static DataBuf acquireReadBuf() { synchronized (_dataReadBufs) { if (_dataReadBufs.size() > 0) @@ -1289,6 +1295,7 @@ public class NTCPConnection implements FIFOBandwidthLimiter.CompleteListener { } } + @Override public String toString() { return "NTCP Connection to " + (_remotePeer == null ? "unknown " : _remotePeer.calculateHash().toBase64().substring(0,6)) + diff --git a/router/java/src/net/i2p/router/transport/ntcp/Reader.java b/router/java/src/net/i2p/router/transport/ntcp/Reader.java index 4b4dc3db1224551d3c1e06815ae07493eec917cb..2c017b5b6df696238ed16734d08ff375bbd593d7 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/Reader.java +++ b/router/java/src/net/i2p/router/transport/ntcp/Reader.java @@ -17,7 +17,7 @@ import net.i2p.util.Log; class Reader { private RouterContext _context; private Log _log; - private List _pendingConnections; + private final List _pendingConnections; private List _liveReads; private List _readAfterLive; private List _runners; diff --git a/router/java/src/net/i2p/router/transport/ntcp/Writer.java b/router/java/src/net/i2p/router/transport/ntcp/Writer.java index 29b7258167a046cef4baaeeedfaeb0942be23497..97823313bc281ac21da7fa74c3811c66a0358201 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/Writer.java +++ b/router/java/src/net/i2p/router/transport/ntcp/Writer.java @@ -16,7 +16,7 @@ import net.i2p.util.Log; class Writer { private RouterContext _context; private Log _log; - private List _pendingConnections; + private final List _pendingConnections; private List _liveWrites; private List _writeAfterLive; private List _runners; diff --git a/router/java/src/net/i2p/router/transport/udp/ACKSender.java b/router/java/src/net/i2p/router/transport/udp/ACKSender.java index 66aad6f4d092e211af2c99b627ec708057fc9ab7..e2a21ca4a981dcbde735e92806edb6fbbdaf0456 100644 --- a/router/java/src/net/i2p/router/transport/udp/ACKSender.java +++ b/router/java/src/net/i2p/router/transport/udp/ACKSender.java @@ -18,7 +18,7 @@ public class ACKSender implements Runnable { private UDPTransport _transport; private PacketBuilder _builder; /** list of peers (PeerState) who we have received data from but not yet ACKed to */ - private List _peersToACK; + private final List _peersToACK; private boolean _alive; /** how frequently do we want to send ACKs to a peer? */ diff --git a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java index e8731da05f0dcdfd981f5a1f8403261173e49f92..d36a3053d25e879da61e64ac6e8597fd4baa4a6a 100644 --- a/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java +++ b/router/java/src/net/i2p/router/transport/udp/EstablishmentManager.java @@ -670,7 +670,7 @@ public class EstablishmentManager { } } - public void receiveRelayResponse(RemoteHostId bob, UDPPacketReader reader) { + public void receiveRelayResponse(RemoteHostId bob, UDPPacketReader reader) {// LINT -- Exporting non-public type through public API long nonce = reader.getRelayResponseReader().readNonce(); OutboundEstablishState state = null; synchronized (_liveIntroductions) { 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 ababfa7c4cc4e33ecd9765d84afc13283b75acb3..290a5139b060c81018be0cc21b735b26e4bae32a 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java @@ -210,7 +210,7 @@ public class InboundEstablishState { public synchronized void setNextSendTime(long when) { _nextSend = when; } /** RemoteHostId, uniquely identifies an attempt */ - public RemoteHostId getRemoteHostId() { return _remoteHostId; } + public RemoteHostId getRemoteHostId() { return _remoteHostId; }// LINT -- Exporting non-public type through public API public synchronized void receiveSessionConfirmed(UDPPacketReader.SessionConfirmedReader conf) { if (_receivedIdentity == null) @@ -331,6 +331,7 @@ public class InboundEstablishState { _nextSend = _lastReceive; } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append(super.toString()); diff --git a/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java b/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java index a99929f40f6437ed201310c7e67fc79b8caf7823..6c85b9fb72960a1cb394cd1cc8c279dde43eb517 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundMessageState.java @@ -138,6 +138,7 @@ public class InboundMessageState { } public boolean receivedComplete() { return false; } + @Override public String toString() { StringBuffer buf = new StringBuffer(64); buf.append("Partial ACK of "); @@ -162,6 +163,7 @@ public class InboundMessageState { } public int getFragmentCount() { return _lastFragment+1; } + @Override public String toString() { StringBuffer buf = new StringBuffer(32); buf.append("Message: ").append(_messageId); diff --git a/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java b/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java index bbbc35caba65b430c75a4b5687078f3f53662f34..25ab9ab6a1a01b033cece91c3a2deca9a7021410 100644 --- a/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java +++ b/router/java/src/net/i2p/router/transport/udp/IntroductionManager.java @@ -25,7 +25,7 @@ public class IntroductionManager { /** map of relay tag to PeerState that should receive the introduction */ private Map _outbound; /** list of peers (PeerState) who have given us introduction tags */ - private List _inbound; + private final List _inbound; public IntroductionManager(RouterContext ctx, UDPTransport transport) { _context = ctx; @@ -157,7 +157,7 @@ public class IntroductionManager { return found; } - public void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) { + public void receiveRelayIntro(RemoteHostId bob, UDPPacketReader reader) {// LINT -- Exporting non-public type through public API if (_context.router().isHidden()) return; if (_log.shouldLog(Log.INFO)) @@ -166,7 +166,7 @@ public class IntroductionManager { _transport.send(_builder.buildHolePunch(reader)); } - public void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) { + public void receiveRelayRequest(RemoteHostId alice, UDPPacketReader reader) {// LINT -- Exporting non-public type through public API if (_context.router().isHidden()) return; long tag = reader.getRelayRequestReader().readTag(); diff --git a/router/java/src/net/i2p/router/transport/udp/MessageReceiver.java b/router/java/src/net/i2p/router/transport/udp/MessageReceiver.java index a6a75459efcf9786b641a24bd5604db64f3b1579..61c75c99e83d4a46e198f98a7a0b717e9457fce0 100644 --- a/router/java/src/net/i2p/router/transport/udp/MessageReceiver.java +++ b/router/java/src/net/i2p/router/transport/udp/MessageReceiver.java @@ -24,7 +24,7 @@ public class MessageReceiver { private Log _log; private UDPTransport _transport; /** list of messages (InboundMessageState) fully received but not interpreted yet */ - private List _completeMessages; + private final List _completeMessages; private boolean _alive; private ByteCache _cache; 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 fc424de5bf58d40200aa27201135dc34ed369033..47a54ce116a6d23f44fc357975a6351b8127dabb 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundEstablishState.java @@ -51,7 +51,7 @@ public class OutboundEstablishState { private RemoteHostId _remoteHostId; private RouterIdentity _remotePeer; private SessionKey _introKey; - private List _queuedMessages; + private final List _queuedMessages; private int _currentState; private long _introductionNonce; // intro @@ -413,7 +413,7 @@ public class OutboundEstablishState { } /** uniquely identifies an attempt */ - public RemoteHostId getRemoteHostId() { return _remoteHostId; } + public RemoteHostId getRemoteHostId() { return _remoteHostId; }// LINT -- Exporting non-public type through public API /** we have received a real data packet, so we're done establishing */ public synchronized void dataReceived() { diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java index fc6896627ed6b3be91148c232418f794ef36bb85..c9e7db02c5bf48eb08eba8af78b11f719afd738e 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageState.java @@ -286,6 +286,7 @@ public class OutboundMessageState { } } + @Override public String toString() { short sends[] = _fragmentSends; ByteArray messageBuf = _messageBuf; 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 f00587bcd1b564142e0968d9c63ef850f2ad2203..dcdf5fb6d95f95ca7ed7fd830415f85b408b8559 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketBuilder.java @@ -786,6 +786,7 @@ public class PacketBuilder { private int getOurExplicitPort() { return 0; } /** build intro packets for each of the published introducers */ + @SuppressWarnings("static-access") public UDPPacket[] buildRelayRequest(UDPTransport transport, OutboundEstablishState state, SessionKey ourIntroKey) { UDPAddress addr = state.getRemoteAddress(); int count = addr.getIntroducerCount(); @@ -878,7 +879,7 @@ public class PacketBuilder { */ private static final byte PEER_RELAY_INTRO_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_INTRO << 4); - public UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) { + public UDPPacket buildRelayIntro(RemoteHostId alice, PeerState charlie, UDPPacketReader.RelayRequestReader request) {// LINT -- Exporting non-public type through public API UDPPacket packet = UDPPacket.acquire(_context, false); byte data[] = packet.getPacket().getData(); Arrays.fill(data, 0, data.length, (byte)0x0); @@ -928,7 +929,7 @@ public class PacketBuilder { */ private static final byte PEER_RELAY_RESPONSE_FLAG_BYTE = (UDPPacket.PAYLOAD_TYPE_RELAY_RESPONSE << 4); - public UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) { + public UDPPacket buildRelayResponse(RemoteHostId alice, PeerState charlie, long nonce, SessionKey aliceIntroKey) {// LINT -- Exporting non-public type through public API InetAddress aliceAddr = null; try { aliceAddr = InetAddress.getByAddress(alice.getIP()); diff --git a/router/java/src/net/i2p/router/transport/udp/PacketHandler.java b/router/java/src/net/i2p/router/transport/udp/PacketHandler.java index 9e9cde1d34ceb5880fe2bfa2eec1497b05d9d65e..d32e8526dbef6f3b18625b95dc62f8de92f2f687 100644 --- a/router/java/src/net/i2p/router/transport/udp/PacketHandler.java +++ b/router/java/src/net/i2p/router/transport/udp/PacketHandler.java @@ -37,7 +37,7 @@ public class PacketHandler { private static final long GRACE_PERIOD = Router.CLOCK_FUDGE_FACTOR + 30*1000; - public PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager) { + public PacketHandler(RouterContext ctx, UDPTransport transport, UDPEndpoint endpoint, EstablishmentManager establisher, InboundMessageFragments inbound, PeerTestManager testManager, IntroductionManager introManager) {// LINT -- Exporting non-public type through public API _context = ctx; _log = ctx.logManager().getLog(PacketHandler.class); _transport = transport; diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index f3cd1e269131b6ac9c6a0f347548fd4323b2b4ce..ff1f64f11b4e31915cc683ee1820d0ad6fae39c6 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -74,13 +74,13 @@ public class PeerState { /** when did we last have a failed send (beginning of period) */ private long _lastFailedSendPeriod; /** list of messageIds (Long) that we have received but not yet sent */ - private List _currentACKs; + private final List _currentACKs; /** * list of the most recent messageIds (Long) that we have received and sent * an ACK for. We keep a few of these around to retransmit with _currentACKs, * hopefully saving some spurious retransmissions */ - private List _currentACKsResend; + private final List _currentACKsResend; /** when did we last send ACKs to the peer? */ private volatile long _lastACKSend; /** when did we decide we need to ACK to this peer? */ @@ -169,9 +169,9 @@ public class PeerState { private long _packetsReceived; /** list of InboundMessageState for active message */ - private Map _inboundMessages; + private final Map _inboundMessages; /** list of OutboundMessageState */ - private List _outboundMessages; + private final List _outboundMessages; /** which outbound message is currently being retransmitted */ private OutboundMessageState _retransmitter; @@ -802,6 +802,7 @@ public class PeerState { public long getMessageId() { return _msgId; } public boolean received(int fragmentNum) { return true; } public boolean receivedComplete() { return true; } + @Override public String toString() { return "Full ACK of " + _msgId; } } @@ -1010,7 +1011,7 @@ public class PeerState { return MAX_RTO; } - public RemoteHostId getRemoteHostId() { return _remoteHostId; } + public RemoteHostId getRemoteHostId() { return _remoteHostId; }// LINT -- Exporting non-public type through public API public int add(OutboundMessageState state) { if (_dead) { @@ -1560,6 +1561,7 @@ public class PeerState { } */ + @Override public String toString() { StringBuffer buf = new StringBuffer(64); buf.append(_remoteHostId.toString()); diff --git a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java index 35c5511be4be4bc994ced8a0f24ba4408ad3b039..797cb8d4b7b14f1baf32515fb92f16103f8025a1 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerTestManager.java @@ -27,7 +27,7 @@ class PeerTestManager { private UDPTransport _transport; private PacketBuilder _packetBuilder; /** map of Long(nonce) to PeerTestState for tests currently in progress */ - private Map _activeTests; + private final Map _activeTests; /** current test we are running, or null */ private PeerTestState _currentTest; private boolean _currentTestComplete; diff --git a/router/java/src/net/i2p/router/transport/udp/PeerTestState.java b/router/java/src/net/i2p/router/transport/udp/PeerTestState.java index 57dc648d84c9981e8f11fb0a3b016c54032ad7c1..625bf648a7c9e1079ebf12c93ff18a6bcf8b300c 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerTestState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerTestState.java @@ -96,6 +96,7 @@ class PeerTestState { public int getPacketsRelayed() { return _packetsRelayed; } public void incrementPacketsRelayed() { ++_packetsRelayed; } + @Override public synchronized String toString() { StringBuffer buf = new StringBuffer(512); buf.append("Role: "); diff --git a/router/java/src/net/i2p/router/transport/udp/RemoteHostId.java b/router/java/src/net/i2p/router/transport/udp/RemoteHostId.java index 117f8c5636003e52ca21d231f526f2733ce39a62..4bb2338f1f5e7e6ce86525936ea513cb7b3032b3 100644 --- a/router/java/src/net/i2p/router/transport/udp/RemoteHostId.java +++ b/router/java/src/net/i2p/router/transport/udp/RemoteHostId.java @@ -26,6 +26,7 @@ final class RemoteHostId { public int getPort() { return _port; } public byte[] getPeerHash() { return _peerHash; } + @Override public int hashCode() { int rv = 0; for (int i = 0; _ip != null && i < _ip.length; i++) @@ -36,6 +37,7 @@ final class RemoteHostId { return rv; } + @Override public boolean equals(Object obj) { if (obj == null) throw new NullPointerException("obj is null"); @@ -45,6 +47,7 @@ final class RemoteHostId { return (_port == id.getPort()) && DataHelper.eq(_ip, id.getIP()) && DataHelper.eq(_peerHash, id.getPeerHash()); } + @Override public String toString() { return toString(true); } public String toString(boolean includePort) { if (_ip != null) { diff --git a/router/java/src/net/i2p/router/transport/udp/TimedWeightedPriorityMessageQueue.java b/router/java/src/net/i2p/router/transport/udp/TimedWeightedPriorityMessageQueue.java index b28fb9101e0ff40ca58a1f5eac3d3c076b3facd9..9ff5a19503a040e9d4e198cf10bc9a475276940e 100644 --- a/router/java/src/net/i2p/router/transport/udp/TimedWeightedPriorityMessageQueue.java +++ b/router/java/src/net/i2p/router/transport/udp/TimedWeightedPriorityMessageQueue.java @@ -33,7 +33,7 @@ public class TimedWeightedPriorityMessageQueue implements MessageQueue, Outbound /** how many bytes total have been pulled off the given queue */ private long _bytesTransferred[]; /** lock to notify message enqueue/removal (and block for getNext()) */ - private Object _nextLock; + private final Object _nextLock; /** have we shut down or are we still alive? */ private boolean _alive; /** which queue should we pull out of next */ diff --git a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java index df8b024f587126149b3da94063c9a9d02aa8394c..723817e0104b526a9e6fbcaf898c7d2c758d515d 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPAddress.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPAddress.java @@ -40,6 +40,7 @@ public class UDPAddress { parse(addr); } + @Override public String toString() { StringBuffer rv = new StringBuffer(64); if (_introHosts != null) { diff --git a/router/java/src/net/i2p/router/transport/udp/UDPFlooder.java b/router/java/src/net/i2p/router/transport/udp/UDPFlooder.java index dbcd8dfda4362dc8df28190e6c9d0a56d2e72a4f..14dfced396ccbe7d0afad19161158e4e03675d63 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPFlooder.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPFlooder.java @@ -18,7 +18,7 @@ class UDPFlooder implements Runnable { private RouterContext _context; private Log _log; private UDPTransport _transport; - private List _peers; + private final List _peers; private boolean _alive; private static final byte _floodData[] = new byte[4096]; @@ -37,9 +37,10 @@ class UDPFlooder implements Runnable { _peers.notifyAll(); } } + @SuppressWarnings("empty-statement") public void removePeer(PeerState peer) { synchronized (_peers) { - while (_peers.remove(peer)) + while (_peers.remove(peer)) // can this be written better? ;// loops until its empty _peers.notifyAll(); } diff --git a/router/java/src/net/i2p/router/transport/udp/UDPPacket.java b/router/java/src/net/i2p/router/transport/udp/UDPPacket.java index 46d8ae3c1490ca878f1e678e248b67b07db7d2f9..d6387f7c4e8407d0a4dec8738270f562140450dc 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPPacket.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPPacket.java @@ -129,7 +129,7 @@ public class UDPPacket { int getFragmentCount() { return _fragmentCount; } void setFragmentCount(int count) { _fragmentCount = count; } - public RemoteHostId getRemoteHost() { + public RemoteHostId getRemoteHost() {// LINT -- Exporting non-public type through public API if (_remoteHost == null) { long before = System.currentTimeMillis(); InetAddress addr = _packet.getAddress(); @@ -238,6 +238,7 @@ public class UDPPacket { /** how many times we tried to validate the packet */ int getValidateCount() { return _validateCount; } + @Override public String toString() { verifyNotReleased(); StringBuffer buf = new StringBuffer(64); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java b/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java index 159c21ae6042c04ae3f5444d471daf205795059c..5bff1789d77d92a016fa8433792fb05add487cc7 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPPacketReader.java @@ -105,6 +105,7 @@ public class UDPPacketReader { public RelayIntroReader getRelayIntroReader() { return _relayIntroReader; } public RelayResponseReader getRelayResponseReader() { return _relayResponseReader; } + @Override public String toString() { switch (readPayloadType()) { case UDPPacket.PAYLOAD_TYPE_DATA: @@ -398,6 +399,7 @@ public class UDPPacketReader { return ((_message[flagOffset] & flag) != 0); } + @Override public String toString() { StringBuffer buf = new StringBuffer(256); long msAgo = _context.clock().now() - readTimestamp()*1000; @@ -502,6 +504,7 @@ public class UDPPacketReader { int flagNum = fragmentNum % 7; return (_message[byteNum] & (1 << flagNum)) != 0x0; } + @Override public String toString() { StringBuffer buf = new StringBuffer(64); buf.append("Read partial ACK of "); diff --git a/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java b/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java index 3535484c9f4d8df1f13b6e546d96b7f13e8443de..72fdbbf0e45aba4de2b2d66855e277dcda7a17a4 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPReceiver.java @@ -25,7 +25,7 @@ public class UDPReceiver { private Log _log; private DatagramSocket _socket; private String _name; - private List _inboundQueue; + private final List _inboundQueue; private boolean _keepRunning; private Runner _runner; private UDPTransport _transport; diff --git a/router/java/src/net/i2p/router/transport/udp/UDPSender.java b/router/java/src/net/i2p/router/transport/udp/UDPSender.java index 141b8789282d32db7f44e09aa8e732a2551ead4c..dbc78e8a01c61e262568be6566d69a176108daee 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPSender.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPSender.java @@ -20,7 +20,7 @@ public class UDPSender { private Log _log; private DatagramSocket _socket; private String _name; - private List _outboundQueue; + private final List _outboundQueue; private boolean _keepRunning; private Runner _runner; diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index 289e42ba3533ac48acc25c5849be923267292382..b6e7e32b72237b26bbe429a7d586e946057d95f3 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -40,13 +40,13 @@ import net.i2p.util.SimpleTimer; * */ public class UDPTransport extends TransportImpl implements TimedWeightedPriorityMessageQueue.FailedListener { - private RouterContext _context; + private RouterContext _context; // LINT -- field hides a field private Log _log; private UDPEndpoint _endpoint; /** Peer (Hash) to PeerState */ - private Map _peersByIdent; + private final Map _peersByIdent; /** RemoteHostId to PeerState */ - private Map _peersByRemoteHost; + private final Map _peersByRemoteHost; private PacketHandler _handler; private EstablishmentManager _establisher; private MessageQueue _outboundMessages; @@ -90,7 +90,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private TransportBid _transientFail; /** list of RemoteHostId for peers whose packets we want to drop outright */ - private List _dropList; + private final List _dropList; private int _expireTimeout; @@ -437,7 +437,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority * get the state for the peer at the given remote host/port, or null * if no state exists */ - public PeerState getPeerState(RemoteHostId hostInfo) { + public PeerState getPeerState(RemoteHostId hostInfo) { // LINT -- Exporting non-public type through public API synchronized (_peersByRemoteHost) { return (PeerState)_peersByRemoteHost.get(hostInfo); } @@ -589,12 +589,14 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return true; } + @Override public RouterAddress getCurrentAddress() { if (needsRebuild()) rebuildExternalAddress(false); return super.getCurrentAddress(); } + @Override public void messageReceived(I2NPMessage inMsg, RouterIdentity remoteIdent, Hash remoteIdentHash, long msToReceive, int bytesReceived) { if (inMsg.getType() == DatabaseStoreMessage.MESSAGE_TYPE) { DatabaseStoreMessage dsm = (DatabaseStoreMessage)inMsg; @@ -671,7 +673,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } } - public boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } } + public boolean isInDropList(RemoteHostId peer) { synchronized (_dropList) { return _dropList.contains(peer); } }// LINT -- Exporting non-public type through public API void dropPeer(Hash peer, boolean shouldShitlist, String why) { PeerState state = getPeerState(peer); @@ -933,6 +935,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static final int MIN_EXPIRE_TIMEOUT = 10*60*1000; public String getStyle() { return STYLE; } + @Override public void send(OutNetMessage msg) { if (msg == null) return; if (msg.getTarget() == null) return; @@ -1237,6 +1240,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority super.afterSend(m, true); } + @Override public int countActivePeers() { long now = _context.clock().now(); int active = 0; @@ -1253,6 +1257,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return active; } + @Override public int countActiveSendPeers() { long now = _context.clock().now(); int active = 0; @@ -1269,6 +1274,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return active; } + @Override public boolean isEstablished(Hash dest) { return getPeerState(dest) != null; } @@ -1279,6 +1285,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } } + @Override public boolean haveCapacity() { synchronized (_peersByIdent) { return _peersByIdent.size() < getMaxConnections() * 4 / 5; @@ -1289,6 +1296,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority * Return our peer clock skews on this transport. * Vector composed of Long, each element representing a peer skew in seconds. */ + @Override public Vector getClockSkews() { Vector skews = new Vector(); @@ -1414,6 +1422,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class IdleInComparator extends PeerComparator { private static final IdleInComparator _instance = new IdleInComparator(); public static final IdleInComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = r.getLastReceiveTime() - l.getLastReceiveTime(); if (rv == 0) // fallback on alpha @@ -1425,6 +1434,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class IdleOutComparator extends PeerComparator { private static final IdleOutComparator _instance = new IdleOutComparator(); public static final IdleOutComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = r.getLastSendTime() - l.getLastSendTime(); if (rv == 0) // fallback on alpha @@ -1436,6 +1446,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class RateInComparator extends PeerComparator { private static final RateInComparator _instance = new RateInComparator(); public static final RateInComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getReceiveBps() - r.getReceiveBps(); if (rv == 0) // fallback on alpha @@ -1447,6 +1458,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class RateOutComparator extends PeerComparator { private static final RateOutComparator _instance = new RateOutComparator(); public static final RateOutComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getSendBps() - r.getSendBps(); if (rv == 0) // fallback on alpha @@ -1458,6 +1470,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class UptimeComparator extends PeerComparator { private static final UptimeComparator _instance = new UptimeComparator(); public static final UptimeComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = r.getKeyEstablishedTime() - l.getKeyEstablishedTime(); if (rv == 0) // fallback on alpha @@ -1469,6 +1482,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class SkewComparator extends PeerComparator { private static final SkewComparator _instance = new SkewComparator(); public static final SkewComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = Math.abs(l.getClockSkew()) - Math.abs(r.getClockSkew()); if (rv == 0) // fallback on alpha @@ -1480,6 +1494,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class CwndComparator extends PeerComparator { private static final CwndComparator _instance = new CwndComparator(); public static final CwndComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getSendWindowBytes() - r.getSendWindowBytes(); if (rv == 0) // fallback on alpha @@ -1491,6 +1506,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class SsthreshComparator extends PeerComparator { private static final SsthreshComparator _instance = new SsthreshComparator(); public static final SsthreshComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getSlowStartThreshold() - r.getSlowStartThreshold(); if (rv == 0) // fallback on alpha @@ -1502,6 +1518,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class RTTComparator extends PeerComparator { private static final RTTComparator _instance = new RTTComparator(); public static final RTTComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getRTT() - r.getRTT(); if (rv == 0) // fallback on alpha @@ -1513,6 +1530,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class DevComparator extends PeerComparator { private static final DevComparator _instance = new DevComparator(); public static final DevComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getRTTDeviation() - r.getRTTDeviation(); if (rv == 0) // fallback on alpha @@ -1524,6 +1542,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class RTOComparator extends PeerComparator { private static final RTOComparator _instance = new RTOComparator(); public static final RTOComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getRTO() - r.getRTO(); if (rv == 0) // fallback on alpha @@ -1535,6 +1554,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class MTUComparator extends PeerComparator { private static final MTUComparator _instance = new MTUComparator(); public static final MTUComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getMTU() - r.getMTU(); if (rv == 0) // fallback on alpha @@ -1546,6 +1566,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class SendCountComparator extends PeerComparator { private static final SendCountComparator _instance = new SendCountComparator(); public static final SendCountComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getPacketsTransmitted() - r.getPacketsTransmitted(); if (rv == 0) // fallback on alpha @@ -1557,6 +1578,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class RecvCountComparator extends PeerComparator { private static final RecvCountComparator _instance = new RecvCountComparator(); public static final RecvCountComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getPacketsReceived() - r.getPacketsReceived(); if (rv == 0) // fallback on alpha @@ -1568,6 +1590,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class ResendComparator extends PeerComparator { private static final ResendComparator _instance = new ResendComparator(); public static final ResendComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getPacketsRetransmitted() - r.getPacketsRetransmitted(); if (rv == 0) // fallback on alpha @@ -1579,6 +1602,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static class DupComparator extends PeerComparator { private static final DupComparator _instance = new DupComparator(); public static final DupComparator instance() { return _instance; } + @Override protected int compare(PeerState l, PeerState r) { long rv = l.getPacketsReceivedDuplicate() - r.getPacketsReceivedDuplicate(); if (rv == 0) // fallback on alpha @@ -1623,6 +1647,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority //public void renderStatusHTML(Writer out) throws IOException { renderStatusHTML(out, 0); } public void renderStatusHTML(Writer out, int sortFlags) throws IOException {} + @Override public void renderStatusHTML(Writer out, String urlBase, int sortFlags) throws IOException { TreeSet peers = new TreeSet(getComparator(sortFlags)); synchronized (_peersByIdent) { @@ -1965,12 +1990,14 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority */ private class SharedBid extends TransportBid { public SharedBid(int ms) { super(); setLatencyMs(ms); } + @Override public Transport getTransport() { return UDPTransport.this; } + @Override public String toString() { return "UDP bid @ " + getLatencyMs(); } } private class ExpirePeerEvent implements SimpleTimer.TimedEvent { - private List _expirePeers; + private final List _expirePeers; private List _expireBuffer; private boolean _alive; public ExpirePeerEvent() { @@ -2097,11 +2124,12 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return _reachabilityStatus; } + @Override public void recheckReachability() { _testEvent.runTest(); } - public PeerState pickTestPeer(RemoteHostId dontInclude) { + public PeerState pickTestPeer(RemoteHostId dontInclude) {// LINT -- Exporting non-public type through public API List peers = null; synchronized (_peersByIdent) { peers = new ArrayList(_peersByIdent.values()); diff --git a/router/java/src/net/i2p/router/tunnel/BatchedPreprocessor.java b/router/java/src/net/i2p/router/tunnel/BatchedPreprocessor.java index 6d2e7b7396a652cfefb8c851a1e6eca02f726b25..2de7868dbfa2b21dca5a24cda9c75fafede5f0e2 100644 --- a/router/java/src/net/i2p/router/tunnel/BatchedPreprocessor.java +++ b/router/java/src/net/i2p/router/tunnel/BatchedPreprocessor.java @@ -49,6 +49,7 @@ public class BatchedPreprocessor extends TrivialPreprocessor { private static final int FORCE_BATCH_FLUSH = 50; /** how long do we want to wait before flushing */ + @Override public long getDelayAmount() { return getDelayAmount(true); } private long getDelayAmount(boolean shouldStat) { long rv = -1; @@ -62,6 +63,7 @@ public class BatchedPreprocessor extends TrivialPreprocessor { return rv; } + @Override public boolean preprocessQueue(List pending, TunnelGateway.Sender sender, TunnelGateway.Receiver rec) { StringBuffer timingBuf = null; if (_log.shouldLog(Log.DEBUG)) { diff --git a/router/java/src/net/i2p/router/tunnel/BatchedRouterPreprocessor.java b/router/java/src/net/i2p/router/tunnel/BatchedRouterPreprocessor.java index 0be137b4512e190b0e52bcddcee95f111e7dc499..2e5e988855b5d05b072a72ae15fc28d0e0d4d356 100644 --- a/router/java/src/net/i2p/router/tunnel/BatchedRouterPreprocessor.java +++ b/router/java/src/net/i2p/router/tunnel/BatchedRouterPreprocessor.java @@ -57,6 +57,7 @@ public class BatchedRouterPreprocessor extends BatchedPreprocessor { } /** how long should we wait before flushing */ + @Override protected long getSendDelay() { String freq = null; if (_config != null) { @@ -77,6 +78,7 @@ public class BatchedRouterPreprocessor extends BatchedPreprocessor { return DEFAULT_BATCH_FREQUENCY; } + @Override protected void notePreprocessing(long messageId, int numFragments, int totalLength, List messageIds, String msg) { if (_config != null) _routerContext.messageHistory().fragmentMessage(messageId, numFragments, totalLength, messageIds, _config, msg); diff --git a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java index 99b66c0c8b805e6f1ed1e3027539c33fa97036b0..7261845c1a90892c9ba5b7384bc14b0bb5b4c521 100644 --- a/router/java/src/net/i2p/router/tunnel/FragmentHandler.java +++ b/router/java/src/net/i2p/router/tunnel/FragmentHandler.java @@ -26,7 +26,7 @@ import net.i2p.util.SimpleTimer; public class FragmentHandler { private I2PAppContext _context; private Log _log; - private Map _fragmentedMessages; + private final Map _fragmentedMessages; private DefragmentedReceiver _receiver; private int _completed; private int _failed; diff --git a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java index b0203f540d117ee52bcc12e41d422b1bb5d2c8a8..94e2c8c2487ccaf00cbe9b79f0de66f6e5d9d9cf 100644 --- a/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java +++ b/router/java/src/net/i2p/router/tunnel/FragmentedMessage.java @@ -273,6 +273,7 @@ public class FragmentedMessage { } } + @Override public String toString() { StringBuffer buf = new StringBuffer(128); buf.append("Fragments for ").append(_messageId).append(": "); diff --git a/router/java/src/net/i2p/router/tunnel/HashSetIVValidator.java b/router/java/src/net/i2p/router/tunnel/HashSetIVValidator.java index aea18dc3f645ddead8f2c01d85b061cafaca9329..c9241fccef255459fb89f16c3c3be46fe3cb8fac 100644 --- a/router/java/src/net/i2p/router/tunnel/HashSetIVValidator.java +++ b/router/java/src/net/i2p/router/tunnel/HashSetIVValidator.java @@ -9,7 +9,7 @@ import net.i2p.data.DataHelper; * waste lots of RAM */ class HashSetIVValidator implements IVValidator { - private HashSet _received; + private final HashSet _received; public HashSetIVValidator() { _received = new HashSet(); diff --git a/router/java/src/net/i2p/router/tunnel/HopConfig.java b/router/java/src/net/i2p/router/tunnel/HopConfig.java index 740cf9025ce502517c9156cedb8ad782150a2fd7..ab0c32a3f35a455c8650d1bb8a02d0a57497e3aa 100644 --- a/router/java/src/net/i2p/router/tunnel/HopConfig.java +++ b/router/java/src/net/i2p/router/tunnel/HopConfig.java @@ -135,6 +135,7 @@ public class HopConfig { return rv; } + @Override public String toString() { StringBuffer buf = new StringBuffer(64); if (_receiveTunnelId != null) { diff --git a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java index c5c46c365799273b468470514009162026740fdb..b1b03fb22fb3e59bcafb2ff3784649778be7c20f 100644 --- a/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java +++ b/router/java/src/net/i2p/router/tunnel/InboundMessageDistributor.java @@ -10,7 +10,6 @@ import net.i2p.data.i2np.DeliveryStatusMessage; import net.i2p.data.i2np.GarlicMessage; import net.i2p.data.i2np.I2NPMessage; import net.i2p.data.i2np.TunnelBuildReplyMessage; -import net.i2p.data.i2np.TunnelGatewayMessage; import net.i2p.router.ClientMessage; import net.i2p.router.RouterContext; import net.i2p.router.TunnelInfo; diff --git a/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java b/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java index a2cac90bb9a8f9b7ae350e98bbfc5c728add4538..9364092df5db80e302427e905300879a4de2bfe3 100644 --- a/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java +++ b/router/java/src/net/i2p/router/tunnel/PumpedTunnelGateway.java @@ -32,7 +32,7 @@ import net.i2p.util.Log; * */ public class PumpedTunnelGateway extends TunnelGateway { - private List _prequeue; + private final List _prequeue; private TunnelGatewayPumper _pumper; /** @@ -58,6 +58,7 @@ public class PumpedTunnelGateway extends TunnelGateway { * @param toRouter router to send to after the endpoint (or null for endpoint processing) * @param toTunnel tunnel to send to after the endpoint (or null for endpoint or router processing) */ + @Override public void add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel) { _messagesSent++; Pending cur = new PendingImpl(msg, toRouter, toTunnel); diff --git a/router/java/src/net/i2p/router/tunnel/RouterFragmentHandler.java b/router/java/src/net/i2p/router/tunnel/RouterFragmentHandler.java index 7caa3271e6263f3c36d5619260b00cf2b0f98008..acb4231d27cf6989435576bf33deb744af384268 100644 --- a/router/java/src/net/i2p/router/tunnel/RouterFragmentHandler.java +++ b/router/java/src/net/i2p/router/tunnel/RouterFragmentHandler.java @@ -16,16 +16,19 @@ public class RouterFragmentHandler extends FragmentHandler { _log = context.logManager().getLog(RouterFragmentHandler.class); } + @Override protected void noteReception(long messageId, int fragmentId, Object status) { if (_log.shouldLog(Log.INFO)) _log.info("Received fragment " + fragmentId + " for message " + messageId + ": " + status); _routerContext.messageHistory().receiveTunnelFragment(messageId, fragmentId, status); } + @Override protected void noteCompletion(long messageId) { if (_log.shouldLog(Log.INFO)) _log.info("Received complete message " + messageId); _routerContext.messageHistory().receiveTunnelFragmentComplete(messageId); } + @Override protected void noteFailure(long messageId, String status) { if (_log.shouldLog(Log.INFO)) _log.info("Dropped message " + messageId + ": " + status); diff --git a/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java b/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java index 83f5fbf94e0e6418f2556989a9079fd6b480f2b4..72dccf45c19a9775aaff444a93baeb70cea64b11 100644 --- a/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java +++ b/router/java/src/net/i2p/router/tunnel/TunnelCreatorConfig.java @@ -163,6 +163,7 @@ public class TunnelCreatorConfig implements TunnelInfo { _failures = 0; } + @Override public String toString() { // H0:1235-->H1:2345-->H2:2345 StringBuffer buf = new StringBuffer(128); diff --git a/router/java/src/net/i2p/router/tunnel/TunnelGateway.java b/router/java/src/net/i2p/router/tunnel/TunnelGateway.java index a9ed0cc1e76df912be1ef39f6c418cb838be4e93..077a43b7de30c3886c793ac5c0b727ded695773f 100644 --- a/router/java/src/net/i2p/router/tunnel/TunnelGateway.java +++ b/router/java/src/net/i2p/router/tunnel/TunnelGateway.java @@ -36,13 +36,13 @@ import net.i2p.util.SimpleTimer; public class TunnelGateway { protected I2PAppContext _context; protected Log _log; - protected List _queue; + protected final List _queue; protected QueuePreprocessor _preprocessor; protected Sender _sender; protected Receiver _receiver; protected long _lastFlush; protected int _flushFrequency; - protected DelayedFlush _delayedFlush; + protected DelayedFlush _delayedFlush;// LINT -- Exporting non-public type through public API protected int _messagesSent; /** @@ -236,6 +236,7 @@ public class TunnelGateway { super(message, toRouter, toTunnel, _context.clock().now()); } + @Override public String toString() { StringBuffer buf = new StringBuffer(64); buf.append("Message ").append(_messageId).append(" on "); @@ -257,6 +258,7 @@ public class TunnelGateway { return buf.toString(); } + @Override public long getLifetime() { return _context.clock().now()-_created; } } diff --git a/router/java/src/net/i2p/router/tunnel/TunnelGatewayPumper.java b/router/java/src/net/i2p/router/tunnel/TunnelGatewayPumper.java index 7e808199dea1f2b49cee2e3aaaa9661e2ad1ad3e..b840dad287bb154f7854697ed292dc95aafd62f0 100644 --- a/router/java/src/net/i2p/router/tunnel/TunnelGatewayPumper.java +++ b/router/java/src/net/i2p/router/tunnel/TunnelGatewayPumper.java @@ -14,7 +14,7 @@ import net.i2p.util.Log; public class TunnelGatewayPumper implements Runnable { private RouterContext _context; private Log _log; - private List _wantsPumping; + private final List _wantsPumping; private boolean _stop; /** Creates a new instance of TunnelGatewayPumper */ diff --git a/router/java/src/net/i2p/router/tunnel/TunnelGatewayZeroHop.java b/router/java/src/net/i2p/router/tunnel/TunnelGatewayZeroHop.java index 1abceb9f25e85afccfd3a76e0ca77b67da205c04..aefe9670decd0f42b5b2b88b14b88b6aac12948f 100644 --- a/router/java/src/net/i2p/router/tunnel/TunnelGatewayZeroHop.java +++ b/router/java/src/net/i2p/router/tunnel/TunnelGatewayZeroHop.java @@ -12,8 +12,8 @@ import net.i2p.util.Log; * */ public class TunnelGatewayZeroHop extends TunnelGateway { - private RouterContext _context; - private Log _log; + private RouterContext _context; // LINT -- field hides a field + private Log _log; // LINT -- field hides a field private TunnelCreatorConfig _config; private OutboundMessageDistributor _outDistributor; private InboundMessageDistributor _inDistributor; @@ -37,6 +37,7 @@ public class TunnelGatewayZeroHop extends TunnelGateway { * * @param msg message received to be sent through the tunnel */ + @Override public void add(TunnelGatewayMessage msg) { add(msg.getMessage(), null, null); } @@ -50,6 +51,7 @@ public class TunnelGatewayZeroHop extends TunnelGateway { * @param toRouter router to send to after the endpoint (or null for endpoint processing) * @param toTunnel tunnel to send to after the endpoint (or null for endpoint or router processing) */ + @Override public void add(I2NPMessage msg, Hash toRouter, TunnelId toTunnel) { if (_log.shouldLog(Log.DEBUG)) _log.debug("zero hop gateway: distribute " + (_config.isInbound() ? "inbound " : " outbound ") diff --git a/router/java/src/net/i2p/router/tunnel/TunnelParticipant.java b/router/java/src/net/i2p/router/tunnel/TunnelParticipant.java index 5fc8708572147fdf31634d91341c94c7a29c07a6..5e4a92641bb4e5adf99cb72851be12f0790f59ed 100644 --- a/router/java/src/net/i2p/router/tunnel/TunnelParticipant.java +++ b/router/java/src/net/i2p/router/tunnel/TunnelParticipant.java @@ -218,6 +218,7 @@ public class TunnelParticipant { } } + @Override public String toString() { if (_config != null) { StringBuffer buf = new StringBuffer(64); diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java index 06a66635432e51e055e3765a1360bfcb1686c888..05b53fbf9b4bc9874ed5d497fd7b3c9978d2b11d 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java @@ -21,11 +21,12 @@ import net.i2p.util.Log; * */ class BuildExecutor implements Runnable { + private final List _recentBuildIds = new ArrayList(100); private RouterContext _context; private Log _log; private TunnelPoolManager _manager; /** list of TunnelCreatorConfig elements of tunnels currently being built */ - private List _currentlyBuilding; + private final List _currentlyBuilding; private boolean _isRunning; private BuildHandler _handler; private boolean _repoll; @@ -50,7 +51,7 @@ class BuildExecutor implements Runnable { // Get stat manager, get recognized bandwidth tiers StatManager statMgr = _context.statManager(); - String bwTiers = _context.router().getRouterInfo().BW_CAPABILITY_CHARS; + String bwTiers = _context.router().getRouterInfo().BW_CAPABILITY_CHARS; // LINT -- Accessing static field "BW_CAPABILITY_CHARS" // For each bandwidth tier, create tunnel build agree/reject/expire stats for (int i = 0; i < bwTiers.length(); i++) { String bwTier = String.valueOf(bwTiers.charAt(i)); @@ -423,7 +424,6 @@ class BuildExecutor implements Runnable { } } - private List _recentBuildIds = new ArrayList(100); public boolean wasRecentlyBuilding(long replyId) { synchronized (_recentBuildIds) { return _recentBuildIds.contains(new Long(replyId)); diff --git a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java index 0699d3ff4d04b0df98485f266c3c08f738161d00..38350544e68ac803fb74bf3222c9cc25b737f78b 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildHandler.java @@ -39,11 +39,11 @@ class BuildHandler { private Job _buildMessageHandlerJob; private Job _buildReplyMessageHandlerJob; /** list of BuildMessageState, oldest first */ - private List _inboundBuildMessages; + private final List _inboundBuildMessages; /** list of BuildReplyMessageState, oldest first */ - private List _inboundBuildReplyMessages; + private final List _inboundBuildReplyMessages; /** list of BuildEndMessageState, oldest first */ - private List _inboundBuildEndMessages; + private final List _inboundBuildEndMessages; private BuildMessageProcessor _processor; public BuildHandler(RouterContext ctx, BuildExecutor exec) { @@ -607,7 +607,7 @@ class BuildHandler { // send it to the reply tunnel on the reply peer within a new TunnelBuildReplyMessage // (enough layers jrandom?) TunnelBuildReplyMessage replyMsg = new TunnelBuildReplyMessage(_context); - for (int i = 0; i < state.msg.RECORD_COUNT; i++) + for (int i = 0; i < state.msg.RECORD_COUNT; i++) // LINT -- Accessing Static field "RECORD_COUNT" replyMsg.setRecord(i, state.msg.getRecord(i)); replyMsg.setUniqueId(req.readReplyMessageId()); replyMsg.setMessageExpiration(_context.clock().now() + 10*1000); diff --git a/router/java/src/net/i2p/router/tunnel/pool/PooledTunnelCreatorConfig.java b/router/java/src/net/i2p/router/tunnel/pool/PooledTunnelCreatorConfig.java index 76f2c3c256abd35451ff8072a2a986fd0bd30062..3cc4906ea93a3c1ef680519f218d0eb50a9effbf 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/PooledTunnelCreatorConfig.java +++ b/router/java/src/net/i2p/router/tunnel/pool/PooledTunnelCreatorConfig.java @@ -31,6 +31,7 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig { } // calls TestJob + @Override public void testSuccessful(int ms) { if (_testJob != null) _testJob.testSuccessful(ms); @@ -47,6 +48,7 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig { /** * The tunnel failed a test, so (maybe) stop using it */ + @Override public boolean tunnelFailed() { boolean rv = super.tunnelFailed(); if (!rv) { @@ -60,6 +62,7 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig { return rv; } + @Override public Properties getOptions() { if (_pool == null) return null; return _pool.getSettings().getUnknownOptions(); @@ -75,7 +78,8 @@ public class PooledTunnelCreatorConfig extends TunnelCreatorConfig { } public TunnelPool getTunnelPool() { return _pool; } - public void setTestJob(TestJob job) { _testJob = job; } + + public void setTestJob(TestJob job) { _testJob = job; } // LINT -- Exporting non-public type through public API public void setExpireJob(Job job) { /* _expireJob = job; */ } // Fix memory leaks caused by references if you need to use pairedTunnel diff --git a/router/java/src/net/i2p/router/tunnel/pool/TestJob.java b/router/java/src/net/i2p/router/tunnel/pool/TestJob.java index b81178bdf75b8baf81ff43a2c075361552bef69d..24b379543e6cc58ea5039e042f557440e72eb138 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TestJob.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TestJob.java @@ -250,6 +250,7 @@ class TestJob extends JobImpl { return false; } + @Override public String toString() { StringBuffer rv = new StringBuffer(64); rv.append("Testing tunnel ").append(_cfg.toString()).append(" waiting for "); @@ -281,6 +282,7 @@ class TestJob extends JobImpl { _successTime = getContext().clock().now() - ((DeliveryStatusMessage)message).getArrival(); } + @Override public String toString() { StringBuffer rv = new StringBuffer(64); rv.append("Testing tunnel ").append(_cfg.toString()); @@ -306,6 +308,7 @@ class TestJob extends JobImpl { testFailed(getContext().clock().now() - _started); } + @Override public String toString() { StringBuffer rv = new StringBuffer(64); rv.append("Testing tunnel ").append(_cfg.toString()); diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java index 699a8be9f1468e57b09e33c235d589ff35247333..8319052999e501792a23ed8d1e420e13d755d5d1 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java @@ -25,10 +25,11 @@ import net.i2p.util.Log; * */ public class TunnelPool { + private final List _inProgress = new ArrayList(); private RouterContext _context; private Log _log; private TunnelPoolSettings _settings; - private ArrayList<TunnelInfo> _tunnels; + private final ArrayList<TunnelInfo> _tunnels; private TunnelPeerSelector _peerSelector; private TunnelPoolManager _manager; private boolean _alive; @@ -866,13 +867,13 @@ public class TunnelPool { return cfg; } - private List _inProgress = new ArrayList(); void buildComplete(PooledTunnelCreatorConfig cfg) { synchronized (_inProgress) { _inProgress.remove(cfg); } cfg.setTunnelPool(this); //_manager.buildComplete(cfg); } + @Override public String toString() { if (_settings.isExploratory()) { if (_settings.isInbound()) diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java index acbb9345db9795ff85d8751f30e7ef42eed18b70..852ee28ff3ea3b502211a2d95917791d25cea81d 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPoolManager.java @@ -38,9 +38,9 @@ public class TunnelPoolManager implements TunnelManagerFacade { private RouterContext _context; private Log _log; /** Hash (destination) to TunnelPool */ - private Map _clientInboundPools; + private final Map _clientInboundPools; /** Hash (destination) to TunnelPool */ - private Map _clientOutboundPools; + private final Map _clientOutboundPools; private TunnelPool _inboundExploratory; private TunnelPool _outboundExploratory; private LoadTestManager _loadTestManager;