Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- bool NetworkMessage::read_socket()
- {
- boost::system::error_code error;
- boost::asio::ip::tcp::socket& s = Connection::instance()->socket;
- m_size = boost::asio::read(s, boost::asio::buffer(buffer(), NETWORKMESSAGE_HEADERSIZE), boost::asio::transfer_all(), error);
- if(error == boost::asio::error::eof)
- return false;
- else if(error)
- throw boost::system::system_error(error);
- quint16 data_size = m_buffer[0] | m_buffer[1] << 8;
- if(m_size != NETWORKMESSAGE_HEADERSIZE || (data_size > NETWORKMESSAGE_MAXSIZE - NETWORKMESSAGE_HEADERSIZE))
- return false;
- m_size += boost::asio::read(s, boost::asio::buffer(body_buffer(NETWORKMESSAGE_HEADERSIZE), data_size), boost::asio::transfer_all(), error);
- if(m_size <= NETWORKMESSAGE_HEADERSIZE || (data_size != m_size - NETWORKMESSAGE_HEADERSIZE))
- return false;
- m_position = NETWORKMESSAGE_HEADERSIZE;
- /* if current version >= 830 */
- quint32 recv_checksum = read<quint32>(true);
- quint32 checksum = calculate_adler(body_buffer(6), m_size - 6);
- if(recv_checksum != checksum)
- return false;
- m_position += sizeof(quint32);
- return true;
- }
Add Comment
Please, Sign In to add comment