src/common/buffer.cc
changeset 6291 8b3cd8b4d560
parent 6154 bce48d2a0a06
child 6396 e109fff32306
equal deleted inserted replaced
6290:e01b68222e60 6291:8b3cd8b4d560
   697 }
   697 }
   698 
   698 
   699 uint32_t
   699 uint32_t
   700 Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const
   700 Buffer::Serialize (uint8_t* buffer, uint32_t maxSize) const
   701 {
   701 {
   702   uint32_t* p = (uint32_t*)buffer;
   702   uint32_t* p = reinterpret_cast<uint32_t *> (buffer);
   703   uint32_t size = 0;
   703   uint32_t size = 0;
   704   
   704   
   705   NS_LOG_FUNCTION (this);
   705   NS_LOG_FUNCTION (this);
   706 
   706 
   707   // Add the zero data length
   707   // Add the zero data length
   766   // Serialzed everything successfully
   766   // Serialzed everything successfully
   767   return 1;
   767   return 1;
   768 }
   768 }
   769 
   769 
   770 uint32_t 
   770 uint32_t 
   771 Buffer::Deserialize (uint8_t *buffer, uint32_t size)
   771 Buffer::Deserialize (const uint8_t *buffer, uint32_t size)
   772 {
   772 {
   773   uint32_t* p = (uint32_t*)buffer;
   773   const uint32_t* p = reinterpret_cast<const uint32_t *> (buffer);
   774   uint32_t sizeCheck = size-4;
   774   uint32_t sizeCheck = size-4;
   775 
   775 
   776   NS_ASSERT (sizeCheck >= 4);
   776   NS_ASSERT (sizeCheck >= 4);
   777   uint32_t zeroDataLength = *p++;
   777   uint32_t zeroDataLength = *p++;
   778   sizeCheck -= 4;
   778   sizeCheck -= 4;
   785   uint32_t dataStartLength = *p++;
   785   uint32_t dataStartLength = *p++;
   786   sizeCheck -= 4;
   786   sizeCheck -= 4;
   787   AddAtStart (dataStartLength);
   787   AddAtStart (dataStartLength);
   788 
   788 
   789   NS_ASSERT (sizeCheck >= dataStartLength);
   789   NS_ASSERT (sizeCheck >= dataStartLength);
   790   Begin ().Write ((uint8_t*)p, dataStartLength);
   790   Begin ().Write (reinterpret_cast<uint8_t *> (const_cast<uint32_t *> (p)), dataStartLength);
   791   p += (((dataStartLength+3)&(~3))/4);
   791   p += (((dataStartLength+3)&(~3))/4); // Advance p, insuring 4 byte boundary
   792   sizeCheck -= ((dataStartLength+3)&(~3));
   792   sizeCheck -= ((dataStartLength+3)&(~3));
   793 
   793 
   794   // Add end data
   794   // Add end data
   795   NS_ASSERT (sizeCheck >= 4);
   795   NS_ASSERT (sizeCheck >= 4);
   796   uint32_t dataEndLength = *p++;
   796   uint32_t dataEndLength = *p++;
   798   AddAtEnd (dataEndLength);
   798   AddAtEnd (dataEndLength);
   799 
   799 
   800   NS_ASSERT (sizeCheck >= dataEndLength);
   800   NS_ASSERT (sizeCheck >= dataEndLength);
   801   Buffer::Iterator tmp = End ();
   801   Buffer::Iterator tmp = End ();
   802   tmp.Prev (dataEndLength);
   802   tmp.Prev (dataEndLength);
   803   tmp.Write ((uint8_t*)p, dataEndLength);
   803   tmp.Write (reinterpret_cast<uint8_t *> (const_cast<uint32_t *> (p)), dataEndLength);
   804   p += (((dataEndLength+3)&(~3))/4);
   804   p += (((dataEndLength+3)&(~3))/4); // Advance p, insuring 4 byte boundary
   805   sizeCheck -= ((dataEndLength+3)&(~3));
   805   sizeCheck -= ((dataEndLength+3)&(~3));
   806   
   806   
   807   NS_ASSERT (sizeCheck == 0);
   807   NS_ASSERT (sizeCheck == 0);
   808   // return zero if buffer did not 
   808   // return zero if buffer did not 
   809   // contain a complete message
   809   // contain a complete message