Author: zothar
Date: 2006-05-29 19:42:31 +0000 (Mon, 29 May 2006)
New Revision: 8931

Added:
   trunk/freenet/src/freenet/node/DNSRequester.java
Log:
I know I would forget this and made a mental note and then couldn't remember 
what the mental note said... :)

Added: trunk/freenet/src/freenet/node/DNSRequester.java
===================================================================
--- trunk/freenet/src/freenet/node/DNSRequester.java    2006-05-29 19:39:44 UTC 
(rev 8930)
+++ trunk/freenet/src/freenet/node/DNSRequester.java    2006-05-29 19:42:31 UTC 
(rev 8931)
@@ -0,0 +1,68 @@
+package freenet.node;
+
+import freenet.support.Logger;
+
+/**
+ * @author amphibian
+ * 
+ * Thread that does DNS queries for unconnected peers
+ */
+public class DNSRequester implements Runnable {
+
+    final Thread myThread;
+    final Node node;
+    private long lastLogTime = 0;
+
+    DNSRequester(Node node) {
+        this.node = node;
+        myThread = new Thread(this, "DNSRequester thread for 
"+node.portNumber);
+        myThread.setDaemon(true);
+    }
+
+    void start() {
+                         Logger.normal(this,"Starting the DNSRequester 
thread");
+        myThread.start();
+    }
+
+    public void run() {
+        while(true) {
+            try {
+                realRun();
+            } catch (OutOfMemoryError e) {
+                Runtime r = Runtime.getRuntime();
+                long usedAtStart = r.totalMemory() - r.freeMemory();
+                System.gc();
+                System.runFinalization();
+                System.gc();
+                System.runFinalization();
+                System.err.println(e.getClass());
+                System.err.println(e.getMessage());
+                e.printStackTrace();
+                long usedNow = r.totalMemory() - r.freeMemory();
+                Logger.error(this, "Caught "+e, e);
+                Logger.error(this, "Used: "+usedAtStart+" now "+usedNow);
+            } catch (Throwable t) {
+                Logger.error(this, "Caught in DNSRequester: "+t, t);
+            }
+        }
+    }
+
+    private void realRun() {
+        PeerManager pm = node.peers;
+        PeerNode[] nodes = pm.myPeers;
+        long now = System.currentTimeMillis();
+        if((now - lastLogTime) > 1000) {
+            Logger.normal(this, "Processing DNS Requests (log rate-limited)");
+            lastLogTime = now;
+        }
+        for(int i=0;i<nodes.length;i++) {
+            PeerNode pn = nodes[i];
+            if(!pn.isConnected()) {
+                // Not connected
+                // Try new DNS lookup
+                // **FIXME** Logger.normal(this, "Calling 
myabeUpdateHandshakeIPs() for peer '"+pn.getPeer()+"' named 
'"+pn.getName()+"'");
+                pn.maybeUpdateHandshakeIPs();
+            }
+        }
+    }
+}


Reply via email to