Diff for /libaitmqtt/src/conn.c between versions 1.3.12.1 and 1.3.12.2

version 1.3.12.1, 2022/09/13 20:37:21 version 1.3.12.2, 2022/09/13 22:20:59
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 49  SUCH DAMAGE. Line 49  SUCH DAMAGE.
 /*  /*
  * mqtt_msgCONNECT() Create CONNECT message   * mqtt_msgCONNECT() Create CONNECT message
  *   *
  * @buf = Message buffer  
  * @csConnID = ConnectID   * @csConnID = ConnectID
 * @kasec = Keep alive timeout, if =0 default timeout for MQTT * @Version = MQTT version
  * @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 59  SUCH DAMAGE. Line 59  SUCH DAMAGE.
  * @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
  */   */
intmqtt_msg_t *
mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const char *csConnID, mqtt_msgCONNECT(const char *csConnID, u_char Version, u_short KASec, 
                u_short kasec, const char *csUser, const char *csPass,                 const char *csUser, const char *csPass, 
                 const char *csWillTopic, const char *csWillMessage,                   const char *csWillTopic, const char *csWillMessage, 
                 u_char ClrSess, u_char WillQOS, u_char WillRetain)                  u_char ClrSess, u_char WillQOS, u_char WillRetain)
 {  {
         int len, siz = 0;          int len, siz = 0;
         u_int n, *l;          u_int n, *l;
           mqtt_msg_t *msg = NULL;
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_var_t *var, *cid, *topic, *wmsg, *user, *pass;          mqtthdr_var_t *var, *cid, *topic, *wmsg, *user, *pass;
         mqtthdr_protover_t *proto;  
         mqtthdr_connflgs_t *flags;          mqtthdr_connflgs_t *flags;
         mqtt_len_t *ka;          mqtt_len_t *ka;
         void *data;          void *data;
   
        if (!buf || !csConnID)        if (!csConnID)
                return -1;                return NULL;
         if (strlen(csConnID) >= MQTT_CONNID_MAX) {          if (strlen(csConnID) >= MQTT_CONNID_MAX) {
                 mqtt_SetErr(EINVAL, "Invalid argument ConnID is too long (max %d bytes)",                   mqtt_SetErr(EINVAL, "Invalid argument ConnID is too long (max %d bytes)", 
                                 MQTT_CONNID_MAX - 1);                                  MQTT_CONNID_MAX - 1);
                return -1;                return NULL;
         }          }
           if (Version < MQTT_PROTO_VER_3 || Version > MQTT_PROTO_VER_5) {
                   mqtt_SetErr(EINVAL, "Unsupported version");
                   return NULL;
           }
         if (csUser && strlen(csUser) >= MQTT_CRED_MAX) {          if (csUser && strlen(csUser) >= MQTT_CRED_MAX) {
                 mqtt_SetErr(EINVAL, "Invalid argument Username is too long (max %d bytes)",                   mqtt_SetErr(EINVAL, "Invalid argument Username is too long (max %d bytes)", 
                                 MQTT_CRED_MAX - 1);                                  MQTT_CRED_MAX - 1);
                return -1;                return NULL;
         }          }
         if (csPass && strlen(csPass) >= MQTT_CRED_MAX) {          if (csPass && strlen(csPass) >= MQTT_CRED_MAX) {
                 mqtt_SetErr(EINVAL, "Invalid argument Password is too long (max %d bytes)",                   mqtt_SetErr(EINVAL, "Invalid argument Password is too long (max %d bytes)", 
                                 MQTT_CRED_MAX - 1);                                  MQTT_CRED_MAX - 1);
                return -1;                return NULL;
         }          }
         if (WillQOS > MQTT_QOS_EXACTLY) {          if (WillQOS > MQTT_QOS_EXACTLY) {
                 mqtt_SetErr(EINVAL, "Invalid argument WillQOS - unknown QOS value");                  mqtt_SetErr(EINVAL, "Invalid argument WillQOS - unknown QOS value");
                return -1;                return NULL;
         }          }
   
         /* calculate message size */          /* calculate message size */
        len = 10 + sizeof(mqtt_len_t);                   /* connect arguments */        len = 10;        /* connect arguments: MQTT(6)+Version(1)+ConnFlags(1)+KeepAlive(2) */
         len += sizeof(mqtt_len_t) + strlen(csConnID);   /* connect id */          len += sizeof(mqtt_len_t) + strlen(csConnID);   /* connect id */
         if (csUser && *csUser) {                        /* user/pass */          if (csUser && *csUser) {                        /* user/pass */
                 len += sizeof(mqtt_len_t) + strlen(csUser);                  len += sizeof(mqtt_len_t) + strlen(csUser);
Line 116  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 120  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
         n = mqtt_encodeLen(len);                        /* message size */          n = mqtt_encodeLen(len);                        /* message size */
         siz += mqtt_sizeLen(n) - 1;                     /* length size */          siz += mqtt_sizeLen(n) - 1;                     /* length size */
   
        if (mqtt_msgRealloc(buf, siz + len) == -1)        if (!(msg = mqtt_msgAlloc(siz + len)))
                return -1;                return NULL;
         else {          else {
                data = buf->msg_base;                data = msg->msg_base;
                 hdr = (struct mqtthdr *) data;                  hdr = (struct mqtthdr *) data;
         }          }
   
         /* fixed header */          /* fixed header */
         MQTTHDR_MSGINIT(hdr);  
         hdr->mqtt_msg.type = MQTT_TYPE_CONNECT;          hdr->mqtt_msg.type = MQTT_TYPE_CONNECT;
         l = (u_int*) hdr->mqtt_len;          l = (u_int*) hdr->mqtt_len;
         *l = n;          *l = n;
Line 132  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 135  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
   
         /* variable header */          /* variable header */
         var = (mqtthdr_var_t*) data;          var = (mqtthdr_var_t*) data;
        var->var_sb.val = htons(strlen(MQTT_CONN_STR));        var->var_sb.val = htons(strlen(MQTT_PROTO_STR));
        memcpy(var->var_data, MQTT_CONN_STR, ntohs(var->var_sb.val));        memcpy(var->var_data, MQTT_PROTO_STR, ntohs(var->var_sb.val));
         data += MQTTHDR_VAR_SIZEOF(var);          data += MQTTHDR_VAR_SIZEOF(var);
   
         /* protocol version */          /* protocol version */
        proto = (mqtthdr_protover_t*) data++;        *(u_char*) data++ = Version;
        *proto = MQTT_PROTO_VER; 
   
         /* CONNECT header */          /* CONNECT header */
         flags = (mqtthdr_connflgs_t*) data++;          flags = (mqtthdr_connflgs_t*) data++;
Line 162  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 164  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
   
         /* keep alive */          /* keep alive */
         ka = (mqtt_len_t*) data;          ka = (mqtt_len_t*) data;
        ka->val = kasec ? htons(kasec) : htons(MQTT_KEEPALIVE);        ka->val = KASec ? htons(KASec) : htons(MQTT_KEEPALIVE);
         data += sizeof(mqtt_len_t);          data += sizeof(mqtt_len_t);
   
         /* ConnID */          /* ConnID */
Line 202  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 204  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
                 }                  }
         }          }
   
        return siz + len;        return msg;
 }  }
#if 0
 /*  /*
  * mqtt_msgCONNACK() Create CONNACK message   * mqtt_msgCONNACK() Create CONNACK message
  *   *
Line 212  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha Line 214  mqtt_msgCONNECT(mqtt_msg_t * __restrict buf, const cha
  * @retcode = Return code   * @retcode = Return code
  * return: -1 error or >-1 message size for send   * return: -1 error or >-1 message size for send
  */   */
intmqtt_msg_t *
mqtt_msgCONNACK(mqtt_msg_t * __restrict buf, u_char retcode)mqtt_msgCONNACK(u_char retcode)
 {  {
         int siz = 0;          int siz = 0;
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_connack_t *ack;          mqtthdr_connack_t *ack;
           mqtt_msg_t *msg = NULL;
   
         if (!buf)  
                 return -1;  
         if (retcode > MQTT_RETCODE_DENIED) {          if (retcode > MQTT_RETCODE_DENIED) {
                 mqtt_SetErr(EINVAL, "Invalid retcode");                  mqtt_SetErr(EINVAL, "Invalid retcode");
                return -1;                return NULL;
         }          }
   
        if (mqtt_msgRealloc(buf, sizeof(struct mqtthdr) + sizeof(mqtthdr_connack_t)) == -1)        if (!(msg = mqtt_msgAlloc(sizeof(struct mqtthdr) + sizeof(mqtthdr_connack_t))))
                return -1;                return NULL;
         else {          else {
                 hdr = (struct mqtthdr *) (buf->msg_base + siz);                  hdr = (struct mqtthdr *) (buf->msg_base + siz);
                 siz += sizeof(struct mqtthdr);                  siz += sizeof(struct mqtthdr);
Line 334  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short  Line 335  mqtt_readCONNECT(mqtt_msg_t * __restrict buf, u_short 
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_var_t *var;          mqtthdr_var_t *var;
         mqtt_len_t *ka;          mqtt_len_t *ka;
         mqtthdr_protover_t *proto;  
         int len, ret;          int len, ret;
         caddr_t pos;          caddr_t pos;
   
Line 563  mqtt_readPINGRESP(mqtt_msg_t * __restrict buf) Line 563  mqtt_readPINGRESP(mqtt_msg_t * __restrict buf)
   
         return len;          return len;
 }  }
   #endif

Removed from v.1.3.12.1  
changed lines
  Added in v.1.3.12.2


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