Author: zothar
Date: 2006-07-14 23:23:01 +0000 (Fri, 14 Jul 2006)
New Revision: 9616

Modified:
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeDispatcher.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Lock refactoring in Node and PeerNode

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-07-14 22:52:16 UTC (rev 
9615)
+++ trunk/freenet/src/freenet/node/Node.java    2006-07-14 23:23:01 UTC (rev 
9616)
@@ -2332,78 +2332,83 @@
                + FNPPacketMangler.HEADERS_LENGTH_ONE_MESSAGE;

     /* return reject reason as string if should reject, otherwise return null 
*/
-       public synchronized String shouldRejectRequest(boolean canAcceptAnyway, 
boolean isInsert, boolean isSSK, long now) {
+       public String shouldRejectRequest(boolean canAcceptAnyway, boolean 
isInsert, boolean isSSK) {
                dumpByteCostAverages();

                double bwlimitDelayTime = 
throttledPacketSendAverage.currentValue();

                // Do we have the bandwidth?
-               
-               double expected = 
-                       (isInsert ? (isSSK ? 
this.remoteSskInsertBytesSentAverage : this.remoteChkInsertBytesSentAverage)
-                                       : (isSSK ? 
this.remoteSskFetchBytesSentAverage : 
this.remoteChkFetchBytesSentAverage)).currentValue();
-               int expectedSent = (int)Math.max(expected, 0);
-               if(!requestOutputThrottle.instantGrab(expectedSent)) return 
"Insufficient output bandwidth";
-               expected = 
-                       (isInsert ? (isSSK ? 
this.remoteSskInsertBytesReceivedAverage : 
this.remoteChkInsertBytesReceivedAverage)
-                                       : (isSSK ? 
this.remoteSskFetchBytesReceivedAverage : 
this.remoteChkFetchBytesReceivedAverage)).currentValue();
-               int expectedReceived = (int)Math.max(expected, 0);
-               if(!requestInputThrottle.instantGrab(expectedReceived)) {
-                       requestOutputThrottle.recycle(expectedSent);
-                       return "Insufficient input bandwidth";
+               synchronized(this) {
+                       double expected = 
+                               (isInsert ? (isSSK ? 
this.remoteSskInsertBytesSentAverage : this.remoteChkInsertBytesSentAverage)
+                                               : (isSSK ? 
this.remoteSskFetchBytesSentAverage : 
this.remoteChkFetchBytesSentAverage)).currentValue();
+                       int expectedSent = (int)Math.max(expected, 0);
+                       if(!requestOutputThrottle.instantGrab(expectedSent)) 
return "Insufficient output bandwidth";
+                       expected = 
+                               (isInsert ? (isSSK ? 
this.remoteSskInsertBytesReceivedAverage : 
this.remoteChkInsertBytesReceivedAverage)
+                                               : (isSSK ? 
this.remoteSskFetchBytesReceivedAverage : 
this.remoteChkFetchBytesReceivedAverage)).currentValue();
+                       int expectedReceived = (int)Math.max(expected, 0);
+                       if(!requestInputThrottle.instantGrab(expectedReceived)) 
{
+                               requestOutputThrottle.recycle(expectedSent);
+                               return "Insufficient input bandwidth";
+                       }
                }
-

                // If no recent reports, no packets have been sent; correct the 
average downwards.
-               
-               if(throttledPacketSendAverage.lastReportTime() < 
System.currentTimeMillis() - 5000) {  // if last report more than 5 seconds ago
+               long now = System.currentTimeMillis();
+               if(throttledPacketSendAverage.lastReportTime() < now - 5000) {  
// if last report more than 5 seconds ago
                        
outputThrottle.blockingGrab(ESTIMATED_SIZE_OF_ONE_THROTTLED_PACKET);
                        
outputThrottle.recycle(ESTIMATED_SIZE_OF_ONE_THROTTLED_PACKET);
                        long after = System.currentTimeMillis();
                        // Report time it takes to grab the bytes.
                        throttledPacketSendAverage.report(after - now);
                        now = after;
-                       bwlimitDelayTime = 
throttledPacketSendAverage.currentValue();
+                       synchronized(this) {
+                               bwlimitDelayTime = 
throttledPacketSendAverage.currentValue();
+                       }
                }

                // Round trip time
                double pingTime = nodePinger.averagePingTime();
-               if(pingTime > MAX_PING_TIME) {
-                       if((now - lastAcceptedRequest > MAX_INTERREQUEST_TIME) 
&& canAcceptAnyway) {
-                               Logger.minor(this, "Accepting request anyway 
(take one every 10 secs to keep bwlimitDelayTime updated)");
-                               lastAcceptedRequest = now;
-                               return null;
+               synchronized(this) {
+                       if(pingTime > MAX_PING_TIME) {
+                               if((now - lastAcceptedRequest > 
MAX_INTERREQUEST_TIME) && canAcceptAnyway) {
+                                       Logger.minor(this, "Accepting request 
anyway (take one every 10 secs to keep bwlimitDelayTime updated)");
+                                       lastAcceptedRequest = now;
+                                       return null;
+                               }
+                               return ">MAX_PING_TIME";
                        }
-                       return ">MAX_PING_TIME";
-               }
-               if(pingTime > SUB_MAX_PING_TIME) {
-                       double x = ((double)(pingTime - SUB_MAX_PING_TIME)) / 
(MAX_PING_TIME - SUB_MAX_PING_TIME);
-                       if(random.nextDouble() < x) {
-                               return ">SUB_MAX_PING_TIME";
+                       if(pingTime > SUB_MAX_PING_TIME) {
+                               double x = ((double)(pingTime - 
SUB_MAX_PING_TIME)) / (MAX_PING_TIME - SUB_MAX_PING_TIME);
+                               if(random.nextDouble() < x) {
+                                       return ">SUB_MAX_PING_TIME";
+                               }
                        }
                }

                // Bandwidth limited packets
-               
-               Logger.minor(this, "bwlimitDelayTime = "+bwlimitDelayTime);
-               if(bwlimitDelayTime > MAX_THROTTLE_DELAY) {
-                       if((now - lastAcceptedRequest > MAX_INTERREQUEST_TIME) 
&& canAcceptAnyway) {
-                               Logger.minor(this, "Accepting request anyway 
(take one every 10 secs to keep bwlimitDelayTime updated)");
-                               lastAcceptedRequest = now;
-                               return null;
+               synchronized(this) {
+                       Logger.minor(this, "bwlimitDelayTime = 
"+bwlimitDelayTime);
+                       if(bwlimitDelayTime > MAX_THROTTLE_DELAY) {
+                               if((now - lastAcceptedRequest > 
MAX_INTERREQUEST_TIME) && canAcceptAnyway) {
+                                       Logger.minor(this, "Accepting request 
anyway (take one every 10 secs to keep bwlimitDelayTime updated)");
+                                       lastAcceptedRequest = now;
+                                       return null;
+                               }
+                               return ">MAX_THROTTLE_DELAY";
                        }
-                       return ">MAX_THROTTLE_DELAY";
-               }
-               if(bwlimitDelayTime > SUB_MAX_THROTTLE_DELAY) {
-                       double x = ((double)(bwlimitDelayTime - 
SUB_MAX_THROTTLE_DELAY)) / (MAX_THROTTLE_DELAY - SUB_MAX_THROTTLE_DELAY);
-                       if(random.nextDouble() < x) {
-                               return ">SUB_MAX_THROTTLE_DELAY";
+                       if(bwlimitDelayTime > SUB_MAX_THROTTLE_DELAY) {
+                               double x = ((double)(bwlimitDelayTime - 
SUB_MAX_THROTTLE_DELAY)) / (MAX_THROTTLE_DELAY - SUB_MAX_THROTTLE_DELAY);
+                               if(random.nextDouble() < x) {
+                                       return ">SUB_MAX_THROTTLE_DELAY";
+                               }
                        }
+                       
+                       Logger.minor(this, "Accepting request");
+                       
+                       lastAcceptedRequest = now;
                }
-               
-               Logger.minor(this, "Accepting request");
-               
-               lastAcceptedRequest = now;
                return null;
        }


Modified: trunk/freenet/src/freenet/node/NodeDispatcher.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeDispatcher.java  2006-07-14 22:52:16 UTC 
(rev 9615)
+++ trunk/freenet/src/freenet/node/NodeDispatcher.java  2006-07-14 23:23:01 UTC 
(rev 9616)
@@ -122,8 +122,7 @@
             }
             return true;
         }
-               long now = System.currentTimeMillis();
-        String rejectReason = node.shouldRejectRequest(!isSSK, false, isSSK, 
now);
+        String rejectReason = node.shouldRejectRequest(!isSSK, false, isSSK);
         if(rejectReason != null) {
                // can accept 1 CHK request every so often, but not with SSKs 
because they aren't throttled so won't sort out bwlimitDelayTime, which was the 
whole reason for accepting them when overloaded...
                Logger.normal(this, "Rejecting request from 
"+m.getSource().getPeer()+" preemptively because "+rejectReason);
@@ -167,9 +166,8 @@
             }
             return true;
         }
-        long now = System.currentTimeMillis();
         // SSKs don't fix bwlimitDelayTime so shouldn't be accepted when 
overloaded.
-        String rejectReason = node.shouldRejectRequest(!isSSK, true, isSSK, 
now);
+        String rejectReason = node.shouldRejectRequest(!isSSK, true, isSSK);
         if(rejectReason != null) {
                Logger.normal(this, "Rejecting insert from 
"+m.getSource().getPeer()+" preemptively because "+rejectReason);
                Message rejected = DMT.createFNPRejectedOverload(id, true);
@@ -191,6 +189,7 @@
             }
             return true;
         }
+        long now = System.currentTimeMillis();
         if(m.getSpec().equals(DMT.FNPSSKInsertRequest)) {
                SSKInsertHandler rh = new SSKInsertHandler(m, id, node, now);
             Thread t = new Thread(rh, "InsertHandler for "+id+" on 
"+node.portNumber);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-07-14 22:52:16 UTC 
(rev 9615)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-07-14 23:23:01 UTC 
(rev 9616)
@@ -851,14 +851,18 @@
      */
     public boolean shouldSendHandshake() {
         long now = System.currentTimeMillis();
+        boolean tempShouldSendHandshake = false;
         synchronized(this) {
-               return (!isConnected()) &&
+               tempShouldSendHandshake = (!isConnected()) &&
                                (!isDisabled) &&  // don't connect to disabled 
peers
                                (!isListenOnly) &&  // don't send handshake 
requests to isListenOnly peers
                 (handshakeIPs != null) &&
-                (now > sendHandshakeTime) &&
-                !(hasLiveHandshake(now));
+                (now > sendHandshakeTime);
                }
+               if(tempShouldSendHandshake && !(hasLiveHandshake(now))) {
+                       return true;
+               }
+               return false;
     }

     /**
@@ -978,7 +982,7 @@
      * Send a message, right now, on this thread, to this node.
      */
     public void send(Message req, ByteCounter ctr) throws 
NotConnectedException {
-       synchronized (this) {
+       synchronized(this) {
             if(!isConnected()) {
                 Logger.error(this, "Tried to send "+req+" but not connected to 
"+this, new Exception("debug"));
                 return;
@@ -1133,88 +1137,148 @@
                completedHandshake = true;
                handshakeCount = 0;
                bogusNoderef = false;
-               try {
-                       // First, the new noderef
-                       processNewNoderef(data, offset, length);
-               } catch (FSParseException e1) {
-                       bogusNoderef = true;
-                       Logger.error(this, "Failed to parse new noderef for 
"+this+": "+e1, e1);
-                       // Treat as invalid version
-               }
+        }
+               try {
+                       // First, the new noderef
+                       processNewNoderef(data, offset, length);
+               } catch (FSParseException e1) {
+                       synchronized(this) {
+                               bogusNoderef = true;
+                       }
+                       Logger.error(this, "Failed to parse new noderef for 
"+this+": "+e1, e1);
+                       // Treat as invalid version
+               }
+       synchronized(this) {
                isRoutable = true;
-               if(reverseInvalidVersion()) {
-                       try {
-                               
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(lastGoodVersion));
-                       } catch (NumberFormatException e) {
-                               // ignore
-                       }
-                       Logger.normal(this, "Not connecting to "+this+" - 
reverse invalid version "+Version.getVersionString()+" for peer's 
lastGoodversion: "+lastGoodVersion);
-                       verifiedIncompatibleNewerVersion = true;
-                       isRoutable = false;
-                       node.peers.disconnected(this);
-               } else {
-                       verifiedIncompatibleNewerVersion = false;
-               }
-               if(invalidVersion()) {
-                       Logger.normal(this, "Not connecting to "+this+" - 
invalid version "+version);
-                       verifiedIncompatibleOlderVersion = true;
-                       isRoutable = false;
-                       node.peers.disconnected(this);
-               } else {
-                       verifiedIncompatibleOlderVersion = false;
-               }
-               isConnected = true;
-               setPeerNodeStatus(now);
-               KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
-               changedIP(replyTo);
-               if(thisBootID != this.bootID) {
-                       connectedTime = now;
-                       Logger.minor(this, "Changed boot ID from "+bootID+" to 
"+thisBootID+" for "+getPeer());
-                       if(previousTracker != null) {
-                               KeyTracker old = previousTracker;
-                               previousTracker = null;
-                               old.completelyDeprecated(newTracker);
-                       }
-                       previousTracker = null;
-                       if(currentTracker != null) {
-                               KeyTracker old = currentTracker;
-                               currentTracker = null;
-                               old.completelyDeprecated(newTracker);
-                       }
-                       this.bootID = thisBootID;
-                       node.lm.lostOrRestartedNode(this);
-               } // else it's a rekey
-               
-               if(unverified) {
-                       unverifiedTracker = newTracker;
-                       ctx = null;
-                       Logger.minor(this, "sentHandshake() being called for 
unverifiedTracker: "+getPeer());
-                       sentHandshake();
-               } else {
-                       previousTracker = currentTracker;
-                       currentTracker = newTracker;
-                       unverifiedTracker = null;
-                       if(previousTracker != null)
-                               previousTracker.deprecated();
-                       neverConnected = false;
-                       peerAddedTime = 0;  // don't store anymore
-                       setPeerNodeStatus(now);
-                       ctx = null;
-               }
-               if(!isConnected)
-                       node.peers.disconnected(this);
-               Logger.normal(this, "Completed handshake with "+this+" on 
"+replyTo+" - current: "+currentTracker+" old: "+previousTracker+" unverified: 
"+unverifiedTracker+" bootID: "+thisBootID+" getName(): "+getName());
-               try {
-                       receivedPacket(unverified);
-               } catch (NotConnectedException e) {
-                       Logger.error(this, "Disconnected in completedHandshake 
with "+this);
-                       return true; // i suppose
-               }
-               if(isConnected)
-                       node.peers.addConnectedPeer(this);
-               sentInitialMessages = false;
-               return true;
-       }
+        }
+               if(reverseInvalidVersion()) {
+                       try {
+                               
node.setNewestPeerLastGoodVersion(Version.getArbitraryBuildNumber(getLastGoodVersion()));
+                       } catch (NumberFormatException e) {
+                               // ignore
+                       }
+                       Logger.normal(this, "Not connecting to "+this+" - 
reverse invalid version "+Version.getVersionString()+" for peer's 
lastGoodversion: "+getLastGoodVersion());
+               synchronized(this) {
+                               verifiedIncompatibleNewerVersion = true;
+                               isRoutable = false;
+                       }
+                       node.peers.disconnected(this);
+               } else {
+               synchronized(this) {
+                               verifiedIncompatibleNewerVersion = false;
+                       }
+               }
+               if(invalidVersion()) {
+                       Logger.normal(this, "Not connecting to "+this+" - 
invalid version "+getVersion());
+               synchronized(this) {
+                               verifiedIncompatibleOlderVersion = true;
+                               isRoutable = false;
+                       }
+                       node.peers.disconnected(this);
+               } else {
+               synchronized(this) {
+                               verifiedIncompatibleOlderVersion = false;
+                       }
+               }
+       synchronized(this) {
+                       isConnected = true;
+               }
+               setPeerNodeStatus(now);
+               KeyTracker newTracker = new KeyTracker(this, encCipher, encKey);
+               changedIP(replyTo);
+               boolean bootIDChanged = false;
+       synchronized(this) {
+                       bootIDChanged = (thisBootID != this.bootID);
+               }
+               if(bootIDChanged) {
+               synchronized(this) {
+                               connectedTime = now;
+                               Logger.minor(this, "Changed boot ID from 
"+bootID+" to "+thisBootID+" for "+getPeer());
+                       }
+                       boolean previousTrackerIsNull = true;
+                       synchronized(this) {
+                               previousTrackerIsNull = (previousTracker == 
null);
+                       }
+                       if(!previousTrackerIsNull) {
+                               KeyTracker old = null;
+                               synchronized(this) {
+                                       old = previousTracker;
+                                       previousTracker = null;
+                               }
+                               old.completelyDeprecated(newTracker);
+                       }
+                       synchronized(this) {
+                               previousTracker = null;
+                       }
+                       boolean currentTrackerIsNull = true;
+                       synchronized(this) {
+                               currentTrackerIsNull = (currentTracker == null);
+                       }
+                       if(!currentTrackerIsNull) {
+                               KeyTracker old = null;
+                               synchronized(this) {
+                                       old = currentTracker;
+                                       currentTracker = null;
+                               }
+                               old.completelyDeprecated(newTracker);
+                       }
+                       synchronized(this) {
+                               this.bootID = thisBootID;
+                       }
+                       node.lm.lostOrRestartedNode(this);
+               } // else it's a rekey
+               
+               if(unverified) {
+                       synchronized(this) {
+                               unverifiedTracker = newTracker;
+                               ctx = null;
+                       }
+                       Logger.minor(this, "sentHandshake() being called for 
unverifiedTracker: "+getPeer());
+                       sentHandshake();
+               } else {
+                       synchronized(this) {
+                               previousTracker = currentTracker;
+                               currentTracker = newTracker;
+                               unverifiedTracker = null;
+                       }
+                       boolean previousTrackerIsNull = true;
+                       synchronized(this) {
+                               previousTrackerIsNull = (previousTracker == 
null);
+                       }
+                       if(!previousTrackerIsNull) {
+                               KeyTracker localPreviousTracker = null;
+                               synchronized(this) {
+                                       localPreviousTracker = previousTracker;
+                               }
+                               localPreviousTracker.deprecated();
+                       }
+                       synchronized(this) {
+                               neverConnected = false;
+                               peerAddedTime = 0;  // don't store anymore
+                       }
+                       setPeerNodeStatus(now);
+                       synchronized(this) {
+                               ctx = null;
+                       }
+               }
+               if(!isConnected())
+                       node.peers.disconnected(this);
+               synchronized(this) {
+                       Logger.normal(this, "Completed handshake with "+this+" 
on "+replyTo+" - current: "+currentTracker+" old: "+previousTracker+" 
unverified: "+unverifiedTracker+" bootID: "+thisBootID+" getName(): 
"+getName());
+               }
+               try {
+                       receivedPacket(unverified);
+               } catch (NotConnectedException e) {
+                       Logger.error(this, "Disconnected in completedHandshake 
with "+this);
+                       return true; // i suppose
+               }
+               if(isConnected()) {
+                       node.peers.addConnectedPeer(this);
+               }
+               synchronized(this) {
+                       sentInitialMessages = false;
+               }
+               return true;
     }

     boolean sentInitialMessages = false;
@@ -1516,6 +1580,10 @@
                return version;
        }

+       private synchronized String getLastGoodVersion(){
+               return lastGoodVersion;
+       }
+       
        public String getSimpleVersion(){
                return 
String.valueOf(Version.getArbitraryBuildNumber(getVersion()));
        }
@@ -1534,21 +1602,21 @@
     /**
      * Export metadata about the node as a SimpleFieldSet
      */
-    public synchronized SimpleFieldSet exportMetadataFieldSet() {
+    public SimpleFieldSet exportMetadataFieldSet() {
        SimpleFieldSet fs = new SimpleFieldSet(true);
-       if(detectedPeer != null)
-               fs.put("detected.udp", detectedPeer.toString());
-       if(timeLastReceivedPacket > 0)
-               fs.put("timeLastReceivedPacket", 
Long.toString(timeLastReceivedPacket));
-       if(peerAddedTime > 0)
-               fs.put("peerAddedTime", Long.toString(peerAddedTime));
-       if(neverConnected)
+       if(getDetectedPeer() != null)
+               fs.put("detected.udp", getDetectedPeer().toString());
+       if(lastReceivedPacketTime() > 0)
+               fs.put("timeLastReceivedPacket", 
Long.toString(lastReceivedPacketTime()));
+       if(getPeerAddedTime() > 0)
+               fs.put("peerAddedTime", Long.toString(getPeerAddedTime()));
+       if(neverConnected())
                fs.put("neverConnected", "true");
-       if(isDisabled)
+       if(isDisabled())
                fs.put("isDisabled", "true");
-       if(isListenOnly)
+       if(isListenOnly())
                fs.put("isListenOnly", "true");
-       if(allowLocalAddresses)
+       if(allowLocalAddresses())
                fs.put("allowLocalAddresses", "true");
        return fs;
        }
@@ -1559,44 +1627,51 @@
     public SimpleFieldSet exportVolatileFieldSet() {
                SimpleFieldSet fs = new SimpleFieldSet(true);
                long now = System.currentTimeMillis();
-       synchronized(this) {
-                       fs.put("averagePingTime", 
Double.toString(averagePingTime()));
-                       long idle = now - lastReceivedPacketTime();
-                       if(idle > (60 * 1000)) {  // 1 minute
-                               fs.put("idle", Long.toString(idle));
-                       }
-                       fs.put("lastRoutingBackoffReason", 
getLastBackoffReason());
-                       long tempPeerAddedTime = getPeerAddedTime();
-                       if(tempPeerAddedTime > 1) {
-                               fs.put("peerAddedTime", 
Long.toString(tempPeerAddedTime));
-                       }
+               fs.put("averagePingTime", Double.toString(averagePingTime()));
+               long idle = now - lastReceivedPacketTime();
+               if(idle > (60 * 1000)) {  // 1 minute
+                       fs.put("idle", Long.toString(idle));
+               }
+               fs.put("lastRoutingBackoffReason", getLastBackoffReason());
+               long tempPeerAddedTime = getPeerAddedTime();
+               if(tempPeerAddedTime > 1) {
+                       fs.put("peerAddedTime", 
Long.toString(tempPeerAddedTime));
+               }
+               synchronized(this) {
                        fs.put("routingBackoffPercent", 
Double.toString(backedOffPercent.currentValue() * 100));
-                       fs.put("routingBackoff", 
Long.toString((Math.max(getRoutingBackedOffUntil() - now, 0))));
-                       fs.put("routingBackoffLength", 
Integer.toString(getRoutingBackoffLength()));
-                       fs.put("status", getPeerNodeStatusString());
                }
+               fs.put("routingBackoff", 
Long.toString((Math.max(getRoutingBackedOffUntil() - now, 0))));
+               fs.put("routingBackoffLength", 
Integer.toString(getRoutingBackoffLength()));
+               fs.put("status", getPeerNodeStatusString());
                return fs;
        }

        /**
      * Export the peer's noderef as a SimpleFieldSet
      */
-    public synchronized SimpleFieldSet exportFieldSet() {
+    public SimpleFieldSet exportFieldSet() {
         SimpleFieldSet fs = new SimpleFieldSet(true);
-        if(lastGoodVersion != null)
-               fs.put("lastGoodVersion", lastGoodVersion);
-        for(int i=0;i<nominalPeer.size();i++)
-               fs.put("physical.udp", nominalPeer.get(i).toString());
+        if(getLastGoodVersion() != null)
+               fs.put("lastGoodVersion", getLastGoodVersion());
+               synchronized(this) {
+                       for(int i=0;i<nominalPeer.size();i++) {
+                               fs.put("physical.udp", 
nominalPeer.get(i).toString());
+                       }
+               }
         fs.put("base64", "true");
-        fs.put("identity", Base64.encode(identity));
-        fs.put("location", Double.toString(currentLocation.getValue()));
-        fs.put("testnet", Boolean.toString(testnetEnabled));
-        fs.put("version", version);
+        fs.put("identity", getIdentityString());
+        fs.put("location", Double.toString(getLocation().getValue()));
+               synchronized(this) {
+               fs.put("testnet", Boolean.toString(testnetEnabled));
+               }
+        fs.put("version", getVersion());
         fs.put("myName", getName());
-        if(myARK != null) {
-               // Decrement it because we keep the number we would like to 
fetch, not the last one fetched.
-               fs.put("ark.number", Long.toString(myARK.suggestedEdition - 1));
-               fs.put("ark.pubURI", myARK.getBaseSSK().toString(false));       
                        
+               synchronized(this) {
+                       if(myARK != null) {
+                               // Decrement it because we keep the number we 
would like to fetch, not the last one fetched.
+                               fs.put("ark.number", 
Long.toString(myARK.suggestedEdition - 1));
+                               fs.put("ark.pubURI", 
myARK.getBaseSSK().toString(false));
+                       }
         }
         return fs;
     }
@@ -1882,7 +1957,7 @@
                return completedHandshake;
        }

-       public synchronized void addToLocalNodeSentMessagesToStatistic (Message 
m)
+       public void addToLocalNodeSentMessagesToStatistic (Message m)
        {
        String messageSpecName;
        Long count;
@@ -1902,7 +1977,7 @@
                localNodeSentMessageTypes.put(messageSpecName,count);
        }

-       public synchronized void addToLocalNodeReceivedMessagesFromStatistic 
(Message m)
+       public void addToLocalNodeReceivedMessagesFromStatistic (Message m)
        {
        String messageSpecName;
        Long count;
@@ -1923,13 +1998,13 @@
        }

        //FIXME: maybe return a copy insteed
-       public synchronized Hashtable getLocalNodeSentMessagesToStatistic ()
+       public Hashtable getLocalNodeSentMessagesToStatistic ()
        {
                return localNodeSentMessageTypes;
        }

        //FIXME: maybe return a copy insteed
-       public synchronized Hashtable getLocalNodeReceivedMessagesFromStatistic 
()
+       public Hashtable getLocalNodeReceivedMessagesFromStatistic ()
        {
                return localNodeReceivedMessageTypes;
        }
@@ -2124,7 +2199,7 @@
                return false;
        }

-       protected synchronized void invalidate(){
+       protected synchronized void invalidate() {
                isRoutable = false;
         Logger.normal(this, "Invalidated "+this);
        }
@@ -2132,4 +2207,8 @@
        public synchronized boolean allowLocalAddresses() {
                return allowLocalAddresses;
        }
+       
+       private synchronized boolean neverConnected() {
+               return neverConnected;
+       }
 }


Reply via email to