* do a special case. */
if (payload_len <= 1) {
if (payload_len == 0) {
- ret = HS_CELL_INTRO_ACK_SUCCESS;
+ ret = TRUNNEL_HS_INTRO_ACK_STATUS_SUCCESS;
} else {
- ret = HS_CELL_INTRO_ACK_FAILURE;
+ ret = TRUNNEL_HS_INTRO_ACK_STATUS_UNKNOWN_ID;
}
goto end;
}
* 3.2.2 of the specification). Below this value, the cell must be padded. */
#define HS_CELL_INTRODUCE1_MIN_SIZE 246
-/* Status code of an INTRODUCE_ACK cell. */
-typedef enum {
- HS_CELL_INTRO_ACK_SUCCESS = 0x0000, /* Cell relayed to service. */
- HS_CELL_INTRO_ACK_FAILURE = 0x0001, /* Service ID not recognized */
- HS_CELL_INTRO_ACK_BADFMT = 0x0002, /* Bad message format */
- HS_CELL_INTRO_ACK_NORELAY = 0x0003, /* Can't relay cell to service */
-} hs_cell_introd_ack_status_t;
-
/* Onion key type found in the INTRODUCE1 cell. */
typedef enum {
HS_CELL_ONION_KEY_TYPE_NTOR = 1,
#include "router.h"
#include "routerset.h"
+#include "trunnel/hs/cell_introduce1.h"
+
/* Return a human-readable string for the client fetch status code. */
static const char *
fetch_status_to_string(hs_client_fetch_status_t status)
status = hs_cell_parse_introduce_ack(payload, payload_len);
switch (status) {
- case HS_CELL_INTRO_ACK_SUCCESS:
+ case TRUNNEL_HS_INTRO_ACK_STATUS_SUCCESS:
ret = 0;
handle_introduce_ack_success(circ);
goto end;
- case HS_CELL_INTRO_ACK_FAILURE:
- case HS_CELL_INTRO_ACK_BADFMT:
- case HS_CELL_INTRO_ACK_NORELAY:
+ case TRUNNEL_HS_INTRO_ACK_STATUS_UNKNOWN_ID:
+ case TRUNNEL_HS_INTRO_ACK_STATUS_BAD_FORMAT:
+ /* It is possible that the intro point can send us an unknown status code
+ * for the NACK that we do not know about like a new code for instance.
+ * Just fallthrough so we can note down the NACK and re-extend. */
+ default:
handle_introduce_ack_bad(circ, status);
/* We are going to see if we have to close the circuits (IP and RP) or we
* can re-extend to a new intro point. */
ret = close_or_reextend_intro_circ(circ);
break;
- default:
- log_info(LD_PROTOCOL, "Unknown INTRODUCE_ACK status code %u from %s",
- status,
- safe_str_client(extend_info_describe(circ->build_state->chosen_exit)));
- break;
}
end: