Restore changes from Karsten's "Remove unused rendversion parameters".

These were made undone by a merge.
This commit is contained in:
Nick Mathewson 2009-05-28 16:19:05 -04:00
parent 4913a8c4ba
commit 3599e9051e

View File

@ -455,14 +455,14 @@ directory_get_from_hs_dir(const char *desc_id, const rend_data_t *rend_query)
* for the service ID <b>query</b>, start a directory connection to fetch a * for the service ID <b>query</b>, start a directory connection to fetch a
* new one. * new one.
*/ */
void static void
rend_client_refetch_renddesc(const char *query) rend_client_refetch_renddesc(const char *query)
{ {
if (!get_options()->FetchHidServDescriptors) if (!get_options()->FetchHidServDescriptors)
return; return;
log_info(LD_REND, "Fetching rendezvous descriptor for service %s", log_info(LD_REND, "Fetching rendezvous descriptor for service %s",
escaped_safe_str(query)); escaped_safe_str(query));
if (connection_get_by_type_state_rendquery(CONN_TYPE_DIR, 0, query, 0)) { if (connection_get_by_type_state_rendquery(CONN_TYPE_DIR, 0, query)) {
log_info(LD_REND,"Would fetch a new renddesc here (for %s), but one is " log_info(LD_REND,"Would fetch a new renddesc here (for %s), but one is "
"already in progress.", escaped_safe_str(query)); "already in progress.", escaped_safe_str(query));
} else { } else {
@ -524,8 +524,8 @@ rend_client_refetch_v2_renddesc(const rend_data_t *rend_query)
log_info(LD_REND, "Could not pick one of the responsible hidden " log_info(LD_REND, "Could not pick one of the responsible hidden "
"service directories to fetch descriptors, because " "service directories to fetch descriptors, because "
"we already tried them all unsuccessfully."); "we already tried them all unsuccessfully.");
/* Close pending connections (unless a v0 request is still going on). */ /* Close pending connections. */
rend_client_desc_trynow(rend_query->onion_address, 2); rend_client_desc_trynow(rend_query->onion_address);
return; return;
} }
@ -585,7 +585,7 @@ rend_client_remove_intro_point(extend_info_t *failed_intro,
/* move all pending streams back to renddesc_wait */ /* move all pending streams back to renddesc_wait */
while ((conn = connection_get_by_type_state_rendquery(CONN_TYPE_AP, while ((conn = connection_get_by_type_state_rendquery(CONN_TYPE_AP,
AP_CONN_STATE_CIRCUIT_WAIT, AP_CONN_STATE_CIRCUIT_WAIT,
rend_query->onion_address, -1))) { rend_query->onion_address))) {
conn->state = AP_CONN_STATE_RENDDESC_WAIT; conn->state = AP_CONN_STATE_RENDDESC_WAIT;
} }
@ -694,24 +694,18 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const char *request,
return -1; return -1;
} }
/** Find all the apconns in state AP_CONN_STATE_RENDDESC_WAIT that /** Find all the apconns in state AP_CONN_STATE_RENDDESC_WAIT that are
* are waiting on query. If there's a working cache entry here * waiting on <b>query</b>. If there's a working cache entry here with at
* with at least one intro point, move them to the next state. If * least one intro point, move them to the next state. */
* <b>rend_version</b> is non-negative, fail connections that have
* requested <b>query</b> unless there are still descriptor fetch
* requests in progress for other descriptor versions than
* <b>rend_version</b>.
*/
void void
rend_client_desc_trynow(const char *query, int rend_version) rend_client_desc_trynow(const char *query)
{ {
edge_connection_t *conn; edge_connection_t *conn;
rend_cache_entry_t *entry; rend_cache_entry_t *entry;
time_t now = time(NULL); time_t now = time(NULL);
smartlist_t *conns = get_connection_array(); smartlist_t *conns = get_connection_array();
SMARTLIST_FOREACH(conns, connection_t *, _conn, SMARTLIST_FOREACH_BEGIN(conns, connection_t *, _conn) {
{
if (_conn->type != CONN_TYPE_AP || if (_conn->type != CONN_TYPE_AP ||
_conn->state != AP_CONN_STATE_RENDDESC_WAIT || _conn->state != AP_CONN_STATE_RENDDESC_WAIT ||
_conn->marked_for_close) _conn->marked_for_close)
@ -743,17 +737,11 @@ rend_client_desc_trynow(const char *query, int rend_version)
connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH); connection_mark_unattached_ap(conn, END_STREAM_REASON_CANT_ATTACH);
} }
} else { /* 404, or fetch didn't get that far */ } else { /* 404, or fetch didn't get that far */
/* Unless there are requests for another descriptor version pending, log_notice(LD_REND,"Closing stream for '%s.onion': hidden service is "
* close the connection. */ "unavailable (try again later).", safe_str(query));
if (rend_version >= 0 && connection_mark_unattached_ap(conn, END_STREAM_REASON_RESOLVEFAILED);
!connection_get_by_type_state_rendquery(CONN_TYPE_DIR, 0, query,
rend_version == 0 ? 2 : 0)) {
log_notice(LD_REND,"Closing stream for '%s.onion': hidden service is "
"unavailable (try again later).", safe_str(query));
connection_mark_unattached_ap(conn, END_STREAM_REASON_RESOLVEFAILED);
}
} }
}); } SMARTLIST_FOREACH_END(_conn);
} }
/** Return a newly allocated extend_info_t* for a randomly chosen introduction /** Return a newly allocated extend_info_t* for a randomly chosen introduction