Diff for /libaitmqtt/inc/aitmqtt.h between versions 1.1.1.1.2.9 and 1.3.4.14

version 1.1.1.1.2.9, 2012/04/26 12:33:14 version 1.3.4.14, 2022/09/16 04:14:03
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, 2011, 2012Copyright 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 MQTT_CONNID_MAX                24
#define MAX_CRED           13#define MQTT_CRED_MAX                13
#define MQTTMSG_MAX             65529#define MQTTMSG_MAX             65535
 #define MQTTMSG_BIN_MAX         65535
 #define MQTT_DATA_MAX           268435455  #define MQTT_DATA_MAX           268435455
   
#define MQTT_PROTO_VER          3#define MQTT_PROTO_VER_3      3
#define MQTT_KEEPALIVE          10#define MQTT_PROTO_VER_311      4
#define MQTT_DEFAULT_MSGID      0xDEBA#define MQTT_PROTO_VER_5        5
 #define MQTT_KEEPALIVE          60
   
 /* FIXED HEADER */  /* FIXED HEADER */
   
Line 69  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 142  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 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_qos;
         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 207  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 223  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 253  int mqtt_sqlTopic(const char *csInput, char * __restri Line 311  int mqtt_sqlTopic(const char *csInput, char * __restri
  * @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 261  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 300  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 308  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 318  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 365  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
  *   *
  * @buf = Message buffer  
  * @Topics = MQTT subscription topics   * @Topics = MQTT subscription topics
  * @msgID = MessageID   * @msgID = MessageID
 * @Dup = Duplicate message * return: NULL error or allocated SUBSCRIBE message
 * @QOS = QoS 
 * return: -1 error or >-1 message size for send 
  */   */
intmqtt_msg_t *mqtt_msgSUBSCRIBE(mqtt_subscr_t * __restrict Topics, unsigned short msgID);
mqtt_msgSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics,  
                unsigned short msgID, unsigned char Dup, unsigned char QOS); 
 /*  /*
  * mqtt_msgSUBACK() Create SUBACK message   * mqtt_msgSUBACK() Create SUBACK message
  *   *
  * @buf = Message buffer  
  * @Topics = MQTT subscription topics   * @Topics = MQTT subscription topics
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated SUBACK message
  */   */
int mqtt_msgSUBACK(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics, mqtt_msg_t *mqtt_msgSUBACK(mqtt_subscr_t * __restrict Topics, unsigned short msgID);
                unsigned short msgID); 
 /*  /*
  * mqtt_msgUNSUBSCRIBE() Create UNSUBSCRIBE message   * mqtt_msgUNSUBSCRIBE() Create UNSUBSCRIBE message
  *   *
  * @buf = Message buffer  
  * @Topics = MQTT subscription topics   * @Topics = MQTT subscription topics
  * @msgID = MessageID   * @msgID = MessageID
  * @Dup = Duplicate message   * @Dup = Duplicate message
  * @QOS = QoS   * @QOS = QoS
 * return: -1 error or >-1 message size for send * return: NULL error or allocated UNSUBSCRIBE message
  */   */
intmqtt_msg_t *mqtt_msgUNSUBSCRIBE(mqtt_subscr_t * __restrict Topics, 
mqtt_msgUNSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics,  
                 unsigned short msgID, unsigned char Dup, unsigned char QOS);                  unsigned short msgID, unsigned char Dup, unsigned char QOS);
 /*  /*
  * mqtt_msgUNSUBACK() Create UNSUBACK message   * mqtt_msgUNSUBACK() Create UNSUBACK message
  *   *
  * @buf = Message buffer  
  * @msgID = MessageID   * @msgID = MessageID
 * return: -1 error or >-1 message size for send * return: NULL error or allocated UNSUBACK message
  */   */
int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsigned short msgID);mqtt_msg_t *mqtt_msgUNSUBACK(unsigned short msgID);
   
   
 /*** RECEIVER FUNCTIONS ***/  /*** RECEIVER FUNCTIONS ***/
Line 455  int mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, unsi Line 509  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
  * @userLen = Username length   * @userLen = Username length
  * @psPass = Password for Username, only if csUser is set   * @psPass = Password for Username, only if csUser is set
  * @passLen = Password length   * @passLen = Password length
 * @psWillTopic = Will Topic if !=NULL Will Flags set into message and must be free() * @psWillTopic = Will Topic if !=NULL Will Flags set into message and must be e_free()
 * @psWillMessage = Will Message, may be NULL if !NULL must be free() after use! * @psWillMessage = Will Message, may be NULL if !NULL must be e_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 506  int mqtt_readPINGRESP(mqtt_msg_t * __restrict buf); Line 560  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
  *   *
Line 556  int mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, un Line 609  int mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, un
  *   *
  * @buf = Message buffer   * @buf = Message buffer
  * @msgID = MessageID   * @msgID = MessageID
 * @subqos = Subscribes QoS, must be free after use with free() * @subqos = Subscribes QoS, must be free after use with e_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, unsigned short *msgID, unsigned char **subqos);  int mqtt_readSUBACK(mqtt_msg_t * __restrict buf, unsigned short *msgID, unsigned char **subqos);

Removed from v.1.1.1.1.2.9  
changed lines
  Added in v.1.3.4.14


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