From 9c8ece1538d31dba9a416c9f29f88e18510f4c75 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ram=C5=ABnas=20Ma=C5=BEeikis?= Date: Sat, 18 May 2019 16:32:20 +0300 Subject: Whole-project: partial implementation of protocol. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This commit is part of ticket #31. Branch is not in a compiling state. Work is being done on utility functions and protocol implementation. To be completed later. Signed-off-by: Ramūnas Mažeikis --- include/protocol.h | 80 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ include/utils.h | 11 ++++++++ 2 files changed, 91 insertions(+) create mode 100644 include/protocol.h create mode 100644 include/utils.h (limited to 'include') diff --git a/include/protocol.h b/include/protocol.h new file mode 100644 index 0000000..c1b786c --- /dev/null +++ b/include/protocol.h @@ -0,0 +1,80 @@ +/* + * Usurpataion --- client-server protocol interface. + * + * Copyright (C) 2019 Ramūnas Mažeikis + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; version 2.1 + * of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA + */ + +#ifdef PROTOCOL_H_INCLUDED +#define PROTOCOL_H_INCLUDED + +#include + +#define SUCCESS (0) +#define TLV_OVERFLOW (1 << 0) + +enum packet_type { + REGURAL, + HEARTBEAT, + DISCOVERY +}; + +enum tlv_type { + TEXT, /* NULL-terminated string. */ + FPI1, /* Fixed point. 1 decimal digit of precision. */ + TIMESTAMP, + REQUEST, + REPLY, + UUID +}; + +struct packet_data { + enum packet_type type; + size_t packet_size; + char *data; /* Bytes representing tlv's */ +}; + +struct tlv { + enum tlv_type type; + size_t length; + void *data; +}; + +/* + * Reads last packets received, parses and stores them to be later retreived + * via get_tlv. + * */ +void get_last_data(void); + +/* Returns tlv's parsed by get_last_data. Returned tlv is only valid until + * next call to get_tlv. + * */ +struct tlv * get_tlv(void); + +/* Any modifications made to the pending outgoing packet are nullified. + * */ +void clear_data(void); + +/* Appends data to the next packet to be sent. Type of data is determined by + * enum tlv_type. + * */ +void push_data(char *data, enum tlv_type); + +/* Sends packet towards the other end. + * */ +void flush_data(void); + +#endif /* PROTOCOL_H_INCLUDED */ diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..ca2d2ee --- /dev/null +++ b/include/utils.h @@ -0,0 +1,11 @@ +#ifdef PROJECT_UTILS_H +#define PROJECT_UTILS_H + +typedef int fpi1_t; + +fpi1_t add(fpi1_t a, fpi1_t b); +fpi1_t sub(fpi1_t a, fpi1_t b); +fpi1_t mul(fpi1_t a, fpi1_t b); +fpi1_t div(fpi1_t a, fpi1_t b); + +#endif /* PROJECT_UTILS_H */ -- cgit v1.2.3