mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-27 22:03:31 +01:00
patch from karsten for bug 814. whew.
svn:r16915
This commit is contained in:
parent
3db8c15287
commit
38f2272d5d
@ -24,6 +24,12 @@ Changes in version 0.2.1.6-alpha - 2008-09-xx
|
|||||||
for bug 811.
|
for bug 811.
|
||||||
- Catch and report a few more bootstrapping failure cases when Tor
|
- Catch and report a few more bootstrapping failure cases when Tor
|
||||||
fails to establish a TCP connection. Cleanup on 0.2.1.x.
|
fails to establish a TCP connection. Cleanup on 0.2.1.x.
|
||||||
|
- When fetching v0 and v2 rendezvous service descriptors in parallel,
|
||||||
|
do not fail the whole hidden service request only because the v0
|
||||||
|
descriptor fetch request fails; the v2 request might still succeed.
|
||||||
|
The other way round, when the last v2 request fails and no v0 request
|
||||||
|
is going on, do fail the hidden service request. Fixes bug 814.
|
||||||
|
Bugfix on 0.2.0.10-alpha.
|
||||||
|
|
||||||
o Minor features:
|
o Minor features:
|
||||||
- Allow ports 465 and 587 in the default exit policy again. We had
|
- Allow ports 465 and 587 in the default exit policy again. We had
|
||||||
|
@ -523,8 +523,13 @@ connection_about_to_close_connection(connection_t *conn)
|
|||||||
* failed: forget about this router, and maybe try again. */
|
* failed: forget about this router, and maybe try again. */
|
||||||
connection_dir_request_failed(dir_conn);
|
connection_dir_request_failed(dir_conn);
|
||||||
}
|
}
|
||||||
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC)
|
if (conn->purpose == DIR_PURPOSE_FETCH_RENDDESC) {
|
||||||
rend_client_desc_here(dir_conn->rend_query); /* give it a try */
|
/* Give it a try. However, there is no re-fetching for v0 rend
|
||||||
|
* descriptors; if the response is empty or the descriptor is
|
||||||
|
* unusable, close pending connections (unless a v2 request is
|
||||||
|
* still in progress). */
|
||||||
|
rend_client_desc_here(dir_conn->rend_query, 0);
|
||||||
|
}
|
||||||
/* 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 needed. (If a fetch is successful, the connection state
|
* retry as needed. (If a fetch is successful, the connection state
|
||||||
* is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
|
* is changed to DIR_PURPOSE_HAS_FETCHED_RENDDESC to mark that
|
||||||
|
@ -1892,7 +1892,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|||||||
} else {
|
} else {
|
||||||
/* success. notify pending connections about this. */
|
/* success. notify pending connections about this. */
|
||||||
conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
|
conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
|
||||||
rend_client_desc_here(conn->rend_query);
|
rend_client_desc_here(conn->rend_query, -1);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case 404:
|
case 404:
|
||||||
@ -1938,7 +1938,7 @@ connection_dir_client_reached_eof(dir_connection_t *conn)
|
|||||||
log_info(LD_REND, "Successfully fetched v2 rendezvous "
|
log_info(LD_REND, "Successfully fetched v2 rendezvous "
|
||||||
"descriptor.");
|
"descriptor.");
|
||||||
conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
|
conn->_base.purpose = DIR_PURPOSE_HAS_FETCHED_RENDDESC;
|
||||||
rend_client_desc_here(conn->rend_query);
|
rend_client_desc_here(conn->rend_query, -1);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -3842,7 +3842,7 @@ int rend_client_rendezvous_acked(origin_circuit_t *circ, const char *request,
|
|||||||
size_t request_len);
|
size_t request_len);
|
||||||
int rend_client_receive_rendezvous(origin_circuit_t *circ, const char *request,
|
int rend_client_receive_rendezvous(origin_circuit_t *circ, const char *request,
|
||||||
size_t request_len);
|
size_t request_len);
|
||||||
void rend_client_desc_here(const char *query);
|
void rend_client_desc_here(const char *query, int rend_version);
|
||||||
|
|
||||||
extend_info_t *rend_client_get_random_intro(const char *query);
|
extend_info_t *rend_client_get_random_intro(const char *query);
|
||||||
|
|
||||||
|
@ -462,6 +462,8 @@ rend_client_refetch_v2_renddesc(const char *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). */
|
||||||
|
rend_client_desc_here(query, 2);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -625,11 +627,14 @@ rend_client_receive_rendezvous(origin_circuit_t *circ, const char *request,
|
|||||||
|
|
||||||
/** 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 waiting on query. If there's a working cache entry here
|
* are waiting on query. If there's a working cache entry here
|
||||||
* with at least one intro point, move them to the next state;
|
* with at least one intro point, move them to the next state. If
|
||||||
* else fail them.
|
* <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_here(const char *query)
|
rend_client_desc_here(const char *query, int rend_version)
|
||||||
{
|
{
|
||||||
edge_connection_t *conn;
|
edge_connection_t *conn;
|
||||||
rend_cache_entry_t *entry;
|
rend_cache_entry_t *entry;
|
||||||
@ -666,9 +671,15 @@ rend_client_desc_here(const char *query)
|
|||||||
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 */
|
||||||
log_notice(LD_REND,"Closing stream for '%s.onion': hidden service is "
|
/* Unless there are requests for another descriptor version pending,
|
||||||
"unavailable (try again later).", safe_str(query));
|
* close the connection. */
|
||||||
connection_mark_unattached_ap(conn, END_STREAM_REASON_RESOLVEFAILED);
|
if (rend_version >= 0 &&
|
||||||
|
!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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user