Author: toad
Date: 2008-02-05 21:50:40 +0000 (Tue, 05 Feb 2008)
New Revision: 17553

Modified:
   trunk/freenet/src/freenet/node/FailureTable.java
   trunk/freenet/src/freenet/node/Node.java
Log:
Don't accept offer if we have the key in the datastore.

Modified: trunk/freenet/src/freenet/node/FailureTable.java
===================================================================
--- trunk/freenet/src/freenet/node/FailureTable.java    2008-02-05 21:48:58 UTC 
(rev 17552)
+++ trunk/freenet/src/freenet/node/FailureTable.java    2008-02-05 21:50:40 UTC 
(rev 17553)
@@ -255,6 +255,10 @@
        void onOffer(Key key, PeerNode peer, byte[] authenticator) {
                if(logMINOR)
                        Logger.minor(this, "Offered key "+key+" by peer "+peer);
+               if(node.hasKey(key)) {
+                       Logger.minor(this, "Already have key");
+                       return;
+               }
                FailureTableEntry entry;
                long now = System.currentTimeMillis();
                synchronized(this) {

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2008-02-05 21:48:58 UTC (rev 
17552)
+++ trunk/freenet/src/freenet/node/Node.java    2008-02-05 21:50:40 UTC (rev 
17553)
@@ -3063,4 +3063,12 @@
                if(darknetCrypto == null) return false;
                return darknetCrypto.definitelyPortForwarded();
        }
+
+       public boolean hasKey(Key key) {
+               // FIXME optimise!
+               if(key instanceof NodeCHK)
+                       return fetch((NodeCHK)key, true) != null;
+               else
+                       return fetch((NodeSSK)key, true) != null;
+       }
 }


Reply via email to