Diff for /libaitmqtt/src/pub.c between versions 1.1.1.1.2.3 and 1.1.1.1.2.5

version 1.1.1.1.2.3, 2012/04/27 15:15:12 version 1.1.1.1.2.5, 2012/06/11 08:37:41
Line 207  mqtt_msgPUBCOMP(mqtt_msg_t * __restrict buf, u_short m Line 207  mqtt_msgPUBCOMP(mqtt_msg_t * __restrict buf, u_short m
  * @psTopic = Topic   * @psTopic = Topic
  * @topicLen = Topic length   * @topicLen = Topic length
  * @msgID = MessageID   * @msgID = MessageID
 * @pData = Data buffer * @pData = Data buffer, may be NULL
 * @datLen = Data buffer length, if *datLen == 0 allocate memory for pData * return: -1 error or !=-1 allocated data buffer length
 * return: NULL error or !=NULL MQTT data buffer 
  */   */
void *int
 mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * __restrict psTopic, int topicLen,   mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * __restrict psTopic, int topicLen, 
                u_short *msgID, void * __restrict pData, int *datLen)                u_short *msgID, void ** __restrict pData)
 {  {
         int len, ret;          int len, ret;
         struct mqtthdr *hdr;          struct mqtthdr *hdr;
Line 222  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _ Line 221  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _
         caddr_t pos;          caddr_t pos;
   
         if (!buf || !psTopic || !msgID)          if (!buf || !psTopic || !msgID)
                return NULL;                return -1;
   
         hdr = _mqtt_readHEADER(buf, MQTT_TYPE_PUBLISH, &ret, &len);          hdr = _mqtt_readHEADER(buf, MQTT_TYPE_PUBLISH, &ret, &len);
         if (!hdr)          if (!hdr)
                return NULL;                return -1;
         pos = buf->msg_base + ret + 1;          pos = buf->msg_base + ret + 1;
         var = (mqtthdr_var_t*) pos;          var = (mqtthdr_var_t*) pos;
   
Line 234  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _ Line 233  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _
         len -= MQTTHDR_VAR_SIZEOF(var);          len -= MQTTHDR_VAR_SIZEOF(var);
         if (len < 0) {          if (len < 0) {
                 mqtt_SetErr(EINVAL, "Short message length %d", len);                  mqtt_SetErr(EINVAL, "Short message length %d", len);
                return NULL;                return -1;
         } else {          } else {
                 memset(psTopic, 0, topicLen--);                  memset(psTopic, 0, topicLen--);
                 memcpy(psTopic, var->var_data, ntohs(var->var_sb.val) > topicLen ?                   memcpy(psTopic, var->var_data, ntohs(var->var_sb.val) > topicLen ? 
Line 246  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _ Line 245  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _
         len -= sizeof(mqtt_len_t);          len -= sizeof(mqtt_len_t);
         if (len < 0) {          if (len < 0) {
                 mqtt_SetErr(EINVAL, "Short message length %d", len);                  mqtt_SetErr(EINVAL, "Short message length %d", len);
                return NULL;                return -1;
         } else {          } else {
                 *msgID = ntohs(v->val);                  *msgID = ntohs(v->val);
                 pos += sizeof(mqtt_len_t);                  pos += sizeof(mqtt_len_t);
Line 255  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _ Line 254  mqtt_readPUBLISH(mqtt_msg_t * __restrict buf, char * _
         /* data */          /* data */
         if (len < 0) {          if (len < 0) {
                 mqtt_SetErr(EINVAL, "Short message length %d", len);                  mqtt_SetErr(EINVAL, "Short message length %d", len);
                return NULL;                return -1;
        } else {        } else if (pData) {
                if (!*datLen || !pData) {                if (!(*pData = malloc(len + 1))) {
                        if (!(pData = malloc(len + 1))) {                        LOGERR;
                                LOGERR;                        return -1;
                                return NULL;                } else
                        } else {                        ((char*) (*pData))[len] = 0;
                                *datLen = len; 
                                ((char*) pData)[len] = 0; 
                        } 
                } 
   
                memset(pData, 0, *datLen);                memcpy(*pData, pos, len);
                if (len < *datLen) 
                        *datLen = len; 
                memcpy(pData, pos, *datLen); 
         }          }
   
        return pData;        return len;
 }  }
   
 /*  /*

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


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