From f4f959f7842cd9b28500fcd7f506493606376db5 Mon Sep 17 00:00:00 2001 From: David Timber Date: Wed, 2 Sep 2020 14:37:35 +0930 Subject: Impl: PRNE_HTBT_OP_HOVER --- src/protocol.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'src/protocol.c') diff --git a/src/protocol.c b/src/protocol.c index 5388f52..2775517 100644 --- a/src/protocol.c +++ b/src/protocol.c @@ -410,6 +410,11 @@ bool prne_htbt_eq_hover (const prne_htbt_hover_t *a, const prne_htbt_hover_t *b) a->v6.port == b->v6.port; } +bool prne_htbt_cp_hover (const prne_htbt_hover_t *a, prne_htbt_hover_t *b) { + memcpy(b, a, sizeof(prne_htbt_hover_t)); + return true; +} + void prne_htbt_init_stdio (prne_htbt_stdio_t *s) { s->len = 0; s->err = false; @@ -530,6 +535,22 @@ prne_htbt_ser_rc_t prne_htbt_ser_host_info (uint8_t *mem, const size_t mem_len, return PRNE_HTBT_SER_RC_OK; } +prne_htbt_ser_rc_t prne_htbt_ser_hover (uint8_t *mem, const size_t mem_len, size_t *actual, const prne_htbt_hover_t *in) { + *actual = 24; + if (*actual < mem_len) { + return PRNE_HTBT_SER_RC_MORE_BUF; + } + + memcpy(mem, in->v4.addr, 4); + mem[4] = prne_getmsb16(in->v4.port, 0); + mem[5] = prne_getmsb16(in->v4.port, 1); + memcpy(mem + 6, in->v6.addr, 16); + mem[22] = prne_getmsb16(in->v6.port, 0); + mem[23] = prne_getmsb16(in->v6.port, 1); + + return PRNE_HTBT_SER_RC_OK; +} + prne_htbt_ser_rc_t prne_htbt_ser_cmd (uint8_t *mem, const size_t mem_len, size_t *actual, const prne_htbt_cmd_t *in) { if (in->mem_len > 0) { if (in->mem_len > PRNE_HTBT_ARG_MEM_MAX || in->argc == 0 || in->mem[in->mem_len - 1] != 0) { @@ -692,6 +713,20 @@ prne_htbt_ser_rc_t prne_htbt_dser_host_info (const uint8_t *data, const size_t l return PRNE_HTBT_SER_RC_OK; } +prne_htbt_ser_rc_t prne_htbt_dser_hover (const uint8_t *data, const size_t len, size_t *actual, prne_htbt_hover_t *out) { + *actual = 24; + if (*actual < len) { + return PRNE_HTBT_SER_RC_MORE_BUF; + } + + memcpy(out->v4.addr, data, 4); + out->v4.port = prne_recmb_msb16(data[4], data[5]); + memcpy(out->v6.addr, data + 6, 16); + out->v6.port = prne_recmb_msb16(data[22], data[23]); + + return PRNE_HTBT_SER_RC_OK; +} + prne_htbt_ser_rc_t prne_htbt_dser_cmd (const uint8_t *data, const size_t len, size_t *actual, prne_htbt_cmd_t *out) { size_t args_len, argc; char **args = NULL; -- cgit