summaryrefslogtreecommitdiff
path: root/src/or/networkstatus.c
diff options
context:
space:
mode:
authorMike Perry <mikeperry-git@fscked.org>2010-01-29 17:10:50 -0800
committerMike Perry <mikeperry-git@fscked.org>2010-02-22 16:52:11 -0800
commitf9d40649fe24590463f6e607c6b4e3c757f3b05f (patch)
tree220393542d564bb3ee99336cb705193773893ef3 /src/or/networkstatus.c
parent95aad7167819560b2abfb8065682ad263982f80d (diff)
downloadtor-f9d40649fe24590463f6e607c6b4e3c757f3b05f.tar.gz
tor-f9d40649fe24590463f6e607c6b4e3c757f3b05f.zip
Perform calculation of consensus bandwidth weights.
Also add bwweightscale consensus param. Use it as our fixed-point calculation width.
Diffstat (limited to 'src/or/networkstatus.c')
-rw-r--r--src/or/networkstatus.c35
1 files changed, 20 insertions, 15 deletions
diff --git a/src/or/networkstatus.c b/src/or/networkstatus.c
index a507f1be2d..b5c84d0e61 100644
--- a/src/or/networkstatus.c
+++ b/src/or/networkstatus.c
@@ -2038,6 +2038,25 @@ networkstatus_dump_bridge_status_to_file(time_t now)
tor_free(status);
}
+int32_t
+get_net_param_from_list(smartlist_t *net_params, const char *param_name,
+ int default_val)
+{
+ size_t name_len = strlen(param_name);
+
+ SMARTLIST_FOREACH_BEGIN(net_params, const char *, p) {
+ if (!strcmpstart(p, param_name) && p[name_len] == '=') {
+ int ok=0;
+ long v = tor_parse_long(p+name_len+1, 10, INT32_MIN,
+ INT32_MAX, &ok, NULL);
+ if (ok)
+ return (int32_t) v;
+ }
+ } SMARTLIST_FOREACH_END(p);
+
+ return default_val;
+}
+
/** Return the value of a integer parameter from the networkstatus <b>ns</b>
* whose name is <b>param_name</b>. If <b>ns</b> is NULL, try loading the
* latest consensus ourselves. Return <b>default_val</b> if no latest
@@ -2046,27 +2065,13 @@ int32_t
networkstatus_get_param(networkstatus_t *ns, const char *param_name,
int32_t default_val)
{
- size_t name_len;
-
if (!ns) /* if they pass in null, go find it ourselves */
ns = networkstatus_get_latest_consensus();
if (!ns || !ns->net_params)
return default_val;
- name_len = strlen(param_name);
-
- SMARTLIST_FOREACH_BEGIN(ns->net_params, const char *, p) {
- if (!strcmpstart(p, param_name) && p[name_len] == '=') {
- int ok=0;
- long v = tor_parse_long(p+name_len+1, 10, INT32_MIN,
- INT32_MAX, &ok, NULL);
- if (ok)
- return (int32_t) v;
- }
- } SMARTLIST_FOREACH_END(p);
-
- return default_val;
+ return get_net_param_from_list(ns->net_params, param_name, default_val);
}
/** Return the name of the consensus flavor <b>flav</b> as used to identify