summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-22 21:21:25 +0300
committerGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-22 21:21:25 +0300
commit5fee4a9996158479fe5503c9acace5733660f9e9 (patch)
treebd85fcfaa1adf5530bbc006ce81a2f9270685e04
parentdb5f3e534c1efd31a582d2309b2bc892cc2c8317 (diff)
downloadusurpation-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>
-rw-r--r--src/common/protocol.c27
-rw-r--r--src/common/protocol_private.h2
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