summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
Diffstat (limited to 'include')
-rw-r--r--include/meson.build7
-rw-r--r--include/net.h24
-rw-r--r--include/protocol.h137
-rw-r--r--include/utils.h22
4 files changed, 184 insertions, 6 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 34f557a..e4ca0a6 100644
--- a/include/net.h
+++ b/include/net.h
@@ -19,10 +19,10 @@
* 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 dgsize 512
+#define MTU 1500
enum response {
ERROR = -1,
@@ -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);
-int net_getlastdata(int nd, char * const data);
-#endif /* NET_H_INCLUDED */
+/**
+ * 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 /* 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 */