aboutsummaryrefslogtreecommitdiff
path: root/src/protocol.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol.c')
-rw-r--r--src/protocol.c35
1 files changed, 35 insertions, 0 deletions
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;