summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRoger Dingledine <arma@torproject.org>2008-01-24 06:58:10 +0000
committerRoger Dingledine <arma@torproject.org>2008-01-24 06:58:10 +0000
commit529263f8ab863f03873e580fbcb79181ab6ff074 (patch)
tree7968edf508f3e255ad22a6e67e1095cbbc35c690
parent4637a61b3c079c067af561e6b63498ff2c68fbd9 (diff)
downloadtor-529263f8ab863f03873e580fbcb79181ab6ff074.tar.gz
tor-529263f8ab863f03873e580fbcb79181ab6ff074.zip
continue r13250 cleanup: remove some duplicate code
svn:r13256
-rw-r--r--src/or/directory.c43
1 files changed, 18 insertions, 25 deletions
diff --git a/src/or/directory.c b/src/or/directory.c
index c44948cdb8..de5b66eeb0 100644
--- a/src/or/directory.c
+++ b/src/or/directory.c
@@ -3247,39 +3247,31 @@ directory_post_to_hs_dir(smartlist_t *descs, const char *service_id,
* values are pointers to timestamps of the last requests. */
static strmap_t *last_hid_serv_requests = NULL;
-/** Return the last request time to hidden service directory <b>hs_dir</b>
- * for descriptor ID <b>desc_id_base32</b> or 0 if no such request has been
- * sent before. */
+/** Look up the last request time to hidden service directory <b>hs_dir</b>
+ * for descriptor ID <b>desc_id_base32</b>. If <b>set</b> is non-zero,
+ * assign the current time <b>now</b> and return that. Otherwise, return
+ * the most recent request time, or 0 if no such request has been sent
+ * before. */
static time_t
-get_last_hid_serv_request(routerstatus_t *hs_dir, const char *desc_id_base32)
+lookup_last_hid_serv_request(routerstatus_t *hs_dir,
+ const char *desc_id_base32, time_t now, int set)
{
char hsdir_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
char hsdir_desc_comb_id[2 * REND_DESC_ID_V2_LEN_BASE32 + 1];
time_t *last_request_ptr;
- base32_encode(hsdir_id_base32, sizeof(hsdir_id_base32),
- hs_dir->identity_digest, DIGEST_LEN);
- tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s",
- hsdir_id_base32, desc_id_base32);
- last_request_ptr = strmap_get_lc(last_hid_serv_requests, hsdir_desc_comb_id);
- return (last_request_ptr) ? *last_request_ptr : 0;
-}
-
-/** Store the time in <b>now</b> as the last request time to hidden service
- * directory <b>hs_dir</b> for descriptor ID <b>desc_id_base32</b>. */
-static void
-set_last_hid_serv_request(routerstatus_t *hs_dir, const char *desc_id_base32,
- time_t now)
-{
- char hsdir_id_base32[REND_DESC_ID_V2_LEN_BASE32 + 1];
- char hsdir_desc_comb_id[2 * REND_DESC_ID_V2_LEN_BASE32 + 1];
- time_t *last_request_ptr = tor_malloc_zero(sizeof(time_t *));
if (!last_hid_serv_requests) last_hid_serv_requests = strmap_new();
- *last_request_ptr = now;
base32_encode(hsdir_id_base32, sizeof(hsdir_id_base32),
hs_dir->identity_digest, DIGEST_LEN);
tor_snprintf(hsdir_desc_comb_id, sizeof(hsdir_desc_comb_id), "%s%s",
hsdir_id_base32, desc_id_base32);
- strmap_set(last_hid_serv_requests, hsdir_desc_comb_id, last_request_ptr);
+ if (set) {
+ last_request_ptr = tor_malloc_zero(sizeof(time_t *));
+ *last_request_ptr = now;
+ strmap_set(last_hid_serv_requests, hsdir_desc_comb_id, last_request_ptr);
+ } else
+ last_request_ptr = strmap_get_lc(last_hid_serv_requests,
+ hsdir_desc_comb_id);
+ return (last_request_ptr) ? *last_request_ptr : 0;
}
/** Clean the history of request times to hidden service directories, so that
@@ -3343,7 +3335,8 @@ directory_get_from_hs_dir(const char *desc_id, const char *query)
directory_clean_last_hid_serv_requests();
SMARTLIST_FOREACH(responsible_dirs, routerstatus_t *, dir, {
- time_t last_request = get_last_hid_serv_request(dir, desc_id_base32);
+ time_t last_request =
+ lookup_last_hid_serv_request(dir, desc_id_base32, 0, 0);
if (!last_request ||
last_request + REND_HID_SERV_DIR_REQUERY_PERIOD < now)
smartlist_add(selectible_dirs, dir);
@@ -3369,7 +3362,7 @@ directory_get_from_hs_dir(const char *desc_id, const char *query)
/* Remember, that we are requesting a descriptor from this hidden service
* directory now. */
- set_last_hid_serv_request(hs_dir, desc_id_base32, now);
+ lookup_last_hid_serv_request(hs_dir, desc_id_base32, now, 1);
/* Send fetch request. (Pass query as payload to write it to the directory
* connection so that it can be referred to when the response arrives.) */