diff options
author | 2019-05-22 21:21:25 +0300 | |
---|---|---|
committer | 2019-05-22 21:21:25 +0300 | |
commit | 5fee4a9996158479fe5503c9acace5733660f9e9 (patch) | |
tree | bd85fcfaa1adf5530bbc006ce81a2f9270685e04 /src | |
parent | db5f3e534c1efd31a582d2309b2bc892cc2c8317 (diff) | |
download | usurpation-5fee4a9996158479fe5503c9acace5733660f9e9.tar.gz usurpation-5fee4a9996158479fe5503c9acace5733660f9e9.tar.bz2 usurpation-5fee4a9996158479fe5503c9acace5733660f9e9.zip |
Protocol: reimplemented push_bytes and push_tlv_header.
Signed-off-by: Ramūnas Mažeikis <ramunasnezinomas@gmail.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/common/protocol.c | 27 | ||||
-rw-r--r-- | src/common/protocol_private.h | 2 |
2 files changed, 24 insertions, 5 deletions
diff --git a/src/common/protocol.c b/src/common/protocol.c index 8fbd197..e71938c 100644 --- a/src/common/protocol.c +++ b/src/common/protocol.c @@ -60,17 +60,36 @@ int push_tlv(struct tlv_packet *packet, enum tlv_type type, char *data) void clear_data(struct tlv_packet *packet) { - return 0; + packet->offset = 0; + packet->type = 0; + memset(packet->data, 0, packet->size); } -static int push_bytes(struct tlv_packet *packet, size_t size) +static int push_bytes(struct tlv_packet *packet, char *data, size_t size) { - return 0; + int ret = 0; + + if (packet->offset + size >= packet->size) { + ret = E_TLV_OVERFLOW; + } else { + memcpy(packet->data + packet->offset, data, size); + packet->offset += size; + } } static int push_tlv_header(struct tlv_packet *packet, enum tlv_type type, size_t size) { - return 0; + int ret = 0; + + if (packet->offset + sizeof(type) + sizeof(size) >= packet->size) { + ret = E_TLV_OVERFLOW; + } else { + memcpy(packet->data + packet->size, type, sizeof(type)); + packet->offset += sizeof(type); + memcpy(packet->data + packet->offset, size, sizeof(size)); + packet->offset += sizeof(size); + } + return ret; } int get_tlv(struct tlv_parser *parser, struct tlv *ret) diff --git a/src/common/protocol_private.h b/src/common/protocol_private.h index 206046f..de086cd 100644 --- a/src/common/protocol_private.h +++ b/src/common/protocol_private.h @@ -3,7 +3,7 @@ #include "protocol_private.h" -int push_bytes(struct tlv_packet *packet, size_t size); +int push_bytes(struct tlv_packet *packet, char *data, size_t size); int push_tlv_header(struct tlv_packet *packet, enum tlv_type type, size_t size); #endif /* PROTOCOL_PRIVATE_H */
\ No newline at end of file |