mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-13 06:33:44 +01:00
Improve export_hs_client_circuit_id() function.
- Change default values. - Beautify. - Documentation.
This commit is contained in:
parent
27d7491f5a
commit
5d34a8cbbb
@ -597,31 +597,34 @@ connected_cell_format_payload(uint8_t *payload_out,
|
|||||||
return connected_payload_len;
|
return connected_payload_len;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* DOCDOCDOC */
|
/* This is an onion service client connection: Export the client circuit ID
|
||||||
static void
|
* according to the HAProxy proxy protocol. */
|
||||||
send_ha_proxy_header(const edge_connection_t *edge_conn,
|
STATIC void
|
||||||
connection_t *conn)
|
export_hs_client_circuit_id_haproxy(const edge_connection_t *edge_conn,
|
||||||
|
connection_t *conn)
|
||||||
{
|
{
|
||||||
char buf[512];
|
char *buf;
|
||||||
char dst_ipv6[39] = "::1";
|
const char dst_ipv6[] = "::1";
|
||||||
/* See RFC4193 regarding fc00::/7 */
|
/* See RFC4193 regarding fc00::/7 */
|
||||||
char src_ipv6_prefix[34] = "fc00:dead:beef:4dad:";
|
const char src_ipv6_prefix[] = "fc00:dead:beef:4dad:";
|
||||||
/* TODO: retain virtual port and use as destination port */
|
/* TODO: retain virtual port and use as destination port */
|
||||||
uint16_t dst_port = 443;
|
uint16_t dst_port = 443;
|
||||||
uint16_t src_port = 0;
|
uint16_t src_port = 1; /* default value */
|
||||||
uint32_t gid = 0;
|
uint32_t gid = 0; /* default value */
|
||||||
|
|
||||||
|
/* Generate a GID and source port for this client */
|
||||||
if (edge_conn->on_circuit != NULL) {
|
if (edge_conn->on_circuit != NULL) {
|
||||||
gid = TO_ORIGIN_CIRCUIT(edge_conn->on_circuit)->global_identifier;
|
gid = TO_ORIGIN_CIRCUIT(edge_conn->on_circuit)->global_identifier;
|
||||||
src_port = gid & 0x0000ffff;
|
src_port = gid & 0x0000ffff;
|
||||||
}
|
}
|
||||||
|
|
||||||
gid = (gid == 0) ? 1 : gid;
|
/* Build the string */
|
||||||
src_port = (src_port == 0) ? 1 : src_port;
|
tor_asprintf(&buf, "PROXY TCP6 %s:%x %s %d %d\r\n",
|
||||||
|
src_ipv6_prefix, gid, dst_ipv6, src_port, dst_port);
|
||||||
|
|
||||||
tor_snprintf(buf, sizeof(buf), "PROXY TCP6 %s:%x %s %d %d\r\n",
|
|
||||||
src_ipv6_prefix, gid, dst_ipv6, src_port, dst_port);
|
|
||||||
connection_buf_add(buf, strlen(buf), conn);
|
connection_buf_add(buf, strlen(buf), conn);
|
||||||
|
|
||||||
|
tor_free(buf);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Connected handler for exit connections: start writing pending
|
/** Connected handler for exit connections: start writing pending
|
||||||
@ -649,7 +652,7 @@ connection_edge_finished_connecting(edge_connection_t *edge_conn)
|
|||||||
* protocol header */
|
* protocol header */
|
||||||
if (edge_conn->hs_ident &&
|
if (edge_conn->hs_ident &&
|
||||||
hs_service_exports_circuit_id(&edge_conn->hs_ident->identity_pk)) {
|
hs_service_exports_circuit_id(&edge_conn->hs_ident->identity_pk)) {
|
||||||
send_ha_proxy_header(edge_conn, conn);
|
export_hs_client_circuit_id_haproxy(edge_conn, conn);
|
||||||
}
|
}
|
||||||
|
|
||||||
connection_watch_events(conn, READ_EVENT); /* stop writing, keep reading */
|
connection_watch_events(conn, READ_EVENT); /* stop writing, keep reading */
|
||||||
|
@ -243,6 +243,9 @@ STATIC void connection_ap_handshake_rewrite(entry_connection_t *conn,
|
|||||||
rewrite_result_t *out);
|
rewrite_result_t *out);
|
||||||
|
|
||||||
STATIC int connection_ap_process_http_connect(entry_connection_t *conn);
|
STATIC int connection_ap_process_http_connect(entry_connection_t *conn);
|
||||||
|
STATIC void
|
||||||
|
export_hs_client_circuit_id_haproxy(const edge_connection_t *edge_conn,
|
||||||
|
connection_t *conn);
|
||||||
#endif /* defined(CONNECTION_EDGE_PRIVATE) */
|
#endif /* defined(CONNECTION_EDGE_PRIVATE) */
|
||||||
|
|
||||||
#endif /* !defined(TOR_CONNECTION_EDGE_H) */
|
#endif /* !defined(TOR_CONNECTION_EDGE_H) */
|
||||||
|
Loading…
Reference in New Issue
Block a user