CBaseClientState::ProcessConnectionlessPacket
0x00103450 · 9048 bytes · __thiscall
_ZN16CBaseClientState27ProcessConnectionlessPacketEP11netpacket_s
Decompiled
undefined (2 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CBaseClientState::ProcessConnectionlessPacket(netpacket_s*) */
undefined4 __thiscall
CBaseClientState::ProcessConnectionlessPacket(CBaseClientState *this,netpacket_s *param_1)
{
netpacket_s *pnVar1;
uint *puVar2;
undefined4 *puVar3;
uint uVar4;
code *pcVar5;
short sVar6;
netpacket_s nVar7;
char cVar8;
ushort uVar9;
int iVar10;
uint uVar11;
undefined4 uVar12;
int iVar13;
undefined *puVar14;
uint uVar15;
char *pcVar16;
CBaseClientState *pCVar17;
char *pcVar18;
CBitRead *pCVar19;
int in_GS_OFFSET;
CBaseClientState CVar20;
byte bVar21;
undefined8 uVar22;
netadr_s *pnVar23;
uint local_8f4;
undefined4 local_8e4;
undefined4 local_8e0;
undefined4 local_8dc;
undefined4 local_8d8;
int local_8d4;
char local_8d0 [1024];
CBaseClientState local_4d0 [1200];
int local_20;
bVar21 = 0;
local_8e4 = 0;
local_8e0 = 0;
local_20 = *(int *)(in_GS_OFFSET + 0x14);
if (_exit == 0) {
local_8d4 = 0;
}
else {
(**(code **)(_exit + 0x50))
(_exit,&local_8e4,0,0,0,0,"/data/src/engine/./baseclientstate.cpp",0x3e9,
&ProcessConnectionlessPacket(netpacket_s*)::tm_fmt,"(%s)%s","Unaccounted",
"ProcessConnectionlessPacket");
local_8d4 = _exit;
}
iVar13 = _DAT_0040b9d4;
local_8dc = local_8e4;
local_8d8 = local_8e0;
/* try { // try from 00103531 to 00103535 has its CatchHandler @ 001058b8 */
if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
(iVar10 = ThreadGetCurrentId(), iVar13 == iVar10)) {
if ((char *)*_DAT_0040b030 != "ProcessConnectionlessPacket") {
/* try { // try from 00103be8 to 00103bf9 has its CatchHandler @ 001058b8 */
_DAT_0040b030 =
(int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2a6f5c,&DAT_00000001,0x2a054b);
}
CVProfNode::EnterScope();
DAT_0040b02c = '\0';
}
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
puVar2 = *(uint **)(param_1 + 0x34);
uVar11 = *(uint *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_00103560;
}
}
uVar11 = 0;
switchD_0010356a_caseD_3a:
/* try { // try from 001035a5 to 00103adc has its CatchHandler @ 00105894 */
uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
ConDMsg("Bad connectionless packet ( CL \'%c\') from %s.\n",uVar11,uVar12);
LAB_001035be:
uVar12 = 0;
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_00103560:
switch(uVar11) {
case 0x39:
if ((*(int *)(this + 0x60) == 1) &&
(cVar8 = netadr_s::CompareAdr((netadr_s *)param_1,(netadr_s *)(this + 0x1b8),true),
cVar8 != '\0')) {
CBitRead::ReadString((CBitRead *)(param_1 + 0x1c),(char *)local_4d0,0x4b0,false,(int *)0x0);
COM_ExplainDisconnection(true,(char *)local_4d0);
(**(code **)(*(int *)this + 0x94))(this,1);
}
break;
default:
goto switchD_0010356a_caseD_3a;
case 0x41:
cVar8 = netadr_s::IsLocalhost((netadr_s *)param_1);
/* try { // try from 001043a3 to 0010588e has its CatchHandler @ 00105894 */
if (((cVar8 == '\0') && (cVar8 = netadr_s::IsLoopback((netadr_s *)param_1), cVar8 == '\0')) &&
(((cVar8 = CAddressList::IsAddressInList((CAddressList *)(this + 0x2c),(netadr_s *)param_1)
, cVar8 == '\0' &&
(cVar8 = CAddressList::IsAddressInList
((CAddressList *)(this + 0x174),(netadr_s *)param_1), cVar8 == '\0'))
|| (*(int *)(cl_failremoteconnections._28_4_ + 0x30) != 0)))) break;
this[0x18c] = (CBaseClientState)0x0;
*(undefined4 *)(this + 0x1b8) = *(undefined4 *)param_1;
*(undefined4 *)(this + 0x1bc) = *(undefined4 *)(param_1 + 4);
*(undefined2 *)(this + 0x1c0) = *(undefined2 *)(param_1 + 8);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x20) {
puVar2 = *(uint **)(param_1 + 0x34);
uVar11 = *(uint *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
*(int *)(param_1 + 0x30) = iVar13;
uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) <<
((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
goto LAB_00103e2b;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x20;
uVar11 = *(uint *)(param_1 + 0x2c);
if (iVar13 + -0x20 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
goto LAB_00103e24;
}
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
LAB_00103e24:
*(undefined4 *)(param_1 + 0x2c) = 0;
}
}
LAB_00103e2b:
*(uint *)(this + 0x1a0) = uVar11;
iVar13 = *(int *)(param_1 + 0x30);
if (0x1f < iVar13) {
*(int *)(param_1 + 0x30) = iVar13 + -0x20;
uVar11 = *(uint *)(param_1 + 0x2c);
if (iVar13 + -0x20 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
goto LAB_00103e72;
}
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
LAB_00103e72:
*(undefined4 *)(param_1 + 0x2c) = 0;
}
LAB_00103e79:
*(uint *)(this + 0x1a4) = uVar11;
*(undefined4 *)(this + 0x1a8) = 0;
*(undefined4 *)(this + 0x1ac) = 0;
this[0x18d] = (CBaseClientState)0x0;
if (uVar11 != 3) goto LAB_00103ea9;
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x10) {
puVar2 = *(uint **)(param_1 + 0x34);
uVar12 = *(undefined4 *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar11;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar15 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x10;
uVar9 = (ushort)((uVar15 & uVar11) << ((byte)iVar13 & 0x1f)) | (ushort)uVar12;
*(uint *)(param_1 + 0x2c) = uVar11 >> ((byte)(0x10 - iVar13) & 0x1f);
goto LAB_00104941;
}
}
LAB_00104d09:
uVar22 = CBitRead::ReadLongLong((CBitRead *)(param_1 + 0x1c));
*(undefined8 *)(this + 0x1a8) = uVar22;
iVar13 = *(int *)(param_1 + 0x30);
uVar11 = *(uint *)(param_1 + 0x2c);
if (iVar13 < 8) {
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
CVar20 = (CBaseClientState)0x0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
CVar20 = (CBaseClientState)
(uVar11 != 0 || (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) != 0);
goto LAB_00104d56;
}
}
CVar20 = (CBaseClientState)0x0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar15 = uVar11 & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
CVar20 = (CBaseClientState)(uVar15 != 0);
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
CVar20 = (CBaseClientState)(uVar15 != 0);
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
CVar20 = (CBaseClientState)(uVar15 != 0);
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
CVar20 = (CBaseClientState)(uVar15 != 0);
*(uint *)(param_1 + 0x2c) = uVar11 >> 8;
}
}
LAB_00104d56:
this[0x18d] = CVar20;
nVar7 = param_1[0x20];
goto LAB_00103efe;
}
*(int *)(param_1 + 0x30) = iVar13 + -0x10;
uVar9 = (ushort)*(uint *)(param_1 + 0x2c);
if (iVar13 + -0x10 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
}
LAB_00104941:
if (uVar9 == 0) goto LAB_00104d09;
Msg("Invalid Steam key size.\n");
goto LAB_00104956;
}
puVar2 = *(uint **)(param_1 + 0x34);
uVar11 = *(uint *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
*(int *)(param_1 + 0x30) = iVar13;
uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) << ((byte)iVar13 & 0x1f) |
uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
goto LAB_00103e79;
}
}
*(undefined4 *)(this + 0x1a4) = 0;
*(undefined4 *)(this + 0x1a8) = 0;
*(undefined4 *)(this + 0x1ac) = 0;
this[0x18d] = (CBaseClientState)0x0;
LAB_00103ea9:
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x10) {
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (puVar2 < *(uint **)(param_1 + 0x38)) {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar11;
if (param_1[0x20] == (netpacket_s)0x0) {
*(int *)(param_1 + 0x30) = iVar13 + 0x10;
*(uint *)(param_1 + 0x2c) = uVar11 >> (0x10U - (char)iVar13 & 0x1f);
}
}
else {
LAB_001049f5:
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x10;
if (iVar13 + -0x10 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x38) <= puVar3) goto LAB_001049f5;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
}
}
CBitRead::ReadLongLong((CBitRead *)(param_1 + 0x1c));
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (puVar2 < *(uint **)(param_1 + 0x38)) {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar11;
if (param_1[0x20] == (netpacket_s)0x0) {
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
*(uint *)(param_1 + 0x2c) = uVar11 >> (8U - (char)iVar13 & 0x1f);
goto LAB_00103f06;
}
}
else {
LAB_00104a05:
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
LAB_001049dd:
Msg("Invalid challenge packet.\n");
LAB_00104956:
(**(code **)(*(int *)this + 0x94))(this,1);
uVar12 = 0;
goto LAB_00103ae5;
}
*(int *)(param_1 + 0x30) = iVar13 + -8;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
nVar7 = param_1[0x20];
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
if (*(undefined4 **)(param_1 + 0x38) <= puVar3) goto LAB_00104a05;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
nVar7 = param_1[0x20];
}
}
else {
nVar7 = param_1[0x20];
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_00103efe:
if (nVar7 != (netpacket_s)0x0) goto LAB_001049dd;
LAB_00103f06:
pCVar19 = (CBitRead *)(param_1 + 0x1c);
if ((this[0x18d] != (CBaseClientState)0x0) &&
(cVar8 = Host_IsSecureServerAllowed(), cVar8 == '\0')) {
CUtlVector<Remote_t,CUtlMemory<Remote_t,int>>::RemoveAll
((CUtlVector<Remote_t,CUtlMemory<Remote_t,int>> *)(this + 0x174));
*(undefined4 *)(this + 0x15c) = 0;
*(undefined4 *)(this + 0x160) = 0;
*(undefined4 *)(this + 0x158) = 0;
(**(code **)(*(int *)this + 0x94))(this,1);
uVar12 = 0;
goto LAB_00103ae5;
}
pCVar17 = local_4d0;
for (iVar13 = 0x40; iVar13 != 0; iVar13 = iVar13 + -1) {
*(undefined4 *)pCVar17 = 0;
pCVar17 = pCVar17 + ((uint)bVar21 * -2 + 1) * 4;
}
pcVar18 = (char *)local_4d0;
CBitRead::ReadString(pCVar19,pcVar18,0x100,false,(int *)0x0);
iVar13 = _V_strlen("reserve");
iVar13 = V_strnicmp(pcVar18,"reserve",iVar13);
if (iVar13 == 0) {
(**(code **)(*(int *)this + 0xcc))(this,*(undefined4 *)(this + 0x1a0));
break;
}
iVar13 = _V_strlen("connect");
iVar13 = V_strnicmp(pcVar18,"connect",iVar13);
if (iVar13 != 0) break;
if (*(int *)(this + 0x60) == 1) {
this[0x18c] = (CBaseClientState)0x1;
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x20) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar3 = *(undefined4 **)(param_1 + 0x34);
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
local_8f4 = 0;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar15 = *(uint *)(param_1 + 0x2c);
uVar4 = (&CBitBuffer::s_nMaskTable)[0x20 - iVar13];
uVar12 = *(undefined4 *)(param_1 + 0x30);
*(int *)(param_1 + 0x30) = iVar13;
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> ((byte)(0x20 - iVar13) & 0x1f);
local_8f4 = (uVar15 & uVar4) << ((byte)uVar12 & 0x1f) | uVar11;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x20;
local_8f4 = *(uint *)(param_1 + 0x2c);
if (iVar13 + -0x20 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
goto LAB_00104c7b;
}
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
LAB_00104c7b:
*(undefined4 *)(param_1 + 0x2c) = 0;
}
}
uVar11 = GetHostVersion();
if (uVar11 == local_8f4) {
CBitRead::ReadString(pCVar19,(char *)(this + 399),0xf,false,(int *)0x0);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar3 = *(undefined4 **)(param_1 + 0x34);
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
uVar15 = 0;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar15 = (*(uint *)(param_1 + 0x2c) & (&CBitBuffer::s_nMaskTable)[8 - iVar13]) <<
((byte)*(undefined4 *)(param_1 + 0x30) & 0x1f) | uVar11;
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
local_8f4._0_1_ = (byte)(8 - iVar13);
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> ((byte)local_8f4 & 0x1f);
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar15 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
}
this[0x18e] = (CBaseClientState)(uVar15 == 1);
uVar22 = CBitRead::ReadLongLong(pCVar19);
*(undefined8 *)(this + 0x1b0) = uVar22;
puVar14 = &DAT_002b6517;
if (this[0x18e] == (CBaseClientState)0x0) {
puVar14 = &DAT_0029fe20;
}
pCVar17 = (CBaseClientState *)"<none>";
if (this[399] != (CBaseClientState)0x0) {
pCVar17 = this + 399;
}
Msg("Server using \'%s\' lobbies, requiring pw %s, lobby id %llx\n",pCVar17,puVar14,uVar22
);
pCVar17 = this + 0x1b8;
uVar12 = *(undefined4 *)(this + 0x1b0);
pnVar23 = *(netadr_s **)(this + 0x1b4);
RememberIPAddressForLobby(CONCAT44(uVar12,this),pnVar23);
if (this[399] == (CBaseClientState)0x0) {
if ((*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0) &&
(this[0x18e] != (CBaseClientState)0x0)) {
if (this[0x188] != (CBaseClientState)0x0) {
pcVar16 = "FCVAR_NEVER_AS_STRING";
if ((password[0x15] & 0x10) == 0) {
pcVar16 = "";
if (*(char **)(password._28_4_ + 0x24) != (char *)0x0) {
pcVar16 = *(char **)(password._28_4_ + 0x24);
}
}
if (*pcVar16 != '\0') goto LAB_00105523;
}
this[0x189] = (CBaseClientState)0x1;
break;
}
}
else if (((DAT_003b7f64 < 2) &&
(*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0)) &&
(*(int *)(this + 0x160) != 0 || *(int *)(this + 0x15c) != 0)) {
Warning("Server error - failed to handle reservation request.\n",uVar12,pnVar23,pCVar17)
;
goto LAB_00104956;
}
LAB_00105523:
iVar13 = _V_strlen("connect-retry");
iVar13 = V_strnicmp(pcVar18,"connect-retry",iVar13);
if (((iVar13 == 0) && (this[399] != (CBaseClientState)0x0)) &&
((DAT_003b7f64 < 2 && (*(int *)(this + 0x1b4) == 0 && *(int *)(this + 0x1b0) == 0)))) {
Msg("Grace request retry for unreserved server...\n");
LAB_001057f9:
(**(code **)(*(int *)this + 0xa4))(this,1);
}
else {
iVar13 = _V_strlen("connect-granted");
iVar13 = V_strnicmp(pcVar18,"connect-granted",iVar13);
if (iVar13 == 0) {
if ((this[399] != (CBaseClientState)0x0) && (DAT_003b7f64 < 2)) {
iVar10 = *(int *)(this + 0x1b0);
iVar13 = *(int *)(this + 0x1b4);
LAB_00105783:
if (iVar13 == 0 && iVar10 == 0) {
pcVar18 = "Server approved grace request...\n";
Msg();
}
}
}
else if ((this[399] != (CBaseClientState)0x0) && (DAT_003b7f64 < 2)) {
iVar13 = *(int *)(this + 0x1b4);
iVar10 = *(int *)(this + 0x1b0);
if (iVar13 != 0 || iVar10 != 0) goto LAB_00105783;
Msg("Server did not approve grace request, retrying...\n");
goto LAB_001057f9;
}
if (this[0x18c] != (CBaseClientState)0x0) {
HandleDeferredConnection((CBaseClientState *)pcVar18);
}
}
break;
}
uVar12 = GetHostVersion();
Msg("Invalid host version, expecting %d, got %d\n",uVar12,local_8f4);
goto LAB_00104956;
}
goto LAB_001035be;
case 0x42:
if ((*(int *)(this + 0x60) == 1) &&
(cVar8 = netadr_s::CompareAdr((netadr_s *)param_1,(netadr_s *)(this + 0x1b8),true),
cVar8 != '\0')) {
(**(code **)(*(int *)this + 0x84))(this,param_1);
}
break;
case 0x49:
uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
Msg("Responder : %s\n",uVar12);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
puVar2 = *(uint **)(param_1 + 0x34);
uVar11 = *(uint *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_00103660;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
}
LAB_00103660:
Msg("Protocol : %d\n",uVar11);
pCVar19 = (CBitRead *)(param_1 + 0x1c);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Hostname : %s\n",local_8d0);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Map : %s\n",local_8d0);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Game : %s\n",local_8d0);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Description : %s\n",local_8d0);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x10) {
uVar12 = *(undefined4 *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
iVar13 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar11;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar15 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x10;
*(uint *)(param_1 + 0x2c) = uVar11 >> ((byte)(0x10 - iVar13) & 0x1f);
iVar13 = (int)(short)((ushort)((uVar15 & uVar11) << ((byte)iVar13 & 0x1f)) |
(ushort)uVar12);
goto LAB_0010377c;
}
}
iVar13 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x10;
sVar6 = (short)*(uint *)(param_1 + 0x2c);
if (iVar13 + -0x10 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
iVar13 = (int)sVar6;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
iVar13 = (int)sVar6;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
iVar13 = (int)sVar6;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
iVar13 = (int)sVar6;
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
}
}
LAB_0010377c:
Msg("AppID : %u\n",iVar13);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_001037b6;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
}
LAB_001037b6:
Msg("Players : %u\n",uVar11);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_001037f0;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
}
LAB_001037f0:
Msg("MaxPlayers : %u\n",uVar11);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_0010382a;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
}
LAB_0010382a:
Msg("Bots : %u\n",uVar11);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_00103864;
}
}
LAB_001041fe:
puVar14 = &DAT_002b558c;
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_00103864:
if (0xc < uVar11 - 100) goto LAB_001041fe;
puVar14 = *(undefined **)(CSWTCH_873 + (uVar11 - 100) * 4);
}
Msg("Server Type : %s\n",puVar14);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_001038b1;
}
}
pcVar18 = "???";
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_001038b1:
pcVar18 = "Linux";
if ((uVar11 != 0x6c) && (pcVar18 = "???", uVar11 == 0x77)) {
pcVar18 = "Windows";
}
}
Msg("OS Type : %s\n",pcVar18);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_00103905;
}
}
LAB_001042c6:
puVar14 = &DAT_0029fe20;
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_00103905:
if ((int)uVar11 < 1) goto LAB_001042c6;
puVar14 = &DAT_002b6517;
}
Msg("Password : %s\n",puVar14);
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 8) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
uVar11 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
goto LAB_0010394c;
}
}
LAB_00104296:
puVar14 = &DAT_0029fe20;
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 8;
}
LAB_0010394c:
if ((int)uVar11 < 1) goto LAB_00104296;
puVar14 = &DAT_002b6517;
}
Msg("Secure : %s\n",puVar14);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Version : %s\n",local_8d0);
iVar13 = *(int *)(param_1 + 0x24);
if (*(int *)(param_1 + 0x3c) == 0) {
iVar10 = 0;
}
else {
iVar10 = (((uint)(*(int *)(param_1 + 0x34) - *(int *)(param_1 + 0x3c)) >> 2) * 0x20 -
*(int *)(param_1 + 0x30)) + (*(uint *)(param_1 + 0x28) & 3) * 8;
if (iVar13 < iVar10) {
iVar10 = iVar13;
}
}
if (7 < iVar13 - iVar10) {
iVar13 = *(int *)(param_1 + 0x30);
uVar11 = *(uint *)(param_1 + 0x2c);
if (iVar13 < 8) {
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[8 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x18;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(8 - iVar13) & 0x1f);
local_8f4 = (uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11;
goto LAB_00103a09;
}
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -8;
local_8f4 = uVar11 & 0xff;
if (iVar13 + -8 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = uVar11 >> 8;
}
LAB_00103a09:
if ((char)(byte)local_8f4 < '\0') {
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x10) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x10;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x10 - iVar13) & 0x1f);
uVar11 = ((uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11) & 0xffff;
goto LAB_0010489c;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x10;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xffff;
if (iVar13 + -0x10 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
}
}
LAB_0010489c:
Msg("Game Port : %u\n",uVar11);
}
if ((local_8f4 & 0x40) != 0) {
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x10) {
uVar11 = *(uint *)(param_1 + 0x2c);
puVar2 = *(uint **)(param_1 + 0x34);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
uVar4 = (&CBitBuffer::s_nMaskTable)[0x10 - iVar13];
*(int *)(param_1 + 0x30) = iVar13 + 0x10;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x10 - iVar13) & 0x1f);
uVar11 = ((uVar4 & uVar15) << ((byte)iVar13 & 0x1f) | uVar11) & 0xffff;
goto LAB_00103a4c;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x10;
uVar11 = *(uint *)(param_1 + 0x2c) & 0xffff;
if (iVar13 + -0x10 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = *(uint *)(param_1 + 0x2c) >> 0x10;
}
}
LAB_00103a4c:
Msg("Spec Port : %u\n",uVar11);
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Spec Name : %s\n",local_8d0);
}
if ((local_8f4 & 0x20) != 0) {
CBitRead::ReadString(pCVar19,local_8d0,0x400,false,(int *)0x0);
Msg("Public Tags : %s\n",local_8d0);
}
}
}
break;
case 0x69:
NET_OutOfBandPrintf(*(int *)(this + 0xc),(netadr_s *)param_1,"%c00000000000000",0x6a);
break;
case 0x6a:
uVar12 = netadr_s::ToString((netadr_s *)param_1,false);
ConMsg("A2A_ACK from %s\n",uVar12);
break;
case 0x6c:
cVar8 = CBitRead::ReadString
((CBitRead *)(param_1 + 0x1c),(char *)local_4d0,0x4b0,false,(int *)0x0);
if (cVar8 != '\0') {
ConMsg("%s\n",local_4d0);
}
break;
case 0x70:
iVar13 = *(int *)(param_1 + 0x30);
if (iVar13 < 0x20) {
puVar2 = *(uint **)(param_1 + 0x34);
uVar11 = *(uint *)(param_1 + 0x2c);
if (puVar2 == *(uint **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
uVar11 = 0;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(uint **)(param_1 + 0x34) = puVar2 + 1;
param_1[0x20] = (netpacket_s)0x1;
}
else {
if (*(uint **)(param_1 + 0x38) < puVar2) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(uint **)(param_1 + 0x34) = puVar2 + 1;
uVar15 = *puVar2;
*(uint *)(param_1 + 0x2c) = uVar15;
if (param_1[0x20] == (netpacket_s)0x0) {
*(int *)(param_1 + 0x30) = iVar13;
uVar11 = ((&CBitBuffer::s_nMaskTable)[0x20 - iVar13] & uVar15) <<
((byte)iVar13 & 0x1f) | uVar11;
*(uint *)(param_1 + 0x2c) = uVar15 >> ((byte)(0x20 - iVar13) & 0x1f);
goto LAB_00103c4a;
}
}
uVar11 = 0;
}
}
else {
*(int *)(param_1 + 0x30) = iVar13 + -0x20;
uVar11 = *(uint *)(param_1 + 0x2c);
if (iVar13 + -0x20 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else {
if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
goto LAB_00103c43;
}
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
LAB_00103c43:
*(undefined4 *)(param_1 + 0x2c) = 0;
}
}
LAB_00103c4a:
/* try { // try from 00103c4a to 00104026 has its CatchHandler @ 00105894 */
uVar15 = GetHostVersion();
if (uVar15 == uVar11) {
uVar11 = *(uint *)(param_1 + 0x2c);
pcVar5 = *(code **)(*(int *)this + 200);
pnVar1 = param_1 + 0x30;
*(int *)pnVar1 = *(int *)pnVar1 + -1;
if (*(int *)pnVar1 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x34);
*(undefined4 *)(param_1 + 0x30) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x38)) {
*(undefined4 *)(param_1 + 0x30) = 1;
*(undefined4 *)(param_1 + 0x2c) = 0;
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
}
else if (*(undefined4 **)(param_1 + 0x38) < puVar3) {
param_1[0x20] = (netpacket_s)0x1;
*(undefined4 *)(param_1 + 0x2c) = 0;
}
else {
*(undefined4 **)(param_1 + 0x34) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x2c) = *puVar3;
}
}
else {
*(uint *)(param_1 + 0x2c) = uVar11 >> 1;
}
(*pcVar5)(this,param_1,uVar11 & 1);
}
break;
case 0x74:
break;
}
uVar12 = 1;
}
LAB_00103ae5:
iVar13 = _DAT_0040b9d4;
if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
(iVar10 = ThreadGetCurrentId(), iVar13 == iVar10)) {
cVar8 = CVProfNode::ExitScope();
if (cVar8 != '\0') {
_DAT_0040b030 = (int *)_DAT_0040b030[0x19];
}
DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
}
if (local_8d4 != 0) {
(**(code **)(local_8d4 + 0x54))(local_8d4,local_8dc,local_8d8,0,0,0);
}
if (local_20 == *(int *)(in_GS_OFFSET + 0x14)) {
return uVar12;
}
/* WARNING: Subroutine does not return */
__stack_chk_fail();
}
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.