aboutsummaryrefslogtreecommitdiff
path: root/src/core/or/circuituse.c
diff options
context:
space:
mode:
authorDavid Goulet <dgoulet@torproject.org>2023-02-01 22:41:03 +0000
committerMike Perry <mikeperry-git@torproject.org>2023-04-06 15:57:11 +0000
commit336a24754d117b46793ce6824e35ff6b7962bf9d (patch)
tree3a90d62ddcb498713ef9fb13169a0240b3da553c /src/core/or/circuituse.c
parent2f865b4bba1bedc96f17b696916d74c392c83e1b (diff)
downloadtor-336a24754d117b46793ce6824e35ff6b7962bf9d.tar.gz
tor-336a24754d117b46793ce6824e35ff6b7962bf9d.zip
Prop#329 Pool: Handle linking, unlinking, and relaunching conflux circuit legs.
Signed-off-by: David Goulet <dgoulet@torproject.org>
Diffstat (limited to 'src/core/or/circuituse.c')
-rw-r--r--src/core/or/circuituse.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/src/core/or/circuituse.c b/src/core/or/circuituse.c
index f5d5cb4397..7ea9cddbd9 100644
--- a/src/core/or/circuituse.c
+++ b/src/core/or/circuituse.c
@@ -36,6 +36,7 @@
#include "core/or/circuitstats.h"
#include "core/or/circuituse.h"
#include "core/or/circuitpadding.h"
+#include "core/or/conflux_pool.h"
#include "core/or/connection_edge.h"
#include "core/or/extendinfo.h"
#include "core/or/policies.h"
@@ -74,6 +75,8 @@
#include "core/or/origin_circuit_st.h"
#include "core/or/socks_request_st.h"
+#include "core/or/conflux_util.h"
+
STATIC void circuit_expire_old_circuits_clientside(void);
static void circuit_increment_failure_count(void);
@@ -1217,6 +1220,7 @@ circuit_predict_and_launch_new(void)
log_info(LD_CIRC,
"Have %d clean circs (%d internal), need another exit circ.",
num, num_internal);
+
circuit_launch(CIRCUIT_PURPOSE_C_GENERAL, flags);
return;
}
@@ -1664,6 +1668,9 @@ circuit_has_opened(origin_circuit_t *circ)
case CIRCUIT_PURPOSE_C_INTRODUCING:
hs_client_circuit_has_opened(circ);
break;
+ case CIRCUIT_PURPOSE_CONFLUX_UNLINKED:
+ conflux_circuit_has_opened(circ);
+ break;
case CIRCUIT_PURPOSE_C_GENERAL:
circuit_try_attaching_streams(circ);
break;
@@ -3063,6 +3070,13 @@ circuit_change_purpose(circuit_t *circ, uint8_t new_purpose)
if (circ->purpose == new_purpose) return;
+ /* If this is a conflux circuit, a purpose change means we have closed */
+ if (CIRCUIT_IS_CONFLUX(circ)) {
+ /* If we're not transitioning to the linked purpose, we're closed. */
+ if (new_purpose != CIRCUIT_PURPOSE_CONFLUX_LINKED)
+ conflux_circuit_has_closed(circ);
+ }
+
if (CIRCUIT_IS_ORIGIN(circ)) {
char old_purpose_desc[80] = "";