diff options
Diffstat (limited to 'src/packet.h')
| -rw-r--r-- | src/packet.h | 123 |
1 files changed, 123 insertions, 0 deletions
diff --git a/src/packet.h b/src/packet.h new file mode 100644 index 0000000..0f7b17e --- /dev/null +++ b/src/packet.h @@ -0,0 +1,123 @@ +#ifndef PACKET_H +#define PACKET_H + +#include <stdlib.h> +#include <stdint.h> +#include <assert.h> + +#include "stringbuf.h" + +#include "queue.h" + +enum +{ + MqttPacketTypeConnect = 0x1, + MqttPacketTypeConnAck = 0x2, + MqttPacketTypePublish = 0x3, + MqttPacketTypePubAck = 0x4, + MqttPacketTypePubRec = 0x5, + MqttPacketTypePubRel = 0x6, + MqttPacketTypePubComp = 0x7, + MqttPacketTypeSubscribe = 0x8, + MqttPacketTypeSubAck = 0x9, + MqttPacketTypeUnsubscribe = 0xA, + MqttPacketTypeUnsubAck = 0xB, + MqttPacketTypePingReq = 0xC, + MqttPacketTypePingResp = 0xD, + MqttPacketTypeDisconnect = 0xE +}; + +typedef struct MqttPacket MqttPacket; + +struct MqttPacket +{ + int type; + uint16_t id; + int state; + int flags; + int64_t sentAt; + SIMPLEQ_ENTRY(MqttPacket) sendQueue; + TAILQ_ENTRY(MqttPacket) messages; +}; + +#define MqttPacketType(packet) (((MqttPacket *) (packet))->type) + +#define MqttPacketId(packet) (((MqttPacket *) (packet))->id) + +#define MqttPacketSentAt(packet) (((MqttPacket *) (packet))->sentAt) + +typedef struct MqttPacketConnect MqttPacketConnect; + +struct MqttPacketConnect +{ + MqttPacket base; + char connectFlags; + uint16_t keepAlive; + StringBuf clientId; + StringBuf willTopic; + StringBuf willMessage; + StringBuf userName; + StringBuf password; +}; + +typedef struct MqttPacketConnAck MqttPacketConnAck; + +struct MqttPacketConnAck +{ + MqttPacket base; + unsigned char connAckFlags; + unsigned char returnCode; +}; + +typedef struct MqttPacketPublish MqttPacketPublish; + +struct MqttPacketPublish +{ + MqttPacket base; + StringBuf topicName; + StringBuf message; + char qos; + char dup; + char retain; +}; + +#define MqttPacketPublishQos(p) (((MqttPacketPublish *) p)->qos) +#define MqttPacketPublishDup(p) (((MqttPacketPublish *) p)->dup) +#define MqttPacketPublishRetain(p) (((MqttPacketPublish *) p)->retain) + +typedef struct MqttPacketSubscribe MqttPacketSubscribe; + +struct MqttPacketSubscribe +{ + MqttPacket base; + StringBuf topicFilter; + char qos; +}; + +typedef struct MqttPacketSubAck MqttPacketSubAck; + +struct MqttPacketSubAck +{ + MqttPacket base; + unsigned char returnCode; +}; + +typedef struct MqttPacketUnsubscribe MqttPacketUnsubscribe; + +struct MqttPacketUnsubscribe +{ + MqttPacket base; + StringBuf topicFilter; +}; + +const char *MqttPacketName(int type); + +MqttPacket *MqttPacketNew(int type); + +MqttPacket *MqttPacketWithIdNew(int type, uint16_t id); + +void MqttPacketFree(MqttPacket *packet); + +int MqttPacketHasId(const MqttPacket *packet); + +#endif |
