summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-22 20:48:42 +0300
committerGravatar Ramūnas Mažeikis <ramunasnezinomas@gmail.com> 2019-05-22 20:48:42 +0300
commitdd7556097b373bc62f646016a9b368899043dcc9 (patch)
tree3fd3fdaf9fa87e259038caf15983bb5c0ffb6edd /src
parentca9e0b1cc8084b66311705b0c79da16821eb275d (diff)
downloadusurpation-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')
-rw-r--r--src/common/protocol.c20
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)