mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-10 21:23:58 +01:00
prop224: Add the dir purpose HAS_FETCHED
Once a descriptor has been successfully downloaded from an HSDir, we flag the directory connection to "has fetched descriptor" so the connection subsystem doesn't trigger a new fetch on success. Same has DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 but for prop224. Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
f93b77a18c
commit
343af1a9cf
@ -184,6 +184,7 @@ purpose_needs_anonymity(uint8_t dir_purpose, uint8_t router_purpose,
|
|||||||
case DIR_PURPOSE_FETCH_EXTRAINFO:
|
case DIR_PURPOSE_FETCH_EXTRAINFO:
|
||||||
case DIR_PURPOSE_FETCH_MICRODESC:
|
case DIR_PURPOSE_FETCH_MICRODESC:
|
||||||
return 0;
|
return 0;
|
||||||
|
case DIR_PURPOSE_HAS_FETCHED_HSDESC:
|
||||||
case DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2:
|
case DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2:
|
||||||
case DIR_PURPOSE_UPLOAD_RENDDESC_V2:
|
case DIR_PURPOSE_UPLOAD_RENDDESC_V2:
|
||||||
case DIR_PURPOSE_FETCH_RENDDESC_V2:
|
case DIR_PURPOSE_FETCH_RENDDESC_V2:
|
||||||
@ -1126,6 +1127,7 @@ directory_request_new(uint8_t dir_purpose)
|
|||||||
tor_assert(dir_purpose <= DIR_PURPOSE_MAX_);
|
tor_assert(dir_purpose <= DIR_PURPOSE_MAX_);
|
||||||
tor_assert(dir_purpose != DIR_PURPOSE_SERVER);
|
tor_assert(dir_purpose != DIR_PURPOSE_SERVER);
|
||||||
tor_assert(dir_purpose != DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2);
|
tor_assert(dir_purpose != DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2);
|
||||||
|
tor_assert(dir_purpose != DIR_PURPOSE_HAS_FETCHED_HSDESC);
|
||||||
|
|
||||||
directory_request_t *result = tor_malloc_zero(sizeof(*result));
|
directory_request_t *result = tor_malloc_zero(sizeof(*result));
|
||||||
tor_addr_make_null(&result->or_addr_port.addr, AF_INET);
|
tor_addr_make_null(&result->or_addr_port.addr, AF_INET);
|
||||||
@ -3110,6 +3112,7 @@ handle_response_fetch_hsdesc_v3(dir_connection_t *conn,
|
|||||||
log_warn(LD_REND, "Failed to store hidden service descriptor");
|
log_warn(LD_REND, "Failed to store hidden service descriptor");
|
||||||
} else {
|
} else {
|
||||||
log_info(LD_REND, "Stored hidden service descriptor successfully.");
|
log_info(LD_REND, "Stored hidden service descriptor successfully.");
|
||||||
|
TO_CONN(conn)->purpose = DIR_PURPOSE_HAS_FETCHED_HSDESC;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 404:
|
case 404:
|
||||||
@ -3409,10 +3412,10 @@ refetch_hsdesc_if_needed(dir_connection_t *dir_conn)
|
|||||||
{
|
{
|
||||||
connection_t *conn = TO_CONN(dir_conn);
|
connection_t *conn = TO_CONN(dir_conn);
|
||||||
|
|
||||||
/* If we were trying to fetch a v2 rend desc and did not succeed,
|
/* If we were trying to fetch a v2 rend desc and did not succeed, retry as
|
||||||
* retry as needed. (If a fetch is successful, the connection state
|
* needed. (If a fetch is successful, the connection state is changed to
|
||||||
* is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 to mark that
|
* DIR_PURPOSE_HAS_FETCHED_RENDDESC_V2 or DIR_PURPOSE_HAS_FETCHED_HSDESC to
|
||||||
* refetching is unnecessary.) */
|
* mark that refetching is unnecessary.) */
|
||||||
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
|
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC_V2 &&
|
||||||
dir_conn->rend_data &&
|
dir_conn->rend_data &&
|
||||||
rend_valid_v2_service_id(
|
rend_valid_v2_service_id(
|
||||||
|
@ -425,7 +425,10 @@ typedef enum {
|
|||||||
#define DIR_PURPOSE_UPLOAD_HSDESC 20
|
#define DIR_PURPOSE_UPLOAD_HSDESC 20
|
||||||
/** A connection to a hidden service directory: fetch a v3 descriptor. */
|
/** A connection to a hidden service directory: fetch a v3 descriptor. */
|
||||||
#define DIR_PURPOSE_FETCH_HSDESC 21
|
#define DIR_PURPOSE_FETCH_HSDESC 21
|
||||||
#define DIR_PURPOSE_MAX_ 21
|
/** A connection to a directory server: set after a hidden service descriptor
|
||||||
|
* is downloaded. */
|
||||||
|
#define DIR_PURPOSE_HAS_FETCHED_HSDESC 22
|
||||||
|
#define DIR_PURPOSE_MAX_ 22
|
||||||
|
|
||||||
/** True iff <b>p</b> is a purpose corresponding to uploading
|
/** True iff <b>p</b> is a purpose corresponding to uploading
|
||||||
* data to a directory server. */
|
* data to a directory server. */
|
||||||
|
Loading…
Reference in New Issue
Block a user