Add a wrapper for a common networkstatus param pattern

We frequently want to check a networkstatus parameter only when it
isn't overridden from the torrc file.
This commit is contained in:
Nick Mathewson 2016-11-26 09:22:04 -05:00
parent 2ea5aa7182
commit 039bd01767
3 changed files with 33 additions and 0 deletions

View File

@ -2303,6 +2303,25 @@ networkstatus_get_param(const networkstatus_t *ns, const char *param_name,
default_val, min_val, max_val);
}
/**
* As networkstatus_get_param(), but check torrc_value before checking the
* consensus. If torrc_value is in-range, then return it instead of the
* value from the consensus.
*/
int32_t
networkstatus_get_overridable_param(const networkstatus_t *ns,
int32_t torrc_value,
const char *param_name,
int32_t default_val,
int32_t min_val, int32_t max_val)
{
if (torrc_value >= min_val && torrc_value <= max_val)
return torrc_value;
else
return networkstatus_get_param(
ns, param_name, default_val, min_val, max_val);
}
/**
* Retrieve the consensus parameter that governs the
* fixed-point precision of our network balancing 'bandwidth-weights'

View File

@ -111,6 +111,11 @@ int32_t networkstatus_get_param(const networkstatus_t *ns,
const char *param_name,
int32_t default_val, int32_t min_val,
int32_t max_val);
int32_t networkstatus_get_overridable_param(const networkstatus_t *ns,
int32_t torrc_value,
const char *param_name,
int32_t default_val,
int32_t min_val, int32_t max_val);
int getinfo_helper_networkstatus(control_connection_t *conn,
const char *question, char **answer,
const char **errmsg);

View File

@ -1494,6 +1494,15 @@ test_dir_param_voting(void *arg)
tt_int_op(-8,OP_EQ, networkstatus_get_param(&vote4, "ab", -12, -100, -8));
tt_int_op(0,OP_EQ, networkstatus_get_param(&vote4, "foobar", 0, -100, 8));
tt_int_op(100,OP_EQ, networkstatus_get_overridable_param(
&vote4, -1, "x-yz", 50, 0, 300));
tt_int_op(30,OP_EQ, networkstatus_get_overridable_param(
&vote4, 30, "x-yz", 50, 0, 300));
tt_int_op(0,OP_EQ, networkstatus_get_overridable_param(
&vote4, -101, "foobar", 0, -100, 8));
tt_int_op(-99,OP_EQ, networkstatus_get_overridable_param(
&vote4, -99, "foobar", 0, -100, 8));
smartlist_add(votes, &vote1);
/* Do the first tests without adding all the other votes, for