From: David Goulet Date: Tue, 4 Dec 2018 19:18:23 +0000 (-0500) Subject: hs-v3: Add the helper function mark_conn_as_waiting_for_circuit X-Git-Tag: tor-0.3.5.8~22^2^2~1 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=43bd4d7509ceab2d82a85483f08132e90b1ab10d;p=thirdparty%2Ftor.git hs-v3: Add the helper function mark_conn_as_waiting_for_circuit This helper function marks an entry connection as pending for a circuit and changes its state to AP_CONN_STATE_CIRCUIT_WAIT. The timestamps are set to now() so it can be considered as new. No behaviour change, this helper function will be used in next commit. Part of #28669 Signed-off-by: David Goulet --- diff --git a/src/feature/hs/hs_client.c b/src/feature/hs/hs_client.c index 43e5b80e52..22aacdfe99 100644 --- a/src/feature/hs/hs_client.c +++ b/src/feature/hs/hs_client.c @@ -200,6 +200,26 @@ directory_request_is_pending(const ed25519_public_key_t *identity_pk) return ret; } +/* Helper function that changes the state of an entry connection to waiting + * for a circuit. For this to work properly, the connection timestamps are set + * to now and the connection is then marked as pending for a circuit. */ +static void +mark_conn_as_waiting_for_circuit(connection_t *conn, time_t now) +{ + tor_assert(conn); + + /* Because the connection can now proceed to opening circuit and ultimately + * connect to the service, reset those timestamp so the connection is + * considered "fresh" and can continue without being closed too early. */ + conn->timestamp_created = now; + conn->timestamp_last_read_allowed = now; + conn->timestamp_last_write_allowed = now; + /* Change connection's state into waiting for a circuit. */ + conn->state = AP_CONN_STATE_CIRCUIT_WAIT; + + connection_ap_mark_as_pending_circuit(TO_ENTRY_CONN(conn)); +} + /* We failed to fetch a descriptor for the service with identity_pk * because of status. Find all pending SOCKS connections for this * service that are waiting on the descriptor and close them with @@ -1700,17 +1720,9 @@ hs_client_desc_has_arrived(const hs_ident_dir_conn_t *ident) log_info(LD_REND, "Descriptor has arrived. Launching circuits."); - /* Because the connection can now proceed to opening circuit and - * ultimately connect to the service, reset those timestamp so the - * connection is considered "fresh" and can continue without being closed - * too early. */ - base_conn->timestamp_created = now; - base_conn->timestamp_last_read_allowed = now; - base_conn->timestamp_last_write_allowed = now; - /* Change connection's state into waiting for a circuit. */ - base_conn->state = AP_CONN_STATE_CIRCUIT_WAIT; - - connection_ap_mark_as_pending_circuit(entry_conn); + /* Mark connection as waiting for a circuit since we do have a usable + * descriptor now. */ + mark_conn_as_waiting_for_circuit(base_conn, now); } SMARTLIST_FOREACH_END(base_conn); end: