mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-30 23:53:32 +01:00
bugfix: you mean we're supposed to reuse fresh descriptors and
refetch stale ones, not reuse stale ones and refetch fresh ones? svn:r1667
This commit is contained in:
parent
bce1fc43a2
commit
e9ebefc8bf
@ -746,21 +746,36 @@ static int connection_ap_handshake_process_socks(connection_t *conn) {
|
|||||||
} else {
|
} else {
|
||||||
/* it's a hidden-service request */
|
/* it's a hidden-service request */
|
||||||
rend_cache_entry_t *entry;
|
rend_cache_entry_t *entry;
|
||||||
|
int r;
|
||||||
|
|
||||||
strcpy(conn->rend_query, socks->address); /* this strcpy is safe -RD */
|
strcpy(conn->rend_query, socks->address); /* this strcpy is safe -RD */
|
||||||
log_fn(LOG_INFO,"Got a hidden service request for ID '%s'", conn->rend_query);
|
log_fn(LOG_INFO,"Got a hidden service request for ID '%s'", conn->rend_query);
|
||||||
/* see if we already have it cached */
|
/* see if we already have it cached */
|
||||||
if (rend_cache_lookup_entry(conn->rend_query, &entry) == 1 &&
|
r = rend_cache_lookup_entry(conn->rend_query, &entry);
|
||||||
|
if(r<0) {
|
||||||
|
log_fn(LOG_WARN,"Invalid service descriptor %s", conn->rend_query);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
if(r==0) {
|
||||||
|
conn->state = AP_CONN_STATE_RENDDESC_WAIT;
|
||||||
|
log_fn(LOG_INFO, "Unknown descriptor %s. Fetching.", conn->rend_query);
|
||||||
|
rend_client_refetch_renddesc(conn->rend_query);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if(r>0) {
|
||||||
#define NUM_SECONDS_BEFORE_REFETCH (60*15)
|
#define NUM_SECONDS_BEFORE_REFETCH (60*15)
|
||||||
entry->received + NUM_SECONDS_BEFORE_REFETCH < time(NULL)) {
|
if(time(NULL) - entry->received < NUM_SECONDS_BEFORE_REFETCH) {
|
||||||
conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
|
conn->state = AP_CONN_STATE_CIRCUIT_WAIT;
|
||||||
|
log_fn(LOG_INFO, "Descriptor is here and fresh enough. Great.");
|
||||||
return connection_ap_handshake_attach_circuit(conn);
|
return connection_ap_handshake_attach_circuit(conn);
|
||||||
} else {
|
} else {
|
||||||
conn->state = AP_CONN_STATE_RENDDESC_WAIT;
|
conn->state = AP_CONN_STATE_RENDDESC_WAIT;
|
||||||
|
log_fn(LOG_INFO, "Stale descriptor %s. Refetching.", conn->rend_query);
|
||||||
rend_client_refetch_renddesc(conn->rend_query);
|
rend_client_refetch_renddesc(conn->rend_query);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user