Author: toad
Date: 2007-07-13 11:04:44 +0000 (Fri, 13 Jul 2007)
New Revision: 14060

Modified:
   trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
   trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
   trunk/freenet/src/freenet/node/DarknetPeerNode.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
Log:
New connection failure code: CONN_ERROR - any unknown connection failure e.g. 
bogus noderef. Usually caused by a buggy node.

Modified: trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java      
2007-07-13 10:06:45 UTC (rev 14059)
+++ trunk/freenet/src/freenet/clients/http/ConnectionsToadlet.java      
2007-07-13 11:04:44 UTC (rev 14060)
@@ -160,9 +160,10 @@
                int numberOfListening = 
PeerNodeStatus.getPeerStatusCount(peerNodeStatuses, 
PeerManager.PEER_NODE_STATUS_LISTENING);
                int numberOfListenOnly = 
PeerNodeStatus.getPeerStatusCount(peerNodeStatuses, 
PeerManager.PEER_NODE_STATUS_LISTEN_ONLY);
                int numberOfClockProblem = 
PeerNodeStatus.getPeerStatusCount(peerNodeStatuses, 
PeerManager.PEER_NODE_STATUS_CLOCK_PROBLEM);
+               int numberOfError = 
PeerNodeStatus.getPeerStatusCount(peerNodeStatuses, 
PeerManager.PEER_NODE_STATUS_CONN_ERROR);

                int numberOfSimpleConnected = numberOfConnected + 
numberOfRoutingBackedOff;
-               int numberOfNotConnected = numberOfTooNew + numberOfTooOld + 
numberOfDisconnected + numberOfNeverConnected + numberOfDisabled + 
numberOfBursting + numberOfListening + numberOfListenOnly + 
numberOfClockProblem;
+               int numberOfNotConnected = numberOfTooNew + numberOfTooOld + 
numberOfDisconnected + numberOfNeverConnected + numberOfDisabled + 
numberOfBursting + numberOfListening + numberOfListenOnly + 
numberOfClockProblem + numberOfError;
                String titleCountString = null;
                if(advancedModeEnabled) {
                        titleCountString = "(" + numberOfConnected + '/' + 
numberOfRoutingBackedOff + '/' + numberOfTooNew + '/' + numberOfTooOld + '/' + 
numberOfNotConnected + ')';
@@ -295,6 +296,11 @@
                                peerStatsListenOnlyListItem.addChild("span", 
new String[] { "class", "title", "style" }, new String[] { 
"peer_clock_problem", l10n("clockProblem"), "border-bottom: 1px dotted; cursor: 
help;" }, l10n("clockProblemShort"));
                                peerStatsListenOnlyListItem.addChild("span", 
":\u00a0" + numberOfClockProblem);
                        }
+                       if (numberOfError > 0) {
+                               HTMLNode peerStatsListenOnlyListItem = 
peerStatsList.addChild("li").addChild("span");
+                               peerStatsListenOnlyListItem.addChild("span", 
new String[] { "class", "title", "style" }, new String[] { 
"peer_clock_problem", l10n("error"), "border-bottom: 1px dotted; cursor: help;" 
}, l10n("errorShort"));
+                               peerStatsListenOnlyListItem.addChild("span", 
":\u00a0" + numberOfError);
+                       }

                        // Peer routing backoff reason box
                        if(advancedModeEnabled) {

Modified: trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties
===================================================================
--- trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-07-13 
10:06:45 UTC (rev 14059)
+++ trunk/freenet/src/freenet/l10n/freenet.l10n.en.properties   2007-07-13 
11:04:44 UTC (rev 14060)
@@ -113,6 +113,8 @@
 DarknetConnectionsToadlet.disabled=Not connected and disabled: because the 
user has instructed the node not to connect to these peers.
 DarknetConnectionsToadlet.disabledShort=Disabled
 DarknetConnectionsToadlet.enterDescription=Enter description:
+DarknetConnectionsToadlet.error=Connection failed (corrupt?)
+DarknetConnectionsToadlet.errorShort=Error
 DarknetConnectionsToadlet.failedToAddNodeInternalError=Unable to parse the 
given text as a node reference. Please report the following to the developers:
 DarknetConnectionsToadlet.failedToAddNodeInternalErrorTitle=Failed to Add 
Node: Internal Error
 DarknetConnectionsToadlet.failedToAddNodeTitle=Failed To Add Node
@@ -599,6 +601,8 @@
 OpennetConnectionsToadlet.peersListTitle=My Opennet Peers (untrusted peers 
added by the node)
 PNGFilter.invalidHeader=The file you tried to fetch is not a PNG. It does not 
include a valid PNG header. It might be some other file format, and your 
browser may do something dangerous with it, therefore we have blocked it.
 PNGFilter.invalidHeaderTitle=Not a PNG - invalid header
+PeerManagerUserAlert.connErrorTitle=Some peers cannot connect
+PeerManagerUserAlert.connError=${count} of your peers cannot connect for an 
unknown reason, possibly because of a buggy node or a corrupt node reference.
 PeerManagerUserAlert.clockProblemTitle=Clock problem
 PeerManagerUserAlert.clockProblem=${count} of your nodes are unable to connect 
because their system clock is more than 24 hours different to yours. Please 
check whether your computer has the correct time. Incorrect time will cause 
many node and client mechanisms to fail.
 PeerManagerUserAlert.noConns=This node has not been able to connect to any 
other nodes so far; it will not be able to function normally. Hopefully some of 
your peers will connect soon; if not, try to get some more peers. You need at 
least 3 peers at any time, and should aim for 5-10.

Modified: trunk/freenet/src/freenet/node/DarknetPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-07-13 10:06:45 UTC 
(rev 14059)
+++ trunk/freenet/src/freenet/node/DarknetPeerNode.java 2007-07-13 11:04:44 UTC 
(rev 14060)
@@ -221,6 +221,7 @@
                if(status == PeerManager.PEER_NODE_STATUS_CONNECTED || 
                                status == 
PeerManager.PEER_NODE_STATUS_CLOCK_PROBLEM ||
                                status == 
PeerManager.PEER_NODE_STATUS_ROUTING_BACKED_OFF ||
+                               status == 
PeerManager.PEER_NODE_STATUS_CONN_ERROR ||
                                status == PeerManager.PEER_NODE_STATUS_TOO_NEW 
||
                                status == PeerManager.PEER_NODE_STATUS_TOO_OLD)
                        return status;

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2007-07-13 10:06:45 UTC 
(rev 14059)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2007-07-13 11:04:44 UTC 
(rev 14060)
@@ -88,6 +88,7 @@
        public static final int PEER_NODE_STATUS_LISTENING = 9;
        public static final int PEER_NODE_STATUS_LISTEN_ONLY = 10;
        public static final int PEER_NODE_STATUS_CLOCK_PROBLEM = 11;
+       public static final int PEER_NODE_STATUS_CONN_ERROR = 12;

     /**
      * Create a PeerManager by reading a list of peers from
@@ -844,6 +845,7 @@
                        ua.peers = peers;
                        ua.neverConn = 
getPeerNodeStatusSize(PEER_NODE_STATUS_NEVER_CONNECTED);
                        ua.clockProblem = 
getPeerNodeStatusSize(PEER_NODE_STATUS_CLOCK_PROBLEM);
+                       ua.connError = 
getPeerNodeStatusSize(PEER_NODE_STATUS_CONN_ERROR);
                }
                if(anyConnectedPeers())
                        node.onConnectedPeer();

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-07-13 10:06:45 UTC 
(rev 14059)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-07-13 11:04:44 UTC 
(rev 14060)
@@ -1399,7 +1399,10 @@
                boolean routable = true;
                boolean newer = false;
                boolean older = false;
-               if(reverseInvalidVersion()) {
+               if(bogusNoderef) {
+                       Logger.normal(this, "Not connecting to "+this+" - bogus 
noderef");
+                       routable = false;
+               } else if(reverseInvalidVersion()) {
                        try {
                                
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion()));
                        } catch (NumberFormatException e) {
@@ -1410,7 +1413,7 @@
                } else {
                        newer = false;
                }
-               if(invalidVersion()) {
+               if(forwardInvalidVersion()) {
                        Logger.normal(this, "Not connecting to "+this+" - 
invalid version "+getVersion());
                        older = true;
                        routable = false;
@@ -1591,11 +1594,15 @@
     }

     private synchronized boolean invalidVersion() {
-        return bogusNoderef || (!Version.checkGoodVersion(version));
+       return bogusNoderef || forwardInvalidVersion() || 
reverseInvalidVersion();
     }

+    private synchronized boolean forwardInvalidVersion() {
+        return !Version.checkGoodVersion(version);
+    }
+    
     private synchronized boolean reverseInvalidVersion() {
-        return bogusNoderef || 
(!Version.checkArbitraryGoodVersion(Version.getVersionString(),lastGoodVersion));
+        return 
!Version.checkArbitraryGoodVersion(Version.getVersionString(),lastGoodVersion);
     }

     public boolean publicInvalidVersion() {
@@ -2366,6 +2373,8 @@
                                        previousRoutingBackoffReason = null;
                                }
                        }
+               } else if(isConnected() && bogusNoderef) {
+                       peerNodeStatus = 
PeerManager.PEER_NODE_STATUS_CONN_ERROR;
                } else if(isConnected() && verifiedIncompatibleNewerVersion) {
                        peerNodeStatus = PeerManager.PEER_NODE_STATUS_TOO_NEW;
                } else if(isConnected && verifiedIncompatibleOlderVersion) {
@@ -2434,7 +2443,7 @@
        }

        synchronized void updateShouldDisconnectNow() {
-               verifiedIncompatibleOlderVersion = invalidVersion();
+               verifiedIncompatibleOlderVersion = forwardInvalidVersion();
                verifiedIncompatibleNewerVersion = reverseInvalidVersion();
        }


Modified: trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java
===================================================================
--- trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2007-07-13 10:06:45 UTC (rev 14059)
+++ trunk/freenet/src/freenet/node/useralerts/PeerManagerUserAlert.java 
2007-07-13 11:04:44 UTC (rev 14060)
@@ -14,6 +14,7 @@
        public int peers = 0;
        public int neverConn = 0;
        public int clockProblem = 0;
+       public int connError = 0;
        boolean isValid=true;
        int bwlimitDelayTime = 1;
        int nodeAveragePingTime = 1;
@@ -32,8 +33,11 @@
        static final int MAX_NEVER_CONNECTED_PEER_ALERT_THRESHOLD = 5;

        /** How many peers with clock problems can we have without getting 
alerted about too many */
-       static final int MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD = 5;
+       static final int MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD = 5;

+       /** How many peers with unknown connection errors can we have without 
getting alerted */
+       static final int MIN_CONN_ERROR_ALERT_THRESHOLD = 5;
+       
        /** How many peers we can have without getting alerted about too many */
        static final int MAX_PEER_ALERT_THRESHOLD = 100;

@@ -57,8 +61,10 @@
                        return l10n("onlyFewConnsTitle", "count", 
Integer.toString(conns));
                if(neverConn > MAX_NEVER_CONNECTED_PEER_ALERT_THRESHOLD)
                        return l10n("tooManyNeverConnectedTitle");
-               if(clockProblem > MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD)
+               if(clockProblem > MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD)
                        return l10n("clockProblemTitle");
+               if(connError > MIN_CONN_ERROR_ALERT_THRESHOLD)
+                       return l10n("connErrorTitle");
                if((peers - conns) > MAX_DISCONN_PEER_ALERT_THRESHOLD)
                        return l10n("tooManyDisconnectedTitle");
                if(conns > MAX_CONN_ALERT_THRESHOLD)
@@ -94,8 +100,10 @@
                                return l10n("noPeersTestnet");
                        else
                                return l10n("noPeersDarknet"); 
-               } else if(conns < 3 && clockProblem > 
MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
+               } else if(conns < 3 && clockProblem > 
MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
                        s = l10n("clockProblem", "count", 
Integer.toString(clockProblem));
+               } else if(conns < 3 && connError > 
MIN_CONN_ERROR_ALERT_THRESHOLD) {
+                       s = l10n("connError", "count", 
Integer.toString(connError));
                } else if(conns == 0) {
                        return l10n("noConns");
                } else if(conns == 1) {
@@ -104,8 +112,10 @@
                        return l10n("twoConns");
                } else if(neverConn > MAX_NEVER_CONNECTED_PEER_ALERT_THRESHOLD) 
{
                        s = l10n("tooManyNeverConnected", "count", 
Integer.toString(neverConn));
-               } else if(clockProblem > 
MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
+               } else if(clockProblem > 
MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
                        s = l10n("clockProblem", "count", 
Integer.toString(clockProblem));
+               } else if(connError > MIN_CONN_ERROR_ALERT_THRESHOLD) {
+                       s = l10n("connError", "count", 
Integer.toString(connError));
                } else if((peers - conns) > MAX_DISCONN_PEER_ALERT_THRESHOLD){
                        s = l10n("tooManyDisconnected", new String[] { "count", 
"max" }, 
                                        new String[] { 
Integer.toString(disconnected), 
Integer.toString(MAX_DISCONN_PEER_ALERT_THRESHOLD)});
@@ -160,8 +170,10 @@
                                alertNode.addChild("#", l10n("noPeersTestnet"));
                        else
                                alertNode.addChild("#", 
l10n("noPeersDarknet")); 
-               } else if(conns < 3 && clockProblem > 
MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
+               } else if(conns < 3 && clockProblem > 
MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
                        alertNode.addChild("#", l10n("clockProblem", "count", 
Integer.toString(clockProblem)));
+               } else if(conns < 3 && connError > 
MIN_CONN_ERROR_ALERT_THRESHOLD) {
+                       alertNode.addChild("#", l10n("connError", "count", 
Integer.toString(connError)));
                } else if (conns == 0) {
                        alertNode.addChild("#", l10n("noConns"));
                } else if (conns == 1) {
@@ -172,8 +184,10 @@
                        L10n.addL10nSubstitution(alertNode, 
"PeerManagerUserAlert.tooManyNeverConnectedWithLink",
                                        new String[] { "link", "/link", "count" 
},
                                        new String[] { "<a 
href=\"/friends/myref.fref\">", "</a>", Integer.toString(neverConn) });
-               } else if (clockProblem > 
MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
+               } else if (clockProblem > 
MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) {
                        alertNode.addChild("#", l10n("clockProblem", "count", 
Integer.toString(clockProblem)));
+               } else if(connError > MIN_CONN_ERROR_ALERT_THRESHOLD) {
+                       alertNode.addChild("#", l10n("connError", "count", 
Integer.toString(connError)));
                } else if ((peers - conns) > MAX_DISCONN_PEER_ALERT_THRESHOLD) {
                        alertNode.addChild("#", l10n("tooManyDisconnected", new 
String[] { "count", "max" }, new String[] { Integer.toString(disconnected), 
Integer.toString(MAX_DISCONN_PEER_ALERT_THRESHOLD)}));
                } else if (conns > MAX_CONN_ALERT_THRESHOLD) {
@@ -219,7 +233,8 @@
                                ((peers - conns) > 
MAX_DISCONN_PEER_ALERT_THRESHOLD) ||
                                (conns > MAX_CONN_ALERT_THRESHOLD) ||
                                (peers > MAX_PEER_ALERT_THRESHOLD) ||
-                               (clockProblem > 
MAX_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) ||
+                               (clockProblem > 
MIN_CLOCK_PROBLEM_PEER_ALERT_THRESHOLD) ||
+                               (connError > MIN_CONN_ERROR_ALERT_THRESHOLD) ||
                                (n.bwlimitDelayAlertRelevant && 
(bwlimitDelayTime > NodeStats.MAX_BWLIMIT_DELAY_TIME_ALERT_THRESHOLD)) ||
                                (n.nodeAveragePingAlertRelevant && 
(nodeAveragePingTime > NodeStats.MAX_NODE_AVERAGE_PING_TIME_ALERT_THRESHOLD)) ||
                                (oldestNeverConnectedPeerAge > 
MAX_OLDEST_NEVER_CONNECTED_PEER_AGE_ALERT_THRESHOLD)) &&


Reply via email to