/* * 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 PROTOCOL_H_INCLUDED #define PROTOCOL_H_INCLUDED #include #define E_TLV_OVERFLOW (1 << 0) #define E_UNKNOWN_TYPE (1 << 1) enum packet_type { REGURAL, HEARTBEAT, DISCOVERY }; enum tlv_type { /** NULL-terminated string. */ 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 }; 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. * */ int push_data(const char *data, enum tlv_type); /* Sends packet towards the other end. * */ void flush_data(void); #endif /* PROTOCOL_H_INCLUDED */