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

version 1.3.12.1, 2022/09/14 21:44:21 version 1.3.12.2, 2022/09/15 13:50:14
Line 118  mqtt_msgSUBSCRIBE(mqtt_subscr_t ** __restrict Topics,  Line 118  mqtt_msgSUBSCRIBE(mqtt_subscr_t ** __restrict Topics, 
                 memcpy(topic->var_data, t->sub_topic.msg_base, ntohs(topic->var_sb.val));                  memcpy(topic->var_data, t->sub_topic.msg_base, ntohs(topic->var_sb.val));
                 data += MQTTHDR_VAR_SIZEOF(topic);                  data += MQTTHDR_VAR_SIZEOF(topic);
                 qos = data++;                  qos = data++;
                *qos = t->sub_ret;                *qos = t->sub_qos;
         }          }
   
         return msg;          return msg;
Line 159  mqtt_msgSUBACK(mqtt_subscr_t ** __restrict Topics, u_s Line 159  mqtt_msgSUBACK(mqtt_subscr_t ** __restrict Topics, u_s
         /* QoS payload from subscriptions */          /* QoS payload from subscriptions */
         for (t = *Topics; t && t->sub_topic.msg_base; t++, siz++) {          for (t = *Topics; t && t->sub_topic.msg_base; t++, siz++) {
                 qos = (msg->msg_base + siz);                  qos = (msg->msg_base + siz);
                *qos = t->sub_ret;                *qos = t->sub_qos;
         }          }
   
         /* fixed header */          /* fixed header */
Line 273  mqtt_msgUNSUBACK(u_short msgID) Line 273  mqtt_msgUNSUBACK(u_short msgID)
   
         return msg;          return msg;
 }  }
   
   
 /* ============= decode ============ */  
   
 #if 0  
 /*  
  * mqtt_readSUBSCRIBE() Read SUBSCRIBE message  
  *  
  * @buf = Message buffer  
  * @msgID = MessageID  
  * @subscr = Subscriptions, must be free after use with mqtt_subFree()  
  * return: -1 error or >-1 elements into subscr  
  */  
 int  
 mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, u_short *msgID, mqtt_subscr_t **subscr)  
 {  
         register int i;  
         int len, ret;  
         struct mqtthdr *hdr;  
         mqtthdr_var_t *var;  
         mqtt_subscr_t *subs;  
         mqtt_len_t *v;  
         caddr_t pos;  
   
         if (!buf || !msgID || !subscr)  
                 return -1;  
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_SUBSCRIBE, &ret, &len);  
         if (!hdr)  
                 return -1;  
         pos = buf->msg_base + ret + 1;  
         v = (mqtt_len_t*) pos;  
   
         /* MessageID */  
         len -= sizeof(mqtt_len_t);  
         if (len < 0) {  
                 mqtt_SetErr(EINVAL, "Short message length %d", len);  
                 return -1;  
         } else {  
                 *msgID = ntohs(v->val);  
                 pos += sizeof(mqtt_len_t);  
         }  
   
         subs = mqtt_subAlloc(0);  
         if (!subs)  
                 return -1;  
         else  
                 *subscr = subs;  
   
         /* Subscribes */  
         for (i = 0; len > 0; i++) {  
                 var = (mqtthdr_var_t*) pos;  
                 len -= MQTTHDR_VAR_SIZEOF(var) + 1;  
                 if (len < 0) {  
                         mqtt_subFree(subscr);  
                         mqtt_SetErr(EINVAL, "Short message length %d", len);  
                         return -1;  
                 }  
                 if (!mqtt_subRealloc(&subs, i + 1)) {  
                         mqtt_subFree(subscr);  
                         return -1;  
                 } else  
                         *subscr = subs;  
   
                 memset(&subs[i], 0, sizeof subs[i]);  
                 subs[i].sub_topic.msg_len = ntohs(var->var_sb.val);  
                 subs[i].sub_topic.msg_base = malloc(subs[i].sub_topic.msg_len + 1);  
                 if (!subs[i].sub_topic.msg_base) {  
                         LOGERR;  
                         mqtt_subFree(subscr);  
                         return -1;  
                 } else {  
                         memcpy(subs[i].sub_topic.msg_base, var->var_data, subs[i].sub_topic.msg_len);  
                         ((char*) subs[i].sub_topic.msg_base)[subs[i].sub_topic.msg_len] = 0;  
                 }  
                 pos += MQTTHDR_VAR_SIZEOF(var);  
   
                 subs[i].sub_ret = *pos;  
                 pos++;  
         }  
   
         return i;  
 }  
   
 /*  
  * mqtt_readSUBACK() Read SUBACK message  
  *  
  * @buf = Message buffer  
  * @msgID = MessageID  
  * @subqos = Subscribes QoS, must be free after use with free()  
  * return: -1 error or >-1 readed subscribes QoS elements  
  */  
 int  
 mqtt_readSUBACK(mqtt_msg_t * __restrict buf, u_short *msgID, u_char **subqos)  
 {  
         int len, ret;  
         struct mqtthdr *hdr;  
         mqtt_len_t *v;  
         caddr_t pos;  
   
         if (!buf || !msgID || !subqos)  
                 return -1;  
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_SUBACK, &ret, &len);  
         if (!hdr)  
                 return -1;  
         pos = buf->msg_base + ret + 1;  
         v = (mqtt_len_t*) pos;  
   
         /* MessageID */  
         len -= sizeof(mqtt_len_t);  
         if (len < 0) {  
                 mqtt_SetErr(EINVAL, "Short message length %d", len);  
                 return -1;  
         } else {  
                 *msgID = ntohs(v->val);  
                 pos += sizeof(mqtt_len_t);  
         }  
   
         /* Subscribes */  
         *subqos = malloc(len);  
         if (!*subqos) {  
                 LOGERR;  
                 return -1;  
         } else  
                 memcpy(*subqos, pos, len);  
   
         return len;  
 }  
   
 /*  
  * mqtt_readUNSUBSCRIBE() Read UNSUBSCRIBE message  
  *  
  * @buf = Message buffer  
  * @msgID = MessageID  
  * @subscr = Subscriptions, must be free after use with mqtt_subFree()  
  * return: -1 error or >-1 elements into subscr  
  */  
 int  
 mqtt_readUNSUBSCRIBE(mqtt_msg_t * __restrict buf, u_short *msgID, mqtt_subscr_t **subscr)  
 {  
         register int i;  
         int len, ret;  
         struct mqtthdr *hdr;  
         mqtthdr_var_t *var;  
         mqtt_subscr_t *subs;  
         mqtt_len_t *v;  
         caddr_t pos;  
   
         if (!buf || !msgID || !subscr)  
                 return -1;  
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_UNSUBSCRIBE, &ret, &len);  
         if (!hdr)  
                 return -1;  
         pos = buf->msg_base + ret + 1;  
         v = (mqtt_len_t*) pos;  
   
         /* MessageID */  
         len -= sizeof(mqtt_len_t);  
         if (len < 0) {  
                 mqtt_SetErr(EINVAL, "Short message length %d", len);  
                 return -1;  
         } else {  
                 *msgID = ntohs(v->val);  
                 pos += sizeof(mqtt_len_t);  
         }  
   
         subs = mqtt_subAlloc(0);  
         if (!subs)  
                 return -1;  
         else  
                 *subscr = subs;  
   
         /* Subscribes */  
         for (i = 0; len > 0; i++) {  
                 var = (mqtthdr_var_t*) pos;  
                 len -= MQTTHDR_VAR_SIZEOF(var);  
                 if (len < 0) {  
                         mqtt_subFree(subscr);  
                         mqtt_SetErr(EINVAL, "Short message length %d", len);  
                         return -1;  
                 }  
                 if (!mqtt_subRealloc(&subs, i + 1)) {  
                         mqtt_subFree(subscr);  
                         return -1;  
                 } else  
                         *subscr = subs;  
   
                 memset(&subs[i], 0, sizeof subs[i]);  
                 subs[i].sub_topic.msg_len = ntohs(var->var_sb.val);  
                 subs[i].sub_topic.msg_base = malloc(subs[i].sub_topic.msg_len + 1);  
                 if (!subs[i].sub_topic.msg_base) {  
                         LOGERR;  
                         mqtt_subFree(subscr);  
                         return -1;  
                 } else {  
                         memcpy(subs[i].sub_topic.msg_base, var->var_data, subs[i].sub_topic.msg_len);  
                         ((char*) subs[i].sub_topic.msg_base)[subs[i].sub_topic.msg_len] = 0;  
                 }  
                 pos += MQTTHDR_VAR_SIZEOF(var);  
         }  
   
         return i;  
 }  
   
 /*  
  * mqtt_readUNSUBACK() Read UNSUBACK message  
  *  
  * @buf = Message buffer  
  * return: -1 error or MessageID  
  */  
 u_short  
 mqtt_readUNSUBACK(mqtt_msg_t * __restrict buf)  
 {  
         int len, ret;  
         struct mqtthdr *hdr;  
         mqtt_len_t *v;  
         caddr_t pos;  
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_UNSUBACK, &ret, &len);  
         if (!hdr)  
                 return (u_short) -1;  
         if (len < sizeof(mqtt_len_t)) {  
                 mqtt_SetErr(EINVAL, "Short message length %d", len);  
                 return (u_short) -1;  
         } else {  
                 pos = buf->msg_base + ret + 1;  
                 v = (mqtt_len_t*) pos;  
         }  
   
         return ntohs(v->val);  
 }  
 #endif  

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


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