| /******************************************************************************* | |
| * Copyright (c) 2014 IBM Corp. | |
| * | |
| * All rights reserved. This program and the accompanying materials | |
| * are made available under the terms of the Eclipse Public License v1.0 | |
| * and Eclipse Distribution License v1.0 which accompany this distribution. | |
| * | |
| * The Eclipse Public License is available at | |
| * http://www.eclipse.org/legal/epl-v10.html | |
| * and the Eclipse Distribution License is available at | |
| * http://www.eclipse.org/org/documents/edl-v10.php. | |
| * | |
| * Contributors: | |
| * Ian Craggs - initial API and implementation and/or initial documentation | |
| * Xiang Rong - 442039 Add makefile to Embedded C client | |
| *******************************************************************************/ | |
| #ifndef MQTTPACKET_H_ | |
| #define MQTTPACKET_H_ | |
| #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ | |
| extern "C" { | |
| #endif | |
| #if defined(WIN32_DLL) || defined(WIN64_DLL) | |
| #define DLLImport __declspec(dllimport) | |
| #define DLLExport __declspec(dllexport) | |
| #elif defined(LINUX_SO) | |
| #define DLLImport extern | |
| #define DLLExport __attribute__ ((visibility ("default"))) | |
| #else | |
| #define DLLImport | |
| #define DLLExport | |
| #endif | |
| enum errors | |
| { | |
| MQTTPACKET_BUFFER_TOO_SHORT = -2, | |
| MQTTPACKET_READ_ERROR = -1, | |
| MQTTPACKET_READ_COMPLETE | |
| }; | |
| enum msgTypes | |
| { | |
| CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, | |
| PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, | |
| PINGREQ, PINGRESP, DISCONNECT | |
| }; | |
| /** | |
| * Bitfields for the MQTT header byte. | |
| */ | |
| typedef union | |
| { | |
| unsigned char byte; /**< the whole byte */ | |
| #if defined(REVERSED) | |
| struct | |
| { | |
| unsigned int type : 4; /**< message type nibble */ | |
| unsigned int dup : 1; /**< DUP flag bit */ | |
| unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ | |
| unsigned int retain : 1; /**< retained flag bit */ | |
| } bits; | |
| #else | |
| struct | |
| { | |
| unsigned int retain : 1; /**< retained flag bit */ | |
| unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ | |
| unsigned int dup : 1; /**< DUP flag bit */ | |
| unsigned int type : 4; /**< message type nibble */ | |
| } bits; | |
| #endif | |
| } MQTTHeader; | |
| typedef struct | |
| { | |
| int len; | |
| char* data; | |
| } MQTTLenString; | |
| typedef struct | |
| { | |
| char* cstring; | |
| MQTTLenString lenstring; | |
| } MQTTString; | |
| #define MQTTString_initializer {NULL, {0, NULL}} | |
| int MQTTstrlen(MQTTString mqttstring); | |
| #include "MQTTConnect.h" | |
| #include "MQTTPublish.h" | |
| #include "MQTTSubscribe.h" | |
| #include "MQTTUnsubscribe.h" | |
| #include "MQTTFormat.h" | |
| int MQTTSerialize_ack(unsigned char* buf, int buflen, unsigned char type, unsigned char dup, unsigned short packetid); | |
| int MQTTDeserialize_ack(unsigned char* packettype, unsigned char* dup, unsigned short* packetid, unsigned char* buf, int buflen); | |
| int MQTTPacket_len(int rem_len); | |
| int MQTTPacket_equals(MQTTString* a, char* b); | |
| int MQTTPacket_encode(unsigned char* buf, int length); | |
| int MQTTPacket_decode(int (*getcharfn)(unsigned char*, int), int* value); | |
| int MQTTPacket_decodeBuf(unsigned char* buf, int* value); | |
| int readInt(unsigned char** pptr); | |
| char readChar(unsigned char** pptr); | |
| void writeChar(unsigned char** pptr, char c); | |
| void writeInt(unsigned char** pptr, int anInt); | |
| int readMQTTLenString(MQTTString* mqttstring, unsigned char** pptr, unsigned char* enddata); | |
| void writeCString(unsigned char** pptr, const char* string); | |
| void writeMQTTString(unsigned char** pptr, MQTTString mqttstring); | |
| DLLExport int MQTTPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); | |
| typedef struct { | |
| int (*getfn)(void *, unsigned char*, int); /* must return -1 for error, 0 for call again, or the number of bytes read */ | |
| void *sck; /* pointer to whatever the system may use to identify the transport */ | |
| int multiplier; | |
| int rem_len; | |
| int len; | |
| char state; | |
| }MQTTTransport; | |
| int MQTTPacket_readnb(unsigned char* buf, int buflen, MQTTTransport *trp); | |
| #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ | |
| } | |
| #endif | |
| #endif /* MQTTPACKET_H_ */ |