From 7ccb819f867493f8ec202ea3b39c94c198c64584 Mon Sep 17 00:00:00 2001 From: JustSomePwner Date: Thu, 30 Aug 2018 14:01:54 +0200 Subject: first --- server/client.cpp | 66 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 server/client.cpp (limited to 'server/client.cpp') diff --git a/server/client.cpp b/server/client.cpp new file mode 100644 index 0000000..37f20a2 --- /dev/null +++ b/server/client.cpp @@ -0,0 +1,66 @@ +#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; +} \ No newline at end of file -- cgit v1.2.3