Guest User

Untitled

a guest
Dec 7th, 2017
50
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. bool NetworkMessage::read_socket()
  2. {
  3.     boost::system::error_code error;
  4.     boost::asio::ip::tcp::socket& s = Connection::instance()->socket;
  5.     m_size = boost::asio::read(s, boost::asio::buffer(buffer(), NETWORKMESSAGE_HEADERSIZE), boost::asio::transfer_all(), error);
  6.     if(error == boost::asio::error::eof)
  7.         return false;
  8.     else if(error)
  9.         throw boost::system::system_error(error);
  10.  
  11.     quint16 data_size = m_buffer[0] | m_buffer[1] << 8;
  12.     if(m_size != NETWORKMESSAGE_HEADERSIZE || (data_size > NETWORKMESSAGE_MAXSIZE - NETWORKMESSAGE_HEADERSIZE))
  13.         return false;
  14.  
  15.     m_size += boost::asio::read(s, boost::asio::buffer(body_buffer(NETWORKMESSAGE_HEADERSIZE), data_size), boost::asio::transfer_all(), error);
  16.     if(m_size <= NETWORKMESSAGE_HEADERSIZE || (data_size != m_size - NETWORKMESSAGE_HEADERSIZE))
  17.         return false;
  18.  
  19.     m_position = NETWORKMESSAGE_HEADERSIZE;
  20.     /* if current version >= 830 */
  21.     quint32 recv_checksum = read<quint32>(true);
  22.     quint32 checksum = calculate_adler(body_buffer(6), m_size - 6);
  23.     if(recv_checksum != checksum)
  24.         return false;
  25.  
  26.     m_position += sizeof(quint32);
  27.     return true;
  28. }
Add Comment
Please, Sign In to add comment