mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2025-02-25 15:10:48 +01:00
Merge branch 'bug21019_030_01_squashed'
This commit is contained in:
commit
5762d6489d
2 changed files with 32 additions and 2 deletions
|
@ -329,6 +329,33 @@ relay_send_end_cell_from_edge(streamid_t stream_id, circuit_t *circ,
|
||||||
payload, 1, cpath_layer);
|
payload, 1, cpath_layer);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* If the connection <b>conn</b> is attempting to connect to an external
|
||||||
|
* destination that is an hidden service and the reason is a connection
|
||||||
|
* refused or timeout, log it so the operator can take appropriate actions.
|
||||||
|
* The log statement is a rate limited warning. */
|
||||||
|
static void
|
||||||
|
warn_if_hs_unreachable(const edge_connection_t *conn, uint8_t reason)
|
||||||
|
{
|
||||||
|
tor_assert(conn);
|
||||||
|
|
||||||
|
if (conn->base_.type == CONN_TYPE_EXIT &&
|
||||||
|
connection_edge_is_rendezvous_stream(conn) &&
|
||||||
|
(reason == END_STREAM_REASON_CONNECTREFUSED ||
|
||||||
|
reason == END_STREAM_REASON_TIMEOUT)) {
|
||||||
|
#define WARN_FAILED_HS_CONNECTION 300
|
||||||
|
static ratelim_t warn_limit = RATELIM_INIT(WARN_FAILED_HS_CONNECTION);
|
||||||
|
char *m;
|
||||||
|
if ((m = rate_limit_log(&warn_limit, approx_time()))) {
|
||||||
|
log_warn(LD_EDGE, "Onion service connection to %s failed (%s)",
|
||||||
|
(conn->base_.socket_family == AF_UNIX) ?
|
||||||
|
safe_str(conn->base_.address) :
|
||||||
|
safe_str(fmt_addrport(&conn->base_.addr, conn->base_.port)),
|
||||||
|
stream_end_reason_to_string(reason));
|
||||||
|
tor_free(m);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/** Send a relay end cell from stream <b>conn</b> down conn's circuit, and
|
/** Send a relay end cell from stream <b>conn</b> down conn's circuit, and
|
||||||
* remember that we've done so. If this is not a client connection, set the
|
* remember that we've done so. If this is not a client connection, set the
|
||||||
* relay end cell's reason for closing as <b>reason</b>.
|
* relay end cell's reason for closing as <b>reason</b>.
|
||||||
|
@ -386,6 +413,9 @@ connection_edge_end(edge_connection_t *conn, uint8_t reason)
|
||||||
conn->base_.s);
|
conn->base_.s);
|
||||||
connection_edge_send_command(conn, RELAY_COMMAND_END,
|
connection_edge_send_command(conn, RELAY_COMMAND_END,
|
||||||
payload, payload_len);
|
payload, payload_len);
|
||||||
|
/* We'll log warn if the connection was an hidden service and couldn't be
|
||||||
|
* made because the service wasn't available. */
|
||||||
|
warn_if_hs_unreachable(conn, control_reason);
|
||||||
} else {
|
} else {
|
||||||
log_debug(LD_EDGE,"No circ to send end on conn "
|
log_debug(LD_EDGE,"No circ to send end on conn "
|
||||||
"(fd "TOR_SOCKET_T_FORMAT").",
|
"(fd "TOR_SOCKET_T_FORMAT").",
|
||||||
|
@ -3521,7 +3551,7 @@ connection_exit_connect_dir(edge_connection_t *exitconn)
|
||||||
* it is a general stream.
|
* it is a general stream.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
connection_edge_is_rendezvous_stream(edge_connection_t *conn)
|
connection_edge_is_rendezvous_stream(const edge_connection_t *conn)
|
||||||
{
|
{
|
||||||
tor_assert(conn);
|
tor_assert(conn);
|
||||||
if (conn->rend_data)
|
if (conn->rend_data)
|
||||||
|
|
|
@ -60,7 +60,7 @@ void connection_ap_handshake_socks_resolved_addr(entry_connection_t *conn,
|
||||||
int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
|
int connection_exit_begin_conn(cell_t *cell, circuit_t *circ);
|
||||||
int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ);
|
int connection_exit_begin_resolve(cell_t *cell, or_circuit_t *circ);
|
||||||
void connection_exit_connect(edge_connection_t *conn);
|
void connection_exit_connect(edge_connection_t *conn);
|
||||||
int connection_edge_is_rendezvous_stream(edge_connection_t *conn);
|
int connection_edge_is_rendezvous_stream(const edge_connection_t *conn);
|
||||||
int connection_ap_can_use_exit(const entry_connection_t *conn,
|
int connection_ap_can_use_exit(const entry_connection_t *conn,
|
||||||
const node_t *exit);
|
const node_t *exit);
|
||||||
void connection_ap_expire_beginning(void);
|
void connection_ap_expire_beginning(void);
|
||||||
|
|
Loading…
Add table
Reference in a new issue