Make routerset_contains_router() support IPv6

This commit is contained in:
Neel Chauhan 2020-06-11 12:27:40 -07:00 committed by Nick Mathewson
parent 3cb77a9cca
commit 0a3e6d81bb

View File

@ -223,11 +223,11 @@ routerset_len(const routerset_t *set)
* *
* (If country is -1, then we take the country * (If country is -1, then we take the country
* from addr.) */ * from addr.) */
STATIC int static int
routerset_contains(const routerset_t *set, const tor_addr_t *addr, routerset_contains2(const routerset_t *set, const tor_addr_t *addr,
uint16_t orport, uint16_t orport, const tor_addr_t *addr2,
const char *nickname, const char *id_digest, uint16_t orport2, const char *nickname,
country_t country) const char *id_digest, country_t country)
{ {
if (!set || !set->list) if (!set || !set->list)
return 0; return 0;
@ -238,6 +238,9 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies) if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
== ADDR_POLICY_REJECTED) == ADDR_POLICY_REJECTED)
return 3; return 3;
if (addr2 && compare_tor_addr_to_addr_policy(addr2, orport2, set->policies)
== ADDR_POLICY_REJECTED)
return 3;
if (set->countries) { if (set->countries) {
if (country < 0 && addr) if (country < 0 && addr)
country = geoip_get_country_by_addr(addr); country = geoip_get_country_by_addr(addr);
@ -249,6 +252,17 @@ routerset_contains(const routerset_t *set, const tor_addr_t *addr,
return 0; return 0;
} }
/** Helper. Like routerset_contains2() but for a single IP/port combo.
*/
STATIC int
routerset_contains(const routerset_t *set, const tor_addr_t *addr,
uint16_t orport, const char *nickname,
const char *id_digest, country_t country)
{
return routerset_contains2(set, addr, orport, NULL, 0,
nickname, id_digest, country);
}
/** If *<b>setp</b> includes at least one country code, or if /** If *<b>setp</b> includes at least one country code, or if
* <b>only_some_cc_set</b> is 0, add the ?? and A1 country codes to * <b>only_some_cc_set</b> is 0, add the ?? and A1 country codes to
* *<b>setp</b>, creating it as needed. Return true iff *<b>setp</b> changed. * *<b>setp</b>, creating it as needed. Return true iff *<b>setp</b> changed.
@ -306,14 +320,11 @@ int
routerset_contains_router(const routerset_t *set, const routerinfo_t *ri, routerset_contains_router(const routerset_t *set, const routerinfo_t *ri,
country_t country) country_t country)
{ {
tor_addr_t addr; tor_addr_t addr_v4;
tor_addr_from_ipv4h(&addr, ri->addr); tor_addr_from_ipv4h(&addr_v4, ri->addr);
return routerset_contains(set, return routerset_contains2(set, &addr_v4, ri->or_port, &ri->ipv6_addr,
&addr, ri->ipv6_orport, ri->nickname,
ri->or_port, ri->cache_info.identity_digest, country);
ri->nickname,
ri->cache_info.identity_digest,
country);
} }
/** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we /** Return true iff <b>rs</b> is in <b>set</b>. If country is <b>-1</b>, we