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;
|
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
|
struct component final : generic_component
|
||||||
{
|
{
|
||||||
void post_unpack() override
|
void post_unpack() override
|
||||||
@ -268,6 +300,9 @@ namespace network
|
|||||||
// skip checksum verification
|
// skip checksum verification
|
||||||
utils::hook::set<uint8_t>(game::select(0x14233249E, 0x140596F2E), 0); // don't add checksum to packet
|
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);
|
utils::hook::set<uint32_t>(game::select(0x14134C6E0, 0x14018E574), 5);
|
||||||
// set initial connection state to challenging
|
// set initial connection state to challenging
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user