|
@@ -2366,6 +2366,49 @@ networkstatus_getinfo_helper_single(const routerstatus_t *rs)
|
|
|
NULL);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * Extract status information from <b>ri</b> and from other authority
|
|
|
+ * functions and store it in <b>rs</b>. <b>rs</b> is zeroed out before it is
|
|
|
+ * set.
|
|
|
+ *
|
|
|
+ * We assume that node-\>is_running has already been set, e.g. by
|
|
|
+ * dirserv_set_router_is_running(ri, now);
|
|
|
+ */
|
|
|
+void
|
|
|
+set_routerstatus_from_routerinfo(routerstatus_t *rs,
|
|
|
+ const node_t *node,
|
|
|
+ const routerinfo_t *ri)
|
|
|
+{
|
|
|
+ memset(rs, 0, sizeof(routerstatus_t));
|
|
|
+
|
|
|
+ rs->is_authority =
|
|
|
+ router_digest_is_trusted_dir(ri->cache_info.identity_digest);
|
|
|
+
|
|
|
+ /* Set by compute_performance_thresholds or from consensus */
|
|
|
+ rs->is_exit = node->is_exit;
|
|
|
+ rs->is_stable = node->is_stable;
|
|
|
+ rs->is_fast = node->is_fast;
|
|
|
+ rs->is_flagged_running = node->is_running;
|
|
|
+ rs->is_valid = node->is_valid;
|
|
|
+ rs->is_possible_guard = node->is_possible_guard;
|
|
|
+ rs->is_bad_exit = node->is_bad_exit;
|
|
|
+ rs->is_hs_dir = node->is_hs_dir;
|
|
|
+ rs->is_named = rs->is_unnamed = 0;
|
|
|
+
|
|
|
+ rs->published_on = ri->cache_info.published_on;
|
|
|
+ memcpy(rs->identity_digest, node->identity, DIGEST_LEN);
|
|
|
+ memcpy(rs->descriptor_digest, ri->cache_info.signed_descriptor_digest,
|
|
|
+ DIGEST_LEN);
|
|
|
+ rs->addr = ri->addr;
|
|
|
+ strlcpy(rs->nickname, ri->nickname, sizeof(rs->nickname));
|
|
|
+ rs->or_port = ri->or_port;
|
|
|
+ rs->dir_port = ri->dir_port;
|
|
|
+ rs->is_v2_dir = ri->supports_tunnelled_dir_requests;
|
|
|
+
|
|
|
+ tor_addr_copy(&rs->ipv6_addr, &ri->ipv6_addr);
|
|
|
+ rs->ipv6_orport = ri->ipv6_orport;
|
|
|
+}
|
|
|
+
|
|
|
/** Alloc and return a string describing routerstatuses for the most
|
|
|
* recent info of each router we know about that is of purpose
|
|
|
* <b>purpose_string</b>. Return NULL if unrecognized purpose.
|
|
@@ -2398,8 +2441,7 @@ networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now)
|
|
|
continue;
|
|
|
if (ri->purpose != purpose)
|
|
|
continue;
|
|
|
- /* then generate and write out status lines for each of them */
|
|
|
- set_routerstatus_from_routerinfo(&rs, node, ri, now, 0);
|
|
|
+ set_routerstatus_from_routerinfo(&rs, node, ri);
|
|
|
smartlist_add(statuses, networkstatus_getinfo_helper_single(&rs));
|
|
|
} SMARTLIST_FOREACH_END(ri);
|
|
|
|
|
@@ -2409,47 +2451,6 @@ networkstatus_getinfo_by_purpose(const char *purpose_string, time_t now)
|
|
|
return answer;
|
|
|
}
|
|
|
|
|
|
-/** Write out router status entries for all our bridge descriptors. Here, we
|
|
|
- * also mark routers as running. */
|
|
|
-void
|
|
|
-networkstatus_dump_bridge_status_to_file(time_t now)
|
|
|
-{
|
|
|
- char *status;
|
|
|
- char *fname = NULL;
|
|
|
- char *thresholds = NULL;
|
|
|
- char *published_thresholds_and_status = NULL;
|
|
|
- char published[ISO_TIME_LEN+1];
|
|
|
- const routerinfo_t *me = router_get_my_routerinfo();
|
|
|
- char fingerprint[FINGERPRINT_LEN+1];
|
|
|
- char *fingerprint_line = NULL;
|
|
|
-
|
|
|
- dirserv_set_bridges_running(now);
|
|
|
- status = networkstatus_getinfo_by_purpose("bridge", now);
|
|
|
-
|
|
|
- if (me && crypto_pk_get_fingerprint(me->identity_pkey,
|
|
|
- fingerprint, 0) >= 0) {
|
|
|
- tor_asprintf(&fingerprint_line, "fingerprint %s\n", fingerprint);
|
|
|
- } else {
|
|
|
- log_warn(LD_BUG, "Error computing fingerprint for bridge status.");
|
|
|
- }
|
|
|
- format_iso_time(published, now);
|
|
|
- dirserv_compute_bridge_flag_thresholds();
|
|
|
- thresholds = dirserv_get_flag_thresholds_line();
|
|
|
- tor_asprintf(&published_thresholds_and_status,
|
|
|
- "published %s\nflag-thresholds %s\n%s%s",
|
|
|
- published, thresholds, fingerprint_line ? fingerprint_line : "",
|
|
|
- status);
|
|
|
- fname = get_datadir_fname("networkstatus-bridges");
|
|
|
- if (write_str_to_file(fname,published_thresholds_and_status,0)<0) {
|
|
|
- log_warn(LD_DIRSERV, "Unable to write networkstatus-bridges file.");
|
|
|
- }
|
|
|
- tor_free(thresholds);
|
|
|
- tor_free(published_thresholds_and_status);
|
|
|
- tor_free(fname);
|
|
|
- tor_free(status);
|
|
|
- tor_free(fingerprint_line);
|
|
|
-}
|
|
|
-
|
|
|
/* DOCDOC get_net_param_from_list */
|
|
|
static int32_t
|
|
|
get_net_param_from_list(smartlist_t *net_params, const char *param_name,
|