CBaseServer::ProcessConnectionlessPacket
0x0010c7b0 · 5661 bytes · __thiscall
_ZN11CBaseServer27ProcessConnectionlessPacketEP11netpacket_s
Decompiled
undefined (2 params)
/* CBaseServer::ProcessConnectionlessPacket(netpacket_s*) */
uint __thiscall CBaseServer::ProcessConnectionlessPacket(CBaseServer *this,netpacket_s *param_1)
{
undefined4 uVar1;
code *pcVar2;
char cVar3;
byte bVar4;
undefined2 uVar5;
uint uVar6;
KeyValues *this_00;
int *piVar7;
undefined4 *puVar8;
undefined4 uVar9;
undefined4 uVar10;
CSteam3Server *this_01;
uint uVar11;
uint uVar12;
undefined4 uVar13;
int iVar14;
CBaseServer *pCVar15;
uint *puVar16;
uint *puVar17;
byte bVar18;
uint uVar19;
int iVar20;
ushort uVar21;
int in_GS_OFFSET;
bool bVar22;
double dVar23;
undefined8 uVar24;
undefined8 uVar25;
longlong lVar26;
uint in_stack_fffff548;
uint local_a80;
uint local_a7c;
CUtlMemory<CLC_SplitPlayerConnect,int> *local_a78;
uint local_a68;
void *local_a58;
undefined4 local_a54;
undefined4 local_a50;
int local_a4c;
void *local_a48;
undefined4 local_a44;
undefined4 local_a40;
undefined4 local_a3c;
undefined4 local_a38;
uint local_a34;
int local_a30;
uint *local_a2c;
uint *local_a28;
undefined4 local_a24;
char local_a20 [256];
char local_920 [256];
uint local_820 [512];
int local_20;
local_a30 = *(int *)(param_1 + 0x30);
puVar17 = *(uint **)(param_1 + 0x34);
local_20 = *(int *)(in_GS_OFFSET + 0x14);
local_a44 = *(undefined4 *)(param_1 + 0x1c);
local_a28 = *(uint **)(param_1 + 0x38);
local_a24 = *(undefined4 *)(param_1 + 0x3c);
uVar9 = *(undefined4 *)(param_1 + 0x20);
local_a3c = *(undefined4 *)(param_1 + 0x24);
local_a38 = *(undefined4 *)(param_1 + 0x28);
local_a40._1_3_ = (undefined3)((uint)uVar9 >> 8);
bVar18 = (byte)*(uint *)(param_1 + 0x2c);
local_a40 = uVar9;
local_a2c = puVar17;
if (local_a30 < 8) {
if (puVar17 == local_a28) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a30 = 1;
local_a34 = 0;
local_a2c = puVar17 + 1;
}
else if (local_a28 < puVar17) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a2c = puVar17 + 1;
local_a40._0_1_ = (char)uVar9;
bVar22 = (char)local_a40 == '\0';
local_a34 = *puVar17;
if (bVar22) {
iVar14 = 8 - local_a30;
bVar4 = (byte)local_a30;
local_a30 = local_a30 + 0x18;
bVar18 = (byte)(((&CBitBuffer::s_nMaskTable)[iVar14] & local_a34) << (bVar4 & 0x1f)) |
bVar18;
local_a34 = local_a34 >> ((byte)iVar14 & 0x1f);
goto LAB_0010c84b;
}
}
bVar18 = 0;
uVar6 = CheckConnectionLessRateLimits((netadr_s *)param_1);
cVar3 = (char)uVar6;
}
else {
local_a30 = local_a30 + -8;
if (local_a30 == 0) {
local_a30 = 0x20;
if (puVar17 == local_a28) {
local_a30 = 1;
local_a2c = puVar17 + 1;
local_a34 = 0;
}
else if (local_a28 < puVar17) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a2c = puVar17 + 1;
local_a34 = *puVar17;
}
}
else {
local_a34 = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_0010c84b:
uVar6 = CheckConnectionLessRateLimits((netadr_s *)param_1);
cVar3 = (char)uVar6;
}
if (cVar3 == '\0') goto LAB_0010c859;
cVar3 = (**(code **)(*(int *)this + 0x58))(this);
if ((cVar3 == '\0') || (bVar4 = Host_ShouldRun(), uVar19 = local_a34, bVar4 == 0)) {
cVar3 = (**(code **)(*(int *)this + 0x60))(this);
if ((cVar3 != '\0') || (bVar18 != 0)) goto LAB_0010c859;
LAB_0010c8e1:
this_00 = KeyValues::operator_new((KeyValues *)0x2c,in_stack_fffff548);
/* try { // try from 0010c90a to 0010c90e has its CatchHandler @ 0010de78 */
KeyValues::KeyValues(this_00,"OnNetLanConnectionlessPacket",(IKeyValuesSystem *)0x0,false);
KeyValues::SetPtr(this_00,"rawpkt",param_1);
piVar7 = (int *)(**(code **)(*g_pMatchFramework + 0x1c))(g_pMatchFramework);
(**(code **)(*piVar7 + 8))(piVar7,this_00);
goto LAB_0010c859;
}
if (bVar18 == 0x6a) {
uVar9 = netadr_s::ToString((netadr_s *)param_1,false);
ConMsg("A2A_ACK from %s\n",uVar9);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
if ((char)bVar18 < 'k') {
if (bVar18 != 0x38) {
if ((char)bVar18 < '9') {
if (bVar18 == 0) goto LAB_0010c8e1;
}
else {
if (bVar18 == 0x57) {
(**(code **)(*(int *)this + 0xf4))(this,param_1);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
if (bVar18 == 0x69) {
NET_OutOfBandPrintf(*(int *)(param_1 + 0xc),(netadr_s *)param_1,"%c00000000000000",0x6a);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
}
goto LAB_0010ce34;
}
if (local_a30 < 0x20) {
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a40 = CONCAT31(local_a40._1_3_,1);
uVar19 = 0;
local_a30 = 1;
local_a34 = 0;
}
else {
if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
uVar12 = local_a34;
}
else {
puVar17 = local_a2c + 1;
uVar12 = *local_a2c;
local_a2c = puVar17;
if ((char)local_a40 == '\0') {
uVar19 = ((&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & uVar12) <<
((byte)local_a30 & 0x1f) | local_a34;
local_a34 = uVar12 >> ((byte)(0x20 - local_a30) & 0x1f);
goto LAB_0010cfbb;
}
}
local_a34 = uVar12;
uVar19 = 0;
}
}
else {
local_a30 = local_a30 + -0x20;
if (local_a30 == 0) {
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a34 = 0;
local_a2c = local_a2c + 1;
}
else {
if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
goto LAB_0010cfb1;
}
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
}
else {
LAB_0010cfb1:
local_a34 = 0;
}
}
LAB_0010cfbb:
uVar24 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
uVar25 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
Msg("C2S_VALIDATE_SESSION from %llx, session %llx, host version %d.\n",uVar24,uVar25,uVar19);
uVar12 = GetHostVersion();
if (uVar12 == uVar19) {
HostValidateSessionImpl();
uVar6 = (uint)bVar4;
}
goto LAB_0010c859;
}
if (bVar18 == 0x6e) {
(**(code **)(*(int *)this + 0xf8))(this,param_1,&local_a44);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
if ((char)bVar18 < 'o') {
if (bVar18 == 0x6b) {
if (local_a30 < 0x20) {
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a30 = 1;
}
else if (local_a2c <= local_a28) {
local_a68 = *local_a2c;
if ((char)local_a40 == '\0') {
uVar6 = (&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & local_a68;
local_a68 = local_a68 >> ((byte)(0x20 - local_a30) & 0x1f);
local_a7c = uVar6 << ((byte)local_a30 & 0x1f) | local_a34;
local_a2c = local_a2c + 1;
}
else {
local_a7c = 0;
local_a2c = local_a2c + 1;
}
goto LAB_0010d320;
}
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a68 = 0;
local_a7c = 0;
LAB_0010d320:
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a30 = 1;
}
else if (local_a2c <= local_a28) {
uVar19 = *local_a2c;
if ((char)local_a40 == '\0') {
uVar6 = ((&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & uVar19) <<
((byte)local_a30 & 0x1f) | local_a68;
local_a68 = uVar19 >> ((byte)(0x20 - local_a30) & 0x1f);
local_a2c = local_a2c + 1;
}
else {
uVar6 = 0;
local_a68 = uVar19;
local_a2c = local_a2c + 1;
}
goto LAB_0010d353;
}
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a68 = 0;
uVar6 = 0;
LAB_0010d353:
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a30 = 1;
local_a34 = 0;
local_a40 = CONCAT31(local_a40._1_3_,1);
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
puVar17 = local_a2c + 1;
local_a34 = *local_a2c;
local_a2c = puVar17;
if ((char)local_a40 == '\0') {
uVar19 = (&CBitBuffer::s_nMaskTable)[0x20 - local_a30] & local_a34;
local_a34 = local_a34 >> ((byte)(0x20 - local_a30) & 0x1f);
local_a80 = uVar19 << ((byte)local_a30 & 0x1f) | local_a68;
goto LAB_0010caec;
}
}
local_a80 = 0;
}
else {
iVar14 = local_a30 + -0x20;
local_a7c = local_a34;
if (iVar14 == 0) {
if (local_a2c == local_a28) {
local_a30 = 1;
local_a68 = 0;
local_a2c = local_a2c + 1;
goto LAB_0010d320;
}
if (local_a28 < local_a2c) {
uVar6 = 0;
local_a40 = CONCAT31(local_a40._1_3_,1);
}
else {
uVar6 = *local_a2c;
local_a2c = local_a2c + 1;
}
LAB_0010d62c:
if (local_a2c != local_a28) {
if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a80 = 0;
}
else {
local_a80 = *local_a2c;
local_a2c = local_a2c + 1;
}
LAB_0010d663:
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a34 = 0;
local_a2c = local_a2c + 1;
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
goto LAB_0010caec;
}
local_a30 = 1;
local_a68 = 0;
local_a2c = local_a2c + 1;
goto LAB_0010d353;
}
if (iVar14 < 0x20) {
local_a68 = 0;
local_a30 = iVar14;
goto LAB_0010d320;
}
iVar14 = local_a30 + -0x40;
if (iVar14 == 0) {
uVar6 = 0;
goto LAB_0010d62c;
}
if (iVar14 < 0x20) {
uVar6 = 0;
local_a68 = 0;
local_a30 = iVar14;
goto LAB_0010d353;
}
local_a30 = local_a30 + -0x60;
if (local_a30 == 0) {
local_a80 = 0;
uVar6 = 0;
goto LAB_0010d663;
}
local_a34 = 0;
uVar6 = 0;
local_a80 = 0;
}
LAB_0010caec:
CBitRead::ReadString((CBitRead *)&local_a44,local_a20,0x100,false,(int *)0x0);
CBitRead::ReadString((CBitRead *)&local_a44,local_920,0x100,false,(int *)0x0);
if (local_a30 < 8) {
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a30 = 1;
LAB_0010d442:
local_a40 = CONCAT31(local_a40._1_3_,1);
uVar19 = 0;
}
else {
if (local_a28 < local_a2c) goto LAB_0010d442;
puVar17 = local_a2c + 1;
uVar19 = *local_a2c;
local_a2c = puVar17;
if ((char)local_a40 == '\0') {
iVar14 = 8 - local_a30;
bVar18 = (byte)local_a30;
local_a30 = local_a30 + 0x18;
local_a68 = ((&CBitBuffer::s_nMaskTable)[iVar14] & uVar19) << (bVar18 & 0x1f) |
local_a34;
local_a34 = uVar19 >> ((byte)iVar14 & 0x1f);
goto LAB_0010cb89;
}
}
local_a34 = uVar19;
local_a58 = (void *)0x0;
local_a54 = 0;
local_a50 = 0;
local_a4c = 0;
local_a48 = (void *)0x0;
}
else {
local_a30 = local_a30 + -8;
local_a68 = local_a34 & 0xff;
if (local_a30 == 0) {
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a34 = 0;
local_a2c = local_a2c + 1;
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
}
else {
local_a34 = local_a34 >> 8;
}
LAB_0010cb89:
local_a58 = (void *)0x0;
local_a54 = 0;
local_a50 = 0;
local_a4c = 0;
local_a48 = (void *)0x0;
if (0 < (int)local_a68) {
CUtlVector<CLC_SplitPlayerConnect,CUtlMemory<CLC_SplitPlayerConnect,int>>::GrowVector
((CUtlVector<CLC_SplitPlayerConnect,CUtlMemory<CLC_SplitPlayerConnect,int>> *)
&local_a58,local_a68);
if (0 < (int)(local_a4c - local_a68)) {
_V_memmove((void *)(local_a68 * 0x60 + (int)local_a58),local_a58,
(local_a4c - local_a68) * 0x60);
}
iVar14 = 0;
uVar19 = 0;
do {
puVar8 = (undefined4 *)((int)local_a58 + iVar14);
if (puVar8 != (undefined4 *)0x0) {
*puVar8 = &PTR__CLC_SplitPlayerConnect_002a15e8;
puVar8[3] = 0;
puVar8[4] = 0;
*(undefined8 *)(puVar8 + 5) = 0;
puVar8[7] = 0;
puVar8[8] = 0;
*(undefined8 *)(puVar8 + 9) = 0;
puVar8[0xb] = 0;
puVar8[0xc] = 0;
*(undefined1 *)(puVar8 + 0xd) = 0;
*(undefined8 *)(puVar8 + 0xe) = 0;
puVar8[0x10] = 0;
puVar8[0x11] = 0;
*(undefined1 *)(puVar8 + 1) = 1;
puVar8[2] = 0;
puVar8[0x13] = 0;
puVar8[0x14] = 0;
puVar8[0x15] = 0;
puVar8[0x16] = 0;
puVar8[0x17] = 0;
}
uVar19 = uVar19 + 1;
iVar14 = iVar14 + 0x60;
} while (local_a68 != uVar19);
uVar19 = 0;
do {
if (local_a30 < 6) {
if (local_a2c == local_a28) {
local_a30 = 1;
local_a34 = 0;
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a2c = local_a2c + 1;
}
else if (local_a2c < local_a28) {
puVar17 = local_a2c + 1;
local_a34 = *local_a2c;
local_a2c = puVar17;
if ((char)local_a40 == '\0') {
local_a34 = local_a34 >> (6U - (char)local_a30 & 0x1f);
local_a30 = local_a30 + 0x1a;
}
}
else {
LAB_0010ce80:
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
}
else {
local_a30 = local_a30 + -6;
if (local_a30 == 0) {
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a2c = local_a2c + 1;
local_a34 = 0;
}
else {
if (local_a28 <= local_a2c) goto LAB_0010ce80;
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
}
else {
local_a34 = local_a34 >> 6;
}
}
piVar7 = (int *)((int)local_a58 + uVar19 * 0x60);
/* try { // try from 0010ccef to 0010ccf1 has its CatchHandler @ 0010dddc */
(**(code **)(*piVar7 + 0x18))(piVar7,&local_a44);
uVar19 = uVar19 + 1;
} while (uVar19 != local_a68);
}
}
local_a78 = (CUtlMemory<CLC_SplitPlayerConnect,int> *)&local_a58;
local_a30 = local_a30 + -1;
uVar19 = local_a34 & 1;
if (local_a30 == 0) {
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a2c = local_a2c + 1;
local_a34 = 0;
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
}
else {
local_a34 = local_a34 >> 1;
}
/* try { // try from 0010d0bd to 0010d280 has its CatchHandler @ 0010dddc */
lVar26 = CBitRead::ReadLongLong((CBitRead *)&local_a44);
uVar9 = (undefined4)((ulonglong)lVar26 >> 0x20);
cVar3 = netadr_s::IsLocalhost((netadr_s *)param_1);
if (cVar3 == '\0') {
local_a68._0_1_ = netadr_s::IsLoopback((netadr_s *)param_1);
}
else {
local_a68._0_1_ = '\x01';
}
cVar3 = (**(code **)(*(int *)this + 0x60))(this);
if ((cVar3 == '\0') && ((char)local_a68 != '\0')) {
LAB_0010d107:
if (uVar6 == 3) {
uVar21 = (ushort)local_a34;
if (local_a30 < 0x10) {
if (local_a2c == local_a28) {
local_a2c = local_a2c + 1;
local_a30 = 1;
local_a34 = 0;
local_a40 = CONCAT31(local_a40._1_3_,1);
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
puVar17 = local_a2c + 1;
local_a34 = *local_a2c;
local_a2c = puVar17;
if ((char)local_a40 == '\0') {
iVar14 = 0x10 - local_a30;
bVar18 = (byte)local_a30;
local_a30 = local_a30 + 0x10;
uVar21 = (ushort)(((&CBitBuffer::s_nMaskTable)[iVar14] & local_a34) <<
(bVar18 & 0x1f)) | uVar21;
local_a34 = local_a34 >> ((byte)iVar14 & 0x1f);
goto LAB_0010d14b;
}
}
uVar6 = 0;
}
else {
local_a30 = local_a30 + -0x10;
if (local_a30 == 0) {
local_a30 = 0x20;
if (local_a2c == local_a28) {
local_a30 = 1;
local_a34 = 0;
local_a2c = local_a2c + 1;
}
else if (local_a28 < local_a2c) {
local_a40 = CONCAT31(local_a40._1_3_,1);
local_a34 = 0;
}
else {
local_a34 = *local_a2c;
local_a2c = local_a2c + 1;
}
}
else {
local_a34 = local_a34 >> 0x10;
}
LAB_0010d14b:
uVar6 = (uint)(short)uVar21;
if (0x800 < uVar6) {
(**(code **)(*(int *)this + 0xc4))(this,param_1,"Invalid Steam key length\n");
goto LAB_0010d177;
}
}
CBitRead::ReadBytes((CBitRead *)&local_a44,local_820,uVar6);
(**(code **)(*(int *)this + 0xcc))
(this,param_1,local_a7c,local_a80,3,local_a20,local_920,local_820,uVar6,
local_a78,uVar19);
}
else {
/* try { // try from 0010d4b2 to 0010db74 has its CatchHandler @ 0010dddc */
CBitRead::ReadString((CBitRead *)&local_a44,(char *)local_820,0x800,false,(int *)0x0);
puVar17 = local_820;
do {
puVar16 = puVar17;
uVar11 = *puVar16 + 0xfefefeff & ~*puVar16;
uVar12 = uVar11 & 0x80808080;
puVar17 = puVar16 + 1;
} while (uVar12 == 0);
if ((uVar11 & 0x8080) == 0) {
puVar17 = (uint *)((int)puVar16 + 6);
uVar12 = uVar12 >> 0x10;
}
(**(code **)(*(int *)this + 0xcc))
(this,param_1,local_a7c,local_a80,uVar6,local_a20,local_920,local_820,
(char *)((int)puVar17 +
((-3 - (uint)CARRY1((byte)uVar12,(byte)uVar12)) - (int)local_820)),
local_a78,uVar19);
}
iVar14 = local_a4c + -1;
if (-1 < iVar14) {
iVar20 = iVar14 * 0x60;
do {
iVar14 = iVar14 + -1;
puVar8 = (undefined4 *)((int)local_a58 + iVar20);
iVar20 = iVar20 + -0x60;
(**(code **)*puVar8)(puVar8);
} while (iVar14 != -1);
}
}
else {
cVar3 = IsExclusiveToLobbyConnections(this);
if (cVar3 == '\0') {
iVar14 = *(int *)(this + 0x16c);
iVar20 = *(int *)(this + 0x170);
if ((iVar20 == 0 && iVar14 == 0) || (lVar26 == *(longlong *)(this + 0x16c)))
goto LAB_0010d107;
dVar23 = (double)*(float *)(this + 0x174) - net_time;
uVar13 = netadr_s::ToString((netadr_s *)param_1,false);
DevMsg("Rejecting connection request from %s (reservation cookie 0x%llx), server is reserved with reservation cookie 0x%llx for %.1f more seconds\n"
,uVar13,(int)lVar26,uVar9,iVar14,iVar20,dVar23);
(**(code **)(*(int *)this + 0xc4))(this,param_1,"#Valve_Reject_Reserved_For_Lobby");
}
else {
uVar13 = *(undefined4 *)(this + 0x16c);
uVar1 = *(undefined4 *)(this + 0x170);
if (lVar26 == *(longlong *)(this + 0x16c)) goto LAB_0010d107;
uVar10 = netadr_s::ToString((netadr_s *)param_1,false);
DevMsg("Rejecting connection request from %s, client\'s reservation cookie %llx does not match servers\'s cookie %llx.\n"
,uVar10,(int)lVar26,uVar9,uVar13,uVar1);
(**(code **)(*(int *)this + 0xc4))(this,param_1,"#Valve_Reject_Connect_From_Lobby");
}
LAB_0010d177:
iVar14 = local_a4c + -1;
if (-1 < iVar14) {
iVar20 = iVar14 * 0x60;
do {
iVar14 = iVar14 + -1;
puVar8 = (undefined4 *)((int)local_a58 + iVar20);
iVar20 = iVar20 + -0x60;
(**(code **)*puVar8)(puVar8);
} while (iVar14 != -1);
}
}
local_a4c = 0;
CUtlMemory<CLC_SplitPlayerConnect,int>::Purge(local_a78);
local_a48 = local_a58;
CUtlMemory<CLC_SplitPlayerConnect,int>::Purge(local_a78);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
if (bVar18 != 0x6c) {
LAB_0010ce34:
uVar6 = IsUsingMasterLegacyMode();
if ((char)uVar6 != '\0') {
cVar3 = (**(code **)(*(int *)this + 0x70))(this);
pCVar15 = (CBaseServer *)0x0;
if (cVar3 == '\0') {
pCVar15 = this;
}
(**(code **)(*(int *)g_pMaster + 0x34))(g_pMaster,param_1,this,pCVar15);
goto LAB_0010c859;
}
iVar14 = Steam3Server();
if (*(int *)(iVar14 + 4) != 0) {
this_01 = (CSteam3Server *)Steam3Server();
uVar6 = CSteam3Server::IsMasterServerUpdaterSharingGameSocket(this_01);
if ((char)uVar6 != '\0') {
iVar14 = Steam3Server();
piVar7 = *(int **)(iVar14 + 4);
pcVar2 = *(code **)(*piVar7 + 0x88);
uVar5 = netadr_s::GetPort((netadr_s *)param_1);
uVar19 = netadr_s::GetIP((netadr_s *)param_1);
(*pcVar2)(piVar7,*(undefined4 *)(param_1 + 0x3c),*(undefined4 *)(param_1 + 0x28),
uVar19 >> 0x18 | (uVar19 & 0xff0000) >> 8 | (uVar19 & 0xff00) << 8 |
uVar19 << 0x18,uVar5);
ForwardPacketsFromMasterServerUpdater(this);
goto LAB_0010c859;
}
}
}
}
else {
if (bVar18 == 0x71) {
(**(code **)(*(int *)this + 0xf0))(this,param_1,&local_a44);
uVar6 = (uint)bVar4;
goto LAB_0010c859;
}
if (bVar18 != 0x74) goto LAB_0010ce34;
}
uVar6 = (uint)bVar4;
LAB_0010c859:
if (local_20 != *(int *)(in_GS_OFFSET + 0x14)) {
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
return uVar6;
}
SourceMod gamedata
paste intoaddons/sourcemod/gamedata/<your_plugin>.txt
used as the SourceMod key — change to fit your plugin's convention
SourceMod library name (server / engine / matchmaking)
Just a Signatures{} block, ready to drop into a gamedata
file. Wire it up in your plugin however you like - SDKCall, DHooks,
raw memory ops, or anything else.
Signatures + Functions block. The plugin uses
DHookCreateFromConf - DHooks reads return type, this-type,
calling convention, and argument types straight from the gamedata. Less
boilerplate in the plugin, types travel with the gamedata.
Gamedata KeyValues
DHooks plugin example
Type inference is best-effort from the C signature - sanity-check the DHooks types before shipping.