mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-17 01:16:52 +01:00
@@ -31,89 +31,100 @@ typedef void* (*pf)(unsigned char, char*, size_t);
|
||||
|
||||
enum msgTypes
|
||||
{
|
||||
CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL,
|
||||
PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK,
|
||||
PINGREQ, PINGRESP, DISCONNECT
|
||||
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 */
|
||||
/*unsigned*/
|
||||
char byte; /**< the whole byte */
|
||||
#if defined(REVERSED)
|
||||
struct
|
||||
{
|
||||
unsigned int type : 4; /**< message type nibble */
|
||||
bool dup : 1; /**< DUP flag bit */
|
||||
unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
|
||||
bool retain : 1; /**< retained flag bit */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
unsigned int type : 4; /**< message type nibble */
|
||||
bool dup : 1; /**< DUP flag bit */
|
||||
unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
|
||||
bool retain : 1; /**< retained flag bit */
|
||||
}bits;
|
||||
#else
|
||||
struct
|
||||
{
|
||||
bool retain : 1; /**< retained flag bit */
|
||||
unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
|
||||
bool dup : 1; /**< DUP flag bit */
|
||||
unsigned int type : 4; /**< message type nibble */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
bool retain :1; /**< retained flag bit */
|
||||
unsigned int qos :2; /**< QoS value, 0, 1 or 2 */
|
||||
bool dup :1; /**< DUP flag bit */
|
||||
unsigned int type :4; /**< message type nibble */
|
||||
} bits;
|
||||
#endif
|
||||
} Header;
|
||||
|
||||
|
||||
/**
|
||||
* Data for a connect packet.
|
||||
*/
|
||||
|
||||
enum MQTT_connackCodes{
|
||||
MQTT_CONNECTION_ACCEPTED ,
|
||||
MQTT_UNACCEPTABLE_PROTOCOL_VERSION,
|
||||
MQTT_IDENTIFIER_REJECTED,
|
||||
MQTT_SERVER_UNAVAILABLE,
|
||||
MQTT_BAD_USERNAME_OR_PASSWORD,
|
||||
MQTT_NOT_AUTHORIZED
|
||||
enum MQTT_connackCodes
|
||||
{
|
||||
MQTT_CONNECTION_ACCEPTED,
|
||||
MQTT_UNACCEPTABLE_PROTOCOL_VERSION,
|
||||
MQTT_IDENTIFIER_REJECTED,
|
||||
MQTT_SERVER_UNAVAILABLE,
|
||||
MQTT_BAD_USERNAME_OR_PASSWORD,
|
||||
MQTT_NOT_AUTHORIZED
|
||||
};
|
||||
|
||||
typedef struct
|
||||
{
|
||||
Header header; /**< MQTT header byte */
|
||||
union
|
||||
{
|
||||
unsigned char all; /**< all connect flags */
|
||||
Header header; /**< MQTT header byte */
|
||||
union
|
||||
{
|
||||
unsigned char all; /**< all connect flags */
|
||||
#if defined(REVERSED)
|
||||
struct
|
||||
{
|
||||
bool username : 1; /**< 3.1 user name */
|
||||
bool password : 1; /**< 3.1 password */
|
||||
bool willRetain : 1; /**< will retain setting */
|
||||
unsigned int willQoS : 2; /**< will QoS value */
|
||||
bool will : 1; /**< will flag */
|
||||
bool cleanstart : 1; /**< cleansession flag */
|
||||
int : 1; /**< unused */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
bool username : 1; /**< 3.1 user name */
|
||||
bool password : 1; /**< 3.1 password */
|
||||
bool willRetain : 1; /**< will retain setting */
|
||||
unsigned int willQoS : 2; /**< will QoS value */
|
||||
bool will : 1; /**< will flag */
|
||||
bool cleanstart : 1; /**< cleansession flag */
|
||||
int : 1; /**< unused */
|
||||
}bits;
|
||||
#else
|
||||
struct
|
||||
{
|
||||
int : 1; /**< unused */
|
||||
bool cleanstart : 1; /**< cleansession flag */
|
||||
bool will : 1; /**< will flag */
|
||||
unsigned int willQoS : 2; /**< will QoS value */
|
||||
bool willRetain : 1; /**< will retain setting */
|
||||
bool password : 1; /**< 3.1 password */
|
||||
bool username : 1; /**< 3.1 user name */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
int :1; /**< unused */
|
||||
bool cleanstart :1; /**< cleansession flag */
|
||||
bool will :1; /**< will flag */
|
||||
unsigned int willQoS :2; /**< will QoS value */
|
||||
bool willRetain :1; /**< will retain setting */
|
||||
bool password :1; /**< 3.1 password */
|
||||
bool username :1; /**< 3.1 user name */
|
||||
} bits;
|
||||
#endif
|
||||
} flags; /**< connect flags byte */
|
||||
} flags; /**< connect flags byte */
|
||||
|
||||
char *Protocol, /**< MQTT protocol name */
|
||||
*clientID, /**< string client id */
|
||||
*willTopic, /**< will topic */
|
||||
*willMsg; /**< will payload */
|
||||
char *Protocol, /**< MQTT protocol name */
|
||||
*clientID, /**< string client id */
|
||||
*willTopic, /**< will topic */
|
||||
*willMsg; /**< will payload */
|
||||
|
||||
int keepAliveTimer; /**< keepalive timeout value in seconds */
|
||||
unsigned char version; /**< MQTT version number */
|
||||
int keepAliveTimer; /**< keepalive timeout value in seconds */
|
||||
unsigned char version; /**< MQTT version number */
|
||||
} Connect;
|
||||
|
||||
#define MQTTPacket_Connect_Initializer {{0}, {0}, nullptr, nullptr, nullptr, nullptr, 0, 0}
|
||||
@@ -121,57 +132,54 @@ typedef struct
|
||||
#define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'C'}, 0, 4, {NULL, {0, NULL}}, 60, 1, 0, \
|
||||
MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} }
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* Data for a willMessage.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char* topic;
|
||||
char* msg;
|
||||
int retained;
|
||||
int qos;
|
||||
}willMessages;
|
||||
char* topic;
|
||||
char* msg;
|
||||
int retained;
|
||||
int qos;
|
||||
} willMessages;
|
||||
|
||||
/**
|
||||
* Data for a connack packet.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
Header header; /**< MQTT header byte */
|
||||
union
|
||||
{
|
||||
unsigned char all; /**< all connack flags */
|
||||
Header header; /**< MQTT header byte */
|
||||
union
|
||||
{
|
||||
unsigned char all; /**< all connack flags */
|
||||
#if defined(REVERSED)
|
||||
struct
|
||||
{
|
||||
unsigned int reserved : 7; /**< message type nibble */
|
||||
bool sessionPresent : 1; /**< was a session found on the server? */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
unsigned int reserved : 7; /**< message type nibble */
|
||||
bool sessionPresent : 1; /**< was a session found on the server? */
|
||||
}bits;
|
||||
#else
|
||||
struct
|
||||
{
|
||||
bool sessionPresent : 1; /**< was a session found on the server? */
|
||||
unsigned int reserved : 7; /**< message type nibble */
|
||||
} bits;
|
||||
struct
|
||||
{
|
||||
bool sessionPresent :1; /**< was a session found on the server? */
|
||||
unsigned int reserved :7; /**< message type nibble */
|
||||
} bits;
|
||||
#endif
|
||||
} flags; /**< connack flags byte */
|
||||
char rc; /**< connack return code */
|
||||
} flags; /**< connack flags byte */
|
||||
char rc; /**< connack return code */
|
||||
} Connack;
|
||||
|
||||
|
||||
/**
|
||||
* Data for a publish packet.
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
Header header; /**< MQTT header byte */
|
||||
char* topic; /**< topic string */
|
||||
int topiclen;
|
||||
int msgId; /**< MQTT message id */
|
||||
char* payload; /**< binary payload, length delimited */
|
||||
int payloadlen; /**< payload length */
|
||||
Header header; /**< MQTT header byte */
|
||||
char* topic; /**< topic string */
|
||||
int topiclen;
|
||||
int msgId; /**< MQTT message id */
|
||||
char* payload; /**< binary payload, length delimited */
|
||||
int payloadlen; /**< payload length */
|
||||
} Publish;
|
||||
|
||||
#define MQTTPacket_Publish_Initializer {{0}, nullptr, 0, 0, nullptr, 0}
|
||||
@@ -181,8 +189,8 @@ typedef struct
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
Header header; /**< MQTT header byte */
|
||||
int msgId; /**< MQTT message id */
|
||||
Header header; /**< MQTT header byte */
|
||||
int msgId; /**< MQTT message id */
|
||||
} Ack;
|
||||
|
||||
/**
|
||||
@@ -190,8 +198,8 @@ typedef struct
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
unsigned char len;
|
||||
char* data;
|
||||
unsigned char len;
|
||||
char* data;
|
||||
} UTF8String;
|
||||
|
||||
/**
|
||||
@@ -200,39 +208,41 @@ typedef struct
|
||||
class MQTTGWPacket
|
||||
{
|
||||
public:
|
||||
MQTTGWPacket();
|
||||
~MQTTGWPacket();
|
||||
int recv(Network* network);
|
||||
int send(Network* network);
|
||||
int getType(void);
|
||||
int getPacketData(unsigned char* buf);
|
||||
int getPacketLength(void);
|
||||
const char* getName(void);
|
||||
MQTTGWPacket();
|
||||
~MQTTGWPacket();
|
||||
int recv(Network* network);
|
||||
int send(Network* network);
|
||||
int getType(void);
|
||||
int getPacketData(unsigned char* buf);
|
||||
int getPacketLength(void);
|
||||
const char* getName(void);
|
||||
|
||||
int getAck(Ack* ack);
|
||||
int getCONNACK(Connack* resp);
|
||||
int getSUBACK(unsigned short* msgId, unsigned char* rc);
|
||||
int getPUBLISH(Publish* pub);
|
||||
int getAck(Ack* ack);
|
||||
int getCONNACK(Connack* resp);
|
||||
int getSUBACK(unsigned short* msgId, unsigned char* rc);
|
||||
int getPUBLISH(Publish* pub);
|
||||
|
||||
int setCONNECT(Connect* conect, unsigned char* username, unsigned char* password);
|
||||
int setPUBLISH(Publish* pub);
|
||||
int setAck(unsigned char msgType, unsigned short msgid);
|
||||
int setHeader(unsigned char msgType);
|
||||
int setSUBSCRIBE(const char* topic, unsigned char qos, unsigned short msgId);
|
||||
int setUNSUBSCRIBE(const char* topics, unsigned short msgid);
|
||||
int setCONNECT(Connect* conect, unsigned char* username,
|
||||
unsigned char* password);
|
||||
int setPUBLISH(Publish* pub);
|
||||
int setAck(unsigned char msgType, unsigned short msgid);
|
||||
int setHeader(unsigned char msgType);
|
||||
int setSUBSCRIBE(const char* topic, unsigned char qos,
|
||||
unsigned short msgId);
|
||||
int setUNSUBSCRIBE(const char* topics, unsigned short msgid);
|
||||
|
||||
UTF8String getTopic(void);
|
||||
char* getMsgId(char* buf);
|
||||
int getMsgId(void);
|
||||
void setMsgId(int msgId);
|
||||
char* print(char* buf);
|
||||
MQTTGWPacket& operator =(MQTTGWPacket& packet);
|
||||
UTF8String getTopic(void);
|
||||
char* getMsgId(char* buf);
|
||||
int getMsgId(void);
|
||||
void setMsgId(int msgId);
|
||||
char* print(char* buf);
|
||||
MQTTGWPacket& operator =(MQTTGWPacket& packet);
|
||||
|
||||
private:
|
||||
void clearData(void);
|
||||
Header _header;
|
||||
int _remainingLength;
|
||||
unsigned char* _data;
|
||||
void clearData(void);
|
||||
Header _header;
|
||||
int _remainingLength;
|
||||
unsigned char* _data;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user