#include "client.hpp" std::vector< byte > server::c_client::receive_message( ) { std::vector< uint8_t > ret; char buffer[ BUFFER_SIZE ]; int received = 0; while( true ) { received = recv( m_socket, buffer, BUFFER_SIZE, 0 ); if( received < 0 ) break; for( int i{ }; i < received; ++i ) ret.push_back( buffer[ i ] ); if( received < BUFFER_SIZE ) break; } if( ret.size( ) ) { decode_buffer( ret.data( ), ret.size( ) ); ret.push_back( 0 ); ret.erase( ret.begin( ) ); } return ret; } bool server::c_client::send_message( byte* msg, size_t length ) { auto new_buffer = ( uint8_t* )( malloc( length + 1 ) ); auto key = util::random_number( 0, 255 ) & 0xff; new_buffer[ 0 ] = key; memcpy( new_buffer + 1, msg, length ); for( size_t i = 1; i < length + 1; ++i ) { new_buffer[ i ] ^= key; } int result = send( m_socket, ( char* )new_buffer, length + 1, 0 ); if( result == -1 ) { printf( "error sending message to %s: %d\n", get_ip( ), WSAGetLastError( ) ); free( new_buffer ); return false; } free( new_buffer ); return true; } bool server::c_client::handle( ) { char msg[ ] = "hello client"; if( !send_message( ( byte* )( msg ), sizeof( msg ) ) ) return false; auto buf = receive_message( ); if( buf.size( ) ) { printf( "message received: %s\n", buf.data( ) ); } return true; }