aboutsummaryrefslogtreecommitdiff
path: root/src/packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/packet.c')
-rw-r--r--src/packet.c75
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);
+}