diff options
author | 2019-05-22 20:48:42 +0300 | |
---|---|---|
committer | 2019-05-22 20:48:42 +0300 | |
commit | dd7556097b373bc62f646016a9b368899043dcc9 (patch) | |
tree | 3fd3fdaf9fa87e259038caf15983bb5c0ffb6edd /src/common/protocol.c | |
parent | ca9e0b1cc8084b66311705b0c79da16821eb275d (diff) | |
download | usurpation-dd7556097b373bc62f646016a9b368899043dcc9.tar.gz usurpation-dd7556097b373bc62f646016a9b368899043dcc9.tar.bz2 usurpation-dd7556097b373bc62f646016a9b368899043dcc9.zip |
Protocol: reimplemented push_string and push_fpi1.
Signed-off-by: Ramūnas Mažeikis <ramunasnezinomas@gmail.com>
Diffstat (limited to 'src/common/protocol.c')
-rw-r--r-- | src/common/protocol.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/src/common/protocol.c b/src/common/protocol.c index a7cb84f..2b4e3bf 100644 --- a/src/common/protocol.c +++ b/src/common/protocol.c @@ -30,6 +30,7 @@ #include "protocol.h" #include "protocol_private.h" #include "net.h" +#include "util.h" #define READ_AS(type, from) (*((type*)(from))) @@ -57,12 +58,27 @@ int push_data(enum tlv_type type) static int push_string(struct tlv_packet *packet, const char *str) { - return 0; + size_t strsize = strlen(str); + int ret = 0; + + if (strsize + packet->offset >= packet->size) { + ret = E_TLV_OVERFLOW; + } else { + memcpy(packet->data, str, strsize); + } + return ret; } static int push_fpi1(struct tlv_packet *packet, const char *num) { - return 0; + int ret = 0; + + if (packet->offset + sizeof(fpi1_t) >= packet->size) { + ret = E_TLV_OVERFLOW; + } else { + memcpy(packet->data, num, sizeof(fpi1_t)); + } + return ret; } static int push_timestamp(struct tlv_packet *packet, const char *data) |