1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
|
#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 buffer = std::make_unique< uint8_t[ ] >( length + 1 );
auto 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( ), 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;
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;
}
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;
}
|