#include "client.hpp" #include "server.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; } */ 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); uint8_t key = util::random_number(0, 255) & 0xff; 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(), (int)length + 1, 0); if(result == -1) { #if WIN64 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_msg(const char* msg) { auto length = strlen(msg); auto buffer = std::make_unique< uint8_t[] >(length + 1); uint8_t key = util::random_number(0, 255) & 0xff; memset(buffer.get(), 0, length + 1); 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(), (int)length + 1, 0); if(result == -1) { #if WIN64 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::handle() { if(get_msg() != "hello") return false; return true; }