|
@@ -4782,27 +4782,42 @@ routerset_union(routerset_t *target, const routerset_t *source)
|
|
|
/** Helper. Return true iff <b>set</b> contains a router based on the other
|
|
|
* provided fields. */
|
|
|
static int
|
|
|
-routerset_contains(const routerset_t *set, uint32_t addr, uint16_t orport,
|
|
|
+routerset_contains(const routerset_t *set, const tor_addr_t *addr,
|
|
|
+ uint16_t orport,
|
|
|
const char *nickname, const char *id_digest, int is_named)
|
|
|
{
|
|
|
if (!set || !set->list) return 0;
|
|
|
(void) is_named; /* not supported */
|
|
|
- if (strmap_get_lc(set->names, nickname))
|
|
|
+ if (nickname && strmap_get_lc(set->names, nickname))
|
|
|
return 1;
|
|
|
- if (digestmap_get(set->digests, id_digest))
|
|
|
+ if (id_digest && digestmap_get(set->digests, id_digest))
|
|
|
return 1;
|
|
|
- if (compare_addr_to_addr_policy(addr, orport, set->policies)
|
|
|
+ if (addr && compare_tor_addr_to_addr_policy(addr, orport, set->policies)
|
|
|
== ADDR_POLICY_REJECTED)
|
|
|
return 1;
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
+/** Return true iff we can tell that <b>ei</b> is a member of <b>set</b>. */
|
|
|
+int
|
|
|
+routerset_contains_extendinfo(const routerset_t *set, extend_info_t *ei)
|
|
|
+{
|
|
|
+ return routerset_contains(set,
|
|
|
+ &ei->addr,
|
|
|
+ ei->port,
|
|
|
+ ei->nickname,
|
|
|
+ ei->identity_digest,
|
|
|
+ -1);
|
|
|
+}
|
|
|
+
|
|
|
/** Return true iff <b>ri</b> is in <b>set</b>. */
|
|
|
int
|
|
|
routerset_contains_router(const routerset_t *set, routerinfo_t *ri)
|
|
|
{
|
|
|
+ tor_addr_t addr;
|
|
|
+ tor_addr_from_ipv4h(&addr, ri->addr);
|
|
|
return routerset_contains(set,
|
|
|
- ri->addr,
|
|
|
+ &addr,
|
|
|
ri->or_port,
|
|
|
ri->nickname,
|
|
|
ri->cache_info.identity_digest,
|
|
@@ -4813,8 +4828,10 @@ routerset_contains_router(const routerset_t *set, routerinfo_t *ri)
|
|
|
int
|
|
|
routerset_contains_routerstatus(const routerset_t *set, routerstatus_t *rs)
|
|
|
{
|
|
|
+ tor_addr_t addr;
|
|
|
+ tor_addr_from_ipv4h(&addr, rs->addr);
|
|
|
return routerset_contains(set,
|
|
|
- rs->addr,
|
|
|
+ &addr,
|
|
|
rs->or_port,
|
|
|
rs->nickname,
|
|
|
rs->identity_digest,
|