mirror of
https://github.com/pumpitupdev/pumptools.git
synced 2026-09-25 23:58:05 +03:00
prinet-proxy/packet: Add keepalive packet + creation function
This commit is contained in:
@@ -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;
|
||||
}
|
||||
@@ -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();
|
||||
Reference in New Issue
Block a user