bool SpotMessageHardwareInfo::parse (BufferType const & buff)
{
  if(buff.size() <= CHeaderSize)  return false; // message too short

  if( buff[CMessageItemQtyOffset] == 0 )
  {
    return true; // This request has no item codes, so this is a request for ALL available items in SPOT.
  }

  bool blRet = AbsSpotMessageWithAppCatCmdID::parse(buff);

  if( !blRet ) return false; // malformed header

  BufferType::const_iterator itDataBegining( buff.begin() + CMessageItemDataOffset );

  m_ItemVector.assign(itDataBegining, itDataBegining + buff[CMessageItemQtyOffset]);

  std::cout << "SpotMessageHardwareInfo::parse() - Length: " << size() << " bytes.\n";
  char* pcBuffer = new char[3 * size() + 2];
  std::cout << "\nMessage Data: " << Utils::dumpBuffer(pcBuffer, &buff.front(), size()) << std::endl << std::endl;
  delete[] pcBuffer;

  return true;
}