diff options
-rw-r--r-- | src/common/protocol.cpp | 28 | ||||
-rw-r--r-- | src/common/protocol_private.h | 8 | ||||
-rw-r--r-- | src/device/protocol_device.ino | 2 |
3 files changed, 23 insertions, 15 deletions
diff --git a/src/common/protocol.cpp b/src/common/protocol.cpp index dc0f532..135be37 100644 --- a/src/common/protocol.cpp +++ b/src/common/protocol.cpp @@ -31,7 +31,7 @@ #include <string.h> #include <time.h> -#define READ_AS(from, type) (*(type*)(from)) +#define READ_AS(type, from) (*((type*)(from))) int push_data(cd_t connection, const char *data, enum tlv_type type) { @@ -59,7 +59,7 @@ int push_data(cd_t connection, const char *data, enum tlv_type type) return ret; } -static int push_string(cd_t connection, char *str) +static int push_string(cd_t connection, const char *str) { int ret = 0; size_t size = strlen(str); @@ -69,25 +69,25 @@ static int push_string(cd_t connection, char *str) return ret; } -static int push_fpi1(cd_t connection, char *num) +static int push_fpi1(cd_t connection, const char *num) { return push_tlv_header(connection, FPI1, sizeof(fpi1_t)) | push_bytes(connection, num, sizeof(fpi1_t)); } -static int push_timestamp(cd_t connection, char *data) +static int push_timestamp(cd_t connection, const char *data) { return push_tlv_header(connection, TIMESTAMP, sizeof(time_t)) | push_bytes(connection, data, sizeof(time_t)); } -static int push_request(cd_t connection, char *data) +static int push_request(cd_t connection, const char *data) { return push_tlv_header(connection, REQUEST, sizeof(msg_idx_t)) | push_bytes(connection, data, sizeof(msg_idx_t)); } -static int push_reply(cd_t connection, char *data) +static int push_reply(cd_t connection, const char *data) { int ret = 0; size_t msglen = strlen(data + sizeof(msg_idx_t)); @@ -96,7 +96,7 @@ static int push_reply(cd_t connection, char *data) return ret; } -static int push_uuid(cd_t connection, char *data) +static int push_uuid(cd_t connection, const char *data) { return push_tlv_header(connection, UUID, sizeof(uuid_t)) | push_bytes(connection, data, sizeof(uuid_t)); @@ -110,7 +110,7 @@ size_t tlv_count(const struct packet_data * const packet) while (cursor < packet->packet_size) { cursor += sizeof(enum tlv_type); - length = READ_AS(packet->data + cursor, enum tlv_type); + length = READ_AS(enum tlv_type, packet->data + cursor); cursor += sizeof(size_t) + length; ret++; } @@ -121,7 +121,7 @@ size_t tlv_count(const struct packet_data * const packet) } size_t get_tlvs( const struct packet_data * const data, - const struct tlv *buf, + struct tlv *buf, size_t buf_size) { size_t tlvs_read = 0; @@ -139,15 +139,15 @@ size_t get_tlvs( const struct packet_data * const data, return tlvs_read; } -size_t parse_tlv(char *data, size_t cursor, struct tlv *t) +size_t parse_tlv(const char *data, size_t cursor, struct tlv *t) { - char *begin = data + cursor; + const char *begin = data + cursor; - t->type = READ_TLV_TYPE(data + cursor); + t->type = READ_AS(enum tlv_type, data + cursor); cursor += sizeof(enum tlv_type); - t->length += READ_SIZE_T(data + cursor); + t->length += READ_AS(enum tlv_type ,data + cursor); data += sizeof(size_t); - t->data = data + cursor; + t->data = (void*)data + cursor; return data + cursor - begin + 1UL; } diff --git a/src/common/protocol_private.h b/src/common/protocol_private.h index 7433ff0..d50a314 100644 --- a/src/common/protocol_private.h +++ b/src/common/protocol_private.h @@ -36,6 +36,14 @@ size_t tlv_count(const struct packet_data * const packet_data); /** + * Pushes bytes to outgoing packet and adjusts the offset accordingly. + * + * Returns E_PACKET_OVERFLOW, if no more bytes can fit into the packet. + */ + +int push_bytes(cd_t cd, const char *data, size_t size); + +/** * Parses tlv's from packet data and writes them to a buffer of given size. * * Returns how many tlv's were actually parsed. diff --git a/src/device/protocol_device.ino b/src/device/protocol_device.ino index 218ca85..22e1be1 100644 --- a/src/device/protocol_device.ino +++ b/src/device/protocol_device.ino @@ -30,7 +30,7 @@ int clear_data(cd_t cd) return ret; } -static int push_bytes(cd_t cd, char *data, size_t size) +static int push_bytes(cd_t cd, const char *data, size_t size) { int ret = 0; |