aboutsummaryrefslogtreecommitdiff
path: root/src/or/routerlist.c
diff options
context:
space:
mode:
authorNeel Chauhan <neel@neelc.org>2018-06-16 11:27:28 -0400
committerNeel Chauhan <neel@neelc.org>2018-06-16 11:27:28 -0400
commit9d7f148885a9334605cfb396bb06ad546349ad6a (patch)
tree77934279d1a0136e5a4b26acc373109c5681b052 /src/or/routerlist.c
parent97cc61e9476d6553e65ade578cc57a029674ee5a (diff)
downloadtor-9d7f148885a9334605cfb396bb06ad546349ad6a.tar.gz
tor-9d7f148885a9334605cfb396bb06ad546349ad6a.zip
Make frac_nodes_with_descriptors() take and use for_direct_connect
Diffstat (limited to 'src/or/routerlist.c')
-rw-r--r--src/or/routerlist.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/or/routerlist.c b/src/or/routerlist.c
index 8788dc0190..728137bf9c 100644
--- a/src/or/routerlist.c
+++ b/src/or/routerlist.c
@@ -2746,10 +2746,15 @@ compute_weighted_bandwidths(const smartlist_t *sl,
/** For all nodes in <b>sl</b>, return the fraction of those nodes, weighted
* by their weighted bandwidths with rule <b>rule</b>, for which we have
- * descriptors. */
+ * descriptors.
+ *
+ * If <b>for_direct_connect</b> is true, we intend to connect to the node
+ * directly, as the first hop of a circuit; otherwise, we intend to connect
+ * to it indirectly, or use it as if we were connecting to it indirectly. */
double
frac_nodes_with_descriptors(const smartlist_t *sl,
- bandwidth_weight_rule_t rule)
+ bandwidth_weight_rule_t rule,
+ int for_direct_conn)
{
double *bandwidths = NULL;
double total, present;
@@ -2761,7 +2766,7 @@ frac_nodes_with_descriptors(const smartlist_t *sl,
total <= 0.0) {
int n_with_descs = 0;
SMARTLIST_FOREACH(sl, const node_t *, node, {
- if (node_has_any_descriptor(node))
+ if (node_has_preferred_descriptor(node, for_direct_conn))
n_with_descs++;
});
return ((double)n_with_descs) / smartlist_len(sl);
@@ -2769,7 +2774,7 @@ frac_nodes_with_descriptors(const smartlist_t *sl,
present = 0.0;
SMARTLIST_FOREACH_BEGIN(sl, const node_t *, node) {
- if (node_has_any_descriptor(node))
+ if (node_has_preferred_descriptor(node, for_direct_conn))
present += bandwidths[node_sl_idx];
} SMARTLIST_FOREACH_END(node);