Author: toad
Date: 2008-08-06 16:20:20 +0000 (Wed, 06 Aug 2008)
New Revision: 21634

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java
   trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
Log:
Significant improvements on nextgens' seednode tester

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-08-06 
13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2008-08-06 
16:20:20 UTC (rev 21634)
@@ -976,7 +976,7 @@
                }

                // At this point we know it's from the peer, so we can report a 
packet received.
-               pn.receivedPacket(true);
+               pn.receivedPacket(true, false);

                sendJFKMessage3(1, 2, 3, nonceInitiator, nonceResponder, 
hisExponential, authenticator, pn, replyTo, unknownInitiator, setupType);

@@ -1153,7 +1153,7 @@
                }

                // At this point we know it's from the peer, so we can report a 
packet received.
-               pn.receivedPacket(true);
+               pn.receivedPacket(true, false);

                // Send reply
                sendJFKMessage4(1, 2, 3, nonceInitiator, 
nonceResponder,initiatorExponential, responderExponential, 
@@ -1954,8 +1954,9 @@
                        tracker.destForgotPacket(realSeqNo);
                }

-               tracker.pn.receivedPacket(false); // Must keep the connection 
open, even if it's an ack packet only and on an incompatible connection - we 
may want to do a UOM transfer e.g.
-
+               tracker.pn.receivedPacket(false, true); // Must keep the 
connection open, even if it's an ack packet only and on an incompatible 
connection - we may want to do a UOM transfer e.g.
+//             System.err.println(tracker.pn.getIdentityString()+" : received 
packet");
+               
                // No sequence number == no messages

                if((seqNumber != -1) && tracker.alreadyReceived(seqNumber)) {
@@ -2586,6 +2587,7 @@
                // pn.getPeer() cannot be null
                try {
                        sendPacket(output, kt.pn.getPeer(), kt.pn, 
alreadyReportedBytes);
+//                     System.err.println(kt.pn.getIdentityString()+" : sent 
packet length "+output.length);
                } catch (LocalAddressException e) {
                        Logger.error(this, "Tried to send data packet to local 
address: "+kt.pn.getPeer()+" for "+kt.pn.allowLocalAddresses());
                }

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2008-08-06 13:57:25 UTC (rev 
21633)
+++ trunk/freenet/src/freenet/node/Node.java    2008-08-06 16:20:20 UTC (rev 
21634)
@@ -3139,8 +3139,8 @@
        /** 
         * Connect this node to another node (for purposes of testing) 
         */
-       public void connectToSeednode(SeedServerPeerNode node) throws 
OpennetDisabledException, FSParseException, PeerParseException, 
ReferenceSignatureVerificationException {
-               
peers.addPeer(createNewSeedServerTestPeerNode(node.exportFieldSet()),false,false);
+       public void connectToSeednode(SeedServerTestPeerNode node) throws 
OpennetDisabledException, FSParseException, PeerParseException, 
ReferenceSignatureVerificationException {
+               peers.addPeer(node,false,false);
        }
        public void connect(Node node) throws FSParseException, 
PeerParseException, ReferenceSignatureVerificationException {
                peers.connect(node.darknetCrypto.exportPublicFieldSet(), 
darknetCrypto.packetMangler);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2008-08-06 13:57:25 UTC 
(rev 21633)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2008-08-06 16:20:20 UTC 
(rev 21634)
@@ -143,6 +143,8 @@
        private long timeLastSentPacket;
        /** When did we last receive a packet? */
        private long timeLastReceivedPacket;
+       /** When did we last receive a non-auth packet? */
+       private long timeLastReceivedDataPacket;
        /** When was isConnected() last true? */
        private long timeLastConnected;
        /** When was isRoutingCompatible() last true? */
@@ -1105,6 +1107,10 @@
        public synchronized long lastReceivedPacketTime() {
                return timeLastReceivedPacket;
        }
+       
+       public synchronized long lastReceivedDataPacketTime() {
+               return timeLastReceivedDataPacket;
+       }

        public synchronized long timeLastConnected() {
                return timeLastConnected;
@@ -1765,8 +1771,9 @@
        * @throws NotConnectedException 
        * @param dontLog If true, don't log an error or throw an exception if 
we are not connected. This
        * can be used in handshaking when the connection hasn't been verified 
yet.
+       * @param dataPacket If this is a real packet, as opposed to a handshake 
packet.
        */
-       void receivedPacket(boolean dontLog) {
+       void receivedPacket(boolean dontLog, boolean dataPacket) {
                synchronized(this) {
                        if((!isConnected) && (!dontLog)) {
                                // Don't log if we are disconnecting, because 
receiving packets during disconnecting is normal.
@@ -1785,6 +1792,8 @@
                long now = System.currentTimeMillis();
                synchronized(this) {
                        timeLastReceivedPacket = now;
+                       if(dataPacket)
+                               timeLastReceivedDataPacket = now;
                }
        }

@@ -1976,7 +1985,7 @@
                        " old: " + previousTracker + " unverified: " + 
unverifiedTracker + " bootID: " + thisBootID + " for " + shortToString());

                // Received a packet
-               receivedPacket(unverified);
+               receivedPacket(unverified, false);

                setPeerNodeStatus(now);


Modified: trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java  2008-08-06 
13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/SeedServerTestPeerNode.java  2008-08-06 
16:20:20 UTC (rev 21634)
@@ -42,5 +42,43 @@

        protected void sendInitialMessages() {}

+       public enum FATE {
+               // Never connected
+               NEVER_CONNECTED,
+               // Connected but no packets received yet
+               CONNECTED_NO_PACKETS_RECEIVED,
+               // Connected and received packets
+               CONNECTED_SUCCESS,
+               // Connected but timed out after no packets received
+               CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED,
+               // Connected but then disconnected for no known reason
+               CONNECTED_DISCONNECTED_UNKNOWN
+       }

+       public void onRemove() {
+               long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+               if(lastReceivedDataPacketTime <= 0 && 
timeLastConnectionCompleted() > 0)
+                       System.err.println(this.getIdentityString()+" : 
REMOVED: TIMEOUT: NO PACKETS RECEIVED AFTER SUCCESSFUL CONNECTION SETUP");
+               else if(timeLastConnectionCompleted() <= 0)
+                       System.err.println(this.getIdentityString()+" : 
REMOVED: NEVER CONNECTED");
+               else
+                       System.err.println(this.getIdentityString()+" : 
REMOVED: UNKNOWN CAUSE");
+               super.onRemove();
+       }
+       
+       public FATE getFate() {
+               long lastReceivedDataPacketTime = lastReceivedDataPacketTime();
+               if(isConnected()) {
+                       if(lastReceivedDataPacketTime <= 0)
+                               return FATE.CONNECTED_NO_PACKETS_RECEIVED;
+                       else
+                               return FATE.CONNECTED_SUCCESS;
+               }
+               long lastConnectionTime = timeLastConnectionCompleted();
+               if(lastConnectionTime <= 0)
+                       return FATE.NEVER_CONNECTED;
+               if(lastReceivedDataPacketTime <= 0)
+                       return FATE.CONNECTED_TIMEOUT_NO_PACKETS_RECEIVED;
+               return FATE.CONNECTED_DISCONNECTED_UNKNOWN;
+       }
 }

Modified: trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java
===================================================================
--- trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java      
2008-08-06 13:57:25 UTC (rev 21633)
+++ trunk/freenet/src/freenet/node/simulator/SeednodePingTest.java      
2008-08-06 16:20:20 UTC (rev 21634)
@@ -15,6 +15,7 @@
 import freenet.node.OpennetDisabledException;
 import freenet.node.SeedServerPeerNode;
 import freenet.node.SeedServerTestPeerNode;
+import freenet.node.SeedServerTestPeerNode.FATE;
 import freenet.support.Executor;
 import freenet.support.Logger;
 import freenet.support.PooledExecutor;
@@ -23,6 +24,8 @@
 import freenet.support.TimeUtil;
 import java.io.File;
 import java.io.IOException;
+import java.util.EnumMap;
+import java.util.Map;
 import java.util.Vector;

 /**
@@ -61,7 +64,8 @@
        Thread.sleep(8000);

        int pingID = 0;
-       while(true) {
+       long deadline = System.currentTimeMillis() + 5*60*1000;
+       while(System.currentTimeMillis() < deadline) {
                int countConnectedSeednodes = 0;
                for(SeedServerPeerNode seednode : 
node.peers.getConnectedSeedServerPeersVector(null)) {
                        try {
@@ -86,8 +90,24 @@
                                System.out.println(seednode.getIdentityString() 
+ " is not connected "+seednode.getHandshakeCount());
                        }
                }
+               Map<FATE, Integer> totals = new 
EnumMap(SeedServerTestPeerNode.FATE.class);
+               for(SeedServerTestPeerNode seednode : seedNodes) {
+                       FATE fate = seednode.getFate();
+                       Integer x = totals.get(fate);
+                       if(x == null)
+                               totals.put(fate, 1);
+                       else
+                               totals.put(fate, x+1);
+                       System.out.println(seednode.getIdentityString() + " : 
"+fate+ " : "+seednode.getPeerNodeStatusString());
+               }
+               System.out.println("TOTALS:");
+               for(FATE fate : totals.keySet()) {
+                       System.out.println(fate + " : "+totals.get(fate));
+               }
                System.out.println("################## 
("+node.peers.countConnectedPeers()+") 
"+countConnectedSeednodes+'/'+node.peers.countSeednodes());
                Thread.sleep(5000);
        }
+    System.out.println("Completed seednodes scan.");
+    System.exit(0);
     }
 }


Reply via email to