diff options
author | Toni Uhlig <matzeton@googlemail.com> | 2018-08-11 13:24:36 +0200 |
---|---|---|
committer | Toni Uhlig <matzeton@googlemail.com> | 2018-08-11 13:24:36 +0200 |
commit | d6bbb0e218ea74e6205cfc0b180e768e80e1bc31 (patch) | |
tree | ca11f45c2f2e2130d0a98528ad67edc1353b414c /src/jail_packet.c | |
parent | 40035b83f990286767df0db170295b3f354de0d5 (diff) |
setup basic jail packet structs/funcs
Signed-off-by: Toni Uhlig <matzeton@googlemail.com>
Diffstat (limited to 'src/jail_packet.c')
-rw-r--r-- | src/jail_packet.c | 57 |
1 files changed, 57 insertions, 0 deletions
diff --git a/src/jail_packet.c b/src/jail_packet.c new file mode 100644 index 0000000..4e5bd64 --- /dev/null +++ b/src/jail_packet.c @@ -0,0 +1,57 @@ +#include <arpa/inet.h> + +#include "jail_packet.h" +#include "utils.h" + +typedef struct jail_packet { + uint8_t type; + uint16_t size; +} jail_packet; + +typedef ssize_t (*packet_callback)(jail_packet_ctx *ctx, unsigned char *data, + size_t siz); + +typedef struct jail_packet_callback { + uint8_t type; + packet_callback pc; +} jail_packet_callback; + +static ssize_t pkt_header_read(unsigned char *buf, size_t siz); +static ssize_t pkt_hello(jail_packet_ctx *ctx, unsigned char *data, size_t siz); + +#define PKT_CB(type, cb) \ + { type, cb } +static const jail_packet_callback jpc[] = { + PKT_CB(PKT_INVALID, NULL), + PKT_CB(PKT_HELLO, pkt_hello) +}; + + +static ssize_t pkt_header_read(unsigned char *buf, size_t siz) +{ + jail_packet *pkt; + + if (siz < sizeof(*pkt)) + return -1; + pkt = (jail_packet *) buf; + + if (pkt->type >= SIZEOF(jpc)) + return -1; + + pkt->size = ntohs(pkt->size); + if (siz < pkt->size) + return -1; + + return pkt->size; +} + +static ssize_t pkt_hello(jail_packet_ctx *ctx, unsigned char *data, size_t siz) +{ + return -1; +} + +int jail_packet_loop(event_ctx *ctx, jail_packet_ctx *pkt_ctx, + on_data_cb on_data) +{ + return 1; +} |