13 #include <format/format.h> 14 #include "../../clib/fdump.h" 15 #include "../../clib/logfacility.h" 16 #include "../../clib/passert.h" 17 #include "../../clib/refptr.h" 18 #include "../../clib/spinlock.h" 19 #include "../crypt/cryptbase.h" 20 #include "../ctable.h" 21 #include "../globals/network.h" 22 #include "../globals/state.h" 23 #include "../packetscrobj.h" 24 #include "../polsem.h" 25 #include "../polsig.h" 26 #include "../sockets.h" 54 passert( count <= max_expected );
56 bytes_received += count;
60 else if ( count == 0 )
86 else if ( count == 0 )
105 const unsigned char* cdata = (
const unsigned char*)data;
111 pch =
reinterpret_cast<unsigned char*
>( outbuffer->
getBuffer() );
114 for ( i = 0; i < len; i++ )
117 unsigned char ch = cdata[i];
176 *pch <<= ( 8 - bidx );
181 int(
sizeof outbuffer->
buffer ) );
183 xmit( &outbuffer->
buffer, static_cast<unsigned short>(
184 pch - reinterpret_cast<unsigned char*>( outbuffer->
buffer ) + 1 ) );
192 bool handled =
false;
222 unsigned char msgtype = *(
const char*)data;
226 if ( !
fpLog.empty() )
229 tmp <<
"Server -> Client: 0x" << fmt::hexu( msgtype ) <<
", " << len <<
" bytes\n";
238 POLLOG_INFO <<
"Warning: Trying to send to a disconnected client! \n";
240 tmp <<
"Server -> Client: 0x" << fmt::hexu( msgtype ) <<
", " << len <<
" bytes\n";
261 xmit( data, static_cast<unsigned short>( len ) );
270 if ( !
fpLog.empty() )
273 tmp <<
"Server -> Client (" << len <<
" bytes)\n";
286 xmit( data, static_cast<unsigned short>( len ) );
void CallOutgoingPacketExportedFunction(Client *client, const void *&data, int &inlength, ref_ptr< Core::BPacket > &outpacket, PacketHookData *phd, bool &handled)
unsigned short bits_reversed
Network::IOStats queuedmode_iostats
void recv_remaining_nocrypt(int total_expected)
#define THREAD_CHECKPOINT(thread, check)
void fdump(fmt::Writer &writer, const void *data, int len)
unsigned int bytes_received
void recv_remaining(int total_expected)
void transmit(const void *data, int len, bool needslock=false)
void xmit(const void *data, unsigned short datalen)
std::unique_ptr< Network::ClientTransmit > clientTransmit
std::atomic< u64 > bytes_received
virtual char * getBuffer() POL_OVERRIDE
bool GetAndCheckPacketHooked(Client *client, const void *&data, PacketHookData *&phd)
virtual int Receive(void *buffer, int max_expected, SOCKET socket)=0
NetworkManager networkManager
void ReAddPacket(PacketInterface *msg)
unsigned char buffer[MAXBUFFER]
const char * AddressToString(struct sockaddr *addr)
void transmit_encrypted(const void *data, int len)
bool encrypt_server_stream
void transmitmore(const void *data, int len)
static std::mutex _SocketMutex
std::unordered_map< u64, ScriptDiffData > data
Crypt::CCryptBase * cryptengine
std::string ipaddrAsString() const
struct Pol::Network::Client::@12 counters
std::atomic< unsigned int > count
std::atomic< unsigned int > bytes
#define ENCRYPTEDPKTBUFFER
#define passert_always(exp)
std::lock_guard< SpinLock > SpinLockGuard
Clib::SpinLock _fpLog_lock
Core::XmitBuffer * last_xmit_buffer