Diff for /libaitmqtt/inc/aitmqtt.h between versions 1.1 and 1.3.4.2

version 1.1, 2012/01/26 13:07:33 version 1.3.4.2, 2022/09/12 21:52:57
Line 12  terms: Line 12  terms:
 All of the documentation and software included in the ELWIX and AITNET  All of the documentation and software included in the ELWIX and AITNET
 Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>  Releases is copyrighted by ELWIX - Sofia/Bulgaria <info@elwix.org>
   
Copyright 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011Copyright 2004 - 2022
         by Michael Pounov <misho@elwix.org>.  All rights reserved.          by Michael Pounov <misho@elwix.org>.  All rights reserved.
   
 Redistribution and use in source and binary forms, with or without  Redistribution and use in source and binary forms, with or without
Line 47  SUCH DAMAGE. Line 47  SUCH DAMAGE.
 #define __AITMQTT_H  #define __AITMQTT_H
   
   
   #define MAX_CONNID              24
   #define MAX_CRED                13
   #define MQTTMSG_MAX             65535
   #define MQTT_DATA_MAX           268435455
   
   #define MQTT_PROTO_VER          3
   #define MQTT_KEEPALIVE          10
   #define MQTT_DEFAULT_MSGID      0xDEBA
   
 /* FIXED HEADER */  /* FIXED HEADER */
   
 struct mqtthdr {  struct mqtthdr {
Line 60  struct mqtthdr { Line 69  struct mqtthdr {
                 unsigned char           val;                  unsigned char           val;
         } mqtt_msg;          } mqtt_msg;
         unsigned char                   mqtt_len[1];    /* may be grow to 4 bytes */          unsigned char                   mqtt_len[1];    /* may be grow to 4 bytes */
} __packed;} __attribute__((packed));
 #define MQTTHDR_MSGINIT(x)      (assert((x)), (x)->mqtt_msg.val ^= (x)->mqtt_msg.val)  #define MQTTHDR_MSGINIT(x)      (assert((x)), (x)->mqtt_msg.val ^= (x)->mqtt_msg.val)
   #define MQTTHDR_DATA_SIZEOF(x)  (assert((x)), mqtt_decodeLen((x)->mqtt_len, NULL))
   
 #define MQTT_TYPE_UNKNOWN       0       /* reserved */  #define MQTT_TYPE_UNKNOWN       0       /* reserved */
 #define MQTT_TYPE_CONNECT       1       /* client request to connect to server */  #define MQTT_TYPE_CONNECT       1       /* client request to connect to server */
Line 78  struct mqtthdr { Line 88  struct mqtthdr {
 #define MQTT_TYPE_PINGREQ       12      /* PING request */  #define MQTT_TYPE_PINGREQ       12      /* PING request */
 #define MQTT_TYPE_PINGRESP      13      /* PING response */  #define MQTT_TYPE_PINGRESP      13      /* PING response */
 #define MQTT_TYPE_DISCONNECT    14      /* client is disconnecting */  #define MQTT_TYPE_DISCONNECT    14      /* client is disconnecting */
   #define MQTT_TYPE_AUTH          15      /* authentication exchange */
 #define MQTT_TYPE_MAX           15      /* reserved */  #define MQTT_TYPE_MAX           15      /* reserved */
   
 #define MQTT_FLAG_DUP           1       /* This flag is set when the client or server attempts to re-deliver   #define MQTT_FLAG_DUP           1       /* This flag is set when the client or server attempts to re-deliver 
Line 95  struct mqtthdr { Line 106  struct mqtthdr {
 #define MQTT_QOS_EXACTLY        2       /* Exactly once, Assured delivery, =1 */  #define MQTT_QOS_EXACTLY        2       /* Exactly once, Assured delivery, =1 */
 #define MQTT_QOS_RESERVED       3       /* reserved */  #define MQTT_QOS_RESERVED       3       /* reserved */
   
   #define MQTT_QOS_DENY           0       /* Not granted QoS for SUBACK */
   #define MQTT_QOS_PASS           2       /* Granted QoS for SUBACK */
   
 #define MQTT_FLAG_RETAIN        1       /* This flag is only used on PUBLISH messages.  #define MQTT_FLAG_RETAIN        1       /* This flag is only used on PUBLISH messages.
   
                                            When a client sends a PUBLISH to a server,                                              When a client sends a PUBLISH to a server, 
Line 138  typedef struct { Line 152  typedef struct {
         unsigned short  msg_len;          unsigned short  msg_len;
 } mqtt_msg_t;  } mqtt_msg_t;
   
 /* MQTT hooks callback */  
   
 typedef void *(*mqtt_cb_t)(void *);  
   
 /* MQTT structures */  /* MQTT structures */
   
 typedef union {  typedef union {
Line 161  typedef struct { Line 171  typedef struct {
 typedef struct {  typedef struct {
         mqtt_len_t      var_sb;          mqtt_len_t      var_sb;
         unsigned char   var_data[0];          unsigned char   var_data[0];
} __packed mqtthdr_var_t;} __attribute__((packed)) mqtthdr_var_t;
 #define MQTTHDR_VAR_SIZEOF(x)           (assert((x)), sizeof(mqtt_len_t) + ntohs((x)->var_sb.val))  #define MQTTHDR_VAR_SIZEOF(x)           (assert((x)), sizeof(mqtt_len_t) + ntohs((x)->var_sb.val))
   
 typedef unsigned char mqtthdr_protover_t;  typedef unsigned char mqtthdr_protover_t;
Line 177  typedef union { Line 187  typedef union {
                                 username:1;                                  username:1;
         };          };
         unsigned char           flags;          unsigned char           flags;
} __packed mqtthdr_connflgs_t;} __attribute__((packed)) mqtthdr_connflgs_t;
   
 typedef struct {  typedef struct {
         unsigned char   reserved;          unsigned char   reserved;
         unsigned char   retcode;          unsigned char   retcode;
} __packed mqtthdr_connack_t;} __attribute__((packed)) mqtthdr_connack_t;
   
   
 // -------------------------------------------------------  // -------------------------------------------------------
 // mqtt_GetErrno() Get error code of last operation  // mqtt_GetErrno() Get error code of last operation
inline int mqtt_GetErrno();int mqtt_GetErrno();
 // mqtt_GetError() Get error text of last operation  // mqtt_GetError() Get error text of last operation
inline const char *mqtt_GetError();const char *mqtt_GetError();
 // -------------------------------------------------------  // -------------------------------------------------------
   
   
Line 199  inline const char *mqtt_GetError(); Line 209  inline const char *mqtt_GetError();
  * @len = >0 Allocate buffer with length   * @len = >0 Allocate buffer with length
  * return: NULL error or Message, after use must call mqtt_msgFree() with all!=0   * return: NULL error or Message, after use must call mqtt_msgFree() with all!=0
  */   */
inline mqtt_msg_t *mqtt_msgAlloc(unsigned short len);mqtt_msg_t *mqtt_msgAlloc(unsigned short len);
 /*  /*
  * mqtt_msgFree() Free MQTT message   * mqtt_msgFree() Free MQTT message
  *   *
Line 207  inline mqtt_msg_t *mqtt_msgAlloc(unsigned short len); Line 217  inline mqtt_msg_t *mqtt_msgAlloc(unsigned short len);
  * @all = !=0 Destroy entire message, if MQTT Message allocated with mqtt_msgAlloc()   * @all = !=0 Destroy entire message, if MQTT Message allocated with mqtt_msgAlloc()
  * return: none   * return: none
  */   */
inline void mqtt_msgFree(mqtt_msg_t ** __restrict msg, int all);void mqtt_msgFree(mqtt_msg_t ** __restrict msg, int all);
 /*  /*
  * mqtt_msgRealloc() Reallocate MQTT message buffer   * mqtt_msgRealloc() Reallocate MQTT message buffer
  *   *
Line 215  inline void mqtt_msgFree(mqtt_msg_t ** __restrict msg, Line 225  inline void mqtt_msgFree(mqtt_msg_t ** __restrict msg,
  * @len = new length   * @len = new length
  * return: -1 error or >-1 old buffer length   * return: -1 error or >-1 old buffer length
  */   */
inline int mqtt_msgRealloc(mqtt_msg_t * __restrict msg, unsigned short len);int mqtt_msgRealloc(mqtt_msg_t * __restrict msg, unsigned short len);
 /*
  * mqtt_msgDup() - Duplicate message buffer
  *
  * @msg = Message
  * return: NULL error or !=NULL duplicated message, after use must call mqtt_msgFree() with all!=0
  */
 mqtt_msg_t *mqtt_msgDup(mqtt_msg_t * __restrict msg);
   
 /*  /*
    * mqtt_expandTopic() - Expanding topic to regular expression
    *
    * @csInput = Input topic
    * @psRegEx = Output to regular expression
    * @regexLen = Length of psRegEx
    * @BOL = Begin of Line, if =0 not added
    * @EOL = End of Line, if =0 not appended
    * return: -1 error, 0 nothing expanded or >0 expanded bytes
    */
   int mqtt_expandTopic(const char *csInput, char * __restrict psRegEx, int regexLen, 
                   unsigned char BOL, unsigned char EOL);
   /*
    * mqtt_sqlTopic() - Expanding topic to SQL search string
    *
    * @csInput = Input topic
    * @psSQL = Output to SQL search string
    * @sqlLen = Length of psSQL
    * return: -1 error, 0 changed bytes
    */
   int mqtt_sqlTopic(const char *csInput, char * __restrict psSQL, int sqlLen);
   
   /*
  * mqtt_encodeLen() Encode number to MQTT length field   * mqtt_encodeLen() Encode number to MQTT length field
  *   *
  * @num = number for encode   * @num = number for encode
  * return: -1 error or >-1 length   * return: -1 error or >-1 length
  */   */
inline unsigned int mqtt_encodeLen(unsigned int num);unsigned int mqtt_encodeLen(unsigned int num);
 /*  /*
  * mqtt_decodeLen() Decode length from MQTT packet   * mqtt_decodeLen() Decode length from MQTT packet
  *   *
Line 231  inline unsigned int mqtt_encodeLen(unsigned int num); Line 270  inline unsigned int mqtt_encodeLen(unsigned int num);
  * @n = sizeof bytes, if !=NULL   * @n = sizeof bytes, if !=NULL
  * return: -1 error, >-1 length of message   * return: -1 error, >-1 length of message
  */   */
inline unsigned int mqtt_decodeLen(void * __restrict len, int * __restrict n);unsigned int mqtt_decodeLen(void * __restrict len, int * __restrict n);
 /*  /*
  * mqtt_sizeLen Return sizeof len field   * mqtt_sizeLen Return sizeof len field
  *   *
  * @len = length   * @len = length
  * return: -1 error, >-1 sizeof len in bytes   * return: -1 error, >-1 sizeof len in bytes
  */   */
inline char mqtt_sizeLen(unsigned int len);char mqtt_sizeLen(unsigned int len);
 /*  /*
 * mqtt_str2sub Create MQTT subscribe variable from string(s) * mqtt_pktLen() - Get total packet length
  *   *
 * @csStr = strings * @hdr = MQTT packet header
 * @strnum = number of strings elements * return: packet length
  */
 unsigned int mqtt_pktLen(struct mqtthdr * __restrict hdr);
 /*
  * mqtt_str2subs Create MQTT subscribe variable from string(s)
  *
  * @csStr = null terminated string array
  * @strnum = copy at most number of strings elements
  * @qoses = QoS elements applied to subscribe variable,    * @qoses = QoS elements applied to subscribe variable, 
  *              count of elements must be equal with csStr elements   *              count of elements must be equal with csStr elements
  * return: NULL error or != subscribe variables array, must be free after use with mqtt_freeSub()   * return: NULL error or != subscribe variables array, must be free after use with mqtt_freeSub()
  */   */
inline mqtt_subscr_t *mqtt_str2sub(const char **csStr, unsigned short strnum, unsigned char *qoses);mqtt_subscr_t *mqtt_str2subs(const char **csStr, unsigned short strnum, 
                 unsigned char *qoses);
 /*  /*
  * mqtt_subFree() Free array from subscribe variables   * mqtt_subFree() Free array from subscribe variables
  *   *
  * @subs = Subscribe variables   * @subs = Subscribe variables
  * return: none   * return: none
  */   */
inline void mqtt_subFree(mqtt_subscr_t ** __restrict subs);void mqtt_subFree(mqtt_subscr_t ** __restrict subs);
 /*  /*
  * mqtt_subAlloc() Create array from subscribe variables   * mqtt_subAlloc() Create array from subscribe variables
  *   *
  * @num = Number of elements   * @num = Number of elements
  * return: NULL error or subscribe array, after use must call mqtt_subFree()   * return: NULL error or subscribe array, after use must call mqtt_subFree()
  */   */
inline mqtt_subscr_t *mqtt_subAlloc(unsigned short num);mqtt_subscr_t *mqtt_subAlloc(unsigned short num);
 /*  /*
  * mqtt_subRealloc() Reallocate array from subscribe variables   * mqtt_subRealloc() Reallocate array from subscribe variables
  *   *
Line 270  inline mqtt_subscr_t *mqtt_subAlloc(unsigned short num Line 317  inline mqtt_subscr_t *mqtt_subAlloc(unsigned short num
  * @num = Number of elements   * @num = Number of elements
  * return: NULL error or subscribe array, after use must call mqtt_subFree()   * return: NULL error or subscribe array, after use must call mqtt_subFree()
  */   */
inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t * __restrict subs, unsigned short num);mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t ** __restrict subs, unsigned short num);
 /*
  * mqtt_subCopy() - Copy subscription structure to another one
  *
  * @dst = destination subscription
  * @src = source subscription
  * return: =NULL error or !=NULL successful copied a structure
  */
 mqtt_subscr_t *mqtt_subCopy(mqtt_subscr_t * __restrict dst, mqtt_subscr_t * __restrict src);
   
   
 /*** SENDER FUNCTIONS ***/  /*** SENDER FUNCTIONS ***/
Line 280  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t *  Line 335  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t * 
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * @csConnID = ConnectID   * @csConnID = ConnectID
 * @kasec = Keep alive timeout * @kasec = Keep alive timeout, if =0 default timeout for MQTT
  * @csUser = Username if !=NULL   * @csUser = Username if !=NULL
  * @csPass = Password for Username, only if csUser is set   * @csPass = Password for Username, only if csUser is set
  * @csWillTopic = Will Topic if !=NULL Will Flags set into message   * @csWillTopic = Will Topic if !=NULL Will Flags set into message
Line 347  int mqtt_msgPUBLISH(mqtt_msg_t * __restrict buf, const Line 402  int mqtt_msgPUBLISH(mqtt_msg_t * __restrict buf, const
  * @msgID = MessageID   * @msgID = MessageID
  * return: -1 error or >-1 message size for send   * return: -1 error or >-1 message size for send
  */   */
inline int mqtt_msgPUBACK(mqtt_msg_t * __restrict buf, unsigned short msgID);int mqtt_msgPUBACK(mqtt_msg_t * __restrict buf, unsigned short msgID);
 /*  /*
  * mqtt_msgPUBREC() Create PUBREC message   * mqtt_msgPUBREC() Create PUBREC message
  *   *
Line 355  inline int mqtt_msgPUBACK(mqtt_msg_t * __restrict buf, Line 410  inline int mqtt_msgPUBACK(mqtt_msg_t * __restrict buf,
  * @msgID = MessageID   * @msgID = MessageID
  * return: -1 error or >-1 message size for send   * return: -1 error or >-1 message size for send
  */   */
inline int mqtt_msgPUBREC(mqtt_msg_t * __restrict buf, unsigned short msgID);int mqtt_msgPUBREC(mqtt_msg_t * __restrict buf, unsigned short msgID);
 /*  /*
  * mqtt_msgPUBREL() Create PUBREL message   * mqtt_msgPUBREL() Create PUBREL message
  *   *
Line 363  inline int mqtt_msgPUBREC(mqtt_msg_t * __restrict buf, Line 418  inline int mqtt_msgPUBREC(mqtt_msg_t * __restrict buf,
  * @msgID = MessageID   * @msgID = MessageID
  * return: -1 error or >-1 message size for send   * return: -1 error or >-1 message size for send
  */   */
inline int mqtt_msgPUBREL(mqtt_msg_t * __restrict buf, unsigned short msgID);int mqtt_msgPUBREL(mqtt_msg_t * __restrict buf, unsigned short msgID);
 /*  /*
  * mqtt_msgPUBCOMP() Create PUBCOMP message   * mqtt_msgPUBCOMP() Create PUBCOMP message
  *   *
Line 371  inline int mqtt_msgPUBREL(mqtt_msg_t * __restrict buf, Line 426  inline int mqtt_msgPUBREL(mqtt_msg_t * __restrict buf,
  * @msgID = MessageID   * @msgID = MessageID
  * return: -1 error or >-1 message size for send   * return: -1 error or >-1 message size for send
  */   */
inline int mqtt_msgPUBCOMP(mqtt_msg_t * __restrict buf, unsigned short msgID);int mqtt_msgPUBCOMP(mqtt_msg_t * __restrict buf, unsigned short msgID);
   
 /*  /*
  * mqtt_msgSUBSCRIBE() Create SUBSCRIBE message   * mqtt_msgSUBSCRIBE() Create SUBSCRIBE message
Line 476  int mqtt_readPINGRESP(mqtt_msg_t * __restrict buf); Line 531  int mqtt_readPINGRESP(mqtt_msg_t * __restrict buf);
  * @psTopic = Topic   * @psTopic = Topic
  * @topicLen = Topic length   * @topicLen = Topic length
  * @msgID = MessageID   * @msgID = MessageID
 * @pData = Data buffer * @pData = Data buffer, may be NULL
 * @datLen = Data buffer length, if *datLen == 0 allocate memory for pData * return: -1 error or !=-1 allocated data buffer length
 * return: NULL error or !=NULL MQTT fixed header 
  */   */
struct mqtthdr *mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * __restrict psTopic, int mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * __restrict psTopic, 
                int topicLen, unsigned short *msgID, void * __restrict pData, int *datLen);                int topicLen, unsigned short *msgID, void ** __restrict pData);
 /*  /*
  * mqtt_readPUBACK() Read PUBACK message   * mqtt_readPUBACK() Read PUBACK message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * return: -1 error or MessageID   * return: -1 error or MessageID
  */   */
u_short mqtt_readPUBACK(mqtt_msg_t * __restrict buf);unsigned short mqtt_readPUBACK(mqtt_msg_t * __restrict buf);
 /*  /*
  * mqtt_readPUBREC() Read PUBREC message   * mqtt_readPUBREC() Read PUBREC message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * return: -1 error or MessageID   * return: -1 error or MessageID
  */   */
u_short mqtt_readPUBREC(mqtt_msg_t * __restrict buf);unsigned short mqtt_readPUBREC(mqtt_msg_t * __restrict buf);
 /*  /*
  * mqtt_readPUBREL() Read PUBREL message   * mqtt_readPUBREL() Read PUBREL message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * return: -1 error or MessageID   * return: -1 error or MessageID
  */   */
u_short mqtt_readPUBREL(mqtt_msg_t * __restrict buf);unsigned short mqtt_readPUBREL(mqtt_msg_t * __restrict buf);
 /*  /*
  * mqtt_readPUBCOMP() Read PUBCOMP message   * mqtt_readPUBCOMP() Read PUBCOMP message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * return: -1 error or MessageID   * return: -1 error or MessageID
  */   */
u_short mqtt_readPUBCOMP(mqtt_msg_t * __restrict buf);unsigned short mqtt_readPUBCOMP(mqtt_msg_t * __restrict buf);
   
 /*  /*
  * mqtt_readSUBSCRIBE() Read SUBSCRIBE message   * mqtt_readSUBSCRIBE() Read SUBSCRIBE message
Line 517  u_short mqtt_readPUBCOMP(mqtt_msg_t * __restrict buf); Line 571  u_short mqtt_readPUBCOMP(mqtt_msg_t * __restrict buf);
  * @buf = Message buffer   * @buf = Message buffer
  * @msgID = MessageID   * @msgID = MessageID
  * @subscr = Subscriptions, must be free after use with mqtt_subFree()   * @subscr = Subscriptions, must be free after use with mqtt_subFree()
 * return: NULL error or !=NULL MQTT fixed header * return: -1 error or >-1 elements into subscr
  */   */
struct mqtthdr *mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, unsigned short *msgID, int mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, unsigned short *msgID, 
                 mqtt_subscr_t **subscr);                  mqtt_subscr_t **subscr);
 /*  /*
  * mqtt_readSUBACK() Read SUBACK message   * mqtt_readSUBACK() Read SUBACK message
Line 529  struct mqtthdr *mqtt_readSUBSCRIBE(mqtt_msg_t * __rest Line 583  struct mqtthdr *mqtt_readSUBSCRIBE(mqtt_msg_t * __rest
  * @subqos = Subscribes QoS, must be free after use with free()   * @subqos = Subscribes QoS, must be free after use with free()
  * return: -1 error or >-1 readed subscribes QoS elements   * return: -1 error or >-1 readed subscribes QoS elements
  */   */
int mqtt_readSUBACK(mqtt_msg_t * __restrict buf, u_short *msgID, unsigned char **subqos);int mqtt_readSUBACK(mqtt_msg_t * __restrict buf, unsigned short *msgID, unsigned char **subqos);
 /*  /*
  * mqtt_readUNSUBSCRIBE() Read UNSUBSCRIBE message   * mqtt_readUNSUBSCRIBE() Read UNSUBSCRIBE message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * @msgID = MessageID   * @msgID = MessageID
  * @subscr = Subscriptions, must be free after use with mqtt_subFree()   * @subscr = Subscriptions, must be free after use with mqtt_subFree()
 * return: NULL error or !=NULL MQTT fixed header * return: -1 error or >-1 elements into subscr
  */   */
struct mqtthdr *mqtt_readUNSUBSCRIBE(mqtt_msg_t * __restrict buf, unsigned short *msgID, int mqtt_readUNSUBSCRIBE(mqtt_msg_t * __restrict buf, unsigned short *msgID, 
                 mqtt_subscr_t **subscr);                  mqtt_subscr_t **subscr);
 /*  /*
  * mqtt_readUNSUBACK() Read UNSUBACK message   * mqtt_readUNSUBACK() Read UNSUBACK message
Line 546  struct mqtthdr *mqtt_readUNSUBSCRIBE(mqtt_msg_t * __re Line 600  struct mqtthdr *mqtt_readUNSUBSCRIBE(mqtt_msg_t * __re
  * @buf = Message buffer   * @buf = Message buffer
  * return: -1 error or MessageID   * return: -1 error or MessageID
  */   */
u_short mqtt_readUNSUBACK(mqtt_msg_t * __restrict buf);unsigned short mqtt_readUNSUBACK(mqtt_msg_t * __restrict buf);
 
/*** ENGINE FUNCTIONS ***/ 
 
/* 
 * mqttInitCallbacks() Init callback array for dispatcher 
 * 
 * return: NULL error or !=NULL allocated callback array, after use free with mqttFiniCallbacks() 
 */ 
mqtt_cb_t *mqttInitCallbacks(void); 
/* 
 * mqttFiniCallbacks() Free callback array 
 * 
 * @cb = Callback array 
 * return: none 
 */ 
void mqttFiniCallbacks(mqtt_cb_t ** __restrict cb); 
/* 
 * MQTT_CALLBACK() Assign function to callback array for MQTT dispatcher 
 * 
 * @_cbs = Callback array 
 * @_x = MQTT Message type, like MQTT_TYPE_* ... 
 * @_func = Function 
 * return: none 
 */ 
#define MQTT_CALLBACK(_cbs, _x, _func)  (assert((_cbs)), (_cbs)[(_x)] = (_func)) 
/* 
 * mqttDispatcher() MQTT Message type dispatcher 
 * 
 * @cb = Callback array 
 * @buf = Received MQTT message 
 * return: -1 error or >-1 return value from executed callback 
 */ 
inline int mqttDispatcher(mqtt_cb_t * __restrict cb, mqtt_msg_t * __restrict buf); 
   
   
 #endif  #endif

Removed from v.1.1  
changed lines
  Added in v.1.3.4.2


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>