[tor-commits] [onionoo/master] Add transport names to bridge details documents.

karsten at torproject.org karsten at torproject.org
Mon Dec 8 12:22:56 UTC 2014


commit 655a63dc1da746b4ebf98f8315c12b3d9f1c8873
Author: Karsten Loesing <karsten.loesing at gmx.net>
Date:   Tue Dec 2 11:31:53 2014 +0100

    Add transport names to bridge details documents.
    
    Implements #11052.
---
 .../torproject/onionoo/docs/DetailsDocument.java   |    9 ++++++++
 .../org/torproject/onionoo/docs/DetailsStatus.java |   19 ++++++++++++++++
 .../torproject/onionoo/server/ResponseBuilder.java |    2 ++
 .../onionoo/updater/NodeDetailsStatusUpdater.java  |   24 ++++++++++++++++++++
 .../onionoo/writer/DetailsDocumentWriter.java      |    1 +
 web/protocol.html                                  |   10 ++++++++
 6 files changed, 65 insertions(+)

diff --git a/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java b/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
index 86abf9f..9e0a067 100644
--- a/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
+++ b/src/main/java/org/torproject/onionoo/docs/DetailsDocument.java
@@ -356,5 +356,14 @@ public class DetailsDocument extends Document {
   public String getPoolAssignment() {
     return this.pool_assignment;
   }
+
+  private List<String> transports;
+  public void setTransports(List<String> transports) {
+    this.transports = (transports != null && !transports.isEmpty()) ?
+        transports : null;
+  }
+  public List<String> getTransports() {
+    return this.transports;
+  }
 }
 
diff --git a/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java b/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
index 967e493..085ce8d 100644
--- a/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
+++ b/src/main/java/org/torproject/onionoo/docs/DetailsStatus.java
@@ -130,6 +130,25 @@ public class DetailsStatus extends Document {
     return this.hibernating;
   }
 
+  /* From most recently published extra-info descriptor: */
+
+  private Long extra_info_desc_published;
+  public void setExtraInfoDescPublished(Long extraInfoDescPublished) {
+    this.extra_info_desc_published = extraInfoDescPublished;
+  }
+  public Long getExtraInfoDescPublished() {
+    return this.extra_info_desc_published;
+  }
+
+  private List<String> transports;
+  public void setTransports(List<String> transports) {
+    this.transports = (transports != null && !transports.isEmpty()) ?
+        transports : null;
+  }
+  public List<String> getTransports() {
+    return this.transports;
+  }
+
   /* From network status entries: */
 
   private boolean is_relay;
diff --git a/src/main/java/org/torproject/onionoo/server/ResponseBuilder.java b/src/main/java/org/torproject/onionoo/server/ResponseBuilder.java
index d2239aa..ee92e95 100644
--- a/src/main/java/org/torproject/onionoo/server/ResponseBuilder.java
+++ b/src/main/java/org/torproject/onionoo/server/ResponseBuilder.java
@@ -266,6 +266,8 @@ public class ResponseBuilder {
             dd.setHibernating(detailsDocument.getHibernating());
           } else if (field.equals("pool_assignment")) {
             dd.setPoolAssignment(detailsDocument.getPoolAssignment());
+          } else if (field.equals("transports")) {
+            dd.setTransports(detailsDocument.getTransports());
           }
         }
         /* Don't escape HTML characters, like < and >, contained in
diff --git a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
index 0ce17e4..102c6df 100644
--- a/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
+++ b/src/main/java/org/torproject/onionoo/updater/NodeDetailsStatusUpdater.java
@@ -20,6 +20,7 @@ import org.torproject.descriptor.BridgePoolAssignment;
 import org.torproject.descriptor.Descriptor;
 import org.torproject.descriptor.ExitList;
 import org.torproject.descriptor.ExitListEntry;
+import org.torproject.descriptor.ExtraInfoDescriptor;
 import org.torproject.descriptor.NetworkStatusEntry;
 import org.torproject.descriptor.RelayNetworkStatusConsensus;
 import org.torproject.descriptor.ServerDescriptor;
@@ -113,6 +114,8 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
     this.descriptorSource.registerDescriptorListener(this,
         DescriptorType.BRIDGE_SERVER_DESCRIPTORS);
     this.descriptorSource.registerDescriptorListener(this,
+        DescriptorType.BRIDGE_EXTRA_INFOS);
+    this.descriptorSource.registerDescriptorListener(this,
         DescriptorType.BRIDGE_POOL_ASSIGNMENTS);
     this.descriptorSource.registerDescriptorListener(this,
         DescriptorType.EXIT_LISTS);
@@ -132,6 +135,9 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
           (RelayNetworkStatusConsensus) descriptor);
     } else if (descriptor instanceof ServerDescriptor && !relay) {
       this.processBridgeServerDescriptor((ServerDescriptor) descriptor);
+    } else if (descriptor instanceof ExtraInfoDescriptor && !relay) {
+      this.processBridgeExtraInfoDescriptor(
+          (ExtraInfoDescriptor) descriptor);
     } else if (descriptor instanceof BridgePoolAssignment) {
       this.processBridgePoolAssignment((BridgePoolAssignment) descriptor);
     } else if (descriptor instanceof BridgeNetworkStatus) {
@@ -289,6 +295,24 @@ public class NodeDetailsStatusUpdater implements DescriptorListener,
     this.updatedNodes.add(fingerprint);
   }
 
+  private void processBridgeExtraInfoDescriptor(
+      ExtraInfoDescriptor descriptor) {
+    String fingerprint = descriptor.getFingerprint();
+    DetailsStatus detailsStatus = this.documentStore.retrieve(
+        DetailsStatus.class, true, fingerprint);
+    if (detailsStatus == null) {
+      detailsStatus = new DetailsStatus();
+    } else if (null == detailsStatus.getExtraInfoDescPublished() ||
+        descriptor.getPublishedMillis() >
+        detailsStatus.getExtraInfoDescPublished()) {
+      detailsStatus.setExtraInfoDescPublished(
+          descriptor.getPublishedMillis());
+      detailsStatus.setTransports(descriptor.getTransports());
+      this.documentStore.store(detailsStatus, fingerprint);
+      this.updatedNodes.add(fingerprint);
+    }
+  }
+
   private Map<String, String> bridgePoolAssignments =
       new HashMap<String, String>();
 
diff --git a/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java b/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
index 7f464b6..59bb269 100644
--- a/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
+++ b/src/main/java/org/torproject/onionoo/writer/DetailsDocumentWriter.java
@@ -151,6 +151,7 @@ public class DetailsDocumentWriter implements DocumentWriter {
         detailsStatus.getAdvertisedBandwidth());
     detailsDocument.setPlatform(detailsStatus.getPlatform());
     detailsDocument.setPoolAssignment(detailsStatus.getPoolAssignment());
+    detailsDocument.setTransports(detailsStatus.getTransports());
     this.documentStore.store(detailsDocument, fingerprint);
   }
 
diff --git a/web/protocol.html b/web/protocol.html
index fed1c36..3766d90 100644
--- a/web/protocol.html
+++ b/web/protocol.html
@@ -1394,6 +1394,16 @@ available.
 </p>
 </li>
 
+<li>
+<b><font color="blue">transports</font></b>
+<code class="typeof">array of strings</code>
+<span class="required-false">optional</span>
+<p>
+Array of (pluggable) transport names supported by this bridge.
+<font color="blue">Added on December 2, 2014.</font>
+</p>
+</li>
+
 </ul>
 
 </div> <!-- box -->





More information about the tor-commits mailing list