unsigned int refetch_desc = 0;
rend_cache_entry_t *entry = NULL;
const int rend_cache_lookup_result =
- rend_cache_lookup_entry(rend_data->onion_address, -1, &entry, 0);
+ rend_cache_lookup_entry(rend_data->onion_address, -1, &entry,
+ REND_CACHE_TYPE_CLIENT);
if (rend_cache_lookup_result < 0) {
switch (-rend_cache_lookup_result) {
case EINVAL:
return -1;
}
- if (!rend_cache_lookup_entry(question, -1, &e, 0)) {
+ if (!rend_cache_lookup_entry(question, -1, &e, REND_CACHE_TYPE_CLIENT)) {
/* Descriptor found in cache */
*answer = tor_strdup(e->desc);
} else {
return -1;
}
- if (!rend_cache_lookup_entry(question, -1, &e, 1)) {
+ if (!rend_cache_lookup_entry(question, -1, &e, REND_CACHE_TYPE_SERVICE)) {
/* Descriptor found in cache */
*answer = tor_strdup(e->desc);
} else {
* -ENOENT means that no entry in the cache was found. */
int
rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e,
- int service)
+ rend_cache_type_t cache)
{
int ret = 0;
char key[REND_SERVICE_ID_LEN_BASE32 + 2]; /* <version><query>\0 */
case 2:
/* Default is version 2. */
default:
- if(service){
+ if(cache == REND_CACHE_TYPE_SERVICE){
entry = strmap_get_lc(rend_cache_service, query);
} else {
tor_snprintf(key, sizeof(key), "%d%s", default_version, query);
goto end;
}
/* Check descriptor is parsed only if lookup is from client cache */
- if(!service){
+ if(cache == REND_CACHE_TYPE_CLIENT){
tor_assert(entry->parsed && entry->parsed->intro_nodes);
}
digestmap_t *intro_failures;
} rend_cache_failure_t;
+typedef enum {
+ REND_CACHE_TYPE_CLIENT = 1,
+ REND_CACHE_TYPE_SERVICE = 2,
+} rend_cache_type_t;
+
void rend_cache_init(void);
void rend_cache_clean(time_t now);
void rend_cache_failure_clean(time_t now);
void rend_cache_free_all(void);
int rend_cache_lookup_entry(const char *query, int version,
rend_cache_entry_t **entry_out,
- int service);
+ rend_cache_type_t cache);
int rend_cache_lookup_v2_desc_as_dir(const char *query, const char **desc);
/** Return value from rend_cache_store_v2_desc_as_{dir,client}. */
typedef enum {
#endif
r = rend_cache_lookup_entry(introcirc->rend_data->onion_address, -1,
- &entry, 0);
+ &entry, REND_CACHE_TYPE_CLIENT);
/* An invalid onion address is not possible else we have a big issue. */
tor_assert(r != -EINVAL);
if (r < 0 || !rend_client_any_intro_points_usable(entry)) {
return;
}
/* Before fetching, check if we already have a usable descriptor here. */
- if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e, 0) == 0 &&
+ if (rend_cache_lookup_entry(rend_query->onion_address, -1, &e,
+ REND_CACHE_TYPE_CLIENT) == 0 &&
rend_client_any_intro_points_usable(e)) {
log_info(LD_REND, "We would fetch a v2 rendezvous descriptor, but we "
"already have a usable descriptor here. Not fetching.");
rend_cache_entry_t *ent;
connection_t *conn;
- r = rend_cache_lookup_entry(rend_query->onion_address, -1, &ent, 0);
+ r = rend_cache_lookup_entry(rend_query->onion_address, -1, &ent,
+ REND_CACHE_TYPE_CLIENT);
if (r < 0) {
/* Either invalid onion address or cache entry not found. */
switch (-r) {
continue;
assert_connection_ok(base_conn, now);
if (rend_cache_lookup_entry(rend_data->onion_address, -1,
- &entry, 0) == 0 &&
+ &entry, REND_CACHE_TYPE_CLIENT) == 0 &&
rend_client_any_intro_points_usable(entry)) {
/* either this fetch worked, or it failed but there was a
* valid entry from before which we should reuse */
extend_info_t *result;
rend_cache_entry_t *entry;
- ret = rend_cache_lookup_entry(rend_query->onion_address, -1, &entry, 0);
+ ret = rend_cache_lookup_entry(rend_query->onion_address, -1, &entry,
+ REND_CACHE_TYPE_CLIENT);
if (ret < 0 || !rend_client_any_intro_points_usable(entry)) {
log_warn(LD_REND,
"Query '%s' didn't have valid rend desc in cache. Failing.",