Author: toad
Date: 2006-11-29 01:20:16 +0000 (Wed, 29 Nov 2006)
New Revision: 11105

Modified:
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeARKInserter.java
Log:
Don't include unnecessary, invariant fields in the noderefs exchanged at the 
end of the connection setup process.
More work will eventually be done on this, but this should shrink the phase 2/3 
auth packets enough to prevent most MTU problems.

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-11-29 
01:03:18 UTC (rev 11104)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2006-11-29 
01:20:16 UTC (rev 11105)
@@ -386,7 +386,7 @@
         PCFBMode pcfb = new PCFBMode(cipher);
         byte[] iv = new byte[pcfb.lengthIV()];

-        byte[] myRef = node.myPublicRefCompressed();
+        byte[] myRef = node.myCompressedSetupRef();
         byte[] data = new byte[myRef.length + 8];
         System.arraycopy(Fields.longToBytes(node.bootID), 0, data, 0, 8);
         System.arraycopy(myRef, 0, data, 8, myRef.length);

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java    2006-11-29 01:03:18 UTC (rev 
11104)
+++ trunk/freenet/src/freenet/node/Node.java    2006-11-29 01:20:16 UTC (rev 
11105)
@@ -1610,35 +1610,49 @@
        }

        public SimpleFieldSet exportPrivateFieldSet() {
-               SimpleFieldSet fs = exportPublicFieldSet();
+               SimpleFieldSet fs = exportPublicFieldSet(false);
                fs.put("dsaPrivKey", myPrivKey.asFieldSet());
                fs.put("ark.privURI", 
this.myARK.getInsertURI().toString(false));
                return fs;
        }

        /**
+        * Export my node reference so that another node can connect to me.
+        * Public version, includes everything apart from private keys.
+        * @see exportPublicFieldSet(boolean forSetup).
+        */
+       public SimpleFieldSet exportPublicFieldSet() {
+               return exportPublicFieldSet(false);
+       }
+       
+       /**
         * Export my reference so that another node can connect to me.
-        * @return
+        * @param forSetup If true, strip out everything that isn't needed for 
the references
+        * exchanged immediately after connection setup. I.e. strip out 
everything that is invariant,
+        * or that can safely be exchanged later.
         */
-       public SimpleFieldSet exportPublicFieldSet() {
+       SimpleFieldSet exportPublicFieldSet(boolean forSetup) {
                SimpleFieldSet fs = new SimpleFieldSet();
                Peer[] ips = ipDetector.getPrimaryIPAddress();
                if(ips != null) {
                        for(int i=0;i<ips.length;i++)
-                               fs.put("physical.udp", ips[i].toString());
+                               fs.put("physical.udp", ips[i].toString()); // 
Keep; important that node know all our IPs
                }
-               fs.put("identity", Base64.encode(myIdentity));
-               fs.put("location", 
Double.toString(lm.getLocation().getValue()));
-               fs.put("version", Version.getVersionString());
-               fs.put("testnet", Boolean.toString(testnetEnabled));
-               fs.put("lastGoodVersion", Version.getLastGoodVersionString());
+               fs.put("identity", Base64.encode(myIdentity)); // FIXME 
!forSetup after 11104 is mandatory
+               fs.put("location", 
Double.toString(lm.getLocation().getValue())); // FIXME maybe !forSetup; see 
#943
+               fs.put("version", Version.getVersionString()); // Keep, vital 
that peer know our version
+               fs.put("testnet", Boolean.toString(testnetEnabled)); // Vital 
that peer know this!
+               fs.put("lastGoodVersion", Version.getLastGoodVersionString()); 
// Also vital
                if(testnetEnabled)
-                       fs.put("testnetPort", 
Integer.toString(testnetHandler.getPort()));
-               fs.put("myName", myName);
-               fs.put("dsaGroup", myCryptoGroup.asFieldSet());
-               fs.put("dsaPubKey", myPubKey.asFieldSet());
-               fs.put("ark.number", Long.toString(this.myARKNumber));
-               fs.put("ark.pubURI", this.myARK.getURI().toString(false));
+                       fs.put("testnetPort", 
Integer.toString(testnetHandler.getPort())); // Useful, saves a lot of 
complexity
+               fs.put("myName", myName); // FIXME see #942
+               if(!forSetup) {
+                       // These are invariant. They cannot change on 
connection setup. They can safely be excluded.
+                       fs.put("dsaGroup", myCryptoGroup.asFieldSet());
+                       fs.put("dsaPubKey", myPubKey.asFieldSet());
+               }
+               fs.put("ark.number", Long.toString(this.myARKNumber)); // Can 
be changed on setup
+               fs.put("ark.pubURI", this.myARK.getURI().toString(false)); // 
Can be changed on setup

                synchronized (referenceSync) {
                        if(myReferenceSignature == null || mySignedReference == 
null || !mySignedReference.equals(fs.toOrderedString())){
@@ -2404,10 +2418,11 @@
        }

        /**
-        * @return Our reference, compressed
+        * The part of our node reference which is exchanged in the connection 
setup, compressed.
+        * @see exportSetupFieldSet()
         */
-       public byte[] myPublicRefCompressed() {
-               SimpleFieldSet fs = exportPublicFieldSet();
+       public byte[] myCompressedSetupRef() {
+               SimpleFieldSet fs = exportPublicFieldSet(true);
                ByteArrayOutputStream baos = new ByteArrayOutputStream();
                DeflaterOutputStream gis;
                gis = new DeflaterOutputStream(baos);

Modified: trunk/freenet/src/freenet/node/NodeARKInserter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-11-29 01:03:18 UTC 
(rev 11104)
+++ trunk/freenet/src/freenet/node/NodeARKInserter.java 2006-11-29 01:20:16 UTC 
(rev 11105)
@@ -105,7 +105,7 @@

                if(logMINOR) Logger.minor(this, "starting inserter");

-               SimpleFieldSet fs = this.node.exportPublicFieldSet();
+               SimpleFieldSet fs = this.node.exportPublicFieldSet(true); // 
More or less

                // Remove some unnecessary fields that only cause collisions.



Reply via email to