|
@@ -1417,30 +1417,35 @@ circuit_mark_for_close_(circuit_t *circ, int reason, int line,
|
|
|
tor_assert(circ->state == CIRCUIT_STATE_OPEN);
|
|
|
tor_assert(ocirc->build_state->chosen_exit);
|
|
|
tor_assert(ocirc->rend_data);
|
|
|
- /* treat this like getting a nack from it */
|
|
|
- log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s",
|
|
|
- safe_str_client(ocirc->rend_data->onion_address),
|
|
|
- safe_str_client(build_state_get_exit_nickname(ocirc->build_state)),
|
|
|
- timed_out ? "Recording timeout." : "Removing from descriptor.");
|
|
|
- rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
|
|
|
- ocirc->rend_data,
|
|
|
- timed_out ?
|
|
|
- INTRO_POINT_FAILURE_TIMEOUT :
|
|
|
- INTRO_POINT_FAILURE_GENERIC);
|
|
|
+ if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) {
|
|
|
+ /* treat this like getting a nack from it */
|
|
|
+ log_info(LD_REND, "Failed intro circ %s to %s (awaiting ack). %s",
|
|
|
+ safe_str_client(ocirc->rend_data->onion_address),
|
|
|
+ safe_str_client(build_state_get_exit_nickname(ocirc->build_state)),
|
|
|
+ timed_out ? "Recording timeout." : "Removing from descriptor.");
|
|
|
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
|
|
|
+ ocirc->rend_data,
|
|
|
+ timed_out ?
|
|
|
+ INTRO_POINT_FAILURE_TIMEOUT :
|
|
|
+ INTRO_POINT_FAILURE_GENERIC);
|
|
|
+ }
|
|
|
} else if (circ->purpose == CIRCUIT_PURPOSE_C_INTRODUCING &&
|
|
|
reason != END_CIRC_REASON_TIMEOUT) {
|
|
|
origin_circuit_t *ocirc = TO_ORIGIN_CIRCUIT(circ);
|
|
|
if (ocirc->build_state->chosen_exit && ocirc->rend_data) {
|
|
|
- log_info(LD_REND, "Failed intro circ %s to %s "
|
|
|
- "(building circuit to intro point). "
|
|
|
- "Marking intro point as possibly unreachable.",
|
|
|
- safe_str_client(ocirc->rend_data->onion_address),
|
|
|
- safe_str_client(build_state_get_exit_nickname(ocirc->build_state)));
|
|
|
- rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
|
|
|
- ocirc->rend_data,
|
|
|
- INTRO_POINT_FAILURE_UNREACHABLE);
|
|
|
+ if (orig_reason != END_CIRC_REASON_IP_NOW_REDUNDANT) {
|
|
|
+ log_info(LD_REND, "Failed intro circ %s to %s "
|
|
|
+ "(building circuit to intro point). "
|
|
|
+ "Marking intro point as possibly unreachable.",
|
|
|
+ safe_str_client(ocirc->rend_data->onion_address),
|
|
|
+ safe_str_client(build_state_get_exit_nickname(ocirc->build_state)));
|
|
|
+ rend_client_report_intro_point_failure(ocirc->build_state->chosen_exit,
|
|
|
+ ocirc->rend_data,
|
|
|
+ INTRO_POINT_FAILURE_UNREACHABLE);
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
if (circ->n_chan) {
|
|
|
circuit_clear_cell_queue(circ, circ->n_chan);
|
|
|
/* Only send destroy if the channel isn't closing anyway */
|