[freenet-cvs] r11745 - in trunk/freenet/src/freenet: client client/async clients/http config crypt node node/fcp support support/io support/math tools

toad at freenetproject.org toad at freenetproject.org
Sat Feb 10 17:30:16 UTC 2007


Author: toad
Date: 2007-02-10 17:30:13 +0000 (Sat, 10 Feb 2007)
New Revision: 11745

Modified:
   trunk/freenet/src/freenet/client/FailureCodeTracker.java
   trunk/freenet/src/freenet/client/async/SingleFileInserter.java
   trunk/freenet/src/freenet/client/async/SplitFileInserter.java
   trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
   trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
   trunk/freenet/src/freenet/clients/http/N2NTMToadlet.java
   trunk/freenet/src/freenet/config/FilePersistentConfig.java
   trunk/freenet/src/freenet/config/PersistentConfig.java
   trunk/freenet/src/freenet/config/SubConfig.java
   trunk/freenet/src/freenet/crypt/DSAGroup.java
   trunk/freenet/src/freenet/crypt/DSAPrivateKey.java
   trunk/freenet/src/freenet/crypt/DSAPublicKey.java
   trunk/freenet/src/freenet/node/Node.java
   trunk/freenet/src/freenet/node/NodeStarter.java
   trunk/freenet/src/freenet/node/PeerManager.java
   trunk/freenet/src/freenet/node/PeerNode.java
   trunk/freenet/src/freenet/node/RequestStarterGroup.java
   trunk/freenet/src/freenet/node/TextModeClientInterface.java
   trunk/freenet/src/freenet/node/ThrottleWindowManager.java
   trunk/freenet/src/freenet/node/fcp/AddPeer.java
   trunk/freenet/src/freenet/node/fcp/AllDataMessage.java
   trunk/freenet/src/freenet/node/fcp/ClientGet.java
   trunk/freenet/src/freenet/node/fcp/ClientGetMessage.java
   trunk/freenet/src/freenet/node/fcp/ClientHelloMessage.java
   trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
   trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
   trunk/freenet/src/freenet/node/fcp/ClientPutDirMessage.java
   trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
   trunk/freenet/src/freenet/node/fcp/ClientRequest.java
   trunk/freenet/src/freenet/node/fcp/CloseConnectionDuplicateClientNameMessage.java
   trunk/freenet/src/freenet/node/fcp/ConfigData.java
   trunk/freenet/src/freenet/node/fcp/DataFoundMessage.java
   trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java
   trunk/freenet/src/freenet/node/fcp/EndListPeersMessage.java
   trunk/freenet/src/freenet/node/fcp/EndListPersistentRequestsMessage.java
   trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
   trunk/freenet/src/freenet/node/fcp/FinishedCompressionMessage.java
   trunk/freenet/src/freenet/node/fcp/GenerateSSKMessage.java
   trunk/freenet/src/freenet/node/fcp/GetConfig.java
   trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java
   trunk/freenet/src/freenet/node/fcp/GetNode.java
   trunk/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
   trunk/freenet/src/freenet/node/fcp/IdentifierCollisionMessage.java
   trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
   trunk/freenet/src/freenet/node/fcp/ListPeersMessage.java
   trunk/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
   trunk/freenet/src/freenet/node/fcp/ModifyConfig.java
   trunk/freenet/src/freenet/node/fcp/ModifyPeer.java
   trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
   trunk/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
   trunk/freenet/src/freenet/node/fcp/NodeData.java
   trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
   trunk/freenet/src/freenet/node/fcp/PeerNote.java
   trunk/freenet/src/freenet/node/fcp/PeerRemoved.java
   trunk/freenet/src/freenet/node/fcp/PersistentGet.java
   trunk/freenet/src/freenet/node/fcp/PersistentPut.java
   trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java
   trunk/freenet/src/freenet/node/fcp/PersistentRequestRemovedMessage.java
   trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
   trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java
   trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java
   trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java
   trunk/freenet/src/freenet/node/fcp/RemovePeer.java
   trunk/freenet/src/freenet/node/fcp/RemovePersistentRequest.java
   trunk/freenet/src/freenet/node/fcp/SSKKeypairMessage.java
   trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java
   trunk/freenet/src/freenet/node/fcp/SimpleProgressMessage.java
   trunk/freenet/src/freenet/node/fcp/StartedCompressionMessage.java
   trunk/freenet/src/freenet/node/fcp/SubscribeUSKMessage.java
   trunk/freenet/src/freenet/node/fcp/SubscribedUSKUpdate.java
   trunk/freenet/src/freenet/node/fcp/URIGeneratedMessage.java
   trunk/freenet/src/freenet/node/fcp/UnknownNodeIdentifierMessage.java
   trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java
   trunk/freenet/src/freenet/node/fcp/WatchGlobal.java
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
   trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java
   trunk/freenet/src/freenet/support/io/FileBucket.java
   trunk/freenet/src/freenet/support/io/NullBucket.java
   trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
   trunk/freenet/src/freenet/support/io/RandomAccessFileBucket.java
   trunk/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java
   trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java
   trunk/freenet/src/freenet/support/math/TimeDecayingRunningAverage.java
   trunk/freenet/src/freenet/tools/AddRef.java
Log:
Intern strings in long-lived or large SimpleFieldSet's.
For example, when we are reading in persistent inserts from disk.

Modified: trunk/freenet/src/freenet/client/FailureCodeTracker.java
===================================================================
--- trunk/freenet/src/freenet/client/FailureCodeTracker.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/client/FailureCodeTracker.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -118,7 +118,7 @@
 
 	/** Copy verbosely to a SimpleFieldSet */
 	public synchronized SimpleFieldSet toFieldSet(boolean verbose) {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(false);
 		Iterator keys = map.keySet().iterator();
 		while(keys.hasNext()) {
 			Integer k = (Integer) keys.next();

Modified: trunk/freenet/src/freenet/client/async/SingleFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SingleFileInserter.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/client/async/SingleFileInserter.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -581,7 +581,7 @@
 				curSFI = sfi;
 				curMetadataPutter = metadataPutter;
 			}
-			SimpleFieldSet fs = new SimpleFieldSet();
+			SimpleFieldSet fs = new SimpleFieldSet(false);
 			fs.putSingle("Type", "SplitHandler");
 			if(curSFI != null)
 				fs.put("SplitFileInserter", curSFI.getProgressFieldset());

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserter.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserter.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserter.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -45,7 +45,7 @@
 	private boolean forceEncode;
 
 	public SimpleFieldSet getProgressFieldset() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		// don't save basic infrastructure such as ctx and parent
 		// only save details of the request
 		fs.putSingle("Type", "SplitFileInserter");
@@ -55,7 +55,7 @@
 		fs.put("Finished", finished);
 		fs.put("SegmentSize", segmentSize);
 		fs.put("CheckSegmentSize", checkSegmentSize);
-		SimpleFieldSet segs = new SimpleFieldSet();
+		SimpleFieldSet segs = new SimpleFieldSet(false);
 		for(int i=0;i<segments.length;i++) {
 			segs.put(Integer.toString(i), segments[i].getProgressFieldset());
 		}

Modified: trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java
===================================================================
--- trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/client/async/SplitFileInserterSegment.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -229,7 +229,7 @@
 	}
 
 	public synchronized SimpleFieldSet getProgressFieldset() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false); // these get BIG
 		fs.putSingle("Type", "SplitFileInserterSegment");
 		fs.put("Finished", finished);
 		// If true, check blocks which are null are finished 
@@ -237,10 +237,10 @@
 		// If true, data blocks which are null are finished
 		fs.put("Started", started);
 		fs.tput("Errors", errors.toFieldSet(false));
-		SimpleFieldSet dataFS = new SimpleFieldSet();
+		SimpleFieldSet dataFS = new SimpleFieldSet(false);
 		dataFS.put("Count", dataBlocks.length);
 		for(int i=0;i<dataBlocks.length;i++) {
-			SimpleFieldSet block = new SimpleFieldSet();
+			SimpleFieldSet block = new SimpleFieldSet(false);
 			if(dataURIs[i] != null)
 				block.putSingle("URI", dataURIs[i].toString());
 			SingleBlockInserter sbi =
@@ -269,10 +269,10 @@
 				dataFS.put(Integer.toString(i), block);
 		}
 		fs.put("DataBlocks", dataFS);
-		SimpleFieldSet checkFS = new SimpleFieldSet();
+		SimpleFieldSet checkFS = new SimpleFieldSet(false);
 		checkFS.put("Count", checkBlocks.length);
 		for(int i=0;i<checkBlocks.length;i++) {
-			SimpleFieldSet block = new SimpleFieldSet();
+			SimpleFieldSet block = new SimpleFieldSet(false);
 			if(checkURIs[i] != null)
 				block.putSingle("URI", checkURIs[i].toString());
 			SingleBlockInserter sbi =

Modified: trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/clients/http/DarknetConnectionsToadlet.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -668,7 +668,7 @@
 			SimpleFieldSet fs;
 			
 			try {
-				fs = new SimpleFieldSet(ref.toString(), false);
+				fs = new SimpleFieldSet(ref.toString(), false, true);
 				fs.setEndMarker("End"); // It's always End ; the regex above doesn't always grok this
 			} catch (IOException e) {
 				this.sendErrorPage(ctx, 200, "Failed To Add Node", "Unable to parse the given text as a node reference ("+e+"). Please try again.");

Modified: trunk/freenet/src/freenet/clients/http/N2NTMToadlet.java
===================================================================
--- trunk/freenet/src/freenet/clients/http/N2NTMToadlet.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/clients/http/N2NTMToadlet.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -131,7 +131,7 @@
 					String sendStatusClass;
 					try {
 						long now = System.currentTimeMillis();
-						SimpleFieldSet fs = new SimpleFieldSet();
+						SimpleFieldSet fs = new SimpleFieldSet(true);
 						fs.put("type", Node.N2N_TEXT_MESSAGE_TYPE_USERALERT);
 						fs.putSingle("source_nodename", Base64.encode(node.getMyName().getBytes()));
 						fs.putSingle("target_nodename", Base64.encode(pn.getName().getBytes()));

Modified: trunk/freenet/src/freenet/config/FilePersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/FilePersistentConfig.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/config/FilePersistentConfig.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -96,7 +96,7 @@
 		try {
 			LineReadingInputStream lis = new LineReadingInputStream(bis);
 			// Config file is UTF-8 too!
-			return new SimpleFieldSet(lis, 32768, 128, true, true, true); // FIXME? advanced users may edit the config file, hence true?
+			return new SimpleFieldSet(lis, 32768, 128, true, true, true, true); // FIXME? advanced users may edit the config file, hence true?
 		} finally {
 			try {
 				fis.close();

Modified: trunk/freenet/src/freenet/config/PersistentConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/PersistentConfig.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/config/PersistentConfig.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -32,7 +32,7 @@
 	}
 	
 	public synchronized SimpleFieldSet exportFieldSet(boolean withDefaults) {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		SubConfig[] configs;
 		synchronized(this) {
 			configs = (SubConfig[]) configsByPrefix.values().toArray(new SubConfig[configsByPrefix.size()]);

Modified: trunk/freenet/src/freenet/config/SubConfig.java
===================================================================
--- trunk/freenet/src/freenet/config/SubConfig.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/config/SubConfig.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -193,7 +193,7 @@
 	}
 
 	public SimpleFieldSet exportFieldSet(boolean withDefaults) {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		Set entrySet = map.entrySet();
 		Iterator i = entrySet.iterator();
 		boolean logMINOR = Logger.shouldLog(Logger.MINOR, this);

Modified: trunk/freenet/src/freenet/crypt/DSAGroup.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAGroup.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/crypt/DSAGroup.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -288,7 +288,7 @@
     }
     
 	public SimpleFieldSet asFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("p", Base64.encode(p.toByteArray()));
 		fs.putSingle("q", Base64.encode(q.toByteArray()));
 		fs.putSingle("g", Base64.encode(g.toByteArray()));

Modified: trunk/freenet/src/freenet/crypt/DSAPrivateKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPrivateKey.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/crypt/DSAPrivateKey.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -70,7 +70,7 @@
     }
 
 	public SimpleFieldSet asFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("x", Base64.encode(x.toByteArray()));
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/crypt/DSAPublicKey.java
===================================================================
--- trunk/freenet/src/freenet/crypt/DSAPublicKey.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/crypt/DSAPublicKey.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -166,7 +166,7 @@
     }
 
 	public SimpleFieldSet asFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("y", Base64.encode(y.toByteArray()));
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/node/Node.java
===================================================================
--- trunk/freenet/src/freenet/node/Node.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/Node.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -526,7 +526,7 @@
 		FileInputStream fis = new FileInputStream(filename);
 		InputStreamReader isr = new InputStreamReader(fis);
 		BufferedReader br = new BufferedReader(isr);
-		SimpleFieldSet fs = new SimpleFieldSet(br, false);
+		SimpleFieldSet fs = new SimpleFieldSet(br, false, true);
 		br.close();
 		// Read contents
 		String[] udp = fs.getAll("physical.udp");
@@ -1353,10 +1353,10 @@
 		
 		SimpleFieldSet throttleFS = null;
 		try {
-			throttleFS = SimpleFieldSet.readFrom(persistTarget, false);
+			throttleFS = SimpleFieldSet.readFrom(persistTarget, false, true);
 		} catch (IOException e) {
 			try {
-				throttleFS = SimpleFieldSet.readFrom(persistTemp, false);
+				throttleFS = SimpleFieldSet.readFrom(persistTemp, false, true);
 			} catch (FileNotFoundException e1) {
 				// Ignore
 			} catch (IOException e1) {
@@ -1853,7 +1853,7 @@
 	 * or that can safely be exchanged later.
 	 */
 	SimpleFieldSet exportPublicFieldSet(boolean forSetup) {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		Peer[] ips = ipDetector.getPrimaryIPAddress();
 		if(ips != null) {
 			for(int i=0;i<ips.length;i++)
@@ -1911,7 +1911,7 @@
 	 * Export volatile data about the node as a SimpleFieldSet
 	 */
 	public SimpleFieldSet exportVolatileFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		long now = System.currentTimeMillis();
 		fs.put("isUsingWrapper", isUsingWrapper());
 		long nodeUptimeSeconds = 0;
@@ -3060,7 +3060,7 @@
 		Logger.normal(this, "Received N2NM from '"+source.getPeer()+"'");
 		SimpleFieldSet fs = null;
 		try {
-			fs = new SimpleFieldSet(new String(messageData.getData(), "UTF-8"), false);
+			fs = new SimpleFieldSet(new String(messageData.getData(), "UTF-8"), false, true);
 		} catch (IOException e) {
 			Logger.error(this, "IOException while parsing node to node message data", e);
 			return;
@@ -3104,7 +3104,7 @@
 		String target_nodename = (String) m.getObject(DMT.TARGET_NODENAME);
 		String text = (String) m.getObject(DMT.NODE_TO_NODE_MESSAGE_TEXT);
 		Logger.normal(this, "Received N2NTM from '"+source_nodename+"' to '"+target_nodename+"': "+text);
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.put("type", type);
 		fs.putSingle("source_nodename", Base64.encode(source_nodename.getBytes()));
 		fs.putSingle("target_nodename", Base64.encode(target_nodename.getBytes()));
@@ -3471,24 +3471,24 @@
 	}
 
 	private SimpleFieldSet persistThrottlesToFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.put("RequestStarters", clientCore.requestStarters.persistToFieldSet());
-		fs.put("RemoteChkFetchBytesSentAverage", remoteChkFetchBytesSentAverage.exportFieldSet());
-		fs.put("RemoteSskFetchBytesSentAverage", remoteSskFetchBytesSentAverage.exportFieldSet());
-		fs.put("RemoteChkInsertBytesSentAverage", remoteChkInsertBytesSentAverage.exportFieldSet());
-		fs.put("RemoteSskInsertBytesSentAverage", remoteSskInsertBytesSentAverage.exportFieldSet());
-		fs.put("RemoteChkFetchBytesReceivedAverage", remoteChkFetchBytesReceivedAverage.exportFieldSet());
-		fs.put("RemoteSskFetchBytesReceivedAverage", remoteSskFetchBytesReceivedAverage.exportFieldSet());
-		fs.put("RemoteChkInsertBytesReceivedAverage", remoteChkInsertBytesReceivedAverage.exportFieldSet());
-		fs.put("RemoteSskInsertBytesReceivedAverage", remoteSskInsertBytesReceivedAverage.exportFieldSet());
-		fs.put("LocalChkFetchBytesSentAverage", localChkFetchBytesSentAverage.exportFieldSet());
-		fs.put("LocalSskFetchBytesSentAverage", localSskFetchBytesSentAverage.exportFieldSet());
-		fs.put("LocalChkInsertBytesSentAverage", localChkInsertBytesSentAverage.exportFieldSet());
-		fs.put("LocalSskInsertBytesSentAverage", localSskInsertBytesSentAverage.exportFieldSet());
-		fs.put("LocalChkFetchBytesReceivedAverage", localChkFetchBytesReceivedAverage.exportFieldSet());
-		fs.put("LocalSskFetchBytesReceivedAverage", localSskFetchBytesReceivedAverage.exportFieldSet());
-		fs.put("LocalChkInsertBytesReceivedAverage", localChkInsertBytesReceivedAverage.exportFieldSet());
-		fs.put("LocalSskInsertBytesReceivedAverage", localSskInsertBytesReceivedAverage.exportFieldSet());
+		fs.put("RemoteChkFetchBytesSentAverage", remoteChkFetchBytesSentAverage.exportFieldSet(true));
+		fs.put("RemoteSskFetchBytesSentAverage", remoteSskFetchBytesSentAverage.exportFieldSet(true));
+		fs.put("RemoteChkInsertBytesSentAverage", remoteChkInsertBytesSentAverage.exportFieldSet(true));
+		fs.put("RemoteSskInsertBytesSentAverage", remoteSskInsertBytesSentAverage.exportFieldSet(true));
+		fs.put("RemoteChkFetchBytesReceivedAverage", remoteChkFetchBytesReceivedAverage.exportFieldSet(true));
+		fs.put("RemoteSskFetchBytesReceivedAverage", remoteSskFetchBytesReceivedAverage.exportFieldSet(true));
+		fs.put("RemoteChkInsertBytesReceivedAverage", remoteChkInsertBytesReceivedAverage.exportFieldSet(true));
+		fs.put("RemoteSskInsertBytesReceivedAverage", remoteSskInsertBytesReceivedAverage.exportFieldSet(true));
+		fs.put("LocalChkFetchBytesSentAverage", localChkFetchBytesSentAverage.exportFieldSet(true));
+		fs.put("LocalSskFetchBytesSentAverage", localSskFetchBytesSentAverage.exportFieldSet(true));
+		fs.put("LocalChkInsertBytesSentAverage", localChkInsertBytesSentAverage.exportFieldSet(true));
+		fs.put("LocalSskInsertBytesSentAverage", localSskInsertBytesSentAverage.exportFieldSet(true));
+		fs.put("LocalChkFetchBytesReceivedAverage", localChkFetchBytesReceivedAverage.exportFieldSet(true));
+		fs.put("LocalSskFetchBytesReceivedAverage", localSskFetchBytesReceivedAverage.exportFieldSet(true));
+		fs.put("LocalChkInsertBytesReceivedAverage", localChkInsertBytesReceivedAverage.exportFieldSet(true));
+		fs.put("LocalSskInsertBytesReceivedAverage", localSskInsertBytesReceivedAverage.exportFieldSet(true));
 
 		// FIXME persist the rest
 		return fs;

Modified: trunk/freenet/src/freenet/node/NodeStarter.java
===================================================================
--- trunk/freenet/src/freenet/node/NodeStarter.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/NodeStarter.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -335,7 +335,7 @@
 		}
 		
 		// Set up config for testing
-		SimpleFieldSet configFS = new SimpleFieldSet();
+		SimpleFieldSet configFS = new SimpleFieldSet(false); // only happens once in entire simulation
 		configFS.put("node.listenPort", port);
 		configFS.put("node.disableProbabilisticHTLs", disableProbabilisticHTLs);
 		configFS.put("fproxy.enabled", false);

Modified: trunk/freenet/src/freenet/node/PeerManager.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerManager.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/PeerManager.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -105,7 +105,7 @@
             while(true) {
                 // Read a single NodePeer
                 SimpleFieldSet fs;
-                fs = new SimpleFieldSet(br, false);
+                fs = new SimpleFieldSet(br, false, true);
                 PeerNode pn;
                 try {
                     pn = new PeerNode(fs, node, true);

Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/PeerNode.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -1660,7 +1660,7 @@
         BufferedReader br = new BufferedReader(isr);
         SimpleFieldSet fs;
         try {
-            fs = new SimpleFieldSet(br, false);
+            fs = new SimpleFieldSet(br, false, true);
         } catch (IOException e) {
             Logger.error(this, "Impossible: e", e);
             return;
@@ -1875,7 +1875,7 @@
      * Export metadata about the node as a SimpleFieldSet
      */
     public synchronized SimpleFieldSet exportMetadataFieldSet() {
-    	SimpleFieldSet fs = new SimpleFieldSet();
+    	SimpleFieldSet fs = new SimpleFieldSet(true);
     	if(detectedPeer != null)
     		fs.putSingle("detected.udp", detectedPeer.toString());
     	if(lastReceivedPacketTime() > 0)
@@ -1909,7 +1909,7 @@
      * Export volatile data about the node as a SimpleFieldSet
      */
     public SimpleFieldSet exportVolatileFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		long now = System.currentTimeMillis();
 		synchronized(this) {
 			fs.putSingle("averagePingTime", Double.toString(averagePingTime()));
@@ -1937,7 +1937,7 @@
      * Export the peer's noderef as a SimpleFieldSet
      */
     public synchronized SimpleFieldSet exportFieldSet() {
-        SimpleFieldSet fs = new SimpleFieldSet();
+        SimpleFieldSet fs = new SimpleFieldSet(true);
         if(getLastGoodVersion() != null)
         	fs.putSingle("lastGoodVersion", lastGoodVersion);
 		for(int i=0;i<nominalPeer.size();i++) {
@@ -2628,7 +2628,7 @@
 		SimpleFieldSet fs = null;
 		try {
 			// Read in the single SimpleFieldSet
-			fs = new SimpleFieldSet(br, false);
+			fs = new SimpleFieldSet(br, false, true);
 		} catch (EOFException e3) {
 			// End of file, fine
 		} catch (IOException e4) {
@@ -2903,8 +2903,8 @@
 			privateDarknetComment = comment;
 			localFileNumber = privateDarknetCommentFileNumber;
 		}
-		SimpleFieldSet fs = new SimpleFieldSet();
-		fs.putSingle("peerNoteType", Integer.toString(Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT));
+		SimpleFieldSet fs = new SimpleFieldSet(true);
+		fs.put("peerNoteType", Node.PEER_NOTE_TYPE_PRIVATE_DARKNET_COMMENT);
 		fs.putSingle("privateDarknetComment", Base64.encode(comment.getBytes()));
 		if(localFileNumber == -1) {
 			localFileNumber = writeNewExtraPeerDataFile(fs, Node.EXTRA_PEER_DATA_TYPE_PEER_NOTE);
@@ -2980,7 +2980,7 @@
 		
 		SimpleFieldSet fs;
 		try {
-			fs = new SimpleFieldSet(ref, false);
+			fs = new SimpleFieldSet(ref, false, true);
 			if(logMINOR) Logger.minor(this, "Got ARK for "+this);
 			gotARK(fs, edition);
 		} catch (IOException e) {

Modified: trunk/freenet/src/freenet/node/RequestStarterGroup.java
===================================================================
--- trunk/freenet/src/freenet/node/RequestStarterGroup.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/RequestStarterGroup.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -99,8 +99,8 @@
 		}
 
 		public SimpleFieldSet exportFieldSet() {
-			SimpleFieldSet fs = new SimpleFieldSet();
-			fs.put("RoundTripTime", roundTripTime.exportFieldSet());
+			SimpleFieldSet fs = new SimpleFieldSet(false);
+			fs.put("RoundTripTime", roundTripTime.exportFieldSet(false));
 			return fs;
 		}
 
@@ -133,8 +133,8 @@
 	 * Persist the throttle data to a SimpleFieldSet.
 	 */
 	SimpleFieldSet persistToFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
-		fs.put("ThrottleWindow", throttleWindow.exportFieldSet());
+		SimpleFieldSet fs = new SimpleFieldSet(false);
+		fs.put("ThrottleWindow", throttleWindow.exportFieldSet(false));
 		fs.put("CHKRequestThrottle", chkRequestThrottle.exportFieldSet());
 		fs.put("SSKRequestThrottle", sskRequestThrottle.exportFieldSet());
 		fs.put("CHKInsertThrottle", chkInsertThrottle.exportFieldSet());

Modified: trunk/freenet/src/freenet/node/TextModeClientInterface.java
===================================================================
--- trunk/freenet/src/freenet/node/TextModeClientInterface.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/TextModeClientInterface.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -952,7 +952,7 @@
         SimpleFieldSet fs;
         System.out.println("Connecting to:\r\n"+content);
         try {
-            fs = new SimpleFieldSet(content, false);
+            fs = new SimpleFieldSet(content, false, true);
         } catch (IOException e) {
             System.err.println("Did not parse: "+e);
             e.printStackTrace();

Modified: trunk/freenet/src/freenet/node/ThrottleWindowManager.java
===================================================================
--- trunk/freenet/src/freenet/node/ThrottleWindowManager.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/ThrottleWindowManager.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -55,8 +55,8 @@
 				+ (((float) _droppedPackets / (float) _totalPackets)) + '=' +_droppedPackets+ '/' +_totalPackets;
 	}
 
-	public SimpleFieldSet exportFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+	public SimpleFieldSet exportFieldSet(boolean shortLived) {
+		SimpleFieldSet fs = new SimpleFieldSet(shortLived);
 		fs.putSingle("Type", "ThrottleWindowManager");
 		fs.put("TotalPackets", _totalPackets);
 		fs.put("DroppedPackets", _droppedPackets);

Modified: trunk/freenet/src/freenet/node/fcp/AddPeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/AddPeer.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/AddPeer.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -31,7 +31,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {
@@ -68,7 +68,7 @@
 				throw new MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing ref from URL <"+urlString+ '>', null, false);
 			}
 			try {
-				fs = new SimpleFieldSet(ref.toString(), false);
+				fs = new SimpleFieldSet(ref.toString(), false, true);
 			} catch (IOException e) {
 				throw new MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing ref from URL <"+urlString+">: "+e.getMessage(), null, false);
 			}
@@ -99,7 +99,7 @@
 				throw new MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing ref from file <"+fileString+ '>', null, false);
 			}
 			try {
-				fs = new SimpleFieldSet(ref.toString(), false);
+				fs = new SimpleFieldSet(ref.toString(), false, true);
 			} catch (IOException e) {
 				throw new MessageInvalidException(ProtocolErrorMessage.REF_PARSE_ERROR, "Error parsing ref from file <"+fileString+">: "+e.getMessage(), null, false);
 			}

Modified: trunk/freenet/src/freenet/node/fcp/AllDataMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/AllDataMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/AllDataMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -30,7 +30,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("DataLength", Long.toString(dataLength));
 		fs.putSingle("Identifier", identifier);
 		if(global) fs.putSingle("Global", "true");

Modified: trunk/freenet/src/freenet/node/fcp/ClientGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGet.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientGet.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -486,7 +486,7 @@
 	// This is distinct from the ClientGetMessage code, as later on it will be radically
 	// different (it can store detailed state).
 	public synchronized SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet(); // we will need multi-level later...
+		SimpleFieldSet fs = new SimpleFieldSet(false); // we will need multi-level later...
 		fs.putSingle("Type", "GET");
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.putSingle("Identifier", identifier);

Modified: trunk/freenet/src/freenet/node/fcp/ClientGetMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientGetMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientGetMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -186,7 +186,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("IgnoreDS", Boolean.toString(ignoreDS));
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.putSingle("Identifier", identifier);

Modified: trunk/freenet/src/freenet/node/fcp/ClientHelloMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientHelloMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientHelloMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -29,7 +29,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("Name", clientName);
 		sfs.putSingle("ExpectedVersion", clientExpectedVersion);
 		return sfs;

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutBase.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutBase.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutBase.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -259,7 +259,7 @@
 	}
 
 	public synchronized SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet(); // we will need multi-level later...
+		SimpleFieldSet fs = new SimpleFieldSet(false); // we will need multi-level later...
 		fs.putSingle("Type", getTypeName());
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.putSingle("Identifier", identifier);

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutDir.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutDir.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -199,7 +199,7 @@
 	public SimpleFieldSet getFieldSet() {
 		SimpleFieldSet fs = super.getFieldSet();
 		// Translate manifestElements directly into a fieldset
-		SimpleFieldSet files = new SimpleFieldSet();
+		SimpleFieldSet files = new SimpleFieldSet(false);
 		// Flatten the hierarchy, it can be reconstructed on restarting.
 		// Storing it directly would be a PITA.
 		ManifestElement[] elements = SimpleManifestPutter.flatten(manifestElements);
@@ -209,7 +209,7 @@
 			ManifestElement e = elements[i];
 			String name = e.getName();
 			String mimeOverride = e.getMimeTypeOverride();
-			SimpleFieldSet subset = new SimpleFieldSet();
+			SimpleFieldSet subset = new SimpleFieldSet(false);
 			subset.putSingle("Name", name);
 			if(mimeOverride != null)
 				subset.putSingle("Metadata.ContentType", mimeOverride);

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutDirMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutDirMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutDirMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -118,7 +118,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("URI", uri.toString());
 		sfs.putSingle("Identifier", identifier);
 		sfs.putSingle("Verbosity", Integer.toString(verbosity));

Modified: trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientPutMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -194,7 +194,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("URI", uri.toString());
 		sfs.putSingle("Identifier", identifier);
 		sfs.putSingle("Verbosity", Integer.toString(verbosity));

Modified: trunk/freenet/src/freenet/node/fcp/ClientRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ClientRequest.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ClientRequest.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -140,7 +140,7 @@
 		Runtime rt = Runtime.getRuntime();;
 		if(logMINOR)
 			Logger.minor(ClientRequest.class, rt.maxMemory()-rt.freeMemory()+" in use before loading request");
-		SimpleFieldSet fs = new SimpleFieldSet(br, false);
+		SimpleFieldSet fs = new SimpleFieldSet(br, false, false); // can get enormous
 		String clientName = fs.get("ClientName");
 		boolean isGlobal = Fields.stringToBool(fs.get("Global"), false);
 		if(clientName == null && !isGlobal) {

Modified: trunk/freenet/src/freenet/node/fcp/CloseConnectionDuplicateClientNameMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/CloseConnectionDuplicateClientNameMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/CloseConnectionDuplicateClientNameMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -13,7 +13,7 @@
 public class CloseConnectionDuplicateClientNameMessage extends FCPMessage {
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ConfigData.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ConfigData.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ConfigData.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		if(withDefaults) {
 			fs = node.config.exportFieldSet(true);
 		} else {

Modified: trunk/freenet/src/freenet/node/fcp/DataFoundMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/DataFoundMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/DataFoundMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -29,7 +29,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		if(global) fs.putSingle("Global", "true");
 		fs.putSingle("Metadata.ContentType", mimeType);

Modified: trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/EndListPeerNotesMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -16,7 +16,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("NodeIdentifier", nodeIdentifier);
 		return sfs;
 	}

Modified: trunk/freenet/src/freenet/node/fcp/EndListPeersMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/EndListPeersMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/EndListPeersMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -11,7 +11,7 @@
 	static final String name = "EndListPeers";
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/EndListPersistentRequestsMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/EndListPersistentRequestsMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/EndListPersistentRequestsMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -11,7 +11,7 @@
 	static final String name = "EndListPersistentRequests";
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/FCPConnectionInputHandler.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -53,7 +53,7 @@
 				return;
 			}
 			if(messageType.equals("")) continue;
-			fs = new SimpleFieldSet(lis, 4096, 128, true, true, true);
+			fs = new SimpleFieldSet(lis, 4096, 128, true, true, true, true);
 			FCPMessage msg;
 			try {
 				msg = FCPMessage.create(messageType, fs, handler.bf, handler.server.core.persistentTempBucketFactory);

Modified: trunk/freenet/src/freenet/node/fcp/FinishedCompressionMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/FinishedCompressionMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/FinishedCompressionMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -24,7 +24,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.putSingle("Codec", Integer.toString(codec));
 		fs.putSingle("OriginalSize", Long.toString(origSize));

Modified: trunk/freenet/src/freenet/node/fcp/GenerateSSKMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GenerateSSKMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/GenerateSSKMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/GetConfig.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GetConfig.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/GetConfig.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -17,7 +17,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 	
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/GetFailedMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -100,7 +100,7 @@
 	 * or another node).
 	 */
 	public SimpleFieldSet getFieldSet(boolean verbose) {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("Code", Integer.toString(code));
 		if(verbose)
 			sfs.putSingle("CodeDescription", codeDescription);

Modified: trunk/freenet/src/freenet/node/fcp/GetNode.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GetNode.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/GetNode.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -19,7 +19,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 	
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/GetRequestStatusMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -21,7 +21,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/node/fcp/IdentifierCollisionMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/IdentifierCollisionMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/IdentifierCollisionMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -17,7 +17,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("Identifier", identifier);
 		if(global) sfs.putSingle("Global", "true");
 		return sfs;

Modified: trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ListPeerNotesMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 	
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ListPeersMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ListPeersMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ListPeersMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 	
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ListPersistentRequestsMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -15,7 +15,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 	
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ModifyConfig.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyConfig.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ModifyConfig.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -21,7 +21,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ModifyPeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPeer.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPeer.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -19,7 +19,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPeerNote.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -23,7 +23,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ModifyPersistentRequest.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -51,7 +51,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.putSingle("Global", Boolean.toString(global));
 		fs.putSingle("PriorityClass", Short.toString(priorityClass));

Modified: trunk/freenet/src/freenet/node/fcp/NodeData.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/NodeData.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/NodeData.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		if(withPrivate) {
 			fs = node.exportPrivateFieldSet();
 		} else {

Modified: trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/NodeHelloMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -60,7 +60,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		// FIXME
 		sfs.putSingle("FCPVersion", "2.0");
 		sfs.putSingle("Node", "Fred");

Modified: trunk/freenet/src/freenet/node/fcp/PeerNote.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PeerNote.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PeerNote.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -21,7 +21,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("NodeIdentifier", nodeIdentifier);
 		fs.putSingle("PeerNoteType", Integer.toString(peerNoteType));
 		fs.putSingle("NoteText", Base64.encode(noteText.getBytes(), true));

Modified: trunk/freenet/src/freenet/node/fcp/PeerRemoved.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PeerRemoved.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PeerRemoved.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identity", identity);
 		fs.putSingle("NodeIdentifier", nodeIdentifier);
 		return fs;

Modified: trunk/freenet/src/freenet/node/fcp/PersistentGet.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentGet.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PersistentGet.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -49,7 +49,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.put("Verbosity", verbosity);

Modified: trunk/freenet/src/freenet/node/fcp/PersistentPut.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentPut.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PersistentPut.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -51,7 +51,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.put("Verbosity", verbosity);

Modified: trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PersistentPutDir.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -49,14 +49,14 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false); // false because this can get HUGE
 		fs.putSingle("Identifier", identifier);
 		fs.putSingle("URI", uri.toString(false, false));
 		fs.put("Verbosity", verbosity);
 		fs.putSingle("Persistence", ClientRequest.persistenceTypeString(persistenceType));
 		fs.put("PriorityClass", priorityClass);
 		fs.putSingle("Global", Boolean.toString(global));
-		SimpleFieldSet files = new SimpleFieldSet();
+		SimpleFieldSet files = new SimpleFieldSet(false);
 		// Flatten the hierarchy, it can be reconstructed on restarting.
 		// Storing it directly would be a PITA.
 		ManifestElement[] elements = SimpleManifestPutter.flatten(manifestElements);
@@ -65,7 +65,7 @@
 			String num = Integer.toString(i);
 			ManifestElement e = elements[i];
 			String mimeOverride = e.getMimeTypeOverride();
-			SimpleFieldSet subset = new SimpleFieldSet();
+			SimpleFieldSet subset = new SimpleFieldSet(false);
 			FreenetURI tempURI = e.getTargetURI();
 			subset.putSingle("Name", e.getName());
 			if(tempURI != null) {

Modified: trunk/freenet/src/freenet/node/fcp/PersistentRequestRemovedMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PersistentRequestRemovedMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PersistentRequestRemovedMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
     }
 
     public SimpleFieldSet getFieldSet() {
-        SimpleFieldSet fs = new SimpleFieldSet();
+        SimpleFieldSet fs = new SimpleFieldSet(true);
         fs.putSingle("Identifier", ident);
         if(global) fs.putSingle("Global", "true");
         return fs;

Modified: trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ProtocolErrorMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -123,7 +123,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		if(ident != null)
 			sfs.putSingle("Identifier", ident);
 		sfs.put("Code", code);

Modified: trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PutFailedMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -79,7 +79,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet(boolean verbose) {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		if(global) fs.putSingle("Global", "true");
 		fs.put("Code", code);

Modified: trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PutFetchableMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	final FreenetURI uri;
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		if(global) fs.putSingle("Global", "true");
 		if(uri != null)

Modified: trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/PutSuccessfulMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		if(global) fs.putSingle("Global", "true");
 		// FIXME debug and remove!

Modified: trunk/freenet/src/freenet/node/fcp/RemovePeer.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/RemovePeer.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/RemovePeer.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/RemovePersistentRequest.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/RemovePersistentRequest.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/RemovePersistentRequest.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -24,7 +24,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/node/fcp/SSKKeypairMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SSKKeypairMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/SSKKeypairMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("InsertURI", insertURI.toString());
 		sfs.putSingle("RequestURI", requestURI.toString());
 		if(identifier != null) // is optional on these two only

Modified: trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/ShutdownMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -14,7 +14,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		return new SimpleFieldSet();
+		return new SimpleFieldSet(true);
 	}
 
 	public String getName() {

Modified: trunk/freenet/src/freenet/node/fcp/SimpleProgressMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SimpleProgressMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/SimpleProgressMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.put("Total", event.totalBlocks);
 		fs.put("Required", event.minSuccessfulBlocks);
 		fs.put("Failed", event.failedBlocks);

Modified: trunk/freenet/src/freenet/node/fcp/StartedCompressionMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/StartedCompressionMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/StartedCompressionMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -20,7 +20,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.put("Codec", codec);
 		if(global) fs.putSingle("Global", "true");

Modified: trunk/freenet/src/freenet/node/fcp/SubscribeUSKMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SubscribeUSKMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/SubscribeUSKMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -47,7 +47,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("URI", key.getURI().toString());
 		fs.put("DontPoll", dontPoll);
 		return fs;

Modified: trunk/freenet/src/freenet/node/fcp/SubscribedUSKUpdate.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/SubscribedUSKUpdate.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/SubscribedUSKUpdate.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -22,7 +22,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("Identifier", identifier);
 		fs.put("Edition", edition);
 		fs.putSingle("URI", key.getURI().toString());

Modified: trunk/freenet/src/freenet/node/fcp/URIGeneratedMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/URIGeneratedMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/URIGeneratedMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -18,7 +18,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.putSingle("URI", uri.toString());
 		fs.putSingle("Identifier", identifier);
 		return fs;

Modified: trunk/freenet/src/freenet/node/fcp/UnknownNodeIdentifierMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/UnknownNodeIdentifierMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/UnknownNodeIdentifierMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -15,7 +15,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 		sfs.putSingle("NodeIdentifier", nodeIdentifier);
 		return sfs;
 	}

Modified: trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/UnknownPeerNoteTypeMessage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -15,7 +15,7 @@
 	}
 
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.put("PeerNoteType", peerNoteType);
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/node/fcp/WatchGlobal.java
===================================================================
--- trunk/freenet/src/freenet/node/fcp/WatchGlobal.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/node/fcp/WatchGlobal.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -27,7 +27,7 @@
 	}
 	
 	public SimpleFieldSet getFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(true);
 		fs.put("Enabled", enabled);
 		fs.put("VerbosityMask", verbosityMask);
 		return fs;

Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -30,6 +30,7 @@
     private final Map values;
     private Map subsets;
     private String endMarker;
+    private final boolean shortLived;
     static public final char MULTI_LEVEL_CHAR = '.';
     
     /**
@@ -37,42 +38,50 @@
      * @param br
      * @param allowMultiple If true, multiple lines with the same field name will be
      * combined; if false, the constructor will throw.
+     * @param shortLived If false, strings will be interned to ensure that they use as
+     * little memory as possible. Only set to true if the SFS will be short-lived or
+     * small.
      * @throws IOException If the buffer could not be read, or if there was a formatting
      * problem.
      */
-    public SimpleFieldSet(BufferedReader br, boolean allowMultiple) throws IOException {
+    public SimpleFieldSet(BufferedReader br, boolean allowMultiple, boolean shortLived) throws IOException {
         values = new HashMap();
        	subsets = null;
+       	this.shortLived = shortLived;
         read(br, allowMultiple);
     }
     
     public SimpleFieldSet(SimpleFieldSet sfs){
     	values = new HashMap(sfs.values);
     	subsets = new HashMap(sfs.subsets);
+    	this.shortLived = false; // it's been copied!
     	endMarker = sfs.endMarker;
     }
 
-    public SimpleFieldSet(LineReader lis, int maxLineLength, int lineBufferSize, boolean tolerant, boolean utf8OrIso88591, boolean allowMultiple) throws IOException {
+    public SimpleFieldSet(LineReader lis, int maxLineLength, int lineBufferSize, boolean tolerant, boolean utf8OrIso88591, boolean allowMultiple, boolean shortLived) throws IOException {
     	values = new HashMap();
        	subsets = null;
+       	this.shortLived = shortLived;
     	read(lis, maxLineLength, lineBufferSize, tolerant, utf8OrIso88591, allowMultiple);
     }
     
     /**
      * Empty constructor
      */
-    public SimpleFieldSet() {
+    public SimpleFieldSet(boolean shortLived) {
         values = new HashMap();
        	subsets = null;
+       	this.shortLived = shortLived;
     }
 
     /**
      * Construct from a string.
      * @throws IOException if the string is too short or invalid.
      */
-    public SimpleFieldSet(String content, boolean allowMultiple) throws IOException {
+    public SimpleFieldSet(String content, boolean allowMultiple, boolean shortLived) throws IOException {
     	values = new HashMap();
     	subsets = null;
+    	this.shortLived = shortLived;
         StringReader sr = new StringReader(content);
         BufferedReader br = new BufferedReader(sr);
 	    read(br, allowMultiple);
@@ -100,6 +109,7 @@
                 // Mapping
                 String before = line.substring(0, index);
                 String after = line.substring(index+1);
+                if(!shortLived) after = after.intern();
                 put(before, after, allowMultiple, false);
             } else {
             	endMarker = line;
@@ -136,6 +146,7 @@
                 // Mapping
                 String before = line.substring(0, index);
                 String after = line.substring(index+1);
+                if(!shortLived) after = after.intern();
                 put(before, after, allowMultiple, false);
             } else {
             	endMarker = line;
@@ -190,6 +201,7 @@
      * @param value The value.
      */
     public void putSingle(String key, String value) {
+    	if(!shortLived) value = value.intern();
     	if(!put(key, value, false, false))
     		throw new IllegalStateException("Value already exists: "+value+" but want to set "+key+" to "+value);
     }
@@ -200,6 +212,7 @@
      * @param value The value.
      */
     public void putAppend(String key, String value) {
+    	if(!shortLived) value = value.intern();
     	put(key, value, true, false);
     }
     
@@ -209,6 +222,7 @@
      * @param value The value.
      */
     public void putOverwrite(String key, String value) {
+    	if(!shortLived) value = value.intern();
     	put(key, value, false, true);
     }
     
@@ -228,6 +242,7 @@
 		if((idx = key.indexOf(MULTI_LEVEL_CHAR)) == -1) {
 			String x = (String) values.get(key);
 			
+			if(!shortLived) key = key.intern();
 			if(x == null || overwrite) {
 				values.put(key, value);
 			} else {
@@ -242,7 +257,8 @@
 				subsets = new HashMap();
 			fs = (SimpleFieldSet) (subsets.get(before));
 			if(fs == null) {
-				fs = new SimpleFieldSet();
+				fs = new SimpleFieldSet(shortLived);
+				if(!shortLived) before = before.intern();
 				subsets.put(before, fs);
 			}
 			fs.put(after, value, allowMultiple, overwrite);
@@ -251,27 +267,29 @@
     }
 
 	public void put(String key, int value) {
-		put(key, Integer.toString(value), false, false);
+		// Use putSingle so it does the intern check
+		putSingle(key, Integer.toString(value));
 	}
 	
 	public void put(String key, long value) {
-		put(key, Long.toString(value), false, false);
+		putSingle(key, Long.toString(value));
 	}
 	
 	public void put(String key, short value) {
-		put(key, Short.toString(value), false, false);
+		putSingle(key, Short.toString(value));
 	}
 	
 	public void put(String key, char c) {
-		put(key, ""+c, false, false);
+		putSingle(key, Character.toString(c));
 	}
 	
 	public void put(String key, boolean b) {
+		// Don't use putSingle, avoid intern check (Boolean.toString returns interned strings anyway)
 		put(key, Boolean.toString(b), false, false);
 	}
 	
 	public void put(String key, double windowSize) {
-		put(key, Double.toString(windowSize), false, false);
+		putSingle(key, Double.toString(windowSize));
 	}
 
     /**
@@ -467,6 +485,7 @@
 			subsets = new HashMap();
 		if(subsets.containsKey(key))
 			throw new IllegalArgumentException("Already contains "+key+" but trying to add a SimpleFieldSet!");
+		if(!shortLived) key = key.intern();
 		subsets.put(key, fs);
 	}
 
@@ -525,7 +544,7 @@
 		return (String[]) subsets.keySet().toArray(new String[subsets.size()]);
 	}
 
-	public static SimpleFieldSet readFrom(File f, boolean allowMultiple) throws IOException {
+	public static SimpleFieldSet readFrom(File f, boolean allowMultiple, boolean shortLived) throws IOException {
 		FileInputStream fis = null;
 		try {
 			fis = new FileInputStream(f);
@@ -539,7 +558,7 @@
 				return null;
 			}
 			BufferedReader br = new BufferedReader(isr);
-			SimpleFieldSet fs = new SimpleFieldSet(br, allowMultiple);
+			SimpleFieldSet fs = new SimpleFieldSet(br, allowMultiple, shortLived);
 			br.close();
 			fis = null;
 			return fs;

Modified: trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/DelayedFreeBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -77,7 +77,7 @@
 			Logger.error(this, "Cannot serialize because already freed: "+this);
 			return null;
 		}
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "DelayedFreeBucket");
 		if(bucket instanceof SerializableToFieldSetBucket) {
 			fs.put("Underlying", ((SerializableToFieldSetBucket)bucket).toFieldSet());

Modified: trunk/freenet/src/freenet/support/io/FileBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/FileBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/FileBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -348,7 +348,7 @@
 
 	public synchronized SimpleFieldSet toFieldSet() {
 		if(deleteOnFinalize) return null;
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "FileBucket");
 		fs.putSingle("Filename", file.toString());
 		fs.put("Length", length);

Modified: trunk/freenet/src/freenet/support/io/NullBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/NullBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/NullBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -66,7 +66,7 @@
 	}
 
 	public SimpleFieldSet toFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "NullBucket");
 		return fs;
 	}

Modified: trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/PaddedEphemerallyEncryptedBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -349,7 +349,7 @@
 	}
 
 	public SimpleFieldSet toFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "PaddedEphemerallyEncryptedBucket");
 		synchronized(this) {
 			fs.put("DataLength", dataLength);

Modified: trunk/freenet/src/freenet/support/io/RandomAccessFileBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/RandomAccessFileBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/RandomAccessFileBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -461,7 +461,7 @@
 	}
 
 	public synchronized SimpleFieldSet toFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "RandomAccessFileBucket");
 		fs.putSingle("Filename", file.toString());
 		fs.put("Offset", offset);

Modified: trunk/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java
===================================================================
--- trunk/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/io/ReadOnlyFileSliceBucket.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -144,7 +144,7 @@
 	}
 
 	public SimpleFieldSet toFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+		SimpleFieldSet fs = new SimpleFieldSet(false);
 		fs.putSingle("Type", "ReadOnlyFileSliceBucket");
 		fs.putSingle("Filename", file.toString());
 		fs.put("Offset", startAt);

Modified: trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java
===================================================================
--- trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/math/BootstrappingDecayingRunningAverage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -154,8 +154,8 @@
         return reports;
     }
 
-	public synchronized SimpleFieldSet exportFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+	public synchronized SimpleFieldSet exportFieldSet(boolean shortLived) {
+		SimpleFieldSet fs = new SimpleFieldSet(shortLived);
 		fs.putSingle("Type", "BootstrappingDecayingRunningAverage");
 		fs.put("CurrentValue", currentValue);
 		fs.put("Reports", reports);

Modified: trunk/freenet/src/freenet/support/math/TimeDecayingRunningAverage.java
===================================================================
--- trunk/freenet/src/freenet/support/math/TimeDecayingRunningAverage.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/support/math/TimeDecayingRunningAverage.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -231,8 +231,8 @@
 		return lastReportTime;
 	}
 
-	public synchronized SimpleFieldSet exportFieldSet() {
-		SimpleFieldSet fs = new SimpleFieldSet();
+	public synchronized SimpleFieldSet exportFieldSet(boolean shortLived) {
+		SimpleFieldSet fs = new SimpleFieldSet(shortLived);
 		fs.putSingle("Type", "TimeDecayingRunningAverage");
 		fs.put("CurrentValue", curValue);
 		fs.put("Started", started);

Modified: trunk/freenet/src/freenet/tools/AddRef.java
===================================================================
--- trunk/freenet/src/freenet/tools/AddRef.java	2007-02-10 17:02:37 UTC (rev 11744)
+++ trunk/freenet/src/freenet/tools/AddRef.java	2007-02-10 17:30:13 UTC (rev 11745)
@@ -43,7 +43,7 @@
 		Socket fcpSocket = null;
 
 		FCPMessage fcpm;
-		SimpleFieldSet sfs = new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
 
 		try{
 			fcpSocket = new Socket("127.0.0.1", FCPServer.DEFAULT_FCP_PORT);
@@ -74,7 +74,7 @@
 			}
 			
 			try{
-				sfs = SimpleFieldSet.readFrom(reference, false);
+				sfs = SimpleFieldSet.readFrom(reference, false, true);
 				fcpm = FCPMessage.create(AddPeer.name, sfs);
 				fcpm.send(os);
 				os.flush();
@@ -107,8 +107,8 @@
 	}
 
 	protected SimpleFieldSet getMessage(LineReadingInputStream lis){
-		SimpleFieldSet sfs = new SimpleFieldSet();
-		sfs=new SimpleFieldSet();
+		SimpleFieldSet sfs = new SimpleFieldSet(true);
+		sfs=new SimpleFieldSet(true);
 		try {
 			while(lis.available()>0){
 				String line = lis.readLine(128, 128, true);




More information about the cvs mailing list