Author: toad
Date: 2006-05-05 18:38:50 +0000 (Fri, 05 May 2006)
New Revision: 8610

Modified:
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/Version.java
Log:
677: metadata field, remember detectedPeer
Add metadata field under noderef for each peer. This is not part of the 
noderef; it is controlled by the local node not the one being referred to.
Use this to remember detectedPeer. (Last known IP address for the node).
This should help a little with the NATs/dynamic IPs problem, it also allows for 
future flags etc per-peer.

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-05-05 18:18:29 UTC (rev 8609)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java       
2006-05-05 18:38:50 UTC (rev 8610)
@@ -273,7 +273,7 @@
                        SimpleFieldSet fs;

                        try {
-                               fs = new SimpleFieldSet(ref, false);
+                               fs = new SimpleFieldSet(ref, true);
                        } catch (IOException e) {
                                this.sendErrorPage(ctx, 200, "Failed to add 
node", "Unable to parse the given text: <pre>"+ref+"</pre> as a node reference: 
"+e+" Please <a href=\".\">Try again</a>.");
                                return;

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java     2006-05-05 18:18:29 UTC 
(rev 8609)
+++ trunk/freenet/src/freenet/node/PeerManager.java     2006-05-05 18:38:50 UTC 
(rev 8610)
@@ -66,7 +66,7 @@
                 while(true) {
                     // Read a single NodePeer
                     SimpleFieldSet fs;
-                    fs = new SimpleFieldSet(br, false);
+                    fs = new SimpleFieldSet(br, true);
                     PeerNode pn;
                     try {
                         pn = new PeerNode(fs, node);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2006-05-05 18:18:29 UTC 
(rev 8609)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2006-05-05 18:38:50 UTC 
(rev 8610)
@@ -318,6 +318,21 @@
         // So go for a filter.
         pingAverage = 
                new TimeDecayingRunningAverage(1, 60000 /* should be 
significantly longer than a typical transfer */, 0, Long.MAX_VALUE);
+        
+        // Now for the metadata.
+        // The metadata sub-fieldset contains data about the node which is not 
part of the node reference.
+        // It belongs to this node, not to the node being described.
+        
+        SimpleFieldSet metadata = fs.subset("metadata");
+        
+        if(metadata != null) {
+        
+               Peer p = new Peer(metadata.get("detected.udp"));
+               if(p != null)
+                       detectedPeer = p;
+               
+        }
+        
     }

     private void randomizeMaxTimeBetweenPacketSends() {
@@ -1010,14 +1025,27 @@
      */
     public void write(Writer w) throws IOException {
         SimpleFieldSet fs = exportFieldSet();
+        SimpleFieldSet meta = exportMetadataFieldSet();
+        if(!meta.isEmpty())
+               fs.put("metadata", meta);
         fs.writeTo(w);
     }

     /**
+     * Export metadata about the node as a SimpleFieldSet
+     */
+    private SimpleFieldSet exportMetadataFieldSet() {
+       SimpleFieldSet fs = new SimpleFieldSet(true);
+       if(detectedPeer != null)
+               fs.put("detected.udp", detectedPeer.toString());
+       return fs;
+       }
+
+       /**
      * Export our noderef as a SimpleFieldSet
      */
     private SimpleFieldSet exportFieldSet() {
-        SimpleFieldSet fs = new SimpleFieldSet(false);
+        SimpleFieldSet fs = new SimpleFieldSet(true);
         if(lastGoodVersion != null)
                fs.put("lastGoodVersion", lastGoodVersion);
         for(int i=0;i<nominalPeer.size();i++)

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-05-05 
18:18:29 UTC (rev 8609)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java 2006-05-05 
18:38:50 UTC (rev 8610)
@@ -711,7 +711,7 @@
         SimpleFieldSet fs;
         System.out.println("Connecting to:\r\n"+content);
         try {
-            fs = new SimpleFieldSet(content, false);
+            fs = new SimpleFieldSet(content, true);
         } catch (IOException e) {
             System.err.println("Did not parse: "+e);
             e.printStackTrace();

Modified: trunk/freenet/src/freenet/node/Version.java
===================================================================
--- trunk/freenet/src/freenet/node/Version.java 2006-05-05 18:18:29 UTC (rev 
8609)
+++ trunk/freenet/src/freenet/node/Version.java 2006-05-05 18:38:50 UTC (rev 
8610)
@@ -20,7 +20,7 @@
        public static final String protocolVersion = "1.0";

        /** The build number of the current revision */
-       private static final int buildNumber = 676;
+       private static final int buildNumber = 677;

        /** Oldest build of Fred we will talk to */
        private static final int lastGoodBuild = 591;


Reply via email to