diff options
Diffstat (limited to 'src/packet.c')
-rw-r--r-- | src/packet.c | 21 |
1 files changed, 19 insertions, 2 deletions
diff --git a/src/packet.c b/src/packet.c index 086e4b2a..47fce919 100644 --- a/src/packet.c +++ b/src/packet.c @@ -3,7 +3,7 @@ #include "packet.h" -struct packet* packet_new(uint32_t length) { +struct packet* packet_new(size_t length) { struct packet *p; assert(length); p = malloc(sizeof(struct packet)+length); @@ -11,9 +11,23 @@ struct packet* packet_new(uint32_t length) { p->ref = 1; p->length = length; + p->data = (uint8_t*) (p+1); + p->type = PACKET_APPENDED; return p; } +struct packet* packet_dynamic(uint8_t* data, size_t length) { + struct packet *p; + assert(data && length); + p = malloc(sizeof(struct packet)); + assert(p); + + p->ref = 1; + p->length = length; + p->data = data; + p->type = PACKET_DYNAMIC; +} + struct packet* packet_ref(struct packet *p) { assert(p && p->ref >= 1); p->ref++; @@ -24,6 +38,9 @@ void packet_unref(struct packet *p) { assert(p && p->ref >= 1); p->ref--; - if (p->ref == 0) + if (p->ref == 0) { + if (p->type == PACKET_DYNAMIC) + free(p->data); free(p); + } } |