int res;
or_options_t *options = get_options();
routerinfo_t *ri;
+ signed_descriptor_t *sd;
const networkstatus_t *consensus =
networkstatus_get_reasonably_live_consensus(now);
{
if (client_would_use_router(rs, now, options)) {
++num_usable; /* the consensus says we want it. */
- /* XXX021 shouldn't we look up by descriptor digest? */
- ri = router_get_by_digest(rs->identity_digest);
- if (ri) {
- ++num_present; /* we have some descriptor for it. */
+ if ((sd = router_get_by_descriptor_digest(rs->descriptor_digest)) &&
+ (ri = router_get_by_digest(rs->identity_digest)) &&
+ !memcmp(ri->cache_info.signed_descriptor_digest,
+ sd->signed_descriptor_digest, DIGEST_LEN)) {
+ /* we have the descriptor listed in the consensus. */
+ ++num_present;
if (ri->is_running)
++num_running; /* our local status says it's still up. */
}