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
 |