123
MQTTSNPacket.h@1:7fa362fa563f, 2016-01-06 (annotated)
- Committer:
- icraggs
- Date:
- Wed Jan 06 14:19:27 2016 +0000
- Revision:
- 1:7fa362fa563f
- Parent:
- 0:c524a894b5e8
Internal function name changes to avoid name clashes
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
icraggs | 1:7fa362fa563f | 1 | /******************************************************************************* |
icraggs | 1:7fa362fa563f | 2 | * Copyright (c) 2014 IBM Corp. |
icraggs | 1:7fa362fa563f | 3 | * |
icraggs | 1:7fa362fa563f | 4 | * All rights reserved. This program and the accompanying materials |
icraggs | 1:7fa362fa563f | 5 | * are made available under the terms of the Eclipse Public License v1.0 |
icraggs | 1:7fa362fa563f | 6 | * and Eclipse Distribution License v1.0 which accompany this distribution. |
icraggs | 1:7fa362fa563f | 7 | * |
icraggs | 1:7fa362fa563f | 8 | * The Eclipse Public License is available at |
icraggs | 1:7fa362fa563f | 9 | * http://www.eclipse.org/legal/epl-v10.html |
icraggs | 1:7fa362fa563f | 10 | * and the Eclipse Distribution License is available at |
icraggs | 1:7fa362fa563f | 11 | * http://www.eclipse.org/org/documents/edl-v10.php. |
icraggs | 1:7fa362fa563f | 12 | * |
icraggs | 1:7fa362fa563f | 13 | * Contributors: |
icraggs | 1:7fa362fa563f | 14 | * Ian Craggs - initial API and implementation and/or initial documentation |
icraggs | 1:7fa362fa563f | 15 | *******************************************************************************/ |
icraggs | 1:7fa362fa563f | 16 | |
icraggs | 1:7fa362fa563f | 17 | #ifndef MQTTSNPACKET_H_ |
icraggs | 1:7fa362fa563f | 18 | #define MQTTSNPACKET_H_ |
icraggs | 1:7fa362fa563f | 19 | |
icraggs | 1:7fa362fa563f | 20 | #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */ |
icraggs | 1:7fa362fa563f | 21 | extern "C" { |
icraggs | 1:7fa362fa563f | 22 | #endif |
icraggs | 1:7fa362fa563f | 23 | |
icraggs | 1:7fa362fa563f | 24 | enum MQTTSN_errors |
icraggs | 1:7fa362fa563f | 25 | { |
icraggs | 1:7fa362fa563f | 26 | MQTTSNPACKET_BUFFER_TOO_SHORT = -2, |
icraggs | 1:7fa362fa563f | 27 | MQTTSNPACKET_READ_ERROR = -1, |
icraggs | 1:7fa362fa563f | 28 | MQTTSNPACKET_READ_COMPLETE, |
icraggs | 1:7fa362fa563f | 29 | }; |
icraggs | 1:7fa362fa563f | 30 | |
icraggs | 1:7fa362fa563f | 31 | #define MQTTSN_PROTOCOL_VERSION 0x01 |
icraggs | 1:7fa362fa563f | 32 | |
icraggs | 1:7fa362fa563f | 33 | enum MQTTSN_connackCodes |
icraggs | 1:7fa362fa563f | 34 | { |
icraggs | 1:7fa362fa563f | 35 | MQTTSN_RC_ACCEPTED, |
icraggs | 1:7fa362fa563f | 36 | MQTTSN_RC_REJECTED_CONGESTED, |
icraggs | 1:7fa362fa563f | 37 | MQTTSN_RC_REJECTED_INVALID_TOPIC_ID, |
icraggs | 1:7fa362fa563f | 38 | }; |
icraggs | 1:7fa362fa563f | 39 | |
icraggs | 1:7fa362fa563f | 40 | enum MQTTSN_topicTypes |
icraggs | 1:7fa362fa563f | 41 | { |
icraggs | 1:7fa362fa563f | 42 | MQTTSN_TOPIC_TYPE_NORMAL, /* topic id in publish, topic name in subscribe */ |
icraggs | 1:7fa362fa563f | 43 | MQTTSN_TOPIC_TYPE_PREDEFINED, |
icraggs | 1:7fa362fa563f | 44 | MQTTSN_TOPIC_TYPE_SHORT, |
icraggs | 1:7fa362fa563f | 45 | }; |
icraggs | 1:7fa362fa563f | 46 | |
icraggs | 1:7fa362fa563f | 47 | |
icraggs | 1:7fa362fa563f | 48 | enum MQTTSN_msgTypes |
icraggs | 1:7fa362fa563f | 49 | { |
icraggs | 1:7fa362fa563f | 50 | MQTTSN_ADVERTISE, MQTTSN_SEARCHGW, MQTTSN_GWINFO, MQTTSN_RESERVED1, |
icraggs | 1:7fa362fa563f | 51 | MQTTSN_CONNECT, MQTTSN_CONNACK, |
icraggs | 1:7fa362fa563f | 52 | MQTTSN_WILLTOPICREQ, MQTTSN_WILLTOPIC, MQTTSN_WILLMSGREQ, MQTTSN_WILLMSG, |
icraggs | 1:7fa362fa563f | 53 | MQTTSN_REGISTER, MQTTSN_REGACK, |
icraggs | 1:7fa362fa563f | 54 | MQTTSN_PUBLISH, MQTTSN_PUBACK, MQTTSN_PUBCOMP, MQTTSN_PUBREC, MQTTSN_PUBREL, MQTTSN_RESERVED2, |
icraggs | 1:7fa362fa563f | 55 | MQTTSN_SUBSCRIBE, MQTTSN_SUBACK, MQTTSN_UNSUBSCRIBE, MQTTSN_UNSUBACK, |
icraggs | 1:7fa362fa563f | 56 | MQTTSN_PINGREQ, MQTTSN_PINGRESP, |
icraggs | 1:7fa362fa563f | 57 | MQTTSN_DISCONNECT, MQTTSN_RESERVED3, |
icraggs | 1:7fa362fa563f | 58 | MQTTSN_WILLTOPICUPD, MQTTSN_WILLTOPICRESP, MQTTSN_WILLMSGUPD, MQTTSN_WILLMSGRESP, |
icraggs | 1:7fa362fa563f | 59 | }; |
icraggs | 1:7fa362fa563f | 60 | |
icraggs | 1:7fa362fa563f | 61 | typedef struct |
icraggs | 1:7fa362fa563f | 62 | { |
icraggs | 1:7fa362fa563f | 63 | enum MQTTSN_topicTypes type; |
icraggs | 1:7fa362fa563f | 64 | union |
icraggs | 1:7fa362fa563f | 65 | { |
icraggs | 1:7fa362fa563f | 66 | unsigned short id; |
icraggs | 1:7fa362fa563f | 67 | char short_name[2]; |
icraggs | 1:7fa362fa563f | 68 | struct |
icraggs | 1:7fa362fa563f | 69 | { |
icraggs | 1:7fa362fa563f | 70 | char* name; |
icraggs | 1:7fa362fa563f | 71 | int len; |
icraggs | 1:7fa362fa563f | 72 | } long_; |
icraggs | 1:7fa362fa563f | 73 | } data; |
icraggs | 1:7fa362fa563f | 74 | } MQTTSN_topicid; |
icraggs | 1:7fa362fa563f | 75 | |
icraggs | 0:c524a894b5e8 | 76 | |
icraggs | 1:7fa362fa563f | 77 | /** |
icraggs | 1:7fa362fa563f | 78 | * Bitfields for the MQTT-SN flags byte. |
icraggs | 1:7fa362fa563f | 79 | */ |
icraggs | 1:7fa362fa563f | 80 | typedef union |
icraggs | 1:7fa362fa563f | 81 | { |
icraggs | 1:7fa362fa563f | 82 | unsigned char all; |
icraggs | 1:7fa362fa563f | 83 | #if defined(REVERSED) |
icraggs | 1:7fa362fa563f | 84 | struct |
icraggs | 1:7fa362fa563f | 85 | { |
icraggs | 1:7fa362fa563f | 86 | int dup: 1; |
icraggs | 1:7fa362fa563f | 87 | unsigned int QoS : 2; |
icraggs | 1:7fa362fa563f | 88 | unsigned int retain : 1; |
icraggs | 1:7fa362fa563f | 89 | unsigned int will : 1; |
icraggs | 1:7fa362fa563f | 90 | unsigned int cleanSession : 1; |
icraggs | 1:7fa362fa563f | 91 | unsigned int topicIdType : 2; |
icraggs | 1:7fa362fa563f | 92 | } bits; |
icraggs | 1:7fa362fa563f | 93 | #else |
icraggs | 1:7fa362fa563f | 94 | struct |
icraggs | 1:7fa362fa563f | 95 | { |
icraggs | 1:7fa362fa563f | 96 | unsigned int topicIdType : 2; |
icraggs | 1:7fa362fa563f | 97 | unsigned int cleanSession : 1; |
icraggs | 1:7fa362fa563f | 98 | unsigned int will : 1; |
icraggs | 1:7fa362fa563f | 99 | unsigned int retain : 1; |
icraggs | 1:7fa362fa563f | 100 | unsigned int QoS : 2; |
icraggs | 1:7fa362fa563f | 101 | int dup: 1; |
icraggs | 1:7fa362fa563f | 102 | } bits; |
icraggs | 1:7fa362fa563f | 103 | #endif |
icraggs | 1:7fa362fa563f | 104 | } MQTTSNFlags; |
icraggs | 1:7fa362fa563f | 105 | |
icraggs | 1:7fa362fa563f | 106 | |
icraggs | 1:7fa362fa563f | 107 | typedef struct |
icraggs | 1:7fa362fa563f | 108 | { |
icraggs | 1:7fa362fa563f | 109 | int len; |
icraggs | 1:7fa362fa563f | 110 | char* data; |
icraggs | 1:7fa362fa563f | 111 | } MQTTSNLenString; |
icraggs | 1:7fa362fa563f | 112 | |
icraggs | 1:7fa362fa563f | 113 | typedef struct |
icraggs | 1:7fa362fa563f | 114 | { |
icraggs | 1:7fa362fa563f | 115 | char* cstring; |
icraggs | 1:7fa362fa563f | 116 | MQTTSNLenString lenstring; |
icraggs | 1:7fa362fa563f | 117 | } MQTTSNString; |
icraggs | 1:7fa362fa563f | 118 | |
icraggs | 1:7fa362fa563f | 119 | #define MQTTSNString_initializer {NULL, {0, NULL}} |
icraggs | 1:7fa362fa563f | 120 | |
icraggs | 1:7fa362fa563f | 121 | int MQTTSNstrlen(MQTTSNString mqttsnstring); |
icraggs | 1:7fa362fa563f | 122 | |
icraggs | 1:7fa362fa563f | 123 | #include "MQTTSNConnect.h" |
icraggs | 1:7fa362fa563f | 124 | #include "MQTTSNPublish.h" |
icraggs | 1:7fa362fa563f | 125 | #include "MQTTSNSubscribe.h" |
icraggs | 1:7fa362fa563f | 126 | #include "MQTTSNUnsubscribe.h" |
icraggs | 1:7fa362fa563f | 127 | #include "MQTTSNSearch.h" |
icraggs | 1:7fa362fa563f | 128 | |
icraggs | 1:7fa362fa563f | 129 | char* MQTTSNPacket_name(int ptype); |
icraggs | 1:7fa362fa563f | 130 | int MQTTSNPacket_len(int length); |
icraggs | 1:7fa362fa563f | 131 | |
icraggs | 1:7fa362fa563f | 132 | int MQTTSNPacket_encode(unsigned char* buf, int length); |
icraggs | 1:7fa362fa563f | 133 | int MQTTSNPacket_decode(unsigned char* buf, int buflen, int* value); |
icraggs | 1:7fa362fa563f | 134 | |
icraggs | 1:7fa362fa563f | 135 | int MQTTSNPacket_readInt(unsigned char** pptr); |
icraggs | 1:7fa362fa563f | 136 | char MQTTSNPacket_readChar(unsigned char** pptr); |
icraggs | 1:7fa362fa563f | 137 | void MQTTSNPacket_writeChar(unsigned char** pptr, char c); |
icraggs | 1:7fa362fa563f | 138 | void MQTTSNPacket_writeInt(unsigned char** pptr, int anInt); |
icraggs | 1:7fa362fa563f | 139 | int readMQTTSNString(MQTTSNString* mqttstring, unsigned char** pptr, unsigned char* enddata); |
icraggs | 1:7fa362fa563f | 140 | void MQTTSNPacket_writeCString(unsigned char** pptr, char* string); |
icraggs | 1:7fa362fa563f | 141 | void writeMQTTSNString(unsigned char** pptr, MQTTSNString mqttstring); |
icraggs | 1:7fa362fa563f | 142 | |
icraggs | 1:7fa362fa563f | 143 | int MQTTSNPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int)); |
icraggs | 1:7fa362fa563f | 144 | |
icraggs | 1:7fa362fa563f | 145 | #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */ |
icraggs | 1:7fa362fa563f | 146 | } |
icraggs | 1:7fa362fa563f | 147 | #endif |
icraggs | 1:7fa362fa563f | 148 | |
icraggs | 1:7fa362fa563f | 149 | |
icraggs | 1:7fa362fa563f | 150 | #endif /* MQTTSNPACKET_H_ */ |
icraggs | 1:7fa362fa563f | 151 |