| /******************************************************************************* | |
| * 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: | |
| * Allan Stockdill-Mander/Ian Craggs - initial API and implementation and/or initial documentation | |
| *******************************************************************************/ | |
| #ifndef __MQTT_CLIENT_C_ | |
| #define __MQTT_CLIENT_C_ | |
| #include "MQTTPacket.h" | |
| #include "stdio.h" | |
| #include "MQTTLinux.h" | |
| #define MAX_PACKET_ID 65535 | |
| #define MAX_MESSAGE_HANDLERS 5 | |
| #define MAX_FAIL_ALLOWED 2 | |
| enum QoS { QOS0, QOS1, QOS2 }; | |
| // all failure return codes must be negative | |
| enum returnCode {DISCONNECTED = -3, BUFFER_OVERFLOW = -2, FAILURE = -1, SUCCESS = 0 }; | |
| void NewTimer(Timer*); | |
| typedef struct MQTTMessage MQTTMessage; | |
| typedef struct MessageData MessageData; | |
| struct MQTTMessage | |
| { | |
| enum QoS qos; | |
| char retained; | |
| char dup; | |
| unsigned short id; | |
| void *payload; | |
| size_t payloadlen; | |
| }; | |
| struct MessageData | |
| { | |
| MQTTMessage* message; | |
| MQTTString* topicName; | |
| }; | |
| typedef struct { | |
| char clientId[255]; | |
| char deviceToken[255]; | |
| } regnwl_info_t; | |
| typedef void (*messageHandler)(MessageData*); | |
| typedef struct Client Client; | |
| int MQTTConnect (Client*, MQTTPacket_connectData*); | |
| int MQTTPublish (Client*, const char*, MQTTMessage*); | |
| int MQTTSubscribe (Client*, const char*, enum QoS, messageHandler); | |
| int MQTTUnsubscribe (Client*, const char*); | |
| int MQTTDisconnect (Client*,Network*); | |
| int MQTTYield (Client*, int); | |
| void setDefaultMessageHandler(Client*, messageHandler); | |
| void MQTTClient(Client*, Network*, unsigned int, unsigned char*, size_t, unsigned char*, size_t); | |
| struct Client { | |
| unsigned int next_packetid; | |
| unsigned int command_timeout_ms; | |
| size_t buf_size, readbuf_size; | |
| unsigned char *buf; | |
| unsigned char *readbuf; | |
| unsigned int keepAliveInterval; | |
| char ping_outstanding; | |
| int fail_count; | |
| int isconnected; | |
| struct MessageHandlers | |
| { | |
| const char* topicFilter; | |
| void (*fp) (MessageData*); | |
| } messageHandlers[MAX_MESSAGE_HANDLERS]; // Message handlers are indexed by subscription topic | |
| void (*defaultMessageHandler) (MessageData*); | |
| Network* ipstack; | |
| Timer ping_timer; | |
| }; | |
| #define DefaultClient {0, 0, 0, 0, NULL, NULL, 0, 0, 0} | |
| #endif |