aboutsummaryrefslogtreecommitdiff
path: root/src/feature/control
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2020-08-03 08:33:22 -0400
committerNick Mathewson <nickm@torproject.org>2020-08-03 08:33:22 -0400
commit3e3b0b0443b6486553e5cfc18a23a8d7cb7ae4c4 (patch)
tree2d01799c58eb2c9edfe0eba70e3e67d19b5c39e8 /src/feature/control
parentefe8a988172422285762459e820d3cbcce5a6b10 (diff)
parent837e0c4dc93bd035298551c35db5be2ed18ee5dc (diff)
downloadtor-3e3b0b0443b6486553e5cfc18a23a8d7cb7ae4c4.tar.gz
tor-3e3b0b0443b6486553e5cfc18a23a8d7cb7ae4c4.zip
Merge remote-tracking branch 'tor-github/pr/1986/head'
Diffstat (limited to 'src/feature/control')
-rw-r--r--src/feature/control/control_cmd.c3
-rw-r--r--src/feature/control/control_events.c2
-rw-r--r--src/feature/control/control_events.h8
3 files changed, 9 insertions, 4 deletions
diff --git a/src/feature/control/control_cmd.c b/src/feature/control/control_cmd.c
index 301a4872b6..5b75c24692 100644
--- a/src/feature/control/control_cmd.c
+++ b/src/feature/control/control_cmd.c
@@ -981,8 +981,7 @@ handle_control_attachstream(control_connection_t *conn,
edge_conn->end_reason = 0;
if (tmpcirc)
circuit_detach_stream(tmpcirc, edge_conn);
- CONNECTION_AP_EXPECT_NONPENDING(ap_conn);
- TO_CONN(edge_conn)->state = AP_CONN_STATE_CONTROLLER_WAIT;
+ connection_entry_set_controller_wait(ap_conn);
}
if (circ && (circ->base_.state != CIRCUIT_STATE_OPEN)) {
diff --git a/src/feature/control/control_events.c b/src/feature/control/control_events.c
index 8e69c772f6..f97130d020 100644
--- a/src/feature/control/control_events.c
+++ b/src/feature/control/control_events.c
@@ -109,6 +109,7 @@ const struct control_event_t control_event_table[] = {
{ EVENT_HS_DESC, "HS_DESC" },
{ EVENT_HS_DESC_CONTENT, "HS_DESC_CONTENT" },
{ EVENT_NETWORK_LIVENESS, "NETWORK_LIVENESS" },
+ { EVENT_CONTROLLER_WAIT, "CONTROLLER_WAIT" },
{ 0, NULL },
};
@@ -818,6 +819,7 @@ control_event_stream_status(entry_connection_t *conn, stream_status_event_t tp,
case STREAM_EVENT_NEW_RESOLVE: status = "NEWRESOLVE"; break;
case STREAM_EVENT_FAILED_RETRIABLE: status = "DETACHED"; break;
case STREAM_EVENT_REMAP: status = "REMAP"; break;
+ case STREAM_EVENT_CONTROLLER_WAIT: status = "CONTROLLER_WAIT"; break;
default:
log_warn(LD_BUG, "Unrecognized status code %d", (int)tp);
return 0;
diff --git a/src/feature/control/control_events.h b/src/feature/control/control_events.h
index 0c8448e0f8..82c665ac71 100644
--- a/src/feature/control/control_events.h
+++ b/src/feature/control/control_events.h
@@ -36,7 +36,8 @@ typedef enum stream_status_event_t {
STREAM_EVENT_NEW = 5,
STREAM_EVENT_NEW_RESOLVE = 6,
STREAM_EVENT_FAILED_RETRIABLE = 7,
- STREAM_EVENT_REMAP = 8
+ STREAM_EVENT_REMAP = 8,
+ STREAM_EVENT_CONTROLLER_WAIT = 9
} stream_status_event_t;
/** Used to indicate the type of a buildtime event */
@@ -226,6 +227,8 @@ void control_event_hs_descriptor_content(const char *onion_address,
void cbt_control_event_buildtimeout_set(const circuit_build_times_t *cbt,
buildtimeout_set_event_t type);
+int control_event_enter_controller_wait(void);
+
void control_events_free_all(void);
#ifdef CONTROL_MODULE_PRIVATE
@@ -284,7 +287,8 @@ typedef uint64_t event_mask_t;
#define EVENT_NETWORK_LIVENESS 0x0023
#define EVENT_PT_LOG 0x0024
#define EVENT_PT_STATUS 0x0025
-#define EVENT_MAX_ 0x0025
+#define EVENT_CONTROLLER_WAIT 0x0026
+#define EVENT_MAX_ 0x0026
/* sizeof(control_connection_t.event_mask) in bits, currently a uint64_t */
#define EVENT_CAPACITY_ 0x0040