Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MQTTGWPacket.h
00001 /******************************************************************************* 00002 * Copyright (c) 2009, 2014 IBM Corp. 00003 * 00004 * All rights reserved. This program and the accompanying materials 00005 * are made available under the terms of the Eclipse Public License v1.0 00006 * and Eclipse Distribution License v1.0 which accompany this distribution. 00007 * 00008 * The Eclipse Public License is available at 00009 * http://www.eclipse.org/legal/epl-v10.html 00010 * and the Eclipse Distribution License is available at 00011 * http://www.eclipse.org/org/documents/edl-v10.php. 00012 * 00013 * Contributors: 00014 * Ian Craggs - initial API and implementation and/or initial documentation 00015 * Ian Craggs, Allan Stockdill-Mander - SSL updates 00016 * Ian Craggs - MQTT 3.1.1 support 00017 * Tomoaki Yamaguchi - modify codes for MATT-SN Gateway 00018 *******************************************************************************/ 00019 00020 #ifndef MQTTGWPACKET_H_ 00021 #define MQTTGWPACKET_H_ 00022 00023 #include "Network.h" 00024 00025 namespace MQTTSNGW 00026 { 00027 00028 typedef void* (*pf)(unsigned char, char*, size_t); 00029 00030 #define BAD_MQTT_PACKET -4 00031 00032 enum msgTypes 00033 { 00034 CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL, 00035 PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK, 00036 PINGREQ, PINGRESP, DISCONNECT 00037 }; 00038 00039 00040 /** 00041 * Bitfields for the MQTT header byte. 00042 */ 00043 typedef union 00044 { 00045 /*unsigned*/ char byte; /**< the whole byte */ 00046 #if defined(REVERSED) 00047 struct 00048 { 00049 unsigned int type : 4; /**< message type nibble */ 00050 bool dup : 1; /**< DUP flag bit */ 00051 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ 00052 bool retain : 1; /**< retained flag bit */ 00053 } bits; 00054 #else 00055 struct 00056 { 00057 bool retain : 1; /**< retained flag bit */ 00058 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */ 00059 bool dup : 1; /**< DUP flag bit */ 00060 unsigned int type : 4; /**< message type nibble */ 00061 } bits; 00062 #endif 00063 } Header; 00064 00065 00066 /** 00067 * Data for a connect packet. 00068 */ 00069 00070 enum MQTT_connackCodes{ 00071 MQTT_CONNECTION_ACCEPTED , 00072 MQTT_UNACCEPTABLE_PROTOCOL_VERSION, 00073 MQTT_IDENTIFIER_REJECTED, 00074 MQTT_SERVER_UNAVAILABLE, 00075 MQTT_BAD_USERNAME_OR_PASSWORD, 00076 MQTT_NOT_AUTHORIZED 00077 }; 00078 00079 typedef struct 00080 { 00081 Header header; /**< MQTT header byte */ 00082 union 00083 { 00084 unsigned char all; /**< all connect flags */ 00085 #if defined(REVERSED) 00086 struct 00087 { 00088 bool username : 1; /**< 3.1 user name */ 00089 bool password : 1; /**< 3.1 password */ 00090 bool willRetain : 1; /**< will retain setting */ 00091 unsigned int willQoS : 2; /**< will QoS value */ 00092 bool will : 1; /**< will flag */ 00093 bool cleanstart : 1; /**< cleansession flag */ 00094 int : 1; /**< unused */ 00095 } bits; 00096 #else 00097 struct 00098 { 00099 int : 1; /**< unused */ 00100 bool cleanstart : 1; /**< cleansession flag */ 00101 bool will : 1; /**< will flag */ 00102 unsigned int willQoS : 2; /**< will QoS value */ 00103 bool willRetain : 1; /**< will retain setting */ 00104 bool password : 1; /**< 3.1 password */ 00105 bool username : 1; /**< 3.1 user name */ 00106 } bits; 00107 #endif 00108 } flags; /**< connect flags byte */ 00109 00110 char *Protocol, /**< MQTT protocol name */ 00111 *clientID, /**< string client id */ 00112 *willTopic, /**< will topic */ 00113 *willMsg; /**< will payload */ 00114 00115 int keepAliveTimer; /**< keepalive timeout value in seconds */ 00116 unsigned char version; /**< MQTT version number */ 00117 } Connect; 00118 00119 #define MQTTPacket_Connect_Initializer {{0}, 0, nullptr, nullptr, nullptr, nullptr, 0, 0} 00120 #define MQTTPacket_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 } 00121 #define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \ 00122 MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} } 00123 00124 00125 00126 /** 00127 * Data for a willMessage. 00128 */ 00129 typedef struct 00130 { 00131 char* topic; 00132 char* msg; 00133 int retained; 00134 int qos; 00135 }willMessages; 00136 00137 /** 00138 * Data for a connack packet. 00139 */ 00140 typedef struct 00141 { 00142 Header header; /**< MQTT header byte */ 00143 union 00144 { 00145 unsigned char all; /**< all connack flags */ 00146 #if defined(REVERSED) 00147 struct 00148 { 00149 unsigned int reserved : 7; /**< message type nibble */ 00150 bool sessionPresent : 1; /**< was a session found on the server? */ 00151 } bits; 00152 #else 00153 struct 00154 { 00155 bool sessionPresent : 1; /**< was a session found on the server? */ 00156 unsigned int reserved : 7; /**< message type nibble */ 00157 } bits; 00158 #endif 00159 } flags; /**< connack flags byte */ 00160 char rc; /**< connack return code */ 00161 } Connack; 00162 00163 00164 /** 00165 * Data for a publish packet. 00166 */ 00167 typedef struct 00168 { 00169 Header header; /**< MQTT header byte */ 00170 char* topic; /**< topic string */ 00171 int topiclen; 00172 int msgId; /**< MQTT message id */ 00173 char* payload; /**< binary payload, length delimited */ 00174 int payloadlen; /**< payload length */ 00175 } Publish; 00176 00177 #define MQTTPacket_Publish_Initializer {{0}, nullptr, 0, 0, nullptr, 0} 00178 00179 /** 00180 * Data for one of the ack packets. 00181 */ 00182 typedef struct 00183 { 00184 Header header; /**< MQTT header byte */ 00185 int msgId; /**< MQTT message id */ 00186 } Ack; 00187 00188 /** 00189 * UTF8String. 00190 */ 00191 typedef struct 00192 { 00193 unsigned char len; 00194 char* data; 00195 } UTF8String; 00196 00197 /** 00198 * Class MQTT Packet 00199 */ 00200 class MQTTGWPacket 00201 { 00202 public: 00203 MQTTGWPacket(); 00204 ~MQTTGWPacket(); 00205 int recv(Network* network); 00206 int send(Network* network); 00207 int getType(void); 00208 int getPacketData(unsigned char* buf); 00209 int getPacketLength(void); 00210 const char* getName(void); 00211 00212 int getAck(Ack* ack); 00213 int getCONNACK(Connack* resp); 00214 int getSUBACK(unsigned short* msgId, unsigned char* rc); 00215 int getPUBLISH(Publish* pub); 00216 00217 int setCONNECT(Connect* conect, unsigned char* username, unsigned char* password); 00218 int setPUBLISH(Publish* pub); 00219 int setAck(unsigned char msgType, unsigned short msgid); 00220 int setHeader(unsigned char msgType); 00221 int setSUBSCRIBE(const char* topic, unsigned char qos, unsigned short msgId); 00222 int setUNSUBSCRIBE(const char* topics, unsigned short msgid); 00223 00224 UTF8String getTopic(void); 00225 char* getMsgId(char* buf); 00226 int getMsgId(void); 00227 void setMsgId(int msgId); 00228 char* print(char* buf); 00229 MQTTGWPacket& operator =(MQTTGWPacket& packet); 00230 00231 private: 00232 void clearData(void); 00233 Header _header; 00234 int _remainingLength; 00235 unsigned char* _data; 00236 }; 00237 00238 } 00239 00240 #endif /* MQTTGWPACKET_H_ */
Generated on Mon Feb 13 2023 09:41:22 by
1.7.2