Basic C library for MQTT packet serialization and deserialization

Dependents:   MQTT MQTT MQTT MQTT ... more

Fork of MQTTPacket by MQTT

This library is part of the EclipseTM Paho project; specifically the embedded client.

A basic MQTT library in C for packet serialization and deserialization

Committer:
icraggs
Date:
Mon Mar 31 15:48:23 2014 +0000
Revision:
1:069ae45b7070
Parent:
0:7734401cc1b4
Child:
3:4a4f8699f935
Two small corrections

Who changed what in which revision?

UserRevisionLine numberNew contents of line
icraggs 0:7734401cc1b4 1 /*******************************************************************************
icraggs 0:7734401cc1b4 2 * Copyright (c) 2014 IBM Corp.
icraggs 0:7734401cc1b4 3 *
icraggs 0:7734401cc1b4 4 * All rights reserved. This program and the accompanying materials
icraggs 0:7734401cc1b4 5 * are made available under the terms of the Eclipse Public License v1.0
icraggs 0:7734401cc1b4 6 * and Eclipse Distribution License v1.0 which accompany this distribution.
icraggs 0:7734401cc1b4 7 *
icraggs 0:7734401cc1b4 8 * The Eclipse Public License is available at
icraggs 0:7734401cc1b4 9 * http://www.eclipse.org/legal/epl-v10.html
icraggs 0:7734401cc1b4 10 * and the Eclipse Distribution License is available at
icraggs 0:7734401cc1b4 11 * http://www.eclipse.org/org/documents/edl-v10.php.
icraggs 0:7734401cc1b4 12 *
icraggs 0:7734401cc1b4 13 * Contributors:
icraggs 0:7734401cc1b4 14 * Ian Craggs - initial API and implementation and/or initial documentation
icraggs 0:7734401cc1b4 15 *******************************************************************************/
icraggs 0:7734401cc1b4 16
icraggs 0:7734401cc1b4 17 #ifndef MQTTCONNECT_H_
icraggs 0:7734401cc1b4 18 #define MQTTCONNECT_H_
icraggs 0:7734401cc1b4 19
icraggs 0:7734401cc1b4 20 typedef union
icraggs 0:7734401cc1b4 21 {
icraggs 0:7734401cc1b4 22 unsigned char all; /**< all connect flags */
icraggs 0:7734401cc1b4 23 #if defined(REVERSED)
icraggs 0:7734401cc1b4 24 struct
icraggs 0:7734401cc1b4 25 {
icraggs 0:7734401cc1b4 26 unsigned int username : 1; /**< 3.1 user name */
icraggs 0:7734401cc1b4 27 unsigned int password : 1; /**< 3.1 password */
icraggs 0:7734401cc1b4 28 unsigned int willRetain : 1; /**< will retain setting */
icraggs 0:7734401cc1b4 29 unsigned int willQoS : 2; /**< will QoS value */
icraggs 0:7734401cc1b4 30 unsigned int will : 1; /**< will flag */
icraggs 0:7734401cc1b4 31 unsigned int cleansession : 1; /**< clean session flag */
icraggs 0:7734401cc1b4 32 unsigned int : 1; /**< unused */
icraggs 0:7734401cc1b4 33 } bits;
icraggs 0:7734401cc1b4 34 #else
icraggs 0:7734401cc1b4 35 struct
icraggs 0:7734401cc1b4 36 {
icraggs 0:7734401cc1b4 37 unsigned int : 1; /**< unused */
icraggs 0:7734401cc1b4 38 unsigned int cleansession : 1; /**< cleansession flag */
icraggs 0:7734401cc1b4 39 unsigned int will : 1; /**< will flag */
icraggs 0:7734401cc1b4 40 unsigned int willQoS : 2; /**< will QoS value */
icraggs 0:7734401cc1b4 41 unsigned int willRetain : 1; /**< will retain setting */
icraggs 0:7734401cc1b4 42 unsigned int password : 1; /**< 3.1 password */
icraggs 0:7734401cc1b4 43 unsigned int username : 1; /**< 3.1 user name */
icraggs 0:7734401cc1b4 44 } bits;
icraggs 0:7734401cc1b4 45 #endif
icraggs 0:7734401cc1b4 46 } MQTTConnectFlags; /**< connect flags byte */
icraggs 0:7734401cc1b4 47
icraggs 0:7734401cc1b4 48
icraggs 0:7734401cc1b4 49
icraggs 0:7734401cc1b4 50 /**
icraggs 0:7734401cc1b4 51 * Defines the MQTT "Last Will and Testament" (LWT) settings for
icraggs 0:7734401cc1b4 52 * the connect packet.
icraggs 0:7734401cc1b4 53 */
icraggs 0:7734401cc1b4 54 typedef struct
icraggs 0:7734401cc1b4 55 {
icraggs 0:7734401cc1b4 56 /** The eyecatcher for this structure. must be MQTW. */
icraggs 0:7734401cc1b4 57 char struct_id[4];
icraggs 0:7734401cc1b4 58 /** The version number of this structure. Must be 0 */
icraggs 0:7734401cc1b4 59 int struct_version;
icraggs 0:7734401cc1b4 60 /** The LWT topic to which the LWT message will be published. */
icraggs 0:7734401cc1b4 61 MQTTString topicName;
icraggs 0:7734401cc1b4 62 /** The LWT payload. */
icraggs 0:7734401cc1b4 63 MQTTString message;
icraggs 0:7734401cc1b4 64 /**
icraggs 0:7734401cc1b4 65 * The retained flag for the LWT message (see MQTTAsync_message.retained).
icraggs 0:7734401cc1b4 66 */
icraggs 0:7734401cc1b4 67 int retained;
icraggs 0:7734401cc1b4 68 /**
icraggs 0:7734401cc1b4 69 * The quality of service setting for the LWT message (see
icraggs 0:7734401cc1b4 70 * MQTTAsync_message.qos and @ref qos).
icraggs 0:7734401cc1b4 71 */
icraggs 0:7734401cc1b4 72 int qos;
icraggs 0:7734401cc1b4 73 } MQTTPacket_willOptions;
icraggs 0:7734401cc1b4 74
icraggs 0:7734401cc1b4 75
icraggs 0:7734401cc1b4 76 #define MQTTPacket_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 0, {NULL, {0, NULL}}, {NULL, {0, NULL}}, 0, 0 }
icraggs 0:7734401cc1b4 77
icraggs 0:7734401cc1b4 78
icraggs 0:7734401cc1b4 79 typedef struct
icraggs 0:7734401cc1b4 80 {
icraggs 0:7734401cc1b4 81 /** The eyecatcher for this structure. must be MQTC. */
icraggs 0:7734401cc1b4 82 char struct_id[4];
icraggs 0:7734401cc1b4 83 /** The version number of this structure. Must be 0, 1 or 2.
icraggs 0:7734401cc1b4 84 * 0 signifies no SSL options and no serverURIs
icraggs 0:7734401cc1b4 85 * 1 signifies no serverURIs
icraggs 0:7734401cc1b4 86 */
icraggs 0:7734401cc1b4 87 int struct_version;
icraggs 0:7734401cc1b4 88 /** Version of MQTT to be used. 3 = 3.1 4 = 3.1.1
icraggs 0:7734401cc1b4 89 */
icraggs 0:7734401cc1b4 90 int MQTTVersion;
icraggs 0:7734401cc1b4 91 MQTTString clientID;
icraggs 0:7734401cc1b4 92 int keepAliveInterval;
icraggs 0:7734401cc1b4 93 int cleansession;
icraggs 0:7734401cc1b4 94 int willFlag;
icraggs 0:7734401cc1b4 95 MQTTPacket_willOptions will;
icraggs 0:7734401cc1b4 96 MQTTString username;
icraggs 0:7734401cc1b4 97 MQTTString password;
icraggs 0:7734401cc1b4 98 } MQTTPacket_connectData;
icraggs 0:7734401cc1b4 99
icraggs 1:069ae45b7070 100 #define MQTTPacket_connectData_initializer { {'M', 'Q', 'T', 'W'}, 0, 3, {"", {0, NULL}}, 60, 1, 0, \
icraggs 0:7734401cc1b4 101 MQTTPacket_willOptions_initializer, {NULL, {0, NULL}}, {NULL, {0, NULL}} }
icraggs 0:7734401cc1b4 102
icraggs 0:7734401cc1b4 103 int MQTTSerialize_connect(char* buf, int buflen, MQTTPacket_connectData* options);
icraggs 0:7734401cc1b4 104 int MQTTDeserialize_connect(MQTTPacket_connectData* data, char* buf, int len);
icraggs 0:7734401cc1b4 105
icraggs 0:7734401cc1b4 106 int MQTTSerialize_connack(char* buf, int buflen, int connack_rc);
icraggs 0:7734401cc1b4 107 int MQTTDeserialize_connack(int* connack_rc, char* buf, int buflen);
icraggs 0:7734401cc1b4 108
icraggs 0:7734401cc1b4 109 int MQTTSerialize_disconnect(char* buf, int buflen);
icraggs 0:7734401cc1b4 110
icraggs 0:7734401cc1b4 111 #endif /* MQTTCONNECT_H_ */