Diff for /libaitmqtt/inc/aitmqtt.h between versions 1.1.1.1.2.1 and 1.3.4.10

version 1.1.1.1.2.1, 2012/01/26 14:44:33 version 1.3.4.10, 2022/09/14 17:37:13
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 MQTT_CONNID_MAX         24
   #define MQTT_CRED_MAX           13
   #define MQTTMSG_MAX             65535
   #define MQTTMSG_BIN_MAX         65535
   #define MQTT_DATA_MAX           268435455
   
   #define MQTT_PROTO_VER_3        3
   #define MQTT_PROTO_VER_311      4
   #define MQTT_PROTO_VER_5        5
   #define MQTT_KEEPALIVE          60
   
 /* FIXED HEADER */  /* FIXED HEADER */
   
 struct mqtthdr {  struct mqtthdr {
Line 60  struct mqtthdr { Line 71  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, *(x)->mqtt_len = 0)
 #define MQTTHDR_DATA_SIZEOF(x)  (assert((x)), mqtt_decodeLen((x)->mqtt_len, NULL))
   
   typedef union {
           struct {
                   unsigned short  m:8,
                                   l:8;
           } sb;
           unsigned short  val;
   } __attribute__((packed)) mqtt_len_t;
   
   typedef struct {
           mqtt_len_t      var_sb;
           unsigned char   var_data[0];
   } __attribute__((packed)) mqtthdr_var_t;
   #define MQTTHDR_VAR_SIZEOF(x)           (assert((x)), sizeof(mqtt_len_t) + ntohs((x)->var_sb.val))
   
   typedef union {
           struct {
                   unsigned char   reserved:1,
                                   clean_sess:1,
                                   will_flg:1,
                                   will_qos:2,
                                   will_retain:1,
                                   password:1,
                                   username:1;
           };
           unsigned char           flags;
   } __attribute__((packed)) mqtthdr_connflgs_t;
   
   typedef struct {
           unsigned char   reserved;
           unsigned char   retcode;
   } __attribute__((packed)) mqtthdr_connack_t;
   
 #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 (CLI) */
#define MQTT_TYPE_CONNACK       2       /* connect acknowledgment */#define MQTT_TYPE_CONNACK       2       /* connect acknowledgment (SRV) [ret_no_data] */
#define MQTT_TYPE_PUBLISH       3       /* publish message */#define MQTT_TYPE_PUBLISH       3       /* publish message [ret_is_optional] */
#define MQTT_TYPE_PUBACK        4       /* publish acknowledgment */#define MQTT_TYPE_PUBACK        4       /* publish acknowledgment [ret_no_data] */
#define MQTT_TYPE_PUBREC        5       /* publish received (assured delivery part 1) */#define MQTT_TYPE_PUBREC        5       /* publish received (assured delivery part 1) [ret_no_data] */
#define MQTT_TYPE_PUBREL        6       /* publish release (assured delivery part 2) */#define MQTT_TYPE_PUBREL        6       /* publish release (assured delivery part 2) [ret_no_data] */
#define MQTT_TYPE_PUBCOMP       7       /* publish complete (assured delivery part 3) */#define MQTT_TYPE_PUBCOMP       7       /* publish complete (assured delivery part 3) [ret_no_data] */
#define MQTT_TYPE_SUBSCRIBE     8       /* client subscribe request */#define MQTT_TYPE_SUBSCRIBE     8       /* client subscribe request (CLI) */
#define MQTT_TYPE_SUBACK        9       /* subscribe acknowledgment */#define MQTT_TYPE_SUBACK        9       /* subscribe acknowledgment (SRV) */
#define MQTT_TYPE_UNSUBSCRIBE   10      /* client unsubscribe request */#define MQTT_TYPE_UNSUBSCRIBE   10      /* client unsubscribe request (CLI) */
#define MQTT_TYPE_UNSUBACK      11      /* unsubscribe acknowledgment */#define MQTT_TYPE_UNSUBACK      11      /* unsubscribe acknowledgment (SRV) */
#define MQTT_TYPE_PINGREQ       12      /* PING request */#define MQTT_TYPE_PINGREQ       12      /* PING request (CLI) [ret_no_data] */
#define MQTT_TYPE_PINGRESP      13      /* PING response */#define MQTT_TYPE_PINGRESP      13      /* PING response (SRV) [ret_no_data] */
#define MQTT_TYPE_DISCONNECT    14      /* client is disconnecting */#define MQTT_TYPE_DISCONNECT    14      /* client is disconnecting [ret_no_data] */
#define MQTT_TYPE_MAX                15      /* reserved */#define MQTT_TYPE_AUTH                15      /* authentication exchange [ret_no_data] */
   
   #define MQTT_TYPE_MAX           15
   
 #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 
                                            a PUBLISH, PUBREL, SUBSCRIBE or UNSUBSCRIBE message.                                              a PUBLISH, PUBREL, SUBSCRIBE or UNSUBSCRIBE message. 
                                            This applies to messages where the value of QoS is greater than                                              This applies to messages where the value of QoS is greater than 
Line 95  struct mqtthdr { Line 141  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 130  struct mqtthdr { Line 179  struct mqtthdr {
 #define MQTT_RETCODE_REFUSE_USERPASS    4  #define MQTT_RETCODE_REFUSE_USERPASS    4
 #define MQTT_RETCODE_DENIED             5  #define MQTT_RETCODE_DENIED             5
   
   /* REASON CODES */
   
   #define MQTT_REASON_OK                  0x0     /* CONNACK, PUBACK, PUBREC, PUBREL, PUBCOMP, UNSUBACK, AUTH, DISCONNECT, SUBACK */
   #define MQTT_REASON_QOS1                0x1     /* SUBACK */
   #define MQTT_REASON_QOS2                0x2     /* SUBACK */
   #define MQTT_REASON_DWILL               0x4     /* DISCONNECT */
   #define MQTT_REASON_NOMATCH             0x10    /* PUBACK, PUBREC */
   #define MQTT_REASON_NOSUBEXIST          0x11    /* UNSUBACK */
   #define MQTT_REASON_CONTAUTH            0x18    /* AUTH */
   #define MQTT_REASON_REAUTH              0x19    /* AUTH */
   
   /* REASON ERROR CODES */
   
   #define MQTT_REASON_ERROR               0x80    /* CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT */
   #define MQTT_REASON_MALFORMPKT          0x81    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_PROTOERR            0x82    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_IMPLSPECERR         0x83    /* CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT */
   #define MQTT_REASON_UNSUPVERPROTO       0x84    /* CONNACK */
   #define MQTT_REASON_CLINOVALID          0x85    /* CONNACK */
   #define MQTT_REASON_BADUSERPASS         0x86    /* CONNACK */
   #define MQTT_REASON_NOAUTH              0x87    /* CONNACK, PUBACK, PUBREC, SUBACK, UNSUBACK, DISCONNECT */
   #define MQTT_REASON_SRVUNAVAIL          0x88    /* CONNACK */
   #define MQTT_REASON_SRVBUSY             0x89    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_BANNED              0x8A    /* CONNACK */
   #define MQTT_REASON_SRVSHUTDOWN         0x8B    /* DISCONNECT */
   #define MQTT_REASON_BADAUTHMETHOD       0x8C    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_KEEPALIVETO         0x8D    /* DISCONNECT */
   #define MQTT_REASON_SESTAKEOVER         0x8E    /* DISCONNECT */
   #define MQTT_REASON_TOPICFLTINVAL       0x8F    /* SUBACK, UNSUBACK, DISCONNECT */
   #define MQTT_REASON_TOPICNAMEINV        0x90    /* CONNACK, PUBACK, PUBREC, DISCONNECT */
   #define MQTT_REASON_PKTIDINUSE          0x91    /* PUBACK, PUBREC, SUBACK, UNSUBACK */
   #define MQTT_REASON_PKTIDNOTFOUND       0x92    /* PUBREL, PUBCOMP */
   #define MQTT_REASON_RCVMAXEXCEED        0x93    /* DISCONNECT */
   #define MQTT_REASON_TOPICALIASINV       0x94    /* DISCONNECT */
   #define MQTT_REASON_PKTTOOLARGE         0x95    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_MSGRATETOHIGH       0x96    /* DISCONNECT */
   #define MQTT_REASON_QUOTAEXCEED         0x97    /* CONNACK, PUBACK, PUBREC, SUBACK, DISCONNECT */
   #define MQTT_REASON_ADMINACTION         0x98    /* DISCONNECT */
   #define MQTT_REASON_PAYLOADFMTINV       0x99    /* CONNACK, PUBACK, PUBREC, DISCONNECT */
   #define MQTT_REASON_RETAINNOTSUP        0x9A    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_QOSNOTSUP           0x9B    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_USENEXTSRV          0x9C    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_SRVMOVED            0x9D    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_SHARSUBNOTSUP       0x9E    /* SUBACK, DISCONNECT */
   #define MQTT_REASON_CONRATEEXCEED       0x9F    /* CONNACK, DISCONNECT */
   #define MQTT_REASON_MAXCONNTIME         0xA0    /* DISCONNECT */
   #define MQTT_REASON_SUBIDNOTSUP         0xA1    /* SUBACK, DISCONNECT */
   #define MQTT_RESON_WILDSUBNOTSUP        0xA2    /* SUBACK, DISCONNECT */
   
 /* MQTT Message buffer */  /* MQTT Message buffer */
   
 typedef struct {  typedef struct {
         void            *msg_base;          void            *msg_base;
        unsigned short       msg_len;        unsigned int       msg_len;
 } mqtt_msg_t;  } mqtt_msg_t;
   
 /* MQTT hooks callback */  
   
 typedef void *(*mqtt_cb_t)(void *);  
   
 /* MQTT structures */  /* MQTT structures */
   
 typedef union {  
         struct {  
                 unsigned short  m:8,  
                                 l:8;  
         } sb;  
         unsigned short  val;  
 } mqtt_len_t;  
   
 typedef struct {  typedef struct {
         unsigned char   sub_ret;          unsigned char   sub_ret;
         mqtt_msg_t      sub_topic;          mqtt_msg_t      sub_topic;
         mqtt_msg_t      sub_value;          mqtt_msg_t      sub_value;
 } mqtt_subscr_t;  } mqtt_subscr_t;
   
 typedef struct {  
         mqtt_len_t      var_sb;  
         unsigned char   var_data[0];  
 } __packed mqtthdr_var_t;  
 #define MQTTHDR_VAR_SIZEOF(x)           (assert((x)), sizeof(mqtt_len_t) + ntohs((x)->var_sb.val))  
   
 typedef unsigned char mqtthdr_protover_t;  
   
 typedef union {  
         struct {  
                 unsigned char   reserved:1,  
                                 clean_sess:1,  
                                 will_flg:1,  
                                 will_qos:2,  
                                 will_retain:1,  
                                 password:1,  
                                 username:1;  
         };  
         unsigned char           flags;  
 } __packed mqtthdr_connflgs_t;  
   
 typedef struct {  
         unsigned char   reserved;  
         unsigned char   retcode;  
 } __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 258  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 int len);
 /*  /*
  * mqtt_msgFree() Free MQTT message   * mqtt_msgFree() Free MQTT message
  *   *
  * @msg = Message buffer   * @msg = Message buffer
 * @all = !=0 Destroy entire message, if MQTT Message allocated with mqtt_msgAlloc() * @keepmsg = !=0 just free message content
  * return: none   * return: none
  */   */
inline void mqtt_msgFree(mqtt_msg_t ** __restrict msg, int all);void mqtt_msgFree(mqtt_msg_t ** __restrict msg, int keepmsg);
 /*  /*
  * mqtt_msgRealloc() Reallocate MQTT message buffer   * mqtt_msgRealloc() Reallocate MQTT message buffer
  *   *
Line 215  inline void mqtt_msgFree(mqtt_msg_t ** __restrict msg, Line 274  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 int 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   * mqtt_expandTopic() - Expanding topic to regular expression
Line 229  inline int mqtt_msgRealloc(mqtt_msg_t * __restrict msg Line 295  inline int mqtt_msgRealloc(mqtt_msg_t * __restrict msg
  */   */
 int mqtt_expandTopic(const char *csInput, char * __restrict psRegEx, int regexLen,   int mqtt_expandTopic(const char *csInput, char * __restrict psRegEx, int regexLen, 
                 unsigned char BOL, unsigned char EOL);                  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
Line 236  int mqtt_expandTopic(const char *csInput, char * __res Line 311  int mqtt_expandTopic(const char *csInput, char * __res
  * @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 244  inline unsigned int mqtt_encodeLen(unsigned int num); Line 319  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_strs2subs Create MQTT subscribe variable from string(s)
  *
  * @csStr = null terminated string array
  * @strnum = copy at most number of strings elements, ==0 till NULL element
  * @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_strs2subs(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 283  inline mqtt_subscr_t *mqtt_subAlloc(unsigned short num Line 365  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 291  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t *  Line 381  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t * 
 /*  /*
  * mqtt_msgCONNECT() Create CONNECT message   * mqtt_msgCONNECT() Create CONNECT message
  *   *
  * @buf = Message buffer  
  * @csConnID = ConnectID   * @csConnID = ConnectID
 * @kasec = Keep alive timeout * @Version = MQTT version, if =0 default version is 3.1.1
  * @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 301  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t *  Line 391  inline mqtt_subscr_t *mqtt_subRealloc(mqtt_subscr_t * 
  * @ClrSess = Clear Session subscriptions after disconnect   * @ClrSess = Clear Session subscriptions after disconnect
  * @WillQOS = Will QOS if csWillTopic is set   * @WillQOS = Will QOS if csWillTopic is set
  * @WillRetain = Will Retain Will Message if csWillTopic is set   * @WillRetain = Will Retain Will Message if csWillTopic is set
 * return: -1 error or >-1 message size for send * return: NULL error or allocated CONNECT message
  */   */
int mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const char *csConnID, mqtt_msg_t *mqtt_msgCONNECT(const char *csConnID, unsigned char Version, 
                unsigned short kasec, const char *csUser, const char *csPass,                 unsigned short KASec, const char *csUser, const char *csPass, 
                 const char *csWillTopic, const char *csWillMessage,                   const char *csWillTopic, const char *csWillMessage, 
                 unsigned char ClrSess, unsigned char WillQOS, unsigned char WillRetain);                  unsigned char ClrSess, unsigned char WillQOS, unsigned char WillRetain);
 /*  /*
  * mqtt_msgCONNACK() Create CONNACK message   * mqtt_msgCONNACK() Create CONNACK message
  *   *
  * @buf = Message buffer  
  * @retcode = Return code   * @retcode = Return code
 * return: -1 error or >-1 message size for send * return: NULL error or allocated CONNACK message
  */   */
int mqtt_msgCONNACK(mqtt_msg_t * __restrict buf, unsigned char retcode);mqtt_msg_t *mqtt_msgCONNACK(unsigned char retcode);
 /*  /*
  * mqtt_msgDISCONNECT() Create DISCONNECT message   * mqtt_msgDISCONNECT() Create DISCONNECT message
  *   *
 * @buf = Message buffer * return: NULL error or allocated message
 * return: -1 error or >-1 message size for send 
  */   */
int mqtt_msgDISCONNECT(mqtt_msg_t * __restrict buf);mqtt_msg_t *mqtt_msgDISCONNECT();
 /*  /*
  * mqtt_msgPINGREQ() Create PINGREQ message   * mqtt_msgPINGREQ() Create PINGREQ message
  *   *
 * @buf = Message buffer * return: NULL error or allocated message
 * return: -1 error or >-1 message size for send 
  */   */
int mqtt_msgPINGREQ(mqtt_msg_t * __restrict buf);mqtt_msg_t *mqtt_msgPINGREQ();
 /*  /*
  * mqtt_msgPINGRESP() Create PINGRESP message   * mqtt_msgPINGRESP() Create PINGRESP message
  *   *
 * @buf = Message buffer * return: NULL error or allocated message
 * return: -1 error or >-1 message size for send 
  */   */
int mqtt_msgPINGRESP(mqtt_msg_t * __restrict buf);mqtt_msg_t *mqtt_msgPINGRESP();
   
 /*  /*
  * mqtt_msgPUBLISH() Create PUBLISH message   * mqtt_msgPUBLISH() Create PUBLISH message
  *   *
  * @buf = Message buffer  
  * @csTopic = Publish topic   * @csTopic = Publish topic
  * @msgID = MessageID >0, if QOS != MQTT_QOS_ONCE   * @msgID = MessageID >0, if QOS != MQTT_QOS_ONCE
  * @Dup = Duplicate message   * @Dup = Duplicate message
Line 348  int mqtt_msgPINGRESP(mqtt_msg_t * __restrict buf); Line 433  int mqtt_msgPINGRESP(mqtt_msg_t * __restrict buf);
  * @Retain = Retain message   * @Retain = Retain message
  * @pData = Publish data into topic   * @pData = Publish data into topic
  * @datlen = Publish data length   * @datlen = Publish data length
 * return: -1 error or >-1 message size for send * return: NULL error or allocated PUBLISH message
  */   */
int mqtt_msgPUBLISH(mqtt_msg_t * __restrict buf, const char *csTopic, mqtt_msg_t *mqtt_msgPUBLISH(const char *csTopic, unsigned short msgID, 
                unsigned short msgID, unsigned char Dup, unsigned char QOS,                 unsigned char Dup, unsigned char QOS, 
                 unsigned char Retain, const void *pData, int datlen);                  unsigned char Retain, const void *pData, int datlen);
 /*  /*
  * mqtt_msgPUBACK() Create PUBACK message   * mqtt_msgPUBACK() Create PUBACK message
  *   *
  * @buf = Message buffer  
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated PUBACK message
  */   */
inline int mqtt_msgPUBACK(mqtt_msg_t * __restrict buf, unsigned short msgID);mqtt_msg_t *mqtt_msgPUBACK(unsigned short msgID);
 /*  /*
  * mqtt_msgPUBREC() Create PUBREC message   * mqtt_msgPUBREC() Create PUBREC message
  *   *
  * @buf = Message buffer  
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated PUBREC message
  */   */
inline int mqtt_msgPUBREC(mqtt_msg_t * __restrict buf, unsigned short msgID);mqtt_msg_t *mqtt_msgPUBREC(unsigned short msgID);
 /*  /*
  * mqtt_msgPUBREL() Create PUBREL message   * mqtt_msgPUBREL() Create PUBREL message
  *   *
  * @buf = Message buffer  
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated PUBREL message
  */   */
inline int mqtt_msgPUBREL(mqtt_msg_t * __restrict buf, unsigned short msgID);mqtt_msg_t *mqtt_msgPUBREL(unsigned short msgID);
 /*  /*
  * mqtt_msgPUBCOMP() Create PUBCOMP message   * mqtt_msgPUBCOMP() Create PUBCOMP message
  *   *
  * @buf = Message buffer  
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated PUBCOMP message
  */   */
inline int mqtt_msgPUBCOMP(mqtt_msg_t * __restrict buf, unsigned short msgID);mqtt_msg_t *mqtt_msgPUBCOMP(unsigned short msgID);
   
 /*  /*
  * mqtt_msgSUBSCRIBE() Create SUBSCRIBE message   * mqtt_msgSUBSCRIBE() Create SUBSCRIBE message
Line 438  int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsi Line 519  int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsi
  * mqtt_readCONNECT() Read elements from CONNECT message   * mqtt_readCONNECT() Read elements from CONNECT message
  *   *
  * @buf = Message buffer   * @buf = Message buffer
 * @kasec = Keep Alive in seconds for current connection * @KASec = Keep Alive in seconds for current connection
  * @psConnID = ConnectID   * @psConnID = ConnectID
  * @connLen = ConnectID length   * @connLen = ConnectID length
  * @psUser = Username if !=NULL   * @psUser = Username if !=NULL
Line 449  int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsi Line 530  int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsi
  * @psWillMessage = Will Message, may be NULL if !NULL must be free() after use!   * @psWillMessage = Will Message, may be NULL if !NULL must be free() after use!
  * return: .reserved == 1 is error or == 0 connection flags & msg ok   * return: .reserved == 1 is error or == 0 connection flags & msg ok
  */   */
mqtthdr_connack_t mqtt_readCONNECT(mqtt_msg_t * __restrict buf, unsigned short *kasec, mqtthdr_connack_t mqtt_readCONNECT(mqtt_msg_t * __restrict buf, unsigned short *KASec, 
                 char * __restrict psConnID, int connLen,                   char * __restrict psConnID, int connLen, 
                 char * __restrict psUser, int userLen, char * __restrict psPass, int passLen,                    char * __restrict psUser, int userLen, char * __restrict psPass, int passLen,  
                 char ** __restrict psWillTopic, char ** __restrict psWillMessage);                  char ** __restrict psWillTopic, char ** __restrict psWillMessage);
Line 489  int mqtt_readPINGRESP(mqtt_msg_t * __restrict buf); Line 570  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 530  u_short mqtt_readPUBCOMP(mqtt_msg_t * __restrict buf); Line 610  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 542  struct mqtthdr *mqtt_readSUBSCRIBE(mqtt_msg_t * __rest Line 622  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 559  struct mqtthdr *mqtt_readUNSUBSCRIBE(mqtt_msg_t * __re Line 639  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.1.1.2.1  
changed lines
  Added in v.1.3.4.10


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