From 59f4a5abe88c9683247b2c4b61c955c3004aa24c Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@allmydata.com>
Date: Thu, 7 Jun 2007 15:32:21 -0700
Subject: [PATCH] client.py: use persistent FURLs for our Node, to reduce
 spurious connection attempts (#26)

---
 src/allmydata/client.py | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/src/allmydata/client.py b/src/allmydata/client.py
index f6a00861..c81910f0 100644
--- a/src/allmydata/client.py
+++ b/src/allmydata/client.py
@@ -1,6 +1,6 @@
 
 import os, sha, stat, time
-from foolscap import Referenceable
+from foolscap import Referenceable, SturdyRef
 from zope.interface import implements
 from allmydata.interfaces import RIClient
 from allmydata import node
@@ -26,6 +26,7 @@ class Client(node.Node, Referenceable):
     WEBPORTFILE = "webport"
     INTRODUCER_FURL_FILE = "introducer.furl"
     GLOBAL_VDRIVE_FURL_FILE = "vdrive.furl"
+    MY_FURL_FILE = "myself.furl"
     SUICIDE_PREVENTION_HOTLINE_FILE = "suicide_prevention_hotline"
 
     # we're pretty narrow-minded right now
@@ -43,7 +44,7 @@ class Client(node.Node, Referenceable):
         WEBPORTFILE = os.path.join(self.basedir, self.WEBPORTFILE)
         if os.path.exists(WEBPORTFILE):
             f = open(WEBPORTFILE, "r")
-            webport = f.read() # strports string
+            webport = f.read().strip() # strports string
             f.close()
             self.add_service(WebishServer(webport))
 
@@ -75,7 +76,18 @@ class Client(node.Node, Referenceable):
 
     def tub_ready(self):
         self.log("tub_ready")
-        self.my_furl = self.tub.registerReference(self)
+
+        my_old_name = None
+        MYSELF_FURL_PATH = os.path.join(self.basedir, self.MY_FURL_FILE)
+        if os.path.exists(MYSELF_FURL_PATH):
+            my_old_furl = open(MYSELF_FURL_PATH, "r").read().strip()
+            sturdy = SturdyRef(my_old_furl)
+            my_old_name = sturdy.name
+
+        self.my_furl = self.tub.registerReference(self, my_old_name)
+        f = open(MYSELF_FURL_PATH, "w")
+        f.write(self.my_furl)
+        f.close()
 
         ic = IntroducerClient(self.tub, self.introducer_furl, self.my_furl)
         self.introducer_client = ic
-- 
2.45.2