static void circuit_rep_hist_note_result(circuit_t *circ);
static void circuit_is_open(circuit_t *circ);
-static void circuit_failed(circuit_t *circ);
+static void circuit_build_failed(circuit_t *circ);
static circuit_t *circuit_establish_circuit(uint8_t purpose, const char *exit_nickname);
unsigned long stats_n_relay_cells_relayed = 0;
* links worked and which didn't.
*/
if (circ->state != CIRCUIT_STATE_OPEN) {
- circuit_failed(circ); /* take actions if necessary */
+ circuit_build_failed(circ); /* take actions if necessary */
circuit_rep_hist_note_result(circ);
}
}
}
-static void circuit_failed(circuit_t *circ) {
+/* Called whenever a circuit could not be successfully built.
+ */
+static void circuit_build_failed(circuit_t *circ) {
/* we should examine circ and see if it failed because of
* the last hop or an earlier hop. then use this info below.
break;
case CIRCUIT_PURPOSE_S_ESTABLISH_INTRO:
/* at Bob, waiting for introductions */
+ if (circ->state != CIRCUIT_STATE_OPEN) {
+ circuit_increment_failure_count();
+ }
/* no need to care here, because bob will rebuild intro
* points periodically. */
break;
case CIRCUIT_PURPOSE_C_INTRODUCING:
/* at Alice, connecting to intro point */
+ /* Don't increment failure count, since Bob may have picked
+ * the inttroduction point badly */
/* Alice will pick a new intro point when this one dies, if
* the stream in question still cares. No need to act here. */
break;
case CIRCUIT_PURPOSE_C_ESTABLISH_REND:
/* at Alice, waiting for Bob */
+ if (circ->state != CIRCUIT_STATE_OPEN) {
+ circuit_increment_failure_count();
+ }
/* Alice will pick a new rend point when this one dies, if
* the stream in question still cares. No need to act here. */
break;
case CIRCUIT_PURPOSE_S_CONNECT_REND:
/* at Bob, connecting to rend point */
+ /* Don't increment failure count, since Alice may have picked
+ * the rendezvous point badly */
log_fn(LOG_INFO,"Couldn't connect to Alice's chosen rend point %s. Sucks to be Alice.", circ->build_state->chosen_exit);
break;
+ default:
+ /* Other cases are impossible, since this function is only caused with
+ * unbuilt circuits. */
+ assert(0);
}
}