Previously, we always used a 1-hop path, no matter how many times a v3
single onion intro failed.
Fixes bug 23818; bugfix on 0.3.2.1-alpha.
tor_assert(ei);
/* Update circuit flags in case of a single onion service that requires a
- * direct connection. */
- if (service->config.is_single_onion) {
+ * direct connection.
+ *
+ * We only use a one-hop path on the first attempt. If the first attempt
+ * fails, we use a 3-hop path for reachability / reliability.
+ * (Unlike v2, retries is incremented by the caller before it calls this
+ * function.)
+ */
+ tor_assert_nonfatal(ip->circuit_retries > 0);
+ if (service->config.is_single_onion && ip->circuit_retries == 1) {
circ_flags |= CIRCLAUNCH_ONEHOP_TUNNEL;
}