From 13df22f69add50653f87737f74dbef349012dba3 Mon Sep 17 00:00:00 2001
From: akwizgran <michael@briarproject.org>
Date: Fri, 14 Dec 2012 22:11:29 +0000
Subject: [PATCH] Better hashCode methods.

---
 briar-api/src/net/sf/briar/api/protocol/Transport.java | 10 +++++-----
 briar-core/src/net/sf/briar/plugins/PollerImpl.java    |  4 +++-
 briar-core/src/net/sf/briar/plugins/modem/Frame.java   |  3 ++-
 .../src/net/sf/briar/transport/KeyManagerImpl.java     |  2 +-
 .../briar/transport/TransportConnectionRecogniser.java |  2 +-
 5 files changed, 12 insertions(+), 9 deletions(-)

diff --git a/briar-api/src/net/sf/briar/api/protocol/Transport.java b/briar-api/src/net/sf/briar/api/protocol/Transport.java
index 4ac071160b..a8ea4a3151 100644
--- a/briar-api/src/net/sf/briar/api/protocol/Transport.java
+++ b/briar-api/src/net/sf/briar/api/protocol/Transport.java
@@ -26,6 +26,11 @@ public class Transport {
 		return properties;
 	}
 
+	@Override
+	public int hashCode() {
+		return id.hashCode() ^ properties.hashCode();
+	}
+
 	@Override
 	public boolean equals(Object o) {
 		if(o instanceof Transport) {
@@ -34,9 +39,4 @@ public class Transport {
 		}
 		return false;
 	}
-
-	@Override
-	public int hashCode() {
-		return id.hashCode();
-	}
 }
diff --git a/briar-core/src/net/sf/briar/plugins/PollerImpl.java b/briar-core/src/net/sf/briar/plugins/PollerImpl.java
index 3448070de9..29ea3c9132 100644
--- a/briar-core/src/net/sf/briar/plugins/PollerImpl.java
+++ b/briar-core/src/net/sf/briar/plugins/PollerImpl.java
@@ -96,15 +96,17 @@ class PollerImpl implements Poller, Runnable {
 			this.plugin = plugin;
 		}
 
+		// Must be consistent with equals()
 		public int compareTo(PollTime p) {
 			if(time < p.time) return -1;
 			if(time > p.time) return 1;
 			return 0;
 		}
 
+		// Must be consistent with equals()
 		@Override
 		public int hashCode() {
-			return (int) time;
+			return (int) (time ^ (time >>> 32)) ^ plugin.hashCode();
 		}
 
 		@Override
diff --git a/briar-core/src/net/sf/briar/plugins/modem/Frame.java b/briar-core/src/net/sf/briar/plugins/modem/Frame.java
index fc80bd6b88..288c606844 100644
--- a/briar-core/src/net/sf/briar/plugins/modem/Frame.java
+++ b/briar-core/src/net/sf/briar/plugins/modem/Frame.java
@@ -42,7 +42,8 @@ abstract class Frame {
 
 	@Override
 	public int hashCode() {
-		return (int) getSequenceNumber();
+		long sequenceNumber = getSequenceNumber();
+		return buf[0] ^ (int) (sequenceNumber ^ (sequenceNumber >>> 32));
 	}
 
 	@Override
diff --git a/briar-core/src/net/sf/briar/transport/KeyManagerImpl.java b/briar-core/src/net/sf/briar/transport/KeyManagerImpl.java
index 5117562d4c..39136daf31 100644
--- a/briar-core/src/net/sf/briar/transport/KeyManagerImpl.java
+++ b/briar-core/src/net/sf/briar/transport/KeyManagerImpl.java
@@ -352,7 +352,7 @@ class KeyManagerImpl extends TimerTask implements KeyManager, DatabaseListener {
 
 		@Override
 		public int hashCode() {
-			return contactId.hashCode() + transportId.hashCode();
+			return contactId.hashCode() ^ transportId.hashCode();
 		}
 
 		@Override
diff --git a/briar-core/src/net/sf/briar/transport/TransportConnectionRecogniser.java b/briar-core/src/net/sf/briar/transport/TransportConnectionRecogniser.java
index 079f9e09e1..dfada60a59 100644
--- a/briar-core/src/net/sf/briar/transport/TransportConnectionRecogniser.java
+++ b/briar-core/src/net/sf/briar/transport/TransportConnectionRecogniser.java
@@ -164,7 +164,7 @@ class TransportConnectionRecogniser {
 
 		@Override
 		public int hashCode() {
-			return contactId.hashCode() + (int) period;
+			return contactId.hashCode() ^ (int) (period ^ (period >>> 32));
 		}
 
 		@Override
-- 
GitLab