diff options
| author | JustSomePwner <crotchyalt@gmail.com> | 2018-08-30 14:01:54 +0200 |
|---|---|---|
| committer | JustSomePwner <crotchyalt@gmail.com> | 2018-08-30 14:01:54 +0200 |
| commit | 7ccb819f867493f8ec202ea3b39c94c198c64584 (patch) | |
| tree | 94622e61af0ff359e3d6689cf274d74f60b2492a /server/client.cpp | |
| parent | 564d979b79e8a5aaa5014eba0ecd36c61575934f (diff) | |
first
Diffstat (limited to 'server/client.cpp')
| -rw-r--r-- | server/client.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
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 |
