Low level MQTTSN packet library, part of the Eclipse Paho project: http://eclipse.org/paho
Dependents: MQTTSN sara-n200-hello-mqtt-sn MQTTSN_2
The master source for this project is held at: https://github.com/eclipse/paho.mqtt-sn.embedded-c
MQTTSNPacket.h
- Committer:
- icraggs
- Date:
- 2015-02-26
- Revision:
- 0:c524a894b5e8
- Child:
- 1:7fa362fa563f
File content as of revision 0:c524a894b5e8:
/******************************************************************************* * 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 *******************************************************************************/ #ifndef MQTTSNPACKET_H_ #define MQTTSNPACKET_H_ #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ extern "C" { #endif enum errors { MQTTSNPACKET_BUFFER_TOO_SHORT = -2, MQTTSNPACKET_READ_ERROR = -1, MQTTSNPACKET_READ_COMPLETE, }; #define MQTTSN_PROTOCOL_VERSION 0x01 enum MQTTSN_connackCodes { MQTTSN_RC_ACCEPTED, MQTTSN_RC_REJECTED_CONGESTED, MQTTSN_RC_REJECTED_INVALID_TOPIC_ID, }; enum MQTTSN_topicTypes { MQTTSN_TOPIC_TYPE_NORMAL, /* topic id in publish, topic name in subscribe */ MQTTSN_TOPIC_TYPE_PREDEFINED, MQTTSN_TOPIC_TYPE_SHORT, }; enum MQTTSN_msgTypes { MQTTSN_ADVERTISE, MQTTSN_SEARCHGW, MQTTSN_GWINFO, MQTTSN_RESERVED1, MQTTSN_CONNECT, MQTTSN_CONNACK, MQTTSN_WILLTOPICREQ, MQTTSN_WILLTOPIC, MQTTSN_WILLMSGREQ, MQTTSN_WILLMSG, MQTTSN_REGISTER, MQTTSN_REGACK, MQTTSN_PUBLISH, MQTTSN_PUBACK, MQTTSN_PUBCOMP, MQTTSN_PUBREC, MQTTSN_PUBREL, MQTTSN_RESERVED2, MQTTSN_SUBSCRIBE, MQTTSN_SUBACK, MQTTSN_UNSUBSCRIBE, MQTTSN_UNSUBACK, MQTTSN_PINGREQ, MQTTSN_PINGRESP, MQTTSN_DISCONNECT, MQTTSN_RESERVED3, MQTTSN_WILLTOPICUPD, MQTTSN_WILLTOPICRESP, MQTTSN_WILLMSGUPD, MQTTSN_WILLMSGRESP, }; typedef struct { enum MQTTSN_topicTypes type; union { unsigned short id; char short_name[2]; struct { char* name; int len; } long_; } data; } MQTTSN_topicid; /** * Bitfields for the MQTT-SN flags byte. */ typedef union { unsigned char all; #if defined(REVERSED) struct { int dup: 1; unsigned int QoS : 2; unsigned int retain : 1; unsigned int will : 1; unsigned int cleanSession : 1; unsigned int topicIdType : 2; } bits; #else struct { unsigned int topicIdType : 2; unsigned int cleanSession : 1; unsigned int will : 1; unsigned int retain : 1; unsigned int QoS : 2; int dup: 1; } bits; #endif } MQTTSNFlags; typedef struct { int len; char* data; } MQTTSNLenString; typedef struct { char* cstring; MQTTSNLenString lenstring; } MQTTSNString; #define MQTTSNString_initializer {NULL, {0, NULL}} int MQTTSNstrlen(MQTTSNString mqttsnstring); #include "MQTTSNConnect.h" #include "MQTTSNPublish.h" #include "MQTTSNSubscribe.h" #include "MQTTSNUnsubscribe.h" #include "MQTTSNSearch.h" char* MQTTSNPacket_name(int ptype); int MQTTSNPacket_len(int length); int MQTTSNPacket_encode(unsigned char* buf, int length); int MQTTSNPacket_decode(unsigned char* buf, int buflen, 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 readMQTTSNString(MQTTSNString* mqttstring, unsigned char** pptr, unsigned char* enddata); void writeCString(unsigned char** pptr, char* string); void writeMQTTSNString(unsigned char** pptr, MQTTSNString mqttstring); int MQTTSNPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ } #endif #endif /* MQTTSNPACKET_H_ */