[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

[or-cvs] r16536: {tor} Add exit policy and bw to dirvotes - unfortunately also to v (tor/trunk/src/or)



Author: weasel
Date: 2008-08-14 08:37:00 -0400 (Thu, 14 Aug 2008)
New Revision: 16536

Modified:
   tor/trunk/src/or/dirserv.c
   tor/trunk/src/or/routerlist.c
Log:
Add exit policy and bw to dirvotes - unfortunately also to v2 statuses

Modified: tor/trunk/src/or/dirserv.c
===================================================================
--- tor/trunk/src/or/dirserv.c	2008-08-14 11:24:03 UTC (rev 16535)
+++ tor/trunk/src/or/dirserv.c	2008-08-14 12:37:00 UTC (rev 16536)
@@ -1866,12 +1866,28 @@
   int r;
   struct in_addr in;
   char *cp;
+  char *summary;
 
   char published[ISO_TIME_LEN+1];
   char ipaddr[INET_NTOA_BUF_LEN];
   char identity64[BASE64_DIGEST_LEN+1];
   char digest64[BASE64_DIGEST_LEN+1];
+  routerinfo_t* desc = router_get_by_digest(rs->identity_digest);
 
+  if (!desc) {
+    char id[HEX_DIGEST_LEN+1];
+    char dd[HEX_DIGEST_LEN+1];
+
+    base16_encode(id, sizeof(id), rs->identity_digest, DIGEST_LEN);
+    base16_encode(dd, sizeof(dd), rs->descriptor_digest, DIGEST_LEN);
+    log_warn(LD_BUG, "Cannot get the descriptor with digest %s for %s.",
+             id, dd);
+    return -1;
+  };
+  tor_assert(!memcmp(desc->cache_info.signed_descriptor_digest,
+                     rs->descriptor_digest,
+                     DIGEST_LEN));
+
   format_iso_time(published, rs->published_on);
   digest_to_base64(identity64, rs->identity_digest);
   digest_to_base64(digest64, rs->descriptor_digest);
@@ -1896,7 +1912,8 @@
   cp = buf + strlen(buf);
   /* NOTE: Whenever this list expands, be sure to increase MAX_FLAG_LINE_LEN*/
   r = tor_snprintf(cp, buf_len - (cp-buf),
-                   "s%s%s%s%s%s%s%s%s%s%s%s%s%s\n",
+                   "s%s%s%s%s%s%s%s%s%s%s%s%s%s\n"
+                   "w Bandwidth=%d\n",
                   /* These must stay in alphabetical order. */
                    rs->is_authority?" Authority":"",
                    rs->is_bad_directory?" BadDirectory":"",
@@ -1910,7 +1927,8 @@
                    rs->is_stable?" Stable":"",
                    rs->is_unnamed?" Unnamed":"",
                    rs->is_v2_dir?" V2Dir":"",
-                   rs->is_valid?" Valid":"");
+                   rs->is_valid?" Valid":"",
+                   router_get_advertised_bandwidth_capped(desc));
   if (r<0) {
     log_warn(LD_BUG, "Not enough space in buffer.");
     return -1;
@@ -1926,6 +1944,16 @@
     }
   }
 
+  summary = policy_summarize(desc->exit_policy);
+  if (summary) {
+    r = tor_snprintf(cp, buf_len - (cp-buf), "p %s\n", summary);
+    if (r<0) {
+      log_warn(LD_BUG, "Not enough space in buffer.");
+      return -1;
+    }
+    tor_free(summary);
+  }
+
   return 0;
 }
 

Modified: tor/trunk/src/or/routerlist.c
===================================================================
--- tor/trunk/src/or/routerlist.c	2008-08-14 11:24:03 UTC (rev 16535)
+++ tor/trunk/src/or/routerlist.c	2008-08-14 12:37:00 UTC (rev 16536)
@@ -1431,6 +1431,19 @@
  * routers by bandwidth. */
 #define DEFAULT_MAX_BELIEVABLE_BANDWIDTH 10000000 /* 10 MB/sec */
 
+/** Return the smaller of the router's configured BandwidthRate
+ * and its advertised capacity, capped by max-believe-bw. */
+uint32_t
+router_get_advertised_bandwidth_capped(routerinfo_t *router)
+{
+  uint32_t result = router->bandwidthcapacity;
+  if (result > router->bandwidthrate)
+    result = router->bandwidthrate;
+  if (result > DEFAULT_MAX_BELIEVABLE_BANDWIDTH)
+    result = DEFAULT_MAX_BELIEVABLE_BANDWIDTH;
+  return result;
+}
+
 /** Eventually, the number we return will come from the directory
  * consensus, so clients can dynamically update to better numbers.
  *