Prepare DTLS removal
This commit is contained in:
parent
1b5c4234dd
commit
4fb26887ac
94
src/client/component/network.cpp
Normal file
94
src/client/component/network.cpp
Normal file
@ -0,0 +1,94 @@
|
|||||||
|
#include <std_include.hpp>
|
||||||
|
#include "loader/component_loader.hpp"
|
||||||
|
|
||||||
|
#include "game/game.hpp"
|
||||||
|
|
||||||
|
#include <utils/hook.hpp>
|
||||||
|
|
||||||
|
namespace network
|
||||||
|
{
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
int net_compare_base_address(const game::netadr_t* a1, const game::netadr_t* a2)
|
||||||
|
{
|
||||||
|
if (a1->type == a2->type)
|
||||||
|
{
|
||||||
|
switch (a1->type)
|
||||||
|
{
|
||||||
|
case game::netadrtype_t::NA_BOT:
|
||||||
|
case game::netadrtype_t::NA_LOOPBACK:
|
||||||
|
return a1->port == a2->port;
|
||||||
|
|
||||||
|
case game::netadrtype_t::NA_IP:
|
||||||
|
return memcmp(&a1->ipv4.a, &a2->ipv4.a, 4) == 0;
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int net_compare_address(const game::netadr_t* a1, const game::netadr_t* a2)
|
||||||
|
{
|
||||||
|
return net_compare_base_address(a1, a2) && a1->port == a2->port;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
class component final : public component_interface
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
void post_unpack() override
|
||||||
|
{
|
||||||
|
// redirect dw_sendto to raw socket
|
||||||
|
utils::hook::jump(0x14233307E_g, 0x1423330C7_g);
|
||||||
|
|
||||||
|
// intercept command handling
|
||||||
|
/*utils::hook::jump(0x14020A175, utils::hook::assemble(handle_command_stub), true);
|
||||||
|
|
||||||
|
// handle xuid without secure connection
|
||||||
|
utils::hook::nop(0x14043FFF8, 6);
|
||||||
|
|
||||||
|
utils::hook::jump(0x1403DA700, net_compare_address);
|
||||||
|
utils::hook::jump(0x1403DA750, net_compare_base_address);
|
||||||
|
|
||||||
|
// don't establish secure conenction
|
||||||
|
utils::hook::set<uint8_t>(0x140232BBD, 0xEB);
|
||||||
|
utils::hook::set<uint8_t>(0x140232C9A, 0xEB);
|
||||||
|
utils::hook::set<uint8_t>(0x140232F8D, 0xEB);
|
||||||
|
utils::hook::set<uint8_t>(0x14020862F, 0xEB);
|
||||||
|
|
||||||
|
// ignore unregistered connection
|
||||||
|
utils::hook::jump(0x140439EA9, reinterpret_cast<void*>(0x140439E28));
|
||||||
|
utils::hook::set<uint8_t>(0x140439E9E, 0xEB);
|
||||||
|
|
||||||
|
// disable xuid verification
|
||||||
|
utils::hook::set<uint8_t>(0x140022319, 0xEB);
|
||||||
|
utils::hook::set<uint8_t>(0x140022334, 0xEB);
|
||||||
|
|
||||||
|
// disable xuid verification
|
||||||
|
utils::hook::nop(0x14043CC4C, 2);
|
||||||
|
utils::hook::set<uint8_t>(0x14043CCA8, 0xEB);
|
||||||
|
|
||||||
|
// ignore configstring mismatch
|
||||||
|
utils::hook::set<uint8_t>(0x140211610, 0xEB);
|
||||||
|
|
||||||
|
// ignore dw handle in SV_PacketEvent
|
||||||
|
utils::hook::set<uint8_t>(0x140442F6D, 0xEB);
|
||||||
|
utils::hook::call(0x140442F61, &net_compare_address);
|
||||||
|
|
||||||
|
// ignore dw handle in SV_FindClientByAddress
|
||||||
|
utils::hook::set<uint8_t>(0x14044256D, 0xEB);
|
||||||
|
utils::hook::call(0x140442561, &net_compare_address);
|
||||||
|
|
||||||
|
// ignore dw handle in SV_DirectConnect
|
||||||
|
utils::hook::set<uint8_t>(0x140439BA8, 0xEB);
|
||||||
|
utils::hook::set<uint8_t>(0x140439DA5, 0xEB);
|
||||||
|
utils::hook::call(0x140439B9B, &net_compare_address);
|
||||||
|
utils::hook::call(0x140439D98, &net_compare_address);
|
||||||
|
*/
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
//REGISTER_COMPONENT(network::component)
|
@ -1,88 +1,10 @@
|
|||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
namespace game
|
namespace game
|
||||||
{
|
{
|
||||||
struct XZoneBuffer
|
#endif
|
||||||
{
|
enum bdLobbyErrorCode
|
||||||
const void* data;
|
|
||||||
size_t dataSize;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct XZoneInfo
|
|
||||||
{
|
|
||||||
const char* name;
|
|
||||||
int allocFlags;
|
|
||||||
int freeFlags;
|
|
||||||
int allocSlot;
|
|
||||||
int freeSlot;
|
|
||||||
XZoneBuffer fileBuffer;
|
|
||||||
};
|
|
||||||
|
|
||||||
typedef void (*xcommand_t)();
|
|
||||||
|
|
||||||
enum errorCode
|
|
||||||
{
|
|
||||||
ERROR_NONE = 0x0,
|
|
||||||
ERROR_FATAL = 0x1,
|
|
||||||
ERROR_DROP = 0x2,
|
|
||||||
ERROR_FROM_STARTUP = 0x4,
|
|
||||||
ERROR_SERVERDISCONNECT = 0x8,
|
|
||||||
ERROR_DISCONNECT = 0x10,
|
|
||||||
ERROR_SCRIPT = 0x20,
|
|
||||||
ERROR_SCRIPT_DROP = 0x40,
|
|
||||||
ERROR_LOCALIZATION = 0x80,
|
|
||||||
ERROR_UI = 0x100,
|
|
||||||
ERROR_LUA = 0x200,
|
|
||||||
ERROR_SOFTRESTART = 0x400,
|
|
||||||
ERROR_SOFTRESTART_KEEPDW = 0x800,
|
|
||||||
};
|
|
||||||
|
|
||||||
struct cmd_function_s
|
|
||||||
{
|
|
||||||
cmd_function_s* next;
|
|
||||||
const char* name;
|
|
||||||
const char* autoCompleteDir;
|
|
||||||
const char* autoCompleteExt;
|
|
||||||
xcommand_t function;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct CmdArgs
|
|
||||||
{
|
|
||||||
int nesting;
|
|
||||||
int localClientNum[8];
|
|
||||||
int controllerIndex[8];
|
|
||||||
int argshift[8];
|
|
||||||
int argc[8];
|
|
||||||
const char** argv[8];
|
|
||||||
char textPool[8192];
|
|
||||||
const char* argvPool[512];
|
|
||||||
int usedTextPool[8];
|
|
||||||
int totalUsedArgvPool;
|
|
||||||
int totalUsedTextPool;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct va_info_t
|
|
||||||
{
|
|
||||||
char va_string[4][1024];
|
|
||||||
int index;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct TLSData
|
|
||||||
{
|
|
||||||
va_info_t* vaInfo;
|
|
||||||
jmp_buf* errorJmpBuf;
|
|
||||||
void* traceInfo;
|
|
||||||
CmdArgs* cmdArgs;
|
|
||||||
void* errorData;
|
|
||||||
};
|
|
||||||
|
|
||||||
struct dvar_t
|
|
||||||
{
|
|
||||||
unsigned int name;
|
|
||||||
}; // Incomplete
|
|
||||||
|
|
||||||
|
|
||||||
enum bdLobbyErrorCode : uint32_t
|
|
||||||
{
|
{
|
||||||
BD_NO_ERROR = 0x0,
|
BD_NO_ERROR = 0x0,
|
||||||
BD_TOO_MANY_TASKS = 0x1,
|
BD_TOO_MANY_TASKS = 0x1,
|
||||||
@ -422,6 +344,14 @@ namespace game
|
|||||||
BD_MAX_ERROR_CODE = 0x27E2,
|
BD_MAX_ERROR_CODE = 0x27E2,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum bdNATType : uint8_t
|
||||||
|
{
|
||||||
|
BD_NAT_UNKNOWN = 0x0,
|
||||||
|
BD_NAT_OPEN = 0x1,
|
||||||
|
BD_NAT_MODERATE = 0x2,
|
||||||
|
BD_NAT_STRICT = 0x3,
|
||||||
|
};
|
||||||
|
|
||||||
enum itemTextStyle
|
enum itemTextStyle
|
||||||
{
|
{
|
||||||
ITEM_TEXTSTYLE_NORMAL = 0,
|
ITEM_TEXTSTYLE_NORMAL = 0,
|
||||||
@ -444,4 +374,123 @@ namespace game
|
|||||||
ERR_LOCALIZATION = 6,
|
ERR_LOCALIZATION = 6,
|
||||||
ERR_MAPLOADERRORSUMMARY = 7,
|
ERR_MAPLOADERRORSUMMARY = 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum errorCode
|
||||||
|
{
|
||||||
|
ERROR_NONE = 0x0,
|
||||||
|
ERROR_FATAL = 0x1,
|
||||||
|
ERROR_DROP = 0x2,
|
||||||
|
ERROR_FROM_STARTUP = 0x4,
|
||||||
|
ERROR_SERVERDISCONNECT = 0x8,
|
||||||
|
ERROR_DISCONNECT = 0x10,
|
||||||
|
ERROR_SCRIPT = 0x20,
|
||||||
|
ERROR_SCRIPT_DROP = 0x40,
|
||||||
|
ERROR_LOCALIZATION = 0x80,
|
||||||
|
ERROR_UI = 0x100,
|
||||||
|
ERROR_LUA = 0x200,
|
||||||
|
ERROR_SOFTRESTART = 0x400,
|
||||||
|
ERROR_SOFTRESTART_KEEPDW = 0x800,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XZoneBuffer
|
||||||
|
{
|
||||||
|
const void* data;
|
||||||
|
size_t dataSize;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct XZoneInfo
|
||||||
|
{
|
||||||
|
const char* name;
|
||||||
|
int allocFlags;
|
||||||
|
int freeFlags;
|
||||||
|
int allocSlot;
|
||||||
|
int freeSlot;
|
||||||
|
XZoneBuffer fileBuffer;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef void (*xcommand_t)();
|
||||||
|
|
||||||
|
struct cmd_function_s
|
||||||
|
{
|
||||||
|
cmd_function_s* next;
|
||||||
|
const char* name;
|
||||||
|
const char* autoCompleteDir;
|
||||||
|
const char* autoCompleteExt;
|
||||||
|
xcommand_t function;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct CmdArgs
|
||||||
|
{
|
||||||
|
int nesting;
|
||||||
|
int localClientNum[8];
|
||||||
|
int controllerIndex[8];
|
||||||
|
int argshift[8];
|
||||||
|
int argc[8];
|
||||||
|
const char** argv[8];
|
||||||
|
char textPool[8192];
|
||||||
|
const char* argvPool[512];
|
||||||
|
int usedTextPool[8];
|
||||||
|
int totalUsedArgvPool;
|
||||||
|
int totalUsedTextPool;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct va_info_t
|
||||||
|
{
|
||||||
|
char va_string[4][1024];
|
||||||
|
int index;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct TLSData
|
||||||
|
{
|
||||||
|
va_info_t* vaInfo;
|
||||||
|
jmp_buf* errorJmpBuf;
|
||||||
|
void* traceInfo;
|
||||||
|
CmdArgs* cmdArgs;
|
||||||
|
void* errorData;
|
||||||
|
};
|
||||||
|
|
||||||
|
struct dvar_t
|
||||||
|
{
|
||||||
|
unsigned int name;
|
||||||
|
}; // Incomplete
|
||||||
|
|
||||||
|
struct netipv4_t
|
||||||
|
{
|
||||||
|
byte a;
|
||||||
|
byte b;
|
||||||
|
byte c;
|
||||||
|
byte d;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum netadrtype_t
|
||||||
|
{
|
||||||
|
NA_BOT = 0x0,
|
||||||
|
NA_BAD = 0x1,
|
||||||
|
NA_LOOPBACK = 0x2,
|
||||||
|
NA_RAWIP = 0x3,
|
||||||
|
NA_IP = 0x4,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum netsrc_t
|
||||||
|
{
|
||||||
|
NS_NULL = 0xFFFFFFFF,
|
||||||
|
NS_CLIENT1 = 0x0,
|
||||||
|
NS_CLIENT2 = 0x1,
|
||||||
|
NS_CLIENT3 = 0x2,
|
||||||
|
NS_CLIENT4 = 0x3,
|
||||||
|
NS_SERVER = 0x4,
|
||||||
|
NS_MAXCLIENTS = 0x4,
|
||||||
|
NS_PACKET = 0x5,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct netadr_t
|
||||||
|
{
|
||||||
|
netipv4_t ipv4;
|
||||||
|
unsigned __int16 port;
|
||||||
|
netadrtype_t type;
|
||||||
|
netsrc_t localNetID;
|
||||||
|
};
|
||||||
|
|
||||||
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user