diff options
Diffstat (limited to 'server/client.cpp')
| -rw-r--r-- | server/client.cpp | 49 |
1 files changed, 40 insertions, 9 deletions
diff --git a/server/client.cpp b/server/client.cpp index 37f20a2..8039e65 100644 --- a/server/client.cpp +++ b/server/client.cpp @@ -2,7 +2,7 @@ std::vector< byte > server::c_client::receive_message( ) { std::vector< uint8_t > ret; - char buffer[ BUFFER_SIZE ]; + char buffer[ BUFFER_SIZE ]{ }; int received = 0; while( true ) { @@ -27,28 +27,59 @@ std::vector< byte > server::c_client::receive_message( ) { } bool server::c_client::send_message( byte* msg, size_t length ) { - auto new_buffer = ( uint8_t* )( malloc( length + 1 ) ); + auto buffer = std::make_unique< uint8_t[ ] >( length + 1 ); auto key = util::random_number( 0, 255 ) & 0xff; - new_buffer[ 0 ] = key; - memcpy( new_buffer + 1, + buffer[ 0 ] = key; + memcpy( buffer.get( ) + 1, msg, length ); - for( size_t i = 1; i < length + 1; ++i ) { - new_buffer[ i ] ^= key; + for( size_t i = 1; i <= length; ++i ) { + buffer[ i ] ^= key; } - int result = send( m_socket, ( char* )new_buffer, length + 1, 0 ); + int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 ); if( result == -1 ) { +#if WIN32 printf( "error sending message to %s: %d\n", get_ip( ), WSAGetLastError( ) ); +#else + printf( "error sending message to %s\n", + get_ip( ) ); +#endif + return false; + } + + return true; +} + +bool server::c_client::send_message( const char* msg ) { + auto length = strlen( msg ); + auto buffer = std::make_unique< uint8_t[ ] >( length + 1 ); + auto key = util::random_number( 0, 255 ) & 0xff; - free( new_buffer ); + buffer[ 0 ] = key; + memcpy( buffer.get( ) + 1, + msg, + length ); + + for ( size_t i = 1; i <= length; ++i ) { + buffer[ i ] ^= key; + } + + int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 ); + if ( result == -1 ) { +#if WIN32 + printf( "error sending message to %s: %d\n", + get_ip( ), WSAGetLastError( ) ); +#else + printf( "error sending message to %s\n", + get_ip( ) ); +#endif return false; } - free( new_buffer ); return true; } |
