diff options
Diffstat (limited to 'src/packet.c')
| -rw-r--r-- | src/packet.c | 75 |
1 files changed, 75 insertions, 0 deletions
diff --git a/src/packet.c b/src/packet.c new file mode 100644 index 0000000..3582020 --- /dev/null +++ b/src/packet.c @@ -0,0 +1,75 @@ +#include <gran/packet.h> +#include <stdlib.h> + +struct packet { + enum packet_state state; + enum packet_type type; + + uintptr_t addr; + size_t size; + void *data; +}; + + +struct packet *create_packet(enum packet_type type, uintptr_t addr, size_t size) +{ + struct packet *pkt = calloc(1, sizeof(struct packet) + size); + if (!pkt) + return NULL; + + pkt->state = PACKET_INIT; + pkt->type = type; + pkt->addr = addr; + pkt->size = size; + pkt->data = pkt + 1; + return pkt; +} + +struct packet *create_packet_with(enum packet_type type, uintptr_t addr, size_t size, void *data) +{ + struct packet *pkt = calloc(1, sizeof(struct packet)); + if (!pkt) + return NULL; + + pkt->state = PACKET_INIT; + pkt->type = type; + pkt->addr = addr; + pkt->size = size; + pkt->data = data; + return pkt; +} + +enum packet_type packet_type(struct packet *pkt) +{ + return pkt->type; +} + +enum packet_state packet_state(struct packet *pkt) +{ + return pkt->state; +} + +void packet_set_state(struct packet *pkt, enum packet_state state) +{ + pkt->state = state; +} + +size_t packet_size(struct packet *pkt) +{ + return pkt->size; +} + +uintptr_t packet_addr(struct packet *pkt) +{ + return pkt->addr; +} + +void *packet_data(struct packet *pkt) +{ + return pkt->data; +} + +void destroy_packet(struct packet *pkt) +{ + free(pkt); +} |
