Diff for /libaitmqtt/src/sub.c between versions 1.1.1.1.2.5 and 1.3

version 1.1.1.1.2.5, 2012/04/27 15:15:12 version 1.3, 2012/06/28 11:06:17
Line 60  int Line 60  int
 mqtt_msgSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics,   mqtt_msgSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics, 
                 u_short msgID, u_char Dup, u_char QOS)                  u_short msgID, u_char Dup, u_char QOS)
 {  {
        int siz = 0;        int len, siz = 0;
         u_int n, *l;
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_var_t *topic;          mqtthdr_var_t *topic;
         mqtt_len_t *mid;          mqtt_len_t *mid;
         mqtt_subscr_t *t;          mqtt_subscr_t *t;
         u_char *qos;          u_char *qos;
           void *data;
   
         if (!buf || !Topics)          if (!buf || !Topics)
                 return -1;                  return -1;
Line 78  mqtt_msgSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_su Line 80  mqtt_msgSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_su
                 return -1;                  return -1;
         }          }
   
        if (mqtt_msgRealloc(buf, MQTTMSG_MAX) == -1)        /* calculate message size */
         len = sizeof(mqtt_len_t);                               /* msgid */
         for (t = Topics; t && t->sub_topic.msg_base; t++)       /* subscribes & qos */
                 len += sizeof(mqtt_len_t) + t->sub_topic.msg_len + 1;
 
         /* calculate header size */
         siz = sizeof(struct mqtthdr);                           /* mqtt fixed header */
         n = mqtt_encodeLen(len);                                /* message size */
         siz += mqtt_sizeLen(n) - 1;                             /* length size */
 
         if (mqtt_msgRealloc(buf, siz + len) == -1)
                 return -1;                  return -1;
         else {          else {
                hdr = (struct mqtthdr *) (buf->msg_base + siz);                data = buf->msg_base;
                siz += sizeof(struct mqtthdr);                hdr = (struct mqtthdr *) data;
         }          }
   
           /* fixed header */
           MQTTHDR_MSGINIT(hdr);
           hdr->mqtt_msg.type = MQTT_TYPE_SUBSCRIBE;
           hdr->mqtt_msg.qos = QOS;
           hdr->mqtt_msg.dup = Dup ? 1 : 0;
           hdr->mqtt_msg.retain = 0;
           l = (u_int*) hdr->mqtt_len;
           *l = n;
           data += siz;
   
         /* variable header */          /* variable header */
        mid = (mqtt_len_t*) (buf->msg_base + siz);        mid = (mqtt_len_t*) data;
         mid->val = htons(msgID);          mid->val = htons(msgID);
        siz += sizeof(mqtt_len_t);        data += sizeof(mqtt_len_t);
   
         /* payload with subscriptions */          /* payload with subscriptions */
         for (t = Topics; t && t->sub_topic.msg_base; t++) {          for (t = Topics; t && t->sub_topic.msg_base; t++) {
                topic = (mqtthdr_var_t*) (buf->msg_base + siz);                topic = (mqtthdr_var_t*) data;
                 topic->var_sb.val = htons(t->sub_topic.msg_len);                  topic->var_sb.val = htons(t->sub_topic.msg_len);
                 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));
                siz += MQTTHDR_VAR_SIZEOF(topic);                data += MQTTHDR_VAR_SIZEOF(topic);
                qos = (buf->msg_base + siz);                qos = data++;
                 *qos = t->sub_ret;                  *qos = t->sub_ret;
                 siz++;  
         }          }
   
        /* fixed header */        return siz + len;
        MQTTHDR_MSGINIT(hdr); 
        hdr->mqtt_msg.type = MQTT_TYPE_SUBSCRIBE; 
        hdr->mqtt_msg.qos = QOS; 
        hdr->mqtt_msg.dup = Dup ? 1 : 0; 
        hdr->mqtt_msg.retain = 0; 
        *hdr->mqtt_len = mqtt_encodeLen(siz - sizeof(struct mqtthdr)); 
 
        return siz; 
 }  }
   
 /*  /*
Line 173  int Line 186  int
 mqtt_msgUNSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics,   mqtt_msgUNSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_subscr_t * __restrict Topics, 
                 u_short msgID, u_char Dup, u_char QOS)                  u_short msgID, u_char Dup, u_char QOS)
 {  {
        int siz = 0;        int len, siz = 0;
         u_int n, *l;
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
         mqtthdr_var_t *topic;          mqtthdr_var_t *topic;
         mqtt_len_t *mid;          mqtt_len_t *mid;
         mqtt_subscr_t *t;          mqtt_subscr_t *t;
           void *data;
   
         if (!buf || !Topics)          if (!buf || !Topics)
                 return -1;                  return -1;
Line 190  mqtt_msgUNSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_ Line 205  mqtt_msgUNSUBSCRIBE(mqtt_msg_t * __restrict buf, mqtt_
                 return -1;                  return -1;
         }          }
   
        if (mqtt_msgRealloc(buf, MQTTMSG_MAX) == -1)        /* calculate message size */
         len = sizeof(mqtt_len_t);                               /* msgid */
         for (t = Topics; t && t->sub_topic.msg_base; t++)       /* subscribes */
                 len += sizeof(mqtt_len_t) + t->sub_topic.msg_len;
 
         /* calculate header size */
         siz = sizeof(struct mqtthdr);                           /* mqtt fixed header */
         n = mqtt_encodeLen(len);                                /* message size */
         siz += mqtt_sizeLen(n) - 1;                             /* length size */
 
         if (mqtt_msgRealloc(buf, siz + len) == -1)
                 return -1;                  return -1;
         else {          else {
                hdr = (struct mqtthdr *) (buf->msg_base + siz);                data = buf->msg_base;
                siz += sizeof(struct mqtthdr);                hdr = (struct mqtthdr *) data;
         }          }
   
           /* fixed header */
           MQTTHDR_MSGINIT(hdr);
           hdr->mqtt_msg.type = MQTT_TYPE_UNSUBSCRIBE;
           hdr->mqtt_msg.qos = QOS;
           hdr->mqtt_msg.dup = Dup ? 1 : 0;
           hdr->mqtt_msg.retain = 0;
           l = (u_int*) hdr->mqtt_len;
           *l = n;
           data += siz;
   
         /* variable header */          /* variable header */
         mid = (mqtt_len_t*) (buf->msg_base + siz);          mid = (mqtt_len_t*) (buf->msg_base + siz);
         mid->val = htons(msgID);          mid->val = htons(msgID);
        siz += sizeof(mqtt_len_t);        data += sizeof(mqtt_len_t);
   
         /* payload with subscriptions */          /* payload with subscriptions */
         for (t = Topics; t && t->sub_topic.msg_base; t++) {          for (t = Topics; t && t->sub_topic.msg_base; t++) {
                topic = (mqtthdr_var_t*) (buf->msg_base + siz);                topic = (mqtthdr_var_t*) data;
                 topic->var_sb.val = htons(t->sub_topic.msg_len);                  topic->var_sb.val = htons(t->sub_topic.msg_len);
                 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));
                siz += MQTTHDR_VAR_SIZEOF(topic);                data += MQTTHDR_VAR_SIZEOF(topic);
         }          }
   
        /* fixed header */        return siz + len;
        MQTTHDR_MSGINIT(hdr); 
        hdr->mqtt_msg.type = MQTT_TYPE_UNSUBSCRIBE; 
        hdr->mqtt_msg.qos = QOS; 
        hdr->mqtt_msg.dup = Dup ? 1 : 0; 
        hdr->mqtt_msg.retain = 0; 
        *hdr->mqtt_len = mqtt_encodeLen(siz - sizeof(struct mqtthdr)); 
 
        return siz; 
 }  }
   
 /*  /*

Removed from v.1.1.1.1.2.5  
changed lines
  Added in v.1.3


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