summaryrefslogtreecommitdiff
path: root/src/feature
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2018-12-04 14:18:23 -0500
committerDavid Goulet <dgoulet@torproject.org>2018-12-04 14:34:04 -0500
commit43bd4d7509ceab2d82a85483f08132e90b1ab10d (patch)
tree7e12440c8568087f780dcacb1479600e14a6e57b /src/feature
parent00b59d92817f34c60fe9bc1f8b72b6e81ae1c431 (diff)
downloadtor-43bd4d7509ceab2d82a85483f08132e90b1ab10d.tar.gz
tor-43bd4d7509ceab2d82a85483f08132e90b1ab10d.zip
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 <dgoulet@torproject.org>
Diffstat (limited to 'src/feature')
-rw-r--r--src/feature/hs/hs_client.c34
1 files changed, 23 insertions, 11 deletions
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 <b>identity_pk</b>
* because of <b>status</b>. 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: