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);


Reply via email to