You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
			
		
		
		
		
			
		
			
				
	
	
		
			105 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
			
		
		
	
	
			105 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			C
		
	
| /*
 | |
|  * 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 "mqtt_interface.h" //Platform specific implementation header file
 | |
| #include "stdio.h"
 | |
|    
 | |
| #define MAX_PACKET_ID 65535
 | |
| #define MAX_MESSAGE_HANDLERS 5
 | |
| 
 | |
| enum QoS 
 | |
| { 
 | |
|   QOS0,
 | |
|   QOS1, 
 | |
|   QOS2 
 | |
| };
 | |
| 
 | |
| // all failure return codes must be negative
 | |
| enum returnCode
 | |
| { 
 | |
|   BUFFER_OVERFLOW = -2, 
 | |
|   FAILURE = -1, 
 | |
|   SUCCESSS = 0
 | |
| };
 | |
| 
 | |
| void NewTimer(Timer*);
 | |
| 
 | |
| typedef struct MQTTMessage MQTTMessage;
 | |
| 
 | |
| typedef struct MessageData MessageData;
 | |
| 
 | |
| struct MQTTMessage
 | |
| {
 | |
|   enum QoS qos;
 | |
|   char retained;
 | |
|   char dup;
 | |
|   uint16_t id;
 | |
|   void *payload;
 | |
|   size_t payloadlen;
 | |
| };
 | |
| 
 | |
| struct MessageData
 | |
| {
 | |
|   MQTTMessage* message;
 | |
|   MQTTString* topicName;
 | |
| };
 | |
| 
 | |
| typedef void (*messageHandler)(MessageData*);
 | |
| 
 | |
| typedef struct Client Client;
 | |
| 
 | |
| int32_t MQTTConnect (Client*, MQTTPacket_connectData*);
 | |
| int32_t MQTTPublish (Client*, const char*, MQTTMessage*);
 | |
| int32_t MQTTSubscribe (Client*, const char*, enum QoS, messageHandler);
 | |
| int32_t MQTTUnsubscribe (Client*, const char*);
 | |
| int32_t MQTTDisconnect (Client*);
 | |
| int32_t MQTTYield (Client*, int32_t);
 | |
| 
 | |
| void setDefaultMessageHandler(Client*, messageHandler);
 | |
| 
 | |
| void MQTTClient(Client*, Network*, uint32_t, unsigned char*, size_t, unsigned char*, size_t);
 | |
| 
 | |
| struct Client 
 | |
| {
 | |
|   uint32_t next_packetid;
 | |
|   uint32_t command_timeout_ms;
 | |
|   size_t buf_size, readbuf_size;
 | |
|   uint8_t *buf;  
 | |
|   uint8_t *readbuf; 
 | |
|   uint32_t keepAliveInterval;
 | |
|   int8_t ping_outstanding;
 | |
|   int32_t 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
 |