diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/protocol.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/src/common/protocol.c b/src/common/protocol.c index b2e0d40..edaf491 100644 --- a/src/common/protocol.c +++ b/src/common/protocol.c @@ -131,3 +131,35 @@ size_t tlv_data_size(struct tlv_parser *parser) } return size; } + +void tlv_destroy(struct tlv *t) +{ + free(t->data); + t->length = 0; +} + +size_t tlv_raw_size(struct tlv *t) +{ + return sizeof(*t) + t->length; +} + +int tlv_push(struct tlv *t, const char *data, size_t size) +{ + int ret = 0; + size_t final_size = tlv_raw_size(t) + size; + if (final_size > TLV_SZ_MAX_RAW) { + ret = E_TLV_OVERFLOW; + } else { + t->data = realloc(t->data, final_size); + memcpy(t->data + t->length, data, size); + t->length = final_size; + } + return ret; +} + +void tlv_init(struct tlv *t) +{ + t->type = TEXT; + t->length = 0; + t->data = NULL; +}
\ No newline at end of file |