diff --git a/apps/addressbook/java/src/net/i2p/addressbook/Servlet.java b/apps/addressbook/java/src/net/i2p/addressbook/Servlet.java index de6840607..c72adef0a 100644 --- a/apps/addressbook/java/src/net/i2p/addressbook/Servlet.java +++ b/apps/addressbook/java/src/net/i2p/addressbook/Servlet.java @@ -41,7 +41,9 @@ import javax.servlet.http.HttpServletResponse; * */ public class Servlet extends HttpServlet { - private DaemonThread thread; + + private static final long serialVersionUID = 1L; + private transient DaemonThread thread; //private String nonce; //private static final String PROP_NONCE = "addressbook.nonce"; diff --git a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java index 21ffac758..ba6733bcc 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java +++ b/apps/i2psnark/java/src/org/klomp/snark/SnarkManager.java @@ -7,6 +7,7 @@ import java.io.FileOutputStream; import java.io.FilenameFilter; import java.io.IOException; import java.io.OutputStream; +import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -1969,7 +1970,7 @@ public class SnarkManager implements CompleteListener { * ignore case, current locale * @since 0.9 */ - private static class IgnoreCaseComparator implements Comparator { + private static class IgnoreCaseComparator implements Comparator, Serializable { public int compare(Tracker l, Tracker r) { return l.name.toLowerCase().compareTo(r.name.toLowerCase()); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/dht/NodeInfoComparator.java b/apps/i2psnark/java/src/org/klomp/snark/dht/NodeInfoComparator.java index 842853a99..31a18a87b 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/dht/NodeInfoComparator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/dht/NodeInfoComparator.java @@ -3,6 +3,7 @@ package org.klomp.snark.dht; * From zzzot, modded and relicensed to GPLv2 */ +import java.io.Serializable; import java.util.Comparator; import net.i2p.crypto.SHA1Hash; @@ -15,7 +16,7 @@ import net.i2p.data.DataHelper; * @since 0.9.2 * @author zzz */ -class NodeInfoComparator implements Comparator { +class NodeInfoComparator implements Comparator, Serializable { private final byte[] _base; public NodeInfoComparator(SHA1Hash h) { diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java index 985c63581..53a501af3 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/BasicServlet.java @@ -84,16 +84,17 @@ import net.i2p.util.SystemVersion; */ class BasicServlet extends HttpServlet { - protected final I2PAppContext _context; - protected final Log _log; + private static final long serialVersionUID = 1L; + protected transient final I2PAppContext _context; + protected transient final Log _log; protected File _resourceBase; private String _warBase; - private final MimeTypes _mimeTypes; + private transient final MimeTypes _mimeTypes; /** same as PeerState.PARTSIZE */ private static final int BUFSIZE = 16*1024; - private ByteCache _cache = ByteCache.getInstance(16, BUFSIZE); + private transient ByteCache _cache = ByteCache.getInstance(16, BUFSIZE); private static final int WAR_CACHE_CONTROL_SECS = 24*60*60; private static final int FILE_CACHE_CONTROL_SECS = 24*60*60; diff --git a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java index b95229c22..0d6168da1 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java +++ b/apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java @@ -3,6 +3,7 @@ package org.klomp.snark.web; import java.io.File; import java.io.IOException; import java.io.PrintWriter; +import java.io.Serializable; import java.text.Collator; import java.text.DecimalFormat; import java.text.SimpleDateFormat; @@ -44,11 +45,13 @@ import org.klomp.snark.dht.DHT; * Refactored to eliminate Jetty dependencies. */ public class I2PSnarkServlet extends BasicServlet { + + private static final long serialVersionUID = 1L; /** generally "/i2psnark" */ private String _contextPath; /** generally "i2psnark" */ private String _contextName; - private SnarkManager _manager; + private transient SnarkManager _manager; private long _nonce; private String _themePath; private String _imgPath; @@ -1111,8 +1114,7 @@ public class I2PSnarkServlet extends BasicServlet { * (I guess this is worth it, a lot of torrents start with "The " * @since 0.7.14 */ - private static class TorrentNameComparator implements Comparator { - private final Comparator collator = Collator.getInstance(); + private static class TorrentNameComparator implements Comparator, Serializable { public int compare(Snark l, Snark r) { // put downloads and magnets first @@ -1128,7 +1130,7 @@ public class I2PSnarkServlet extends BasicServlet { String rlc = rs.toLowerCase(Locale.US); if (rlc.startsWith("the ") || rlc.startsWith("the.") || rlc.startsWith("the_")) rs = rs.substring(4); - return collator.compare(ls, rs); + return Collator.getInstance().compare(ls, rs); } } @@ -1627,7 +1629,8 @@ public class I2PSnarkServlet extends BasicServlet { * Sort by completeness (seeds first), then by ID * @since 0.8.1 */ - private static class PeerComparator implements Comparator { + private static class PeerComparator implements Comparator, Serializable { + public int compare(Peer l, Peer r) { int diff = r.completed() - l.completed(); // reverse if (diff != 0) @@ -2211,15 +2214,14 @@ public class I2PSnarkServlet extends BasicServlet { * directories first * @since 0.9.6 */ - private static class ListingComparator implements Comparator { - private final Comparator collator = Collator.getInstance(); + private static class ListingComparator implements Comparator, Serializable { public int compare(File l, File r) { if (l.isDirectory() && !r.isDirectory()) return -1; if (r.isDirectory() && !l.isDirectory()) return 1; - return collator.compare(l.getName(), r.getName()); + return Collator.getInstance().compare(l.getName(), r.getName()); } } diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketAddress.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketAddress.java index 24bdefa10..6afe5ad21 100644 --- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketAddress.java +++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketAddress.java @@ -15,8 +15,9 @@ import net.i2p.data.DataHelper; */ public class I2PSocketAddress extends SocketAddress { + private static final long serialVersionUID = 1L; private final int _port; - private Destination _dest; + private transient Destination _dest; private final String _host; /** diff --git a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java index 7c1dc2cf8..ad49044f2 100644 --- a/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java +++ b/apps/routerconsole/java/src/net/i2p/router/update/ConsoleUpdateManager.java @@ -1584,6 +1584,12 @@ public class ConsoleUpdateManager implements UpdateManager, RouterApp { return super.equals(o) && (o instanceof VersionAvailable); } + @Override + public int hashCode() { + // findbugs + return super.hashCode(); + } + @Override public String toString() { return "VersionAvailable \"" + version + "\" " + sourceMap + diff --git a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java index e41dccee3..a57b70d8a 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/BanlistRenderer.java @@ -9,6 +9,7 @@ package net.i2p.router.web; */ import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.util.Comparator; import java.util.Map; @@ -30,7 +31,7 @@ public class BanlistRenderer { _context = context; } - private static class HashComparator implements Comparator { + private static class HashComparator implements Comparator, Serializable { public int compare(Hash l, Hash r) { return l.toBase64().compareTo(r.toBase64()); } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java index 0fa2b602c..74cd64afb 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ConfigStatsHelper.java @@ -1,7 +1,7 @@ package net.i2p.router.web; -import java.util.ArrayList; import java.text.Collator; +import java.util.ArrayList; import java.util.Comparator; import java.util.HashSet; import java.util.List; @@ -171,6 +171,7 @@ public class ConfigStatsHelper extends HelperBase { /** * Translated sort + * Inner class, can't be Serializable * @since 0.9.4 */ private class AlphaComparator implements Comparator { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java index 3a76ffb7b..e0abfb363 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/GraphHelper.java @@ -1,6 +1,7 @@ package net.i2p.router.web; import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.util.Comparator; import java.util.HashMap; @@ -440,7 +441,7 @@ public class GraphHelper extends FormHandler { } } - private static class AlphaComparator implements Comparator { + private static class AlphaComparator implements Comparator, Serializable { public int compare(SummaryListener l, SummaryListener r) { String lName = l.getRate().getRateStat().getName(); String rName = r.getRate().getRateStat().getName(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java index eed5ff707..9572e8a31 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/HomeHelper.java @@ -1,5 +1,6 @@ package net.i2p.router.web; +import java.io.Serializable; import java.util.Collection; import java.util.Comparator; import java.util.List; @@ -238,7 +239,7 @@ public class HomeHelper extends HelperBase { } /** ignore case, current locale */ - private static class AppComparator implements Comparator { + private static class AppComparator implements Comparator, Serializable { public int compare(App l, App r) { return l.name.toLowerCase().compareTo(r.name.toLowerCase()); } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java index 7f54e53c0..6593717a5 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/JobQueueHelper.java @@ -3,6 +3,7 @@ package net.i2p.router.web; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; +import java.io.Serializable; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; @@ -204,14 +205,14 @@ public class JobQueueHelper extends HelperBase { } /** @since 0.8.9 */ - private static class JobStatsComparator implements Comparator { + private static class JobStatsComparator implements Comparator, Serializable { public int compare(JobStats l, JobStats r) { return l.getName().compareTo(r.getName()); } } /** @since 0.9.5 */ - private static class JobCountComparator implements Comparator { + private static class JobCountComparator implements Comparator, Serializable { private final ObjectCounter _counter; public JobCountComparator(ObjectCounter counter) { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java index aca9668a4..e2b480ef5 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/NetDbRenderer.java @@ -9,6 +9,7 @@ package net.i2p.router.web; */ import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.math.BigInteger; // debug import java.text.Collator; @@ -46,6 +47,9 @@ public class NetDbRenderer { _context = ctx; } + /** + * Inner class, can't be Serializable + */ private class LeaseSetComparator implements Comparator { public int compare(LeaseSet l, LeaseSet r) { Destination dl = l.getDestination(); @@ -59,7 +63,7 @@ public class NetDbRenderer { } /** for debugging @since 0.7.14 */ - private static class LeaseSetRoutingKeyComparator implements Comparator { + private static class LeaseSetRoutingKeyComparator implements Comparator, Serializable { private final Hash _us; public LeaseSetRoutingKeyComparator(Hash us) { _us = us; @@ -69,7 +73,7 @@ public class NetDbRenderer { } } - private static class RouterInfoComparator implements Comparator { + private static class RouterInfoComparator implements Comparator, Serializable { public int compare(RouterInfo l, RouterInfo r) { return l.getIdentity().getHash().toBase64().compareTo(r.getIdentity().getHash().toBase64()); } @@ -365,9 +369,13 @@ public class NetDbRenderer { return Translate.getString(name, _context, Messages.COUNTRY_BUNDLE_NAME); } - /** sort by translated country name using rules for the current language setting */ + /** + * Sort by translated country name using rules for the current language setting + * Inner class, can't be Serializable + */ private class CountryComparator implements Comparator { - Collator coll; + private static final long serialVersionUID = 1L; + private final Collator coll; public CountryComparator() { super(); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java index 276acd342..e2cd42270 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/ProfileOrganizerRenderer.java @@ -1,6 +1,7 @@ package net.i2p.router.web; import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.text.DecimalFormat; import java.util.Comparator; @@ -330,7 +331,7 @@ class ProfileOrganizerRenderer { * Used for floodfill-only page * @since 0.9.8 */ - private static class HashComparator implements Comparator { + private static class HashComparator implements Comparator, Serializable { public int compare(PeerProfile left, PeerProfile right) { return left.getPeer().toBase64().compareTo(right.getPeer().toBase64()); } diff --git a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java index 1172a1d7d..9fec81875 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/StatsGenerator.java @@ -252,6 +252,7 @@ public class StatsGenerator { /** * Translated sort + * Inner class, can't be Serializable * @since 0.9.3 */ private class AlphaComparator implements Comparator { diff --git a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java index f7f6700a5..6d9a7769b 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/SummaryHelper.java @@ -461,7 +461,10 @@ public class SummaryHelper extends HelperBase { return buf.toString(); } - /** compare translated nicknames - put "shared clients" first in the sort */ + /** + * Compare translated nicknames - put "shared clients" first in the sort + * Inner class, can't be Serializable + */ private class AlphaComparator implements Comparator { private final String xsc = _("shared clients"); diff --git a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java index e26cb0919..af61baae3 100644 --- a/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java +++ b/apps/routerconsole/java/src/net/i2p/router/web/TunnelRenderer.java @@ -1,6 +1,7 @@ package net.i2p.router.web; import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.util.ArrayList; import java.util.Collections; @@ -133,7 +134,7 @@ public class TunnelRenderer { out.write(""); } - private static class TunnelComparator implements Comparator { + private static class TunnelComparator implements Comparator, Serializable { public int compare(HopConfig l, HopConfig r) { return (r.getProcessedMessagesCount() - l.getProcessedMessagesCount()); } diff --git a/apps/susidns/src/java/src/i2p/susi/dns/AddressByNameSorter.java b/apps/susidns/src/java/src/i2p/susi/dns/AddressByNameSorter.java index 54902f239..b4a1e2dd0 100644 --- a/apps/susidns/src/java/src/i2p/susi/dns/AddressByNameSorter.java +++ b/apps/susidns/src/java/src/i2p/susi/dns/AddressByNameSorter.java @@ -24,9 +24,10 @@ package i2p.susi.dns; +import java.io.Serializable; import java.util.Comparator; -public class AddressByNameSorter implements Comparator +public class AddressByNameSorter implements Comparator, Serializable { public int compare(AddressBean a, AddressBean b) { diff --git a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java index 9e0804dde..b2b3797a6 100644 --- a/apps/susimail/src/src/i2p/susi/webmail/WebMail.java +++ b/apps/susimail/src/src/i2p/susi/webmail/WebMail.java @@ -43,6 +43,7 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.PrintWriter; +import java.io.Serializable; import java.io.StringWriter; import java.io.UnsupportedEncodingException; import java.text.Collator; @@ -235,7 +236,7 @@ public class WebMail extends HttpServlet * * @since 0.9.13 */ - private abstract static class SorterBase implements Comparator { + private abstract static class SorterBase implements Comparator, Serializable { private final MailCache mailCache; /** diff --git a/build.xml b/build.xml index 321554987..be3170517 100644 --- a/build.xml +++ b/build.xml @@ -1488,6 +1488,7 @@ + diff --git a/core/java/src/gnu/crypto/prng/BasePRNGStandalone.java b/core/java/src/gnu/crypto/prng/BasePRNGStandalone.java index 6050917b8..700606d30 100644 --- a/core/java/src/gnu/crypto/prng/BasePRNGStandalone.java +++ b/core/java/src/gnu/crypto/prng/BasePRNGStandalone.java @@ -41,6 +41,7 @@ package gnu.crypto.prng; // do so, delete this exception statement from your version. // ---------------------------------------------------------------------------- +import java.io.Serializable; import java.util.Map; /** @@ -49,7 +50,7 @@ import java.util.Map; * Modified slightly by jrandom for I2P (removing unneeded exceptions) * @version $Revision: 1.1 $ */ -public abstract class BasePRNGStandalone implements IRandomStandalone { +public abstract class BasePRNGStandalone implements IRandomStandalone, Serializable { // Constants and variables // ------------------------------------------------------------------------- diff --git a/core/java/src/net/i2p/crypto/CryptixAESKeyCache.java b/core/java/src/net/i2p/crypto/CryptixAESKeyCache.java index ae9d89709..788093f12 100644 --- a/core/java/src/net/i2p/crypto/CryptixAESKeyCache.java +++ b/core/java/src/net/i2p/crypto/CryptixAESKeyCache.java @@ -1,5 +1,6 @@ package net.i2p.crypto; +import java.io.Serializable; import java.util.concurrent.LinkedBlockingQueue; /** @@ -52,21 +53,26 @@ public final class CryptixAESKeyCache { public static final KeyCacheEntry createNew() { KeyCacheEntry e = new KeyCacheEntry(); - e.Ke = new int[ROUNDS + 1][BC]; // encryption round keys - e.Kd = new int[ROUNDS + 1][BC]; // decryption round keys - e.tk = new int[KC]; - e.key = new Object[] { e.Ke, e.Kd }; return e; } /** * all the data alloc'ed in a makeKey call */ - public static final class KeyCacheEntry { - int[][] Ke; - int[][] Kd; - int[] tk; - - Object[] key; + public static class KeyCacheEntry implements Serializable { + /** encryption round keys */ + final int[][] Ke; + /** decryption round keys */ + final int[][] Kd; + final int[] tk; + /** Ke, Kd */ + final Object[] key; + + public KeyCacheEntry() { + Ke = new int[ROUNDS + 1][BC]; + Kd = new int[ROUNDS + 1][BC]; + tk = new int[KC]; + key = new Object[] { Ke, Kd }; + } } } diff --git a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java index 4cd981860..7134bcb41 100644 --- a/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java +++ b/core/java/src/net/i2p/crypto/TransientSessionKeyManager.java @@ -10,6 +10,7 @@ package net.i2p.crypto; */ import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.util.ArrayList; import java.util.Comparator; @@ -798,7 +799,7 @@ public class TransientSessionKeyManager extends SessionKeyManager { * Just for the HTML method above so we can see what's going on easier * Earliest first */ - private static class TagSetComparator implements Comparator { + private static class TagSetComparator implements Comparator, Serializable { public int compare(TagSet l, TagSet r) { int rv = (int) (l.getDate() - r.getDate()); if (rv != 0) diff --git a/core/java/src/net/i2p/data/DataHelper.java b/core/java/src/net/i2p/data/DataHelper.java index 2aadec93b..e84df4a38 100644 --- a/core/java/src/net/i2p/data/DataHelper.java +++ b/core/java/src/net/i2p/data/DataHelper.java @@ -24,6 +24,7 @@ import java.io.InputStreamReader; import java.io.OutputStream; import java.io.OutputStreamWriter; import java.io.PrintWriter; +import java.io.Serializable; import java.io.UnsupportedEncodingException; import java.math.BigInteger; import java.security.MessageDigest; @@ -1463,7 +1464,7 @@ public class DataHelper { * See sortStructures() comments. * @since 0.8.3 */ - private static class DataStructureComparator implements Comparator { + private static class DataStructureComparator implements Comparator, Serializable { public int compare(DataStructure l, DataStructure r) { return l.calculateHash().toBase64().compareTo(r.calculateHash().toBase64()); } diff --git a/core/java/src/net/i2p/data/DataStructureImpl.java b/core/java/src/net/i2p/data/DataStructureImpl.java index 264f59188..26e655af7 100644 --- a/core/java/src/net/i2p/data/DataStructureImpl.java +++ b/core/java/src/net/i2p/data/DataStructureImpl.java @@ -13,6 +13,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import net.i2p.I2PAppContext; import net.i2p.crypto.SHA256Generator; @@ -23,7 +24,7 @@ import net.i2p.util.Log; * * @author jrandom */ -public abstract class DataStructureImpl implements DataStructure { +public abstract class DataStructureImpl implements DataStructure, Serializable { public String toBase64() { byte data[] = toByteArray(); diff --git a/core/java/src/net/i2p/data/Destination.java b/core/java/src/net/i2p/data/Destination.java index 3072ac3aa..491e738f8 100644 --- a/core/java/src/net/i2p/data/Destination.java +++ b/core/java/src/net/i2p/data/Destination.java @@ -186,4 +186,10 @@ public class Destination extends KeysAndCert { public boolean equals(Object o) { return super.equals(o) && (o instanceof Destination); } + + @Override + public int hashCode() { + // findbugs + return super.hashCode(); + } } diff --git a/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java b/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java index d9744662a..1e9b2dcf6 100644 --- a/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java +++ b/core/java/src/net/i2p/data/i2cp/RequestLeaseSetMessage.java @@ -12,6 +12,7 @@ package net.i2p.data.i2cp; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; +import java.io.Serializable; import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -28,9 +29,12 @@ import net.i2p.data.TunnelId; * @author jrandom */ public class RequestLeaseSetMessage extends I2CPMessageImpl { + + private static final long serialVersionUID = 1L; public final static int MESSAGE_TYPE = 21; private SessionId _sessionId; - private final List _endpoints; + // ArrayList is Serializable, List is not + private final ArrayList _endpoints; private Date _end; public RequestLeaseSetMessage() { @@ -139,7 +143,8 @@ public class RequestLeaseSetMessage extends I2CPMessageImpl { return buf.toString(); } - private static class TunnelEndpoint { + private static class TunnelEndpoint implements Serializable { + private static final long serialVersionUID = 1L; private final Hash _router; private final TunnelId _tunnelId; diff --git a/core/java/src/net/i2p/data/i2cp/SessionConfig.java b/core/java/src/net/i2p/data/i2cp/SessionConfig.java index 3af688092..e3f8468c7 100644 --- a/core/java/src/net/i2p/data/i2cp/SessionConfig.java +++ b/core/java/src/net/i2p/data/i2cp/SessionConfig.java @@ -35,7 +35,6 @@ import net.i2p.util.OrderedProperties; * @author jrandom */ public class SessionConfig extends DataStructureImpl { - private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(SessionConfig.class); private Destination _destination; private Signature _signature; private Date _creationDate; @@ -125,31 +124,32 @@ public class SessionConfig extends DataStructureImpl { */ public boolean verifySignature() { if (getSignature() == null) { - if (_log.shouldLog(Log.WARN)) _log.warn("Signature is null!"); + //if (_log.shouldLog(Log.WARN)) _log.warn("Signature is null!"); return false; } if (getDestination() == null) { - if (_log.shouldLog(Log.WARN)) _log.warn("Destination is null!"); + //if (_log.shouldLog(Log.WARN)) _log.warn("Destination is null!"); return false; } if (getCreationDate() == null) { - if (_log.shouldLog(Log.WARN)) _log.warn("Date is null!"); + //if (_log.shouldLog(Log.WARN)) _log.warn("Date is null!"); return false; } if (tooOld()) { - if (_log.shouldLog(Log.WARN)) _log.warn("Too old!"); + //if (_log.shouldLog(Log.WARN)) _log.warn("Too old!"); return false; } byte data[] = getBytes(); if (data == null) { - if (_log.shouldLog(Log.WARN)) _log.warn("Bytes could not be found - wtf?"); + //if (_log.shouldLog(Log.WARN)) _log.warn("Bytes could not be found - wtf?"); return false; } boolean ok = DSAEngine.getInstance().verifySignature(getSignature(), data, getDestination().getSigningPublicKey()); if (!ok) { - if (_log.shouldLog(Log.WARN)) _log.warn("DSA signature failed!"); + Log log = I2PAppContext.getGlobalContext().logManager().getLog(SessionConfig.class); + if (log.shouldLog(Log.WARN)) log.warn("DSA signature failed!"); } return ok; } @@ -177,10 +177,12 @@ public class SessionConfig extends DataStructureImpl { DataHelper.writeProperties(out, _options, true); // UTF-8 DataHelper.writeDate(out, _creationDate); } catch (IOException ioe) { - _log.error("IOError signing", ioe); + Log log = I2PAppContext.getGlobalContext().logManager().getLog(SessionConfig.class); + log.error("IOError signing", ioe); return null; } catch (DataFormatException dfe) { - _log.error("Error writing out the bytes for signing/verification", dfe); + Log log = I2PAppContext.getGlobalContext().logManager().getLog(SessionConfig.class); + log.error("Error writing out the bytes for signing/verification", dfe); return null; } return out.toByteArray(); diff --git a/core/java/src/net/i2p/kademlia/KBucketSet.java b/core/java/src/net/i2p/kademlia/KBucketSet.java index e19d2e50a..a2d0610a6 100644 --- a/core/java/src/net/i2p/kademlia/KBucketSet.java +++ b/core/java/src/net/i2p/kademlia/KBucketSet.java @@ -8,6 +8,7 @@ package net.i2p.kademlia; * */ +import java.io.Serializable; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; @@ -750,7 +751,7 @@ public class KBucketSet { * For Collections.binarySearch. * Returns equal for any overlap. */ - private static class BucketComparator implements Comparator> { + private static class BucketComparator implements Comparator>, Serializable { public int compare(KBucket l, KBucket r) { if (l.getRangeEnd() < r.getRangeBegin()) return -1; diff --git a/core/java/src/net/i2p/kademlia/XORComparator.java b/core/java/src/net/i2p/kademlia/XORComparator.java index 5763a7b4f..08a4f2874 100644 --- a/core/java/src/net/i2p/kademlia/XORComparator.java +++ b/core/java/src/net/i2p/kademlia/XORComparator.java @@ -1,5 +1,6 @@ package net.i2p.kademlia; +import java.io.Serializable; import java.util.Comparator; import net.i2p.data.SimpleDataStructure; @@ -9,7 +10,7 @@ import net.i2p.data.SimpleDataStructure; * * @since 0.9.2 in i2psnark, moved to core in 0.9.10 */ -public class XORComparator implements Comparator { +public class XORComparator implements Comparator, Serializable { private final byte[] _base; /** diff --git a/core/java/src/net/i2p/util/CachedIteratorArrayList.java b/core/java/src/net/i2p/util/CachedIteratorArrayList.java index 3695028d4..534e33c78 100644 --- a/core/java/src/net/i2p/util/CachedIteratorArrayList.java +++ b/core/java/src/net/i2p/util/CachedIteratorArrayList.java @@ -1,5 +1,6 @@ package net.i2p.util; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collection; import java.util.ConcurrentModificationException; @@ -38,7 +39,7 @@ public class CachedIteratorArrayList extends ArrayList { return iterator; } - private class CachedIterator implements Iterator { + private class CachedIterator implements Iterator, Serializable { /** * Index of element to be returned by subsequent call to next. */ diff --git a/core/java/src/net/i2p/util/NativeBigInteger.java b/core/java/src/net/i2p/util/NativeBigInteger.java index 092919cd0..1b28397f7 100644 --- a/core/java/src/net/i2p/util/NativeBigInteger.java +++ b/core/java/src/net/i2p/util/NativeBigInteger.java @@ -811,4 +811,10 @@ public class NativeBigInteger extends BigInteger { // for findbugs return super.equals(o); } + + @Override + public int hashCode() { + // for findbugs + return super.hashCode(); + } } diff --git a/core/java/src/net/i2p/util/OrderedProperties.java b/core/java/src/net/i2p/util/OrderedProperties.java index cce7b0e68..11e6bf268 100644 --- a/core/java/src/net/i2p/util/OrderedProperties.java +++ b/core/java/src/net/i2p/util/OrderedProperties.java @@ -9,6 +9,7 @@ package net.i2p.util; * */ +import java.io.Serializable; import java.util.Collections; import java.util.Comparator; import java.util.Map; @@ -46,7 +47,7 @@ public class OrderedProperties extends Properties { return Collections.unmodifiableSortedSet(rv); } - private static class EntryComparator implements Comparator> { + private static class EntryComparator implements Comparator>, Serializable { public int compare(Map.Entry l, Map.Entry r) { return ((String)l.getKey()).compareTo(((String)r.getKey())); } diff --git a/core/java/src/net/i2p/util/RandomSource.java b/core/java/src/net/i2p/util/RandomSource.java index 4f97c7d47..56c97bb82 100644 --- a/core/java/src/net/i2p/util/RandomSource.java +++ b/core/java/src/net/i2p/util/RandomSource.java @@ -25,8 +25,10 @@ import net.i2p.crypto.EntropyHarvester; * @author jrandom */ public class RandomSource extends SecureRandom implements EntropyHarvester { + + private static final long serialVersionUID = 1L; private final EntropyHarvester _entropyHarvester; - protected final I2PAppContext _context; + protected transient final I2PAppContext _context; /** * Deprecated - do not instantiate this directly, as you won't get the diff --git a/core/java/src/net/i2p/util/VersionComparator.java b/core/java/src/net/i2p/util/VersionComparator.java index 6ae87247b..0bfd1b911 100644 --- a/core/java/src/net/i2p/util/VersionComparator.java +++ b/core/java/src/net/i2p/util/VersionComparator.java @@ -1,5 +1,6 @@ package net.i2p.util; +import java.io.Serializable; import java.util.Comparator; /** @@ -9,7 +10,7 @@ import java.util.Comparator; * Moved from TrustedUpdate.java * @since 0.7.10 */ -public class VersionComparator implements Comparator { +public class VersionComparator implements Comparator, Serializable { public int compare(String l, String r) { return comp(l, r); diff --git a/core/java/src/net/metanotion/io/block/index/BSkipLevels.java b/core/java/src/net/metanotion/io/block/index/BSkipLevels.java index e983de3cd..b64cf5532 100644 --- a/core/java/src/net/metanotion/io/block/index/BSkipLevels.java +++ b/core/java/src/net/metanotion/io/block/index/BSkipLevels.java @@ -29,6 +29,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. package net.metanotion.io.block.index; import java.io.IOException; +import java.io.Serializable; import java.util.Comparator; import java.util.Set; import java.util.TreeSet; @@ -311,7 +312,7 @@ public class BSkipLevels extends SkipLevels { * Sorts in REVERSE order. * @since 0.8.8 */ - private static class LevelComparator implements Comparator { + private static class LevelComparator implements Comparator, Serializable { public int compare(SkipLevels l, SkipLevels r) { Comparable lk = l.key(); Comparable rk = r.key(); diff --git a/router/java/src/net/i2p/data/i2np/GarlicClove.java b/router/java/src/net/i2p/data/i2np/GarlicClove.java index 314528446..378b9041a 100644 --- a/router/java/src/net/i2p/data/i2np/GarlicClove.java +++ b/router/java/src/net/i2p/data/i2np/GarlicClove.java @@ -29,8 +29,10 @@ import net.i2p.util.Log; * @author jrandom */ public class GarlicClove extends DataStructureImpl { + //private final Log _log; - private final I2PAppContext _context; + private static final long serialVersionUID = 1L; + private transient final I2PAppContext _context; private DeliveryInstructions _instructions; private I2NPMessage _msg; private long _cloveId; diff --git a/router/java/src/net/i2p/router/JobQueue.java b/router/java/src/net/i2p/router/JobQueue.java index 9bc466731..c7d86c127 100644 --- a/router/java/src/net/i2p/router/JobQueue.java +++ b/router/java/src/net/i2p/router/JobQueue.java @@ -9,6 +9,7 @@ package net.i2p.router; */ import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.util.Collection; import java.util.Collections; @@ -658,7 +659,7 @@ public class JobQueue { * Ensure different jobs with the same timing are different so they aren't removed. * @since 0.8.9 */ - private static class JobComparator implements Comparator { + private static class JobComparator implements Comparator, Serializable { public int compare(Job l, Job r) { // equals first, Jobs generally don't override so this should be fast // And this MUST be first so we can remove a job even if its timing has changed. diff --git a/router/java/src/net/i2p/router/PersistentKeyRing.java b/router/java/src/net/i2p/router/PersistentKeyRing.java index 771d204e3..a3e71ee8e 100644 --- a/router/java/src/net/i2p/router/PersistentKeyRing.java +++ b/router/java/src/net/i2p/router/PersistentKeyRing.java @@ -16,7 +16,9 @@ import net.i2p.util.KeyRing; * Caution - not all HashMap methods are overridden. */ public class PersistentKeyRing extends KeyRing { - private RouterContext _ctx; + + private static final long serialVersionUID = 1L; + private transient final RouterContext _ctx; private static final String PROP_PFX = "router.keyring.key."; public PersistentKeyRing(RouterContext ctx) { diff --git a/router/java/src/net/i2p/router/peermanager/InverseCapacityComparator.java b/router/java/src/net/i2p/router/peermanager/InverseCapacityComparator.java index 9d4222957..c7664c3fc 100644 --- a/router/java/src/net/i2p/router/peermanager/InverseCapacityComparator.java +++ b/router/java/src/net/i2p/router/peermanager/InverseCapacityComparator.java @@ -1,5 +1,6 @@ package net.i2p.router.peermanager; +import java.io.Serializable; import java.util.Comparator; import net.i2p.data.DataHelper; @@ -8,7 +9,7 @@ import net.i2p.data.DataHelper; * Order profiles by their capacity, but backwards (highest capacity / value first). * */ -class InverseCapacityComparator implements Comparator { +class InverseCapacityComparator implements Comparator, Serializable { /** * Compare the two objects backwards. The standard comparator returns * -1 if lhs is less than rhs, 1 if lhs is greater than rhs, or 0 if they're diff --git a/router/java/src/net/i2p/router/peermanager/SpeedComparator.java b/router/java/src/net/i2p/router/peermanager/SpeedComparator.java index aad404335..3d813e859 100644 --- a/router/java/src/net/i2p/router/peermanager/SpeedComparator.java +++ b/router/java/src/net/i2p/router/peermanager/SpeedComparator.java @@ -1,5 +1,6 @@ package net.i2p.router.peermanager; +import java.io.Serializable; import java.util.Comparator; import net.i2p.data.DataHelper; @@ -8,7 +9,7 @@ import net.i2p.data.DataHelper; * Order profiles by their speed (lowest first). * @since 0.7.10 */ -class SpeedComparator implements Comparator { +class SpeedComparator implements Comparator, Serializable { public int compare(PeerProfile left, PeerProfile right) { diff --git a/router/java/src/net/i2p/router/transport/TransportImpl.java b/router/java/src/net/i2p/router/transport/TransportImpl.java index 0e588df18..194ae3016 100644 --- a/router/java/src/net/i2p/router/transport/TransportImpl.java +++ b/router/java/src/net/i2p/router/transport/TransportImpl.java @@ -9,6 +9,7 @@ package net.i2p.router.transport; */ import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.net.InetAddress; import java.util.ArrayList; @@ -627,7 +628,7 @@ public abstract class TransportImpl implements Transport { * Lowest cost (most preferred) first. * @since IPv6 */ - private static class AddrComparator implements Comparator { + private static class AddrComparator implements Comparator, Serializable { private final int adj; public AddrComparator(int ipv6Adjustment) { diff --git a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java index 60d2f250d..0878ea7dc 100644 --- a/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java +++ b/router/java/src/net/i2p/router/transport/ntcp/NTCPTransport.java @@ -1,6 +1,7 @@ package net.i2p.router.transport.ntcp; import java.io.IOException; +import java.io.Serializable; import java.net.InetSocketAddress; import java.net.InetAddress; import java.net.Inet6Address; @@ -1275,7 +1276,7 @@ public class NTCPTransport extends TransportImpl { public static final AlphaComparator instance() { return _instance; } } - private static class PeerComparator implements Comparator { + private static class PeerComparator implements Comparator, Serializable { public int compare(NTCPConnection l, NTCPConnection r) { if (l == null || r == null) throw new IllegalArgumentException(); 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 4459d071b..b9c2ad802 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1,6 +1,7 @@ package net.i2p.router.transport.udp; import java.io.IOException; +import java.io.Serializable; import java.io.Writer; import java.net.InetAddress; import java.net.SocketException; @@ -2240,59 +2241,59 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority private static final int FLAG_DEBUG = 99; private static Comparator getComparator(int sortFlags) { - Comparator rv = null; + Comparator rv; switch (Math.abs(sortFlags)) { case FLAG_IDLE_IN: - rv = IdleInComparator.instance(); + rv = new IdleInComparator(); break; case FLAG_IDLE_OUT: - rv = IdleOutComparator.instance(); + rv = new IdleOutComparator(); break; case FLAG_RATE_IN: - rv = RateInComparator.instance(); + rv = new RateInComparator(); break; case FLAG_RATE_OUT: - rv = RateOutComparator.instance(); + rv = new RateOutComparator(); break; case FLAG_UPTIME: - rv = UptimeComparator.instance(); + rv = new UptimeComparator(); break; case FLAG_SKEW: - rv = SkewComparator.instance(); + rv = new SkewComparator(); break; case FLAG_CWND: - rv = CwndComparator.instance(); + rv = new CwndComparator(); break; case FLAG_SSTHRESH: - rv = SsthreshComparator.instance(); + rv = new SsthreshComparator(); break; case FLAG_RTT: - rv = RTTComparator.instance(); + rv = new RTTComparator(); break; //case FLAG_DEV: - // rv = DevComparator.instance(); + // rv = new DevComparator(); // break; case FLAG_RTO: - rv = RTOComparator.instance(); + rv = new RTOComparator(); break; case FLAG_MTU: - rv = MTUComparator.instance(); + rv = new MTUComparator(); break; case FLAG_SEND: - rv = SendCountComparator.instance(); + rv = new SendCountComparator(); break; case FLAG_RECV: - rv = RecvCountComparator.instance(); + rv = new RecvCountComparator(); break; case FLAG_RESEND: - rv = ResendComparator.instance(); + rv = new ResendComparator(); break; case FLAG_DUP: - rv = DupComparator.instance(); + rv = new DupComparator(); break; case FLAG_ALPHA: default: - rv = AlphaComparator.instance(); + rv = new AlphaComparator(); break; } if (sortFlags < 0) @@ -2301,12 +2302,9 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } private static class AlphaComparator extends PeerComparator { - private static final AlphaComparator _instance = new AlphaComparator(); - public static final AlphaComparator instance() { return _instance; } } + private static class IdleInComparator extends PeerComparator { - private static final IdleInComparator _instance = new IdleInComparator(); - public static final IdleInComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = r.getLastReceiveTime() - l.getLastReceiveTime(); @@ -2316,9 +2314,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class IdleOutComparator extends PeerComparator { - private static final IdleOutComparator _instance = new IdleOutComparator(); - public static final IdleOutComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = r.getLastSendTime() - l.getLastSendTime(); @@ -2328,9 +2325,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class RateInComparator extends PeerComparator { - private static final RateInComparator _instance = new RateInComparator(); - public static final RateInComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getReceiveBps() - r.getReceiveBps(); @@ -2340,9 +2336,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class RateOutComparator extends PeerComparator { - private static final RateOutComparator _instance = new RateOutComparator(); - public static final RateOutComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getSendBps() - r.getSendBps(); @@ -2352,9 +2347,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class UptimeComparator extends PeerComparator { - private static final UptimeComparator _instance = new UptimeComparator(); - public static final UptimeComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = r.getKeyEstablishedTime() - l.getKeyEstablishedTime(); @@ -2364,9 +2358,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class SkewComparator extends PeerComparator { - private static final SkewComparator _instance = new SkewComparator(); - public static final SkewComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = Math.abs(l.getClockSkew()) - Math.abs(r.getClockSkew()); @@ -2376,9 +2369,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class CwndComparator extends PeerComparator { - private static final CwndComparator _instance = new CwndComparator(); - public static final CwndComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getSendWindowBytes() - r.getSendWindowBytes(); @@ -2388,9 +2380,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class SsthreshComparator extends PeerComparator { - private static final SsthreshComparator _instance = new SsthreshComparator(); - public static final SsthreshComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getSlowStartThreshold() - r.getSlowStartThreshold(); @@ -2400,9 +2391,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class RTTComparator extends PeerComparator { - private static final RTTComparator _instance = new RTTComparator(); - public static final RTTComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getRTT() - r.getRTT(); @@ -2430,8 +2420,6 @@ 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 public int compare(PeerState l, PeerState r) { int rv = l.getRTO() - r.getRTO(); @@ -2441,9 +2429,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class MTUComparator extends PeerComparator { - private static final MTUComparator _instance = new MTUComparator(); - public static final MTUComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { int rv = l.getMTU() - r.getMTU(); @@ -2453,9 +2440,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return rv; } } + private static class SendCountComparator extends PeerComparator { - private static final SendCountComparator _instance = new SendCountComparator(); - public static final SendCountComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = l.getPacketsTransmitted() - r.getPacketsTransmitted(); @@ -2465,9 +2451,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class RecvCountComparator extends PeerComparator { - private static final RecvCountComparator _instance = new RecvCountComparator(); - public static final RecvCountComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = l.getPacketsReceived() - r.getPacketsReceived(); @@ -2477,9 +2462,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class ResendComparator extends PeerComparator { - private static final ResendComparator _instance = new ResendComparator(); - public static final ResendComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = l.getPacketsRetransmitted() - r.getPacketsRetransmitted(); @@ -2489,9 +2473,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority return (int)rv; } } + private static class DupComparator extends PeerComparator { - private static final DupComparator _instance = new DupComparator(); - public static final DupComparator instance() { return _instance; } @Override public int compare(PeerState l, PeerState r) { long rv = l.getPacketsReceivedDuplicate() - r.getPacketsReceivedDuplicate(); @@ -2502,7 +2485,7 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority } } - private static class PeerComparator implements Comparator { + private static class PeerComparator implements Comparator, Serializable { public int compare(PeerState l, PeerState r) { return DataHelper.compareTo(l.getRemotePeer().getData(), r.getRemotePeer().getData()); } 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 c0ac6daf6..3ff080fd7 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java +++ b/router/java/src/net/i2p/router/tunnel/pool/BuildExecutor.java @@ -1,5 +1,6 @@ package net.i2p.router.tunnel.pool; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -436,7 +437,7 @@ class BuildExecutor implements Runnable { * WARNING - this sort may be unstable, as a pool's tunnel count may change * during the sort. This will cause Java 7 sort to throw an IAE. */ - private static class TunnelPoolComparator implements Comparator { + private static class TunnelPoolComparator implements Comparator, Serializable { private final boolean _preferEmpty; diff --git a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java index 2b530405d..14eab47e2 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPeerSelector.java @@ -1,5 +1,6 @@ package net.i2p.router.tunnel.pool; +import java.io.Serializable; import java.math.BigInteger; import java.util.ArrayList; import java.util.Collection; @@ -525,7 +526,7 @@ public abstract class TunnelPeerSelector { * Now: * d((H(l+h), h) - d(H(r+h), h) */ - private static class HashComparator implements Comparator { + private static class HashComparator implements Comparator, Serializable { private final Hash _hash, tmp; private final byte[] data; 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 e76058c8e..1258c10d6 100644 --- a/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java +++ b/router/java/src/net/i2p/router/tunnel/pool/TunnelPool.java @@ -1,5 +1,6 @@ package net.i2p.router.tunnel.pool; +import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; @@ -640,7 +641,7 @@ public class TunnelPool { * but we use latest expiration first, since we need to sort them by that anyway. * */ - private static class LeaseComparator implements Comparator { + private static class LeaseComparator implements Comparator, Serializable { public int compare(Lease l, Lease r) { return r.getEndDate().compareTo(l.getEndDate()); } @@ -651,7 +652,7 @@ public class TunnelPool { * * @since 0.8.10 */ - private static class TunnelInfoComparator implements Comparator { + private static class TunnelInfoComparator implements Comparator, Serializable { private final byte[] _base; private final boolean _avoidZero; diff --git a/router/java/src/net/i2p/router/util/CoDelBlockingQueue.java b/router/java/src/net/i2p/router/util/CoDelBlockingQueue.java index 390f8078c..6c742e7eb 100644 --- a/router/java/src/net/i2p/router/util/CoDelBlockingQueue.java +++ b/router/java/src/net/i2p/router/util/CoDelBlockingQueue.java @@ -26,8 +26,9 @@ import net.i2p.util.Log; */ public class CoDelBlockingQueue extends LinkedBlockingQueue { - private final I2PAppContext _context; - private final Log _log; + private static final long serialVersionUID = 1L; + private transient final I2PAppContext _context; + private transient final Log _log; private final String _name; private final int _capacity; diff --git a/router/java/src/net/i2p/router/util/PriBlockingQueue.java b/router/java/src/net/i2p/router/util/PriBlockingQueue.java index baf69814f..ac2cf8563 100644 --- a/router/java/src/net/i2p/router/util/PriBlockingQueue.java +++ b/router/java/src/net/i2p/router/util/PriBlockingQueue.java @@ -1,5 +1,6 @@ package net.i2p.router.util; +import java.io.Serializable; import java.util.Comparator; import java.util.concurrent.PriorityBlockingQueue; import java.util.concurrent.TimeUnit; @@ -19,8 +20,9 @@ import net.i2p.util.Log; */ public class PriBlockingQueue extends PriorityBlockingQueue { - protected final I2PAppContext _context; - protected final Log _log; + private static final long serialVersionUID = 1L; + protected transient final I2PAppContext _context; + protected transient final Log _log; protected final String _name; private final AtomicLong _seqNum = new AtomicLong(); @@ -114,7 +116,7 @@ public class PriBlockingQueue extends PriorityBlockingQueue implements Comparator { + private static class PriorityComparator implements Comparator, Serializable { public int compare(E l, E r) { int d = r.getPriority() - l.getPriority(); if (d != 0)