diff options
author | 2019-05-26 14:55:36 +0300 | |
---|---|---|
committer | 2019-05-26 14:55:36 +0300 | |
commit | 03d020c10113db431efeb6ae0d3380b2553387ac (patch) | |
tree | 6dc073fa8ecdb015b0cd3a7ab92b9b66001bdd89 /include | |
parent | cce1aad04a2ce4ea0447ec8f3f4c41a8936d4a1a (diff) | |
parent | b25865cc827f4a6a9c31f3d92a4e443485fd5d93 (diff) | |
download | usurpation-03d020c10113db431efeb6ae0d3380b2553387ac.tar.gz usurpation-03d020c10113db431efeb6ae0d3380b2553387ac.tar.bz2 usurpation-03d020c10113db431efeb6ae0d3380b2553387ac.zip |
Merge branch '31-Net-Protocol-Handling'
Signed-off-by: Gediminas Jakutis <gediminas@varciai.lt>
Diffstat (limited to 'include')
-rw-r--r-- | include/meson.build | 7 | ||||
-rw-r--r-- | include/net.h | 20 | ||||
-rw-r--r-- | include/protocol.h | 137 | ||||
-rw-r--r-- | include/utils.h | 22 |
4 files changed, 182 insertions, 4 deletions
diff --git a/include/meson.build b/include/meson.build new file mode 100644 index 0000000..33e9426 --- /dev/null +++ b/include/meson.build @@ -0,0 +1,7 @@ +header_filenames = [ + 'utils.h', + 'net.h', + 'protocol.h' +] + +fw_headers = files(header_filenames) diff --git a/include/net.h b/include/net.h index ce8c8e2..e4ca0a6 100644 --- a/include/net.h +++ b/include/net.h @@ -19,8 +19,8 @@ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA */ -#ifndef NET_H_INCLUDED -#define NET_H_INCLUDED +#ifndef USURPATION_NET_H_INCLUDED +#define USURPATION_NET_H_INCLUDED #define MTU 1500 @@ -33,9 +33,21 @@ enum response { TMPFILE, }; - +/** + * Initialises a listening socket and returns the associated network descriptor. + */ int net_init(const unsigned short int port); + +/** + * Closes connection associated with network descriptor. + */ int net_close(int nd); + +/** + * Get last data received from connection associated with network descriptor. + * If the pointer pointed by data is NULL, a buffer is allocated by the function + * and needs to be free()'d later. Otherwise, the supplied buffer is reused. + */ int net_getlastdata(int nd, char ** const data); -#endif /* NET_H_INCLUDED */ +#endif /* USURPATION_NET_H_INCLUDED */ diff --git a/include/protocol.h b/include/protocol.h new file mode 100644 index 0000000..34ad4a3 --- /dev/null +++ b/include/protocol.h @@ -0,0 +1,137 @@ +/* + * 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 + */ + +#ifndef USURPATION_PROTOCOL_H_INCLUDED +#define USURPATION_PROTOCOL_H_INCLUDED + +#include <errno.h> + +#define E_TLV_OVERFLOW (1 << 0) +#define E_UNKNOWN_TYPE (1 << 1) +#define E_IVALID_DESCRIPTOR (1 << 2) +#define END_OF_PACKET (1 << 3) + +/** + * Regular packets contain tlv's defined by tlv_type. + * + * Hearbeat packet tell daemon that device is still alive and listening. + * + * Discovery packets are used for what they say. + */ +enum packet_type { + REGURAL, + HEARTBEAT, + DISCOVERY +}; + +/** + * Message sequence number since beggining of sesssion. + * + * Mainly used for identifying lost messages. + */ +typedef unsigned int msg_idx_t; + +enum tlv_type { + /** + * NULL-terminated string. To be put in a queue to display on the + * screen. + */ + TEXT, + + /** Fixed point. 1 decimal digit of precision. */ + FPI1, + + /** Literally time_t */ + TIMESTAMP, + + /** Represents a request for lost message. Data is unsigned integer + * that uniquely identifies the message. + */ + REQUEST, + + /** + * Response to request. Begins with unsigned integer that represents + * which message is being repeated and the actual null-terminated + * message after that. + */ + REPLY, + + /** + * UUID that represents a particular device. + */ + UUID +}; + +/** + * Packet data itself is a special type of tlv. A packet is either regular, + * hearbeat or discovery. + * + * May be used to send data. + */ +struct tlv_packet { + enum packet_type type; + size_t size; + size_t offset; + char *data; /* Bytes representing tlv's */ +}; + +/** + * Literally type-length-value + * */ +struct tlv { + enum tlv_type type; + size_t length; + void *data; +}; + +struct tlv_parser { + char *data; + size_t offset; + size_t size; +}; + +int get_tlv(struct tlv_parser *parser, struct tlv *ret); + +/** + * Appends data to the next packet to be sent. Type of data is determined by + * enum tlv_type. + * + * In case of overflow return E_TLV_OVERFLOW. + * + * On next call after retreiving last packet returns END_OF_PACKET. + * + * Overflow can be detected after forming tlv header. This means that the + * packet may have changes. + * */ +int push_data(struct tlv_packet *packet, enum tlv_type type, char *data); + + +/** + * Resets offset to 0 and set entire buffer to 0. + */ +void clear_data(struct tlv_packet *packet); + + +/** + * Tells what size of buffer is needed for next tlv. + */ +size_t tlv_data_size(struct tlv_parser *parser); + +#endif /* USURPATION_PROTOCOL_H_INCLUDED */ diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..95b553d --- /dev/null +++ b/include/utils.h @@ -0,0 +1,22 @@ +#ifndef USURPATION_UTILS_H +#define USURPATION_UTILS_H + +#include <stdint.h> + +typedef struct uuid_s { + char bytes[16]; +} uuid_t; + +int cmp_uuid(uuid_t *first, uuid_t *second); + +/** + * Fixed point number with one decimal digit of precision. + */ +typedef int fpi1_t; + +fpi1_t fpi1_add(fpi1_t a, fpi1_t b); +fpi1_t fpi1_sub(fpi1_t a, fpi1_t b); +fpi1_t fpi1_mul(fpi1_t a, fpi1_t b); +fpi1_t fpi1_div(fpi1_t a, fpi1_t b); + +#endif /* USURPATION_UTILS_H */ |