]> git.ipfire.org Git - thirdparty/tor.git/commitdiff
Specify descriptor cache type in rend_cache_lookup_entry()
authorDonncha O'Cearbhaill <donncha@donncha.is>
Mon, 3 Aug 2015 15:33:28 +0000 (17:33 +0200)
committerDonncha O'Cearbhaill <donncha@donncha.is>
Tue, 8 Sep 2015 10:34:05 +0000 (12:34 +0200)
Adds an Enum which represents the different types of rendezvous
descriptor caches. This argument is passed in each call to
rend_cache_lookup_entry() to specify lookup in the client-side or
service-side descriptor caches.

src/or/connection_edge.c
src/or/control.c
src/or/rendcache.c
src/or/rendcache.h
src/or/rendclient.c

index defe0ab9e0ce8b660f289d47bb2ae82c41d62c42..5ea82d88b12af796b432bf6bf9be96a5062af876 100644 (file)
@@ -1527,7 +1527,8 @@ connection_ap_handshake_rewrite_and_attach(entry_connection_t *conn,
     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:
index 900162e3e258b1306edb1bbd21d59a57ad3a49ad..c2240bf38c93d9b1f5426ae3c9754e332e9af827 100644 (file)
@@ -1920,7 +1920,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
       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 {
@@ -1936,7 +1936,7 @@ getinfo_helper_dir(control_connection_t *control_conn,
       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 {
index 1c466414c1a6b2d1023e9b492e36a04bf5414231..0abfeb50caa726ce217d9d4492d3df453fe89847 100644 (file)
@@ -479,7 +479,7 @@ rend_cache_clean_v2_descs_as_dir(time_t now, size_t force_remove)
  * -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 */
@@ -502,7 +502,7 @@ rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e,
     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);
@@ -515,7 +515,7 @@ rend_cache_lookup_entry(const char *query, int version, rend_cache_entry_t **e,
     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);
   }
 
index 02eab4ba70e1a53d2c1420dea9062607a9e9102b..e13c9b4d1dea69415742de7aa78480c0c5565d8b 100644 (file)
@@ -48,6 +48,11 @@ typedef struct rend_cache_failure_t {
   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);
@@ -56,7 +61,7 @@ void rend_cache_purge(void);
 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 {
index 01ad614352a558f59d2a13c3627174a46d73bf1c..af1abe59bfcd991066567217fcd352774c987825 100644 (file)
@@ -160,7 +160,7 @@ rend_client_send_introduction(origin_circuit_t *introcirc,
 #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)) {
@@ -906,7 +906,8 @@ rend_client_refetch_v2_renddesc(rend_data_t *rend_query)
     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.");
@@ -987,7 +988,8 @@ rend_client_report_intro_point_failure(extend_info_t *failed_intro,
   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) {
@@ -1213,7 +1215,7 @@ rend_client_desc_trynow(const char *query)
       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 */
@@ -1295,7 +1297,8 @@ rend_client_get_random_intro(const rend_data_t *rend_query)
   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.",