r5sdk/r5dedicated/net.cpp

69 lines
1.7 KiB
C++
Raw Normal View History

#include "pch.h"
#include "hooks.h"
namespace Hooks
{
NET_ReceiveDatagramFn originalNET_ReceiveDatagram = nullptr;
NET_SendDatagramFn originalNET_SendDatagram = nullptr;
}
typedef unsigned __int64 QWORD;
struct __declspec(align(8)) netpacket_t
{
DWORD family_maybe;
sockaddr_in sin;
WORD sin_port;
BYTE gap16;
BYTE byte17;
DWORD source;
double received;
unsigned __int8* data;
QWORD label;
BYTE byte38;
QWORD qword40;
QWORD qword48;
BYTE gap50[8];
QWORD qword58;
QWORD qword60;
QWORD qword68;
int less_than_12;
DWORD wiresize;
BYTE gap78[8];
QWORD qword80;
};
//-----------------------------------------------------------------------------
// Purpose: hook and log the receive datagram
//-----------------------------------------------------------------------------
bool Hooks::NET_ReceiveDatagram(int sock, void* inpacket, bool raw)
{
bool result = originalNET_ReceiveDatagram(sock, inpacket, raw);
if (result)
{
int i = NULL;
netpacket_t* pkt = (netpacket_t*)inpacket;
///////////////////////////////////////////////////////////////////////////
// Log received packet data
HexDump("[+] NET_ReceiveDatagram", 0, &pkt->data[i], pkt->wiresize);
}
return result;
}
//-----------------------------------------------------------------------------
// Purpose: hook and log send datagram
//-----------------------------------------------------------------------------
unsigned int Hooks::NET_SendDatagram(SOCKET s, const char* buf, int len, int flags)
{
unsigned int result = originalNET_SendDatagram(s, buf, len, flags);
if (result)
{
///////////////////////////////////////////////////////////////////////////
// Log transmitted packet data
HexDump("[+] NET_SendDatagram", 0, buf, len);
}
return result;
}