Author: toad
Date: 2007-09-22 20:05:52 +0000 (Sat, 22 Sep 2007)
New Revision: 15277
Modified:
trunk/freenet/src/freenet/node/OpennetManager.java
trunk/freenet/src/freenet/node/PacketSender.java
trunk/freenet/src/freenet/node/PeerManager.java
Log:
Attempt to connect to old-opennet-peers if we need more connections, under
certain heuristic connections:
- Opennet is enabled (duh)
- Less than 5 connected peers
- Uptime is at least the minimum for opennet to dump peers
- Every 10 seconds if no peers, or 60 seconds if there are 1-4 peers, send one
handshake attempt to a randomly selected old-opennet-peer. 50% chance of doing
an ARK lookup on it too.
Modified: trunk/freenet/src/freenet/node/OpennetManager.java
===================================================================
--- trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-22 18:45:24 UTC
(rev 15276)
+++ trunk/freenet/src/freenet/node/OpennetManager.java 2007-09-22 20:05:52 UTC
(rev 15277)
@@ -422,4 +422,14 @@
return new File(node.nodeDir,
"openpeers-old-"+crypto.portNumber).toString();
}
+ synchronized int countOldOpennetPeers() {
+ return oldPeers.size();
+ }
+
+ PeerNode randomOldOpennetNode() {
+ PeerNode[] nodes = getOldPeers();
+ if(nodes.length == 0) return null;
+ return nodes[node.random.nextInt(nodes.length)];
+ }
+
}
Modified: trunk/freenet/src/freenet/node/PacketSender.java
===================================================================
--- trunk/freenet/src/freenet/node/PacketSender.java 2007-09-22 18:45:24 UTC
(rev 15276)
+++ trunk/freenet/src/freenet/node/PacketSender.java 2007-09-22 20:05:52 UTC
(rev 15277)
@@ -28,8 +28,22 @@
private static boolean logMINOR;
+ /** Maximum time we will queue a message for in millseconds */
static final int MAX_COALESCING_DELAY = 200;
+ /** If opennet is enabled, and there are fewer than this many
connections,
+ * we MAY attempt to contact old opennet peers (opennet peers we have
+ * dropped from the routing table but kept around in case we can't
connect). */
+ static final int MIN_CONNECTIONS_TRY_OLD_OPENNET_PEERS = 5;
+
+ /** We send connect attempts to old-opennet-peers no more than once
every
+ * this many milliseconds. */
+ static final int MIN_OLD_OPENNET_CONNECT_DELAY_NO_CONNS = 10*1000;
+
+ /** We send connect attempts to old-opennet-peers no more than once
every
+ * this many milliseconds. */
+ static final int MIN_OLD_OPENNET_CONNECT_DELAY = 60*1000;
+
final LinkedList resendPackets;
/** ~= Ticker :) */
private final TreeMap timedJobsByTime;
@@ -41,6 +55,7 @@
long lastReceivedPacketFromAnyNode;
/** For watchdog. 32-bit to avoid locking. */
volatile int lastTimeInSeconds;
+ private long timeLastSentOldOpennetConnectAttempt;
private Vector rpiTemp;
private int[] rpiIntTemp;
@@ -306,6 +321,26 @@
Logger.error(this, "tempNow is more than 5 seconds past
oldTempNow ("+(tempNow - oldTempNow)+") in PacketSender working with
"+pn.userToString());
oldTempNow = tempNow;
}
+
+ // Consider sending connect requests to our opennet old-peers.
+ // No point if they are NATed, of course... but we don't know whether
they are.
+ OpennetManager om = node.getOpennet();
+ if(om != null) {
+ int connCount = node.peers.quickCountConnectedPeers();
+ int minDelay = connCount == 0 ?
MIN_OLD_OPENNET_CONNECT_DELAY_NO_CONNS : MIN_OLD_OPENNET_CONNECT_DELAY;
+ if(now - timeLastSentOldOpennetConnectAttempt > minDelay &&
+ connCount <=
MIN_CONNECTIONS_TRY_OLD_OPENNET_PEERS &&
+ om.countOldOpennetPeers() > 0 &&
+ now - node.startupTime >
OpennetManager.DROP_STARTUP_DELAY) {
+ PeerNode pn = om.randomOldOpennetNode();
+ if(pn != null) {
+ pn.getOutgoingMangler().sendHandshake(pn);
+ timeLastSentOldOpennetConnectAttempt = now;
+ if(pn.noContactDetails() && node.getPeerNodes().length
> 0 && connCount > 0 && node.random.nextBoolean())
+ pn.startARKFetcher();
+ }
+ }
+ }
if(now - lastClearedOldSwapChains > 10000) {
node.lm.clearOldSwapChains();
Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java 2007-09-22 18:45:24 UTC
(rev 15276)
+++ trunk/freenet/src/freenet/node/PeerManager.java 2007-09-22 20:05:52 UTC
(rev 15277)
@@ -1356,4 +1356,10 @@
return null;
}
+
+ public int quickCountConnectedPeers() {
+ PeerNode[] conns = connectedPeers;
+ if(conns == null) return 0;
+ return connectedPeers.length;
+ }
}