prinet-proxy/packet: Add keepalive packet + creation function

This commit is contained in:
icex2
2021-01-23 23:46:22 +01:00
parent c29136afb5
commit 32172670da
2 changed files with 38 additions and 3 deletions
+35 -2
View File
@@ -1,12 +1,26 @@
#include <sodium.h>
#include "pumpnet/prinet-proxy/packet.h"
#include "util/log.h"
#include "util/mem.h"
#include "util/rand.h"
struct pumpnet_prinet_proxy_packet_data {
uint32_t sequence_counter;
uint32_t packet_id;
uint8_t data[];
} __attribute__((__packed__));
struct pumpnet_prinet_proxy_packet_data_keepalive {
uint32_t unknown;
} __attribute__((__packed__));
static const size_t HEADER_SIZE = sizeof(uint32_t) + sizeof(uint8_t) * SEC_PRINET_NOUNCE_LEN;
static const uint32_t PACKET_KEEPALIVE_ID = 0x3000000;
static const uint32_t PACKET_KEEPALIVE_SIZE =
sizeof(struct pumpnet_prinet_proxy_packet_data) +
sizeof(struct pumpnet_prinet_proxy_packet_data_keepalive);
struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_alloc(size_t data_len)
{
struct pumpnet_prinet_proxy_packet* packet;
@@ -40,4 +54,23 @@ size_t pumpnet_prinet_proxy_packet_get_data_len(const struct pumpnet_prinet_prox
}
return packet->length - HEADER_SIZE;
}
struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_create_keepalive()
{
struct pumpnet_prinet_proxy_packet* packet;
struct pumpnet_prinet_proxy_packet_data* data;
packet = pumpnet_prinet_proxy_packet_alloc_response(PACKET_KEEPALIVE_SIZE);
util_rand_gen_bytes(packet->nounce, SEC_PRINET_NOUNCE_LEN);
data = (struct pumpnet_prinet_proxy_packet_data*) &packet->data;
// sequences always start with 1
data->sequence_counter = 1;
data->packet_id = PACKET_KEEPALIVE_ID;
// the data field of the keepalive packet is never read client-side
return packet;
}
+3 -1
View File
@@ -17,4 +17,6 @@ struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_alloc_response(s
size_t pumpnet_prinet_proxy_packet_get_header_len();
size_t pumpnet_prinet_proxy_packet_get_data_len(const struct pumpnet_prinet_proxy_packet* packet);
size_t pumpnet_prinet_proxy_packet_get_data_len(const struct pumpnet_prinet_proxy_packet* packet);
struct pumpnet_prinet_proxy_packet* pumpnet_prinet_proxy_packet_create_keepalive();