From: Roger Dingledine Date: Thu, 24 Jan 2008 06:58:10 +0000 (+0000) Subject: continue r13250 cleanup: remove some duplicate code X-Git-Tag: tor-0.2.0.18-alpha~19 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=529263f8ab863f03873e580fbcb79181ab6ff074;p=thirdparty%2Ftor.git continue r13250 cleanup: remove some duplicate code svn:r13256 --- 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 hs_dir - * for descriptor ID desc_id_base32 or 0 if no such request has been - * sent before. */ +/** Look up the last request time to hidden service directory hs_dir + * for descriptor ID desc_id_base32. If set is non-zero, + * assign the current time now 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 now as the last request time to hidden service - * directory hs_dir for descriptor ID desc_id_base32. */ -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.) */