[tor-commits] [tor/master] Include protocol versions in votes.

nickm at torproject.org nickm at torproject.org
Mon Sep 26 18:03:40 UTC 2016


commit f33b90324abe11724f59389e1aeaf8b3e021c3af
Author: Nick Mathewson <nickm at torproject.org>
Date:   Thu Aug 25 14:55:41 2016 -0400

    Include protocol versions in votes.
---
 src/or/dirserv.c       | 11 +++++++++++
 src/or/dirserv.h       |  4 +++-
 src/or/dirvote.c       |  5 +++--
 src/or/networkstatus.c |  3 ++-
 src/or/or.h            |  2 ++
 5 files changed, 21 insertions(+), 4 deletions(-)

diff --git a/src/or/dirserv.c b/src/or/dirserv.c
index a4eb738..03b05ac 100644
--- a/src/or/dirserv.c
+++ b/src/or/dirserv.c
@@ -24,6 +24,7 @@
 #include "networkstatus.h"
 #include "nodelist.h"
 #include "policies.h"
+#include "protover.h"
 #include "rephist.h"
 #include "router.h"
 #include "routerlist.h"
@@ -1795,6 +1796,7 @@ version_from_platform(const char *platform)
  */
 char *
 routerstatus_format_entry(const routerstatus_t *rs, const char *version,
+                          const char *protocols,
                           routerstatus_format_type_t format,
                           const vote_routerstatus_t *vrs)
 {
@@ -1858,6 +1860,9 @@ routerstatus_format_entry(const routerstatus_t *rs, const char *version,
   if (version && strlen(version) < MAX_V_LINE_LEN - V_LINE_OVERHEAD) {
     smartlist_add_asprintf(chunks, "v %s\n", version);
   }
+  if (protocols) {
+    smartlist_add_asprintf(chunks, "proto %s\n", protocols);
+  }
 
   if (format != NS_V2) {
     const routerinfo_t* desc = router_get_by_id_digest(rs->identity_digest);
@@ -2836,6 +2841,12 @@ dirserv_generate_networkstatus_vote_obj(crypto_pk_t *private_key,
         rs->is_flagged_running = 0;
 
       vrs->version = version_from_platform(ri->platform);
+      if (ri->protocol_list) {
+        vrs->protocols = tor_strdup(ri->protocol_list);
+      } else {
+        vrs->protocols = tor_strdup(
+                              protover_compute_for_old_tor(vrs->version));
+      }
       vrs->microdesc = dirvote_format_all_microdesc_vote_lines(ri, now,
                                                         microdescriptors);
 
diff --git a/src/or/dirserv.h b/src/or/dirserv.h
index 3c914e9..1e4f27e 100644
--- a/src/or/dirserv.h
+++ b/src/or/dirserv.h
@@ -96,7 +96,9 @@ size_t dirserv_estimate_data_size(smartlist_t *fps, int is_serverdescs,
 size_t dirserv_estimate_microdesc_size(const smartlist_t *fps, int compressed);
 
 char *routerstatus_format_entry(
-                              const routerstatus_t *rs, const char *platform,
+                              const routerstatus_t *rs,
+                              const char *version,
+                              const char *protocols,
                               routerstatus_format_type_t format,
                               const vote_routerstatus_t *vrs);
 void dirserv_free_all(void);
diff --git a/src/or/dirvote.c b/src/or/dirvote.c
index 2d840a5..67f0ba8 100644
--- a/src/or/dirvote.c
+++ b/src/or/dirvote.c
@@ -244,7 +244,8 @@ format_networkstatus_vote(crypto_pk_t *private_signing_key,
     char *rsf;
     vote_microdesc_hash_t *h;
     rsf = routerstatus_format_entry(&vrs->status,
-                                    vrs->version, NS_V3_VOTE, vrs);
+                                    vrs->version, vrs->protocols,
+                                    NS_V3_VOTE, vrs);
     if (rsf)
       smartlist_add(chunks, rsf);
 
@@ -2007,7 +2008,7 @@ networkstatus_compute_consensus(smartlist_t *votes,
         char *buf;
         /* Okay!! Now we can write the descriptor... */
         /*     First line goes into "buf". */
-        buf = routerstatus_format_entry(&rs_out, NULL, rs_format, NULL);
+        buf = routerstatus_format_entry(&rs_out, NULL, NULL, rs_format, NULL);
         if (buf)
           smartlist_add(chunks, buf);
       }
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index 6c92773..0fc22c9 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -230,6 +230,7 @@ vote_routerstatus_free(vote_routerstatus_t *rs)
   if (!rs)
     return;
   tor_free(rs->version);
+  tor_free(rs->protocols);
   tor_free(rs->status.exitsummary);
   for (h = rs->microdesc; h; h = next) {
     tor_free(h->microdesc_hash_line);
@@ -2095,7 +2096,7 @@ signed_descs_update_status_from_consensus_networkstatus(smartlist_t *descs)
 char *
 networkstatus_getinfo_helper_single(const routerstatus_t *rs)
 {
-  return routerstatus_format_entry(rs, NULL, NS_CONTROL_PORT, NULL);
+  return routerstatus_format_entry(rs, NULL, NULL, NS_CONTROL_PORT, NULL);
 }
 
 /** Alloc and return a string describing routerstatuses for the most
diff --git a/src/or/or.h b/src/or/or.h
index e9d41ee..5085139 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -2408,6 +2408,8 @@ typedef struct vote_routerstatus_t {
                    * networkstatus_t.known_flags. */
   char *version; /**< The version that the authority says this router is
                   * running. */
+  char *protocols; /**< The protocols that this authority says this router
+                    * provides. */
   unsigned int has_measured_bw:1; /**< The vote had a measured bw */
   /** True iff the vote included an entry for ed25519 ID, or included
    * "id ed25519 none" to indicate that there was no ed25519 ID. */





More information about the tor-commits mailing list