diff options
Diffstat (limited to 'server/client.cpp')
| -rw-r--r-- | server/client.cpp | 86 |
1 files changed, 76 insertions, 10 deletions
diff --git a/server/client.cpp b/server/client.cpp index 8039e65..2a0bfb7 100644 --- a/server/client.cpp +++ b/server/client.cpp @@ -1,5 +1,7 @@ #include "client.hpp" +#include "server.hpp" +/* std::vector< byte > server::c_client::receive_message( ) { std::vector< uint8_t > ret; char buffer[ BUFFER_SIZE ]{ }; @@ -25,8 +27,40 @@ std::vector< byte > server::c_client::receive_message( ) { return ret; } +*/ -bool server::c_client::send_message( byte* msg, size_t length ) { +void server::c_client::kill( ) { + closesocket( m_socket ); + printf( "%s disconnected\n", get_ip( ) ); +} + +std::string server::c_client::get_msg( ) { + std::string 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( ( uint8_t* )ret.data( ), ret.size( ) ); + // ret.push_back( 0 ); somehow broke things :/ + ret.erase( ret.begin( ) ); + } + + return ret; +} + +bool server::c_client::send_msg( byte* msg, size_t length ) { auto buffer = std::make_unique< uint8_t[ ] >( length + 1 ); auto key = util::random_number( 0, 255 ) & 0xff; @@ -41,7 +75,7 @@ bool server::c_client::send_message( byte* msg, size_t length ) { int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 ); if( result == -1 ) { -#if WIN32 +#if WIN printf( "error sending message to %s: %d\n", get_ip( ), WSAGetLastError( ) ); #else @@ -54,11 +88,14 @@ bool server::c_client::send_message( byte* msg, size_t length ) { return true; } -bool server::c_client::send_message( const char* msg ) { +bool server::c_client::send_msg( const char* msg ) { auto length = strlen( msg ); + printf( "%d\n", length ); auto buffer = std::make_unique< uint8_t[ ] >( length + 1 ); auto key = util::random_number( 0, 255 ) & 0xff; + memset( buffer.get( ), 0, length+1 ); + buffer[ 0 ] = key; memcpy( buffer.get( ) + 1, msg, @@ -70,7 +107,7 @@ bool server::c_client::send_message( const char* msg ) { int result = send( m_socket, ( char* )buffer.get( ), length + 1, 0 ); if ( result == -1 ) { -#if WIN32 +#if WIN printf( "error sending message to %s: %d\n", get_ip( ), WSAGetLastError( ) ); #else @@ -84,14 +121,43 @@ bool server::c_client::send_message( const char* msg ) { } bool server::c_client::handle( ) { - char msg[ ] = "hello client"; - if( !send_message( ( byte* )( msg ), sizeof( msg ) ) ) + /* + ALL TEST CODE BELOW. + */ + auto hello_msg = get_msg( ); + printf( "%s\n", hello_msg.c_str( ) ); + + if ( hello_msg != "hello" ) { + kill( ); + return false; + } + + auto username = get_msg( ); + if ( username != "friendly" ) { + kill( ); return false; + } + + printf( "correct username" ); + send_msg( "correct username" ); - auto buf = receive_message( ); - if( buf.size( ) ) { - printf( "message received: %s\n", buf.data( ) ); + auto password = get_msg( ); + if ( password != "nigger" ) { + kill( ); + return false; } + printf( "correct password" ); + send_msg( "correct password" ); + + const char* games_list = +R"(games: +1: CSGO +2: CSGO (test) +3: Garry's Mod +)"; + + send_msg( games_list ); + return true; -}
\ No newline at end of file +} |
