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

version 1.1.2.10, 2011/12/06 10:33:37 version 1.1.2.11, 2011/12/06 12:36:45
Line 300  mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, u_shor Line 300  mqtt_readSUBSCRIBE(mqtt_msg_t * __restrict buf, u_shor
 }  }
   
 /*  /*
    * 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_v_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_v_t*) pos;
   
           /* MessageID */
           len -= sizeof(mqtt_v_t);
           if (len < 0) {
                   mqtt_SetErr(EINVAL, "Error:: short message length %d", len);
                   return -1;
           } else {
                   *msgID = ntohs(v->val);
                   pos += sizeof(mqtt_v_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: NULL error or !=NULL MQTT fixed header
    */
   struct mqtthdr *
   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_v_t *v;
           caddr_t pos;
   
           if (!buf || !msgID || !subscr)
                   return NULL;
   
           hdr = _mqtt_readHEADER(buf, MQTT_TYPE_UNSUBSCRIBE, &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);
                   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);
           }
   
           return hdr;
   }
   
   /*
  * mqtt_readUNSUBACK() Read UNSUBACK message   * mqtt_readUNSUBACK() Read UNSUBACK message
  *   *
  * @buf = Message buffer   * @buf = Message buffer

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


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