Author: toad
Date: 2007-11-27 18:03:06 +0000 (Tue, 27 Nov 2007)
New Revision: 15978

Modified:
   trunk/freenet/src/freenet/io/AddressTracker.java
   trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
   trunk/freenet/src/freenet/support/SimpleFieldSet.java
Log:
Restore the table from disk

Modified: trunk/freenet/src/freenet/io/AddressTracker.java
===================================================================
--- trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-27 17:58:04 UTC 
(rev 15977)
+++ trunk/freenet/src/freenet/io/AddressTracker.java    2007-11-27 18:03:06 UTC 
(rev 15978)
@@ -15,11 +15,15 @@
  */
 package freenet.io;

+import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
+import java.io.BufferedReader;
 import java.io.BufferedWriter;
 import java.io.File;
+import java.io.FileInputStream;
 import java.io.FileOutputStream;
 import java.io.IOException;
+import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
 import java.net.InetAddress;
 import java.util.HashMap;
@@ -51,14 +55,41 @@
        private long timeDefinitelyNoPacketsReceived;
        private long timeDefinitelyNoPacketsSent;

-       public AddressTracker() {
+       public static AddressTracker create(long lastBootID, File nodeDir, int 
port) {
+               File data = new File(nodeDir, "packets-"+port+".dat");
+               File dataBak = new File(nodeDir, "packets-"+port+".bak");
+               dataBak.delete();
+               FileInputStream fis = null;
+               try {
+                       fis = new FileInputStream(data);
+                       BufferedInputStream bis = new BufferedInputStream(fis);
+                       InputStreamReader ir = new InputStreamReader(bis, 
"UTF-8");
+                       BufferedReader br = new BufferedReader(ir);
+                       SimpleFieldSet fs = new SimpleFieldSet(br, false, true);
+                       return new AddressTracker(fs, lastBootID);
+               } catch (IOException e) {
+                       // Fall through
+               } catch (FSParseException e) {
+                       // Fall through
+               } finally {
+                       if(fis != null)
+                               try {
+                                       fis.close();
+                               } catch (IOException e) {
+                                       // Ignore
+                               }
+               }
+               return new AddressTracker();
+       }
+       
+       private AddressTracker() {
                timeDefinitelyNoPacketsReceived = System.currentTimeMillis();
                timeDefinitelyNoPacketsSent = System.currentTimeMillis();
                peerTrackers = new HashMap();
                ipTrackers = new HashMap();
        }

-       public AddressTracker(SimpleFieldSet fs, long lastBootID) throws 
FSParseException {
+       private AddressTracker(SimpleFieldSet fs, long lastBootID) throws 
FSParseException {
                int version = fs.getInt("Version");
                if(version != 1)
                        throw new FSParseException("Unknown Version "+version);

Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-27 
17:58:04 UTC (rev 15977)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-27 
18:03:06 UTC (rev 15978)
@@ -64,7 +64,7 @@
                // Only used for debugging, no need to seed from Yarrow
                dropRandom = new Random();
                logMINOR = Logger.shouldLog(Logger.MINOR, this);
-               tracker = new AddressTracker();
+               tracker = AddressTracker.create(node.lastBootID, 
node.getNodeDir(), listenPort);
                tracker.startSend(startupTime);
        }


Modified: trunk/freenet/src/freenet/support/SimpleFieldSet.java
===================================================================
--- trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-11-27 
17:58:04 UTC (rev 15977)
+++ trunk/freenet/src/freenet/support/SimpleFieldSet.java       2007-11-27 
18:03:06 UTC (rev 15978)
@@ -2,6 +2,7 @@

 import java.io.BufferedInputStream;
 import java.io.BufferedReader;
+import java.io.DataInputStream;
 import java.io.EOFException;
 import java.io.File;
 import java.io.FileInputStream;
@@ -469,6 +470,16 @@
                return fs.subset(after);
        }

+       /**
+        * Like subset(), only throws instead of returning null.
+        * @throws FSParseException 
+        */
+       public synchronized SimpleFieldSet getSubset(String key) throws 
FSParseException {
+               SimpleFieldSet fs = subset(key);
+               if(fs == null) throw new FSParseException("No such subset 
"+key);
+               return fs;
+       }
+       
        public Iterator keyIterator() {
                return new KeyIterator("");
        }
@@ -841,4 +852,10 @@
                putOverwrite(key, unsplit(strings));
        }

+       public String getString(String key) throws FSParseException {
+               String s = get(key);
+               if(s == null) throw new FSParseException("No such element 
"+key);
+               return s;
+       }
+
 }


Reply via email to