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 Apr 14 18:49:32 2014 +0000
Revision:
5:eea71419676a
Parent:
4:c502573c6016
Child:
10:8dec1424b1c1
Child:
12:cd99ac9cb25a
Add a string comparison function

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 MQTTPACKET_H_
icraggs 0:7734401cc1b4 18 #define MQTTPACKET_H_
icraggs 0:7734401cc1b4 19
icraggs 0:7734401cc1b4 20 #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */
icraggs 0:7734401cc1b4 21 extern "C" {
icraggs 0:7734401cc1b4 22 #endif
icraggs 0:7734401cc1b4 23
icraggs 0:7734401cc1b4 24 enum errors
icraggs 0:7734401cc1b4 25 {
icraggs 0:7734401cc1b4 26 MQTTPACKET_BUFFER_TOO_SHORT = -2,
icraggs 0:7734401cc1b4 27 MQTTPACKET_READ_ERROR = -1,
icraggs 0:7734401cc1b4 28 MQTTPACKET_READ_COMPLETE,
icraggs 0:7734401cc1b4 29 };
icraggs 0:7734401cc1b4 30
icraggs 0:7734401cc1b4 31 enum msgTypes
icraggs 0:7734401cc1b4 32 {
icraggs 0:7734401cc1b4 33 CONNECT = 1, CONNACK, PUBLISH, PUBACK, PUBREC, PUBREL,
icraggs 0:7734401cc1b4 34 PUBCOMP, SUBSCRIBE, SUBACK, UNSUBSCRIBE, UNSUBACK,
icraggs 0:7734401cc1b4 35 PINGREQ, PINGRESP, DISCONNECT
icraggs 0:7734401cc1b4 36 };
icraggs 0:7734401cc1b4 37
icraggs 0:7734401cc1b4 38 /**
icraggs 0:7734401cc1b4 39 * Bitfields for the MQTT header byte.
icraggs 0:7734401cc1b4 40 */
icraggs 0:7734401cc1b4 41 typedef union
icraggs 0:7734401cc1b4 42 {
icraggs 0:7734401cc1b4 43 /*unsigned*/ char byte; /**< the whole byte */
icraggs 0:7734401cc1b4 44 #if defined(REVERSED)
icraggs 0:7734401cc1b4 45 struct
icraggs 0:7734401cc1b4 46 {
icraggs 0:7734401cc1b4 47 unsigned int type : 4; /**< message type nibble */
icraggs 0:7734401cc1b4 48 unsigned int dup : 1; /**< DUP flag bit */
icraggs 0:7734401cc1b4 49 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
icraggs 0:7734401cc1b4 50 unsigned int retain : 1; /**< retained flag bit */
icraggs 0:7734401cc1b4 51 } bits;
icraggs 0:7734401cc1b4 52 #else
icraggs 0:7734401cc1b4 53 struct
icraggs 0:7734401cc1b4 54 {
icraggs 0:7734401cc1b4 55 unsigned int retain : 1; /**< retained flag bit */
icraggs 0:7734401cc1b4 56 unsigned int qos : 2; /**< QoS value, 0, 1 or 2 */
icraggs 0:7734401cc1b4 57 unsigned int dup : 1; /**< DUP flag bit */
icraggs 0:7734401cc1b4 58 unsigned int type : 4; /**< message type nibble */
icraggs 0:7734401cc1b4 59 } bits;
icraggs 0:7734401cc1b4 60 #endif
icraggs 0:7734401cc1b4 61 } MQTTHeader;
icraggs 0:7734401cc1b4 62
icraggs 0:7734401cc1b4 63 typedef struct
icraggs 0:7734401cc1b4 64 {
icraggs 0:7734401cc1b4 65 int len;
icraggs 0:7734401cc1b4 66 char* data;
icraggs 0:7734401cc1b4 67 } MQTTLenString;
icraggs 0:7734401cc1b4 68
icraggs 0:7734401cc1b4 69 typedef struct
icraggs 0:7734401cc1b4 70 {
icraggs 0:7734401cc1b4 71 char* cstring;
icraggs 0:7734401cc1b4 72 MQTTLenString lenstring;
icraggs 0:7734401cc1b4 73 } MQTTString;
icraggs 0:7734401cc1b4 74
icraggs 0:7734401cc1b4 75 #define MQTTString_initializer {NULL, {0, NULL}}
icraggs 0:7734401cc1b4 76
icraggs 0:7734401cc1b4 77 int MQTTstrlen(MQTTString mqttstring);
icraggs 0:7734401cc1b4 78
icraggs 0:7734401cc1b4 79 #include "MQTTConnect.h"
icraggs 0:7734401cc1b4 80 #include "MQTTPublish.h"
icraggs 0:7734401cc1b4 81 #include "MQTTSubscribe.h"
icraggs 0:7734401cc1b4 82 #include "MQTTUnsubscribe.h"
icraggs 0:7734401cc1b4 83
Ian Craggs 4:c502573c6016 84 int MQTTSerialize_ack(char* buf, int buflen, int type, int dup, int packetid);
icraggs 0:7734401cc1b4 85 int MQTTDeserialize_ack(int* type, int* dup, int* packetid, char* buf, int buflen);
icraggs 0:7734401cc1b4 86
icraggs 0:7734401cc1b4 87 int MQTTPacket_len(int rem_len);
icraggs 5:eea71419676a 88 int MQTTPacket_equals(MQTTString* a, char* b);
icraggs 0:7734401cc1b4 89
icraggs 0:7734401cc1b4 90 int MQTTPacket_encode(char* buf, int length);
icraggs 0:7734401cc1b4 91 int MQTTPacket_decode(int (*getcharfn)(char*, int), int* value);
icraggs 0:7734401cc1b4 92 int MQTTPacket_decodeBuf(char* buf, int* value);
icraggs 0:7734401cc1b4 93
icraggs 0:7734401cc1b4 94 int readInt(char** pptr);
icraggs 0:7734401cc1b4 95 char readChar(char** pptr);
icraggs 0:7734401cc1b4 96 void writeChar(char** pptr, char c);
icraggs 0:7734401cc1b4 97 void writeInt(char** pptr, int anInt);
icraggs 0:7734401cc1b4 98 int readMQTTLenString(MQTTString* mqttstring, char** pptr, char* enddata);
Ian Craggs 4:c502573c6016 99 void writeCString(char** pptr, const char* string);
icraggs 0:7734401cc1b4 100 void writeMQTTString(char** pptr, MQTTString mqttstring);
icraggs 0:7734401cc1b4 101
icraggs 0:7734401cc1b4 102 #ifdef __cplusplus /* If this is a C++ compiler, use C linkage */
icraggs 0:7734401cc1b4 103 }
icraggs 0:7734401cc1b4 104 #endif
icraggs 0:7734401cc1b4 105
icraggs 0:7734401cc1b4 106
icraggs 0:7734401cc1b4 107 #endif /* MQTTPACKET_H_ */