mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-11-14 07:03:44 +01:00
prop224: Parse INTRODUCE_ACK cell
Add a function to parse an INTRODUCE_ACK cell in hs_cell.c. Furthermore, add an enum that lists all possible expected status code. Signed-off-by: David Goulet <dgoulet@torproject.org>
This commit is contained in:
parent
e7c06e6947
commit
cb336a7062
@ -864,3 +864,26 @@ hs_cell_build_establish_rendezvous(const uint8_t *rendezvous_cookie,
|
|||||||
return HS_REND_COOKIE_LEN;
|
return HS_REND_COOKIE_LEN;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Handle an INTRODUCE_ACK cell encoded in payload of length payload_len.
|
||||||
|
* Return the status code on success else a negative value if the cell as not
|
||||||
|
* decodable. */
|
||||||
|
int
|
||||||
|
hs_cell_parse_introduce_ack(const uint8_t *payload, size_t payload_len)
|
||||||
|
{
|
||||||
|
int ret = -1;
|
||||||
|
trn_cell_introduce_ack_t *cell = NULL;
|
||||||
|
|
||||||
|
tor_assert(payload);
|
||||||
|
|
||||||
|
if (trn_cell_introduce_ack_parse(&cell, payload, payload_len) < 0) {
|
||||||
|
log_info(LD_REND, "Invalid INTRODUCE_ACK cell. Unable to parse it.");
|
||||||
|
goto end;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = trn_cell_introduce_ack_get_status(cell);
|
||||||
|
|
||||||
|
end:
|
||||||
|
trn_cell_introduce_ack_free(cell);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
@ -16,6 +16,14 @@
|
|||||||
* 3.2.2 of the specification). Below this value, the cell must be padded. */
|
* 3.2.2 of the specification). Below this value, the cell must be padded. */
|
||||||
#define HS_CELL_INTRODUCE1_MIN_SIZE 246
|
#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. */
|
/* Onion key type found in the INTRODUCE1 cell. */
|
||||||
typedef enum {
|
typedef enum {
|
||||||
HS_CELL_ONION_KEY_TYPE_NTOR = 1,
|
HS_CELL_ONION_KEY_TYPE_NTOR = 1,
|
||||||
@ -102,6 +110,7 @@ ssize_t hs_cell_parse_intro_established(const uint8_t *payload,
|
|||||||
ssize_t hs_cell_parse_introduce2(hs_cell_introduce2_data_t *data,
|
ssize_t hs_cell_parse_introduce2(hs_cell_introduce2_data_t *data,
|
||||||
const origin_circuit_t *circ,
|
const origin_circuit_t *circ,
|
||||||
const hs_service_t *service);
|
const hs_service_t *service);
|
||||||
|
int hs_cell_parse_introduce_ack(const uint8_t *payload, size_t payload_len);
|
||||||
|
|
||||||
#endif /* TOR_HS_CELL_H */
|
#endif /* TOR_HS_CELL_H */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user