diff options
author | 2019-05-26 14:55:36 +0300 | |
---|---|---|
committer | 2019-05-26 14:55:36 +0300 | |
commit | 03d020c10113db431efeb6ae0d3380b2553387ac (patch) | |
tree | 6dc073fa8ecdb015b0cd3a7ab92b9b66001bdd89 /include/protocol.h | |
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/protocol.h')
-rw-r--r-- | include/protocol.h | 137 |
1 files changed, 137 insertions, 0 deletions
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 */ |