Author: toad
Date: 2007-07-13 11:33:38 +0000 (Fri, 13 Jul 2007)
New Revision: 14063
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/PeerManager.java
trunk/freenet/src/freenet/node/PeerNode.java
Log:
Allow accepting node if it isn't connected within 1 minute of adding.
(There might have been a failure causing the other end to not add it; it won't
be re-added on this end anyway).
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-13 11:31:40 UTC
(rev 14062)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-07-13 11:33:38 UTC
(rev 14063)
@@ -33,8 +33,12 @@
// FIXME make this configurable
static final int MAX_PEERS = 30;
- // Chance of resetting path folding (for plausible deniability) is 1 in
this number.
+ /** Chance of resetting path folding (for plausible deniability) is 1
in this number. */
static final int RESET_PATH_FOLDING_PROB = 20;
+ /** Don't re-add a node until it's been up and disconnected for at
least this long */
+ static final int DONT_READD_TIME = 60*1000;
+ /** Don't drop a node until it's at least this old (time since added,
or since startup */
+ static final int DROP_ELIGIBLE_TIME = 300*1000;
public OpennetManager(Node node, NodeCryptoConfig opennetConfig) throws
NodeInitException {
this.node = node;
@@ -136,7 +140,9 @@
Logger.error(this, "Not adding self as opennet peer");
return false; // Equal to myself
}
- if(node.peers.containsPeer(pn)) {
+ PeerNode match;
+ if(((match = node.peers.containsPeer(pn)) != null) &&
(match.isConnected() ||
+ ((!match.hasCompletedHandshake()) &&
match.timeSinceAddedOrRestarted() < DONT_READD_TIME))) {
Logger.error(this, "Not adding "+pn.userToString()+" to
opennet list as already there");
return false;
}
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2007-07-13 11:31:40 UTC
(rev 14062)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2007-07-13 11:33:38 UTC
(rev 14063)
@@ -1240,12 +1240,12 @@
updatePMUserAlert();
}
- public boolean containsPeer(PeerNode pn) {
+ public PeerNode containsPeer(PeerNode pn) {
PeerNode[] peers = pn.isOpennet() ?
((PeerNode[])getOpennetPeers()) : ((PeerNode[])getDarknetPeers());
for(int i=0;i<peers.length;i++)
- if(Arrays.equals(pn.getIdentity(),
peers[i].getIdentity())) return true;
+ if(Arrays.equals(pn.getIdentity(),
peers[i].getIdentity())) return peers[i];
- return false;
+ return null;
}
}
Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java 2007-07-13 11:31:40 UTC
(rev 14062)
+++ trunk/freenet/src/freenet/node/PeerNode.java 2007-07-13 11:33:38 UTC
(rev 14063)
@@ -126,6 +126,9 @@
/** When was isRoutingCompatible() last true? */
private long timeLastRoutable;
+ /** Time added or restarted (reset on startup unlike peerAddedTime) */
+ private long timeAddedOrRestarted;
+
/** Are we connected? If not, we need to start trying to
* handshake.
*/
@@ -476,6 +479,7 @@
timeLastReceivedSwapRequest = -1;
timeLastConnected = -1;
timeLastRoutable = -1;
+ timeAddedOrRestarted = System.currentTimeMillis();
randomizeMaxTimeBetweenPacketSends();
swapRequestsInterval = new SimpleRunningAverage(50,
Node.MIN_INTERVAL_BETWEEN_INCOMING_SWAP_REQUESTS);
@@ -916,13 +920,20 @@
}
/**
- * @return The time this PeerNode was added to the node
+ * @return The time this PeerNode was added to the node (persistent across
restarts).
*/
public synchronized long getPeerAddedTime() {
return peerAddedTime;
}
/**
+ * @return The time elapsed since this PeerNode was added to the node, or
the node started up.
+ */
+ public synchronized long timeSinceAddedOrRestarted() {
+ return System.currentTimeMillis() - timeAddedOrRestarted;
+ }
+
+ /**
* Disconnected e.g. due to not receiving a packet for ages.
*/
public void disconnected() {
@@ -1661,7 +1672,6 @@
throw new Error(e1);
}
BufferedReader br = new BufferedReader(isr);
- SimpleFieldSet fs;
try {
return new SimpleFieldSet(br, false, true);
} catch (IOException e) {