Diff for /mqtt/src/Attic/sub.c between versions 1.1.2.9 and 1.1.2.10

version 1.1.2.9, 2011/12/05 22:17:39 version 1.1.2.10, 2011/12/06 10:33:37
Line 222  mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, u_short  Line 222  mqtt_msgUNSUBACK(mqtt_msg_t * __restrict buf, u_short 
 /* ============= decode ============ */  /* ============= decode ============ */
   
 /*  /*
    * mqtt_readSUBSCRIBE() Read SUBSCRIBE message
    *
    * @buf = Message buffer
    * @msgID = MessageID
    * @subscr = Subscriptions, must be free after use with mqtt_subFree()
    * return: NULL error or !=NULL MQTT fixed header
    */
   struct mqtthdr *
   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_v_t *v;
           caddr_t pos;
   
           if (!buf || !msgID || !subscr)
                   return NULL;
   
           hdr = _mqtt_readHEADER(buf, MQTT_TYPE_SUBSCRIBE, &ret, &len);
           if (!hdr)
                   return NULL;
           pos = buf->msg_base + ret + 1;
           v = (mqtt_v_t*) pos;
   
           /* MessageID */
           len -= sizeof(mqtt_v_t);
           if (len < 0) {
                   mqtt_SetErr(EINVAL, "Error:: short message length %d", len);
                   return NULL;
           } else {
                   *msgID = ntohs(v->val);
                   pos += sizeof(mqtt_v_t);
           }
   
           subs = mqtt_subAlloc(0);
           if (!subs)
                   return NULL;
           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, "Error:: short message length %d", len);
                           return NULL;
                   }
                   subs = mqtt_subRealloc(subs, i + 1);
                   if (!subs) {
                           mqtt_subFree(subscr);
                           return NULL;
                   } else
                           *subscr = subs;
   
                   memset(&subs[i], 0, sizeof subs[i]);
                   subs[i].sub_topic._size = ntohs(var->var_sb.val);
                   subs[i].sub_topic._base = malloc(subs[i].sub_topic._size);
                   if (!subs[i].sub_topic._base) {
                           LOGERR;
                           mqtt_subFree(subscr);
                           return NULL;
                   } else
                           memcpy(subs[i].sub_topic._base, var->var_data, subs[i].sub_topic._size);
                   pos += MQTTHDR_VAR_SIZEOF(var);
   
                   subs[i].sub_ret = *pos;
                   pos++;
           }
   
           return hdr;
   }
   
   /*
  * mqtt_readUNSUBACK() Read UNSUBACK message   * mqtt_readUNSUBACK() Read UNSUBACK message
  *   *
  * @buf = Message buffer   * @buf = Message buffer

Removed from v.1.1.2.9  
changed lines
  Added in v.1.1.2.10


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