/* This is an onion service client connection: Export the client circuit ID
* according to the HAProxy proxy protocol. */
STATIC void
-export_hs_client_circuit_id(const edge_connection_t *edge_conn,
- connection_t *conn,
+export_hs_client_circuit_id(edge_connection_t *edge_conn,
hs_circuit_id_protocol_t protocol)
{
/* We only support HAProxy right now. */
gid >> 16, gid & 0x0000ffff,
dst_ipv6, src_port, dst_port);
- connection_buf_add(buf, strlen(buf), conn);
+ connection_buf_add(buf, strlen(buf), TO_CONN(edge_conn));
tor_free(buf);
}
conn->state = EXIT_CONN_STATE_OPEN;
- /* If it's an onion service connection, we might want to include the proxy
- * protocol header: */
- if (edge_conn->hs_ident) {
- hs_circuit_id_protocol_t circuit_id_protocol =
- hs_service_exports_circuit_id(&edge_conn->hs_ident->identity_pk);
- export_hs_client_circuit_id(edge_conn, conn, circuit_id_protocol);
- }
-
connection_watch_events(conn, READ_EVENT); /* stop writing, keep reading */
if (connection_get_outbuf_len(conn)) /* in case there are any queued relay
* cells */
hs_inc_rdv_stream_counter(origin_circ);
+ /* If it's an onion service connection, we might want to include the proxy
+ * protocol header: */
+ if (conn->hs_ident) {
+ hs_circuit_id_protocol_t circuit_id_protocol =
+ hs_service_exports_circuit_id(&conn->hs_ident->identity_pk);
+ export_hs_client_circuit_id(conn, circuit_id_protocol);
+ }
+
/* Connect tor to the hidden service destination. */
connection_exit_connect(conn);
or_circ->global_identifier = 666;
/* Export circuit ID */
- export_hs_client_circuit_id(edge_conn, conn,
- service->config.circuit_id_protocol);
+ export_hs_client_circuit_id(edge_conn, service->config.circuit_id_protocol);
/* Check contents */
cp1 = buf_get_contents(conn->outbuf, &sz);
or_circ->global_identifier = 22;
/* check changes */
- export_hs_client_circuit_id(edge_conn, conn,
- service->config.circuit_id_protocol);
+ export_hs_client_circuit_id(edge_conn, service->config.circuit_id_protocol);
cp2 = buf_get_contents(conn->outbuf, &sz);
tt_str_op(cp1, OP_NE, cp2);
tor_free(cp1);
/* Check that GID with UINT32_MAX works. */
or_circ->global_identifier = UINT32_MAX;
- export_hs_client_circuit_id(edge_conn, conn,
- service->config.circuit_id_protocol);
+ export_hs_client_circuit_id(edge_conn, service->config.circuit_id_protocol);
cp1 = buf_get_contents(conn->outbuf, &sz);
tt_str_op(cp1, OP_EQ,
"PROXY TCP6 fc00:dead:beef:4dad::ffff:ffff ::1 65535 42\r\n");
/* Check that GID with UINT16_MAX works. */
or_circ->global_identifier = UINT16_MAX;
- export_hs_client_circuit_id(edge_conn, conn,
- service->config.circuit_id_protocol);
+ export_hs_client_circuit_id(edge_conn, service->config.circuit_id_protocol);
cp1 = buf_get_contents(conn->outbuf, &sz);
tt_str_op(cp1, OP_EQ,
"PROXY TCP6 fc00:dead:beef:4dad::0:ffff ::1 65535 42\r\n");
/* Check that GID with UINT16_MAX + 7 works. */
or_circ->global_identifier = UINT16_MAX + 7;
- export_hs_client_circuit_id(edge_conn, conn,
- service->config.circuit_id_protocol);
+ export_hs_client_circuit_id(edge_conn, service->config.circuit_id_protocol);
cp1 = buf_get_contents(conn->outbuf, &sz);
tt_str_op(cp1, OP_EQ, "PROXY TCP6 fc00:dead:beef:4dad::1:6 ::1 6 42\r\n");