xor packet magic during checksum implicitly
This commit is contained in:
parent
847f36d81a
commit
c3959a6970
@ -140,18 +140,26 @@ NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key)
|
||||
return peer;
|
||||
}
|
||||
|
||||
u32 NET_W32_ChecksumFromString(String str)
|
||||
u32 NET_W32_ChecksumFromPacketString(String str)
|
||||
{
|
||||
// Adler-32
|
||||
// https://en.wikipedia.org/wiki/Adler-32
|
||||
u32 a = 1;
|
||||
u32 b = 0;
|
||||
for (u64 idx = 0; idx < str.len; ++idx)
|
||||
u32 result = 0;
|
||||
if (str.len > 4)
|
||||
{
|
||||
a = (a + str.text[idx]) % 65521;
|
||||
b = (b + a) % 65521;
|
||||
// Skip the first 4 bytes of packet since it contains the checksum itself
|
||||
str.text += 4;
|
||||
str.len -= 4;
|
||||
|
||||
// https://en.wikipedia.org/wiki/Adler-32
|
||||
u32 a = 1;
|
||||
u32 b = 0;
|
||||
for (u64 idx = 0; idx < str.len; ++idx)
|
||||
{
|
||||
a = (a + str.text[idx]) % 65521;
|
||||
b = (b + a) % 65521;
|
||||
}
|
||||
result = (b << 16) | a;
|
||||
}
|
||||
return (b << 16) | a;
|
||||
return result ^ NET_W32_ProtocolMagic;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
@ -326,7 +334,6 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
for (;;)
|
||||
{
|
||||
TempArena scratch = BeginScratchNoConflict();
|
||||
u32 magic = 0xde8c590b;
|
||||
i64 heartbeat_threshold_ns = NsFromSeconds(0.250);
|
||||
i64 passive_run_threshold_ns = NsFromSeconds(0.250);
|
||||
|
||||
@ -596,8 +603,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
{
|
||||
NET_W32_PacketHeader header = Zi;
|
||||
CopyBytes(&header, buff, sizeof(header));
|
||||
CopyBytes(buff, &magic, sizeof(magic));
|
||||
u32 checksum = NET_W32_ChecksumFromString(STRING(len, buff));
|
||||
u32 checksum = NET_W32_ChecksumFromPacketString(STRING(len, buff));
|
||||
if (header.checksum == checksum)
|
||||
{
|
||||
NET_Key key = NET_W32_KeyFromAddress(addr);
|
||||
@ -914,7 +920,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
u8 buff[Kibi(2)];
|
||||
NET_W32_PacketHeader header = Zi;
|
||||
{
|
||||
header.checksum = magic;
|
||||
header.checksum = 0;
|
||||
header.flags = NET_W32_PacketFlag_Heartbeat;
|
||||
header.bottom_ack = peer->bottom_ack;
|
||||
header.ack_bits = peer->ack_bits;
|
||||
@ -922,7 +928,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
CopyBytes(buff, &header, sizeof(header));
|
||||
buff_len += sizeof(header);
|
||||
|
||||
u32 checksum = NET_W32_ChecksumFromString(STRING(buff_len, buff));
|
||||
u32 checksum = NET_W32_ChecksumFromPacketString(STRING(buff_len, buff));
|
||||
CopyBytes(buff, &checksum, sizeof(checksum));
|
||||
sendto(
|
||||
pipe->udp,
|
||||
@ -990,7 +996,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
|
||||
NET_W32_PacketHeader header = Zi;
|
||||
{
|
||||
header.checksum = magic;
|
||||
header.checksum = 0;
|
||||
header.flags = packet->flags;
|
||||
header.seq = packet->seq;
|
||||
header.msg_seq = packet->msg_seq;
|
||||
@ -1003,7 +1009,7 @@ void NET_W32_TickForever(WaveLaneCtx *lane)
|
||||
CopyBytes(buff + buff_len, packet->data.text, packet->data.len);
|
||||
buff_len += packet->data.len;
|
||||
|
||||
u32 checksum = NET_W32_ChecksumFromString(STRING(buff_len, buff));
|
||||
u32 checksum = NET_W32_ChecksumFromPacketString(STRING(buff_len, buff));
|
||||
CopyBytes(buff, &checksum, sizeof(checksum));
|
||||
sendto(
|
||||
pipe->udp,
|
||||
|
||||
@ -35,6 +35,8 @@ Struct(NET_W32_MsgBuff)
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Packet types
|
||||
|
||||
#define NET_W32_ProtocolMagic 0xde8c590b
|
||||
|
||||
Enum(NET_W32_PacketFlag)
|
||||
{
|
||||
NET_W32_PacketFlag_None = 0,
|
||||
@ -180,7 +182,7 @@ NET_Key NET_W32_KeyFromAddress(struct sockaddr_in6 addr);
|
||||
struct sockaddr_in6 NET_W32_AddressFromKey(NET_Key key);
|
||||
void NET_W32_SignalWorker(void);
|
||||
NET_W32_Peer *NET_W32_TouchPeerFromKey(NET_W32_Pipe *pipe, NET_Key key);
|
||||
u32 NET_W32_ChecksumFromString(String str);
|
||||
u32 NET_W32_ChecksumFromPacketString(String str);
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Worker
|
||||
|
||||
Loading…
Reference in New Issue
Block a user