Prepare sendpacket fixes
This commit is contained in:
parent
282d5e97a3
commit
601be011e1
@ -256,6 +256,38 @@ namespace network
|
||||
return a.port == b.port && a.addr == b.addr;
|
||||
}
|
||||
|
||||
int net_sendpacket_stub(const game::netsrc_t sock, const int length, const char* data, const game::netadr_t* to)
|
||||
{
|
||||
printf("Sending packet of size: %X\n", length);
|
||||
|
||||
if (to->type != game::NA_RAWIP)
|
||||
{
|
||||
printf("NET_SendPacket: bad address type\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
const auto s = *game::ip_socket;
|
||||
if (!s || sock > game::NS_MAXCLIENTS)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
sockaddr_in address{};
|
||||
address.sin_family = AF_INET;
|
||||
address.sin_port = htons(to->port);
|
||||
address.sin_addr.s_addr = htonl(((to->ipv4.c | ((to->ipv4.b | (to->ipv4.a << 8)) << 8)) << 8) | to->ipv4.d);
|
||||
|
||||
const auto size = static_cast<size_t>(length);
|
||||
|
||||
std::vector<char> buffer{};
|
||||
buffer.resize(size + 1);
|
||||
buffer[0] = static_cast<char>((static_cast<uint32_t>(sock) & 0xF) | ((to->localNetID & 0xF) << 4));
|
||||
memcpy(buffer.data() + 1, data, size);
|
||||
|
||||
return sendto(s, buffer.data(), static_cast<int>(buffer.size()), 0, reinterpret_cast<sockaddr*>(&address),
|
||||
sizeof(address));
|
||||
}
|
||||
|
||||
struct component final : generic_component
|
||||
{
|
||||
void post_unpack() override
|
||||
@ -268,6 +300,9 @@ namespace network
|
||||
// skip checksum verification
|
||||
utils::hook::set<uint8_t>(game::select(0x14233249E, 0x140596F2E), 0); // don't add checksum to packet
|
||||
|
||||
// Recreate NET_SendPacket to increase max packet size
|
||||
utils::hook::jump(game::select(0x1423323B0, 0x140596E40), net_sendpacket_stub);
|
||||
|
||||
utils::hook::set<uint32_t>(game::select(0x14134C6E0, 0x14018E574), 5);
|
||||
// set initial connection state to challenging
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user