Low level MQTTSN packet library, part of the Eclipse Paho project: http://eclipse.org/paho

Dependents:   MQTTSN sara-n200-hello-mqtt-sn MQTTSN_2

The master source for this project is held at: https://github.com/eclipse/paho.mqtt-sn.embedded-c

MQTTSNPacket.h

Committer:
icraggs
Date:
2016-01-06
Revision:
1:7fa362fa563f
Parent:
0:c524a894b5e8

File content as of revision 1:7fa362fa563f:

/*******************************************************************************
 * Copyright (c) 2014 IBM Corp.
 *
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the Eclipse Public License v1.0
 * and Eclipse Distribution License v1.0 which accompany this distribution.
 *
 * The Eclipse Public License is available at
 *    http://www.eclipse.org/legal/epl-v10.html
 * and the Eclipse Distribution License is available at
 *   http://www.eclipse.org/org/documents/edl-v10.php.
 *
 * Contributors:
 *    Ian Craggs - initial API and implementation and/or initial documentation
 *******************************************************************************/

#ifndef MQTTSNPACKET_H_
#define MQTTSNPACKET_H_

#if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */
extern "C" {
#endif

enum MQTTSN_errors
{
	MQTTSNPACKET_BUFFER_TOO_SHORT = -2,
	MQTTSNPACKET_READ_ERROR = -1,
	MQTTSNPACKET_READ_COMPLETE,
};

#define MQTTSN_PROTOCOL_VERSION 0x01

enum MQTTSN_connackCodes
{
	MQTTSN_RC_ACCEPTED,
	MQTTSN_RC_REJECTED_CONGESTED,
	MQTTSN_RC_REJECTED_INVALID_TOPIC_ID,
};

enum MQTTSN_topicTypes
{
	MQTTSN_TOPIC_TYPE_NORMAL, /* topic id in publish, topic name in subscribe */
	MQTTSN_TOPIC_TYPE_PREDEFINED,
	MQTTSN_TOPIC_TYPE_SHORT,
};


enum MQTTSN_msgTypes
{
	MQTTSN_ADVERTISE, MQTTSN_SEARCHGW, MQTTSN_GWINFO, MQTTSN_RESERVED1, 
	MQTTSN_CONNECT, MQTTSN_CONNACK,
	MQTTSN_WILLTOPICREQ, MQTTSN_WILLTOPIC, MQTTSN_WILLMSGREQ, MQTTSN_WILLMSG, 
	MQTTSN_REGISTER, MQTTSN_REGACK,
	MQTTSN_PUBLISH, MQTTSN_PUBACK, MQTTSN_PUBCOMP, MQTTSN_PUBREC, MQTTSN_PUBREL, MQTTSN_RESERVED2,
	MQTTSN_SUBSCRIBE, MQTTSN_SUBACK, MQTTSN_UNSUBSCRIBE, MQTTSN_UNSUBACK, 
	MQTTSN_PINGREQ, MQTTSN_PINGRESP,
	MQTTSN_DISCONNECT, MQTTSN_RESERVED3, 
	MQTTSN_WILLTOPICUPD, MQTTSN_WILLTOPICRESP, MQTTSN_WILLMSGUPD, MQTTSN_WILLMSGRESP,
};

typedef struct
{
	enum MQTTSN_topicTypes type;
	union
	{
		unsigned short id;
		char short_name[2];
		struct
		{
			char* name;
			int len;
		} long_;
	} data;
} MQTTSN_topicid;


/**
 * Bitfields for the MQTT-SN flags byte.
 */
typedef union
{
	unsigned char all;
#if defined(REVERSED)
	struct
	{
		int dup: 1;
		unsigned int QoS : 2;
		unsigned int retain : 1;
		unsigned int will : 1;
		unsigned int cleanSession : 1;
		unsigned int topicIdType : 2;
	} bits;
#else
	struct
	{
		unsigned int topicIdType : 2;
		unsigned int cleanSession : 1;
		unsigned int will : 1;
		unsigned int retain : 1;
		unsigned int QoS : 2;
		int dup: 1;
	} bits;
#endif
} MQTTSNFlags;


typedef struct
{
	int len;
	char* data;
} MQTTSNLenString;

typedef struct
{
	char* cstring;
	MQTTSNLenString lenstring;
} MQTTSNString;

#define MQTTSNString_initializer {NULL, {0, NULL}}

int MQTTSNstrlen(MQTTSNString mqttsnstring);

#include "MQTTSNConnect.h"
#include "MQTTSNPublish.h"
#include "MQTTSNSubscribe.h"
#include "MQTTSNUnsubscribe.h"
#include "MQTTSNSearch.h"

char* MQTTSNPacket_name(int ptype);
int MQTTSNPacket_len(int length);

int MQTTSNPacket_encode(unsigned char* buf, int length);
int MQTTSNPacket_decode(unsigned char* buf, int buflen, int* value);

int MQTTSNPacket_readInt(unsigned char** pptr);
char MQTTSNPacket_readChar(unsigned char** pptr);
void MQTTSNPacket_writeChar(unsigned char** pptr, char c);
void MQTTSNPacket_writeInt(unsigned char** pptr, int anInt);
int readMQTTSNString(MQTTSNString* mqttstring, unsigned char** pptr, unsigned char* enddata);
void MQTTSNPacket_writeCString(unsigned char** pptr, char* string);
void writeMQTTSNString(unsigned char** pptr, MQTTSNString mqttstring);

int MQTTSNPacket_read(unsigned char* buf, int buflen, int (*getfn)(unsigned char*, int));

#ifdef __cplusplus /* If this is a C++ compiler, use C linkage */
}
#endif


#endif /* MQTTSNPACKET_H_ */