From 71323fbd8f3972092c3a4c1fe0ef7dd666d16f0c Mon Sep 17 00:00:00 2001
From: Brian Warner <warner@lothar.com>
Date: Tue, 22 Sep 2015 16:29:34 -0700
Subject: [PATCH] introducer: stop tracking hints for subscribed clients

A long time ago, the introducer's status web page would show the
advertised IP addresses for all subscribers, by parsing their
RemoteReference's FURL's connection hints. This hasn't worked since
about 12-Aug-2014 when foolscap-0.6.5 changed the internal format of
these hints.

This removes the feature: we no longer attempt to show advertised IP
addresses of subscribed clients. It also removes the code that looked
inside foolscap internals for this information.
---
 src/allmydata/introducer/common.py |  4 +---
 src/allmydata/introducer/old.py    |  4 +---
 src/allmydata/introducer/server.py |  4 +---
 src/allmydata/util/rrefutil.py     | 14 --------------
 src/allmydata/web/introducer.xhtml |  2 --
 src/allmydata/web/introweb.py      |  1 -
 6 files changed, 3 insertions(+), 26 deletions(-)

diff --git a/src/allmydata/introducer/common.py b/src/allmydata/introducer/common.py
index 9337d4bb..9c5638a3 100644
--- a/src/allmydata/introducer/common.py
+++ b/src/allmydata/introducer/common.py
@@ -100,20 +100,18 @@ class SubscriberDescriptor:
     .nickname: their self-provided nickname, or "?" (unicode)
     .version: their self-provided version (string)
     .app_versions: versions of each library they use (dict str->str)
-    .advertised_addresses: what hosts they listen on (list of strings)
     .remote_address: the external address from which they connected (string)
     .tubid: for subscribers connecting with Foolscap, their tubid (string)
     """
 
     def __init__(self, service_name, when,
                  nickname, version, app_versions,
-                 advertised_addresses, remote_address, tubid):
+                 remote_address, tubid):
         self.service_name = service_name
         self.when = when
         self.nickname = nickname
         self.version = version
         self.app_versions = app_versions
-        self.advertised_addresses = advertised_addresses
         self.remote_address = remote_address
         self.tubid = tubid
 
diff --git a/src/allmydata/introducer/old.py b/src/allmydata/introducer/old.py
index 702969f0..3c2fcb71 100644
--- a/src/allmydata/introducer/old.py
+++ b/src/allmydata/introducer/old.py
@@ -405,13 +405,11 @@ class IntroducerService_v1(service.MultiService, Referenceable):
         for service_name, subscribers in self._subscribers.items():
             for rref, when in subscribers.items():
                 tubid = rref.getRemoteTubID() or "?"
-                advertised_addresses = rrefutil.hosts_for_rref(rref)
                 remote_address = rrefutil.stringify_remote_address(rref)
                 nickname, version, app_versions = u"?", u"?", {}
                 sd = SubscriberDescriptor(service_name, when,
                                           nickname, version, app_versions,
-                                          advertised_addresses, remote_address,
-                                          tubid)
+                                          remote_address, tubid)
                 s.append(sd)
         return s
 
diff --git a/src/allmydata/introducer/server.py b/src/allmydata/introducer/server.py
index 7031c3af..92c2497e 100644
--- a/src/allmydata/introducer/server.py
+++ b/src/allmydata/introducer/server.py
@@ -175,7 +175,6 @@ class IntroducerService(service.MultiService, Referenceable):
                 # tubid will be None. Also, subscribers do not tell us which
                 # pubkey they use; only publishers do that.
                 tubid = rref.getRemoteTubID() or "?"
-                advertised_addresses = rrefutil.hosts_for_rref(rref)
                 remote_address = rrefutil.stringify_remote_address(rref)
                 # these three assume subscriber_info["version"]==0, but
                 # should tolerate other versions
@@ -188,8 +187,7 @@ class IntroducerService(service.MultiService, Referenceable):
                 # 'when' is the time they subscribed
                 sd = SubscriberDescriptor(service_name, when,
                                           nickname, version, app_versions,
-                                          advertised_addresses, remote_address,
-                                          tubid)
+                                          remote_address, tubid)
                 s.append(sd)
         return s
 
diff --git a/src/allmydata/util/rrefutil.py b/src/allmydata/util/rrefutil.py
index a14d15f1..b991267f 100644
--- a/src/allmydata/util/rrefutil.py
+++ b/src/allmydata/util/rrefutil.py
@@ -27,20 +27,6 @@ def trap_deadref(f):
     return trap_and_discard(f, DeadReferenceError)
 
 
-def hosts_for_rref(rref, ignore_localhost=True):
-    # actually, this only returns hostnames
-    advertised = []
-    for hint in rref.getLocationHints():
-        # Foolscap-0.2.5 and earlier used strings in .locationHints, but we
-        # require a newer version that uses tuples of ("ipv4", host, port)
-        assert not isinstance(hint, str), hint
-        if hint[0] == "ipv4":
-            host = hint[1]
-            if ignore_localhost and host == "127.0.0.1":
-                continue
-            advertised.append(host)
-    return advertised
-
 def hosts_for_furl(furl, ignore_localhost=True):
     advertised = []
     for hint in SturdyRef(furl).locationHints:
diff --git a/src/allmydata/web/introducer.xhtml b/src/allmydata/web/introducer.xhtml
index e89e88c3..82c93764 100644
--- a/src/allmydata/web/introducer.xhtml
+++ b/src/allmydata/web/introducer.xhtml
@@ -56,7 +56,6 @@
     <th class="nickname-and-peerid">
       <div class="service-nickname">Nickname</div>
       <div class="nodeid data-chars">Tub ID</div></th>
-    <th>Advertised IPs</th>
     <th>Connected From</th>
     <th>Since</th>
     <th>Version</th>
@@ -66,7 +65,6 @@
     <td class="nickname-and-peerid">
       <div class="nickname"><n:slot name="nickname"/></div>
       <div class="nodeid data-chars"><n:slot name="tubid"/></div></td>
-    <td><n:slot name="advertised"/></td>
     <td><n:slot name="connected"/></td>
     <td class="service-since"><n:slot name="since"/></td>
     <td class="service-version"><n:slot name="version"/></td>
diff --git a/src/allmydata/web/introweb.py b/src/allmydata/web/introweb.py
index cc8b2ce1..bbe42d0b 100644
--- a/src/allmydata/web/introweb.py
+++ b/src/allmydata/web/introweb.py
@@ -119,7 +119,6 @@ class IntroducerRoot(rend.Page):
     def render_subscriber_row(self, ctx, s):
         ctx.fillSlots("nickname", s.nickname)
         ctx.fillSlots("tubid", s.tubid)
-        ctx.fillSlots("advertised", " ".join(s.advertised_addresses))
         ctx.fillSlots("connected", s.remote_address)
         since_s = time.strftime("%H:%M:%S %d-%b-%Y", time.localtime(s.when))
         ctx.fillSlots("since", since_s)
-- 
2.45.2