Example #1
0
    Message*
    Packet::deserialize(std::istream& ifs)
    {
      std::vector<char> data;

      // Get the message header.
      data.resize(DUNE_IMC_CONST_HEADER_SIZE);
      ifs.read(&data[0], DUNE_IMC_CONST_HEADER_SIZE);

      // If we're at the EOF there's nothing more to do.
      if (ifs.eof())
        return 0;

      if (ifs.gcount() < DUNE_IMC_CONST_HEADER_SIZE)
        throw BufferTooShort();

      Header hdr;
      deserializeHeader(hdr, (uint8_t*)&data[0], DUNE_IMC_CONST_HEADER_SIZE);

      // Get remaining data.
      uint16_t remaining = hdr.size + DUNE_IMC_CONST_FOOTER_SIZE;
      data.resize(DUNE_IMC_CONST_HEADER_SIZE + remaining);
      ifs.read(&data[DUNE_IMC_CONST_HEADER_SIZE], remaining);

      if (ifs.gcount() < remaining)
        throw BufferTooShort();

      return deserializePayload(hdr, (uint8_t*)&data[0], DUNE_IMC_CONST_HEADER_SIZE + remaining, 0);
    }
Example #2
0
    Message*
    Packet::deserialize(std::istream& ifs, Utils::ByteBuffer& bfr)
    {
      // Get the message header.
      bfr.setSize(DUNE_IMC_CONST_HEADER_SIZE);
      ifs.read(bfr.getBufferSigned(), DUNE_IMC_CONST_HEADER_SIZE);

      // If we're at the EOF there's nothing more to do.
      if (ifs.eof())
        return 0;

      if (ifs.gcount() < DUNE_IMC_CONST_HEADER_SIZE)
        throw BufferTooShort();

      Header hdr;
      deserializeHeader(hdr, bfr.getBuffer(), DUNE_IMC_CONST_HEADER_SIZE);

      // Get remaining data.
      uint16_t remaining = hdr.size + DUNE_IMC_CONST_FOOTER_SIZE;
      bfr.setSize(DUNE_IMC_CONST_HEADER_SIZE + remaining);
      ifs.read(bfr.getBufferSigned() + DUNE_IMC_CONST_HEADER_SIZE, remaining);

      if (ifs.gcount() < remaining)
        throw BufferTooShort();

      return deserializePayload(hdr, bfr.getBuffer(), DUNE_IMC_CONST_HEADER_SIZE + remaining, 0);
    }
Example #3
0
/*******************************************************************************
 * @author	: Rohan Jyoti
 * @name	: deserializeMembershipList
 * @param	: Membership List to add to if necessary, Serialzed recv ML
 * @return	: void
 * @purpose	: Deserialized recv ML and add to specified ML if necessary
 ******************************************************************************/
void deserializeMembershipList(queue_t *incomingML, char *serializedML)
{
	//remove /r/n/r/n delimiter and payloadAction
	serializedML[strlen(serializedML) - (ME_DELIM_SIZE + PA_SIZE)] = '\0';
	int reached_end = NOT_SET;
	int pos, lastBrkpt=0;
	while(reached_end == NOT_SET)
	{
		for(pos=lastBrkpt; pos < (int)strlen(serializedML); pos++)
		{
			if(pos == (int)strlen(serializedML) - 1)
			{
				reached_end = IS_SET;
				//this is the case for last payload in series, or
				//if there is only one payload in ML
				
				char *tPayload;
				asprintf(&tPayload, "%s\r\n\r\n", serializedML+lastBrkpt);
				mPayload_t *aPayload = (mPayload_t *)deserializePayload(tPayload); //payload to add
				addToML(incomingML, aPayload);
				free(tPayload);
				break;
			}
			else
			{
				if(serializedML[pos] == '$')
				{
					char *tPayload = (char *)malloc(pos-lastBrkpt +1);
					strncpy(tPayload, serializedML + lastBrkpt, pos-lastBrkpt);
					tPayload[pos - lastBrkpt] = '\0';
					
					char *tPayload_delimited;
					asprintf(&tPayload_delimited, "%s\r\n\r\n", tPayload);
					mPayload_t *aPayload = (mPayload_t *)deserializePayload(tPayload_delimited); //payload to add
					addToML(incomingML, aPayload);
					lastBrkpt = pos + 1;
					free(tPayload);
					free(tPayload_delimited);
					break;
				}
			}
		}
	}
}
Example #4
0
    Message*
    Packet::deserialize(const uint8_t* bfr, uint16_t bfr_len, Message* msg)
    {
      Header hdr;

      // Get the message header.
      deserializeHeader(hdr, bfr, bfr_len);

      // Check if we can unpack the message.
      if (hdr.size > bfr_len - (DUNE_IMC_CONST_HEADER_SIZE + DUNE_IMC_CONST_FOOTER_SIZE))
        throw BufferTooShort();

      return deserializePayload(hdr, bfr, bfr_len, msg);
    }