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.