CNetChan::_ProcessMessages
0x001b6460 · 5900 bytes · __thiscall
_ZN8CNetChan16_ProcessMessagesER7bf_read
Decompiled
undefined (2 params)
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* CNetChan::_ProcessMessages(bf_read&) */
undefined4 __thiscall CNetChan::_ProcessMessages(CNetChan *this,bf_read *param_1)
{
CNetChan *pCVar1;
code *pcVar2;
undefined4 *puVar3;
uint uVar4;
uint uVar5;
char *pcVar6;
CNetChan *pCVar7;
char cVar8;
byte bVar9;
char *pcVar10;
INetMessage *this_00;
undefined4 uVar11;
char *pcVar12;
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*pCVar13;
int iVar14;
undefined4 uVar15;
undefined4 uVar16;
undefined4 uVar17;
int iVar18;
int iVar19;
uint uVar20;
uint *puVar21;
int iVar22;
uint *puVar23;
bool bVar24;
byte bVar25;
longdouble lVar26;
CNetChan *local_10c;
char *local_100;
char *local_fc;
uint *local_f4;
Node_t *local_f0;
undefined4 local_e4;
undefined4 local_e0;
undefined4 local_d8;
undefined4 local_d4;
int local_d0;
uint local_cc;
undefined4 local_c8;
undefined1 local_c4 [16];
uint local_b4;
undefined4 local_b0;
undefined1 local_ac [16];
uint local_9c;
undefined4 local_98;
uint local_94 [4];
uint local_84;
undefined4 local_80;
undefined1 local_7c [16];
uint local_6c;
undefined4 local_68;
undefined1 local_64 [16];
uint local_54;
undefined4 local_50;
uint local_4c;
int local_48;
int local_44;
int local_40;
uint local_3c;
undefined4 local_38;
uint local_34;
int local_30;
int local_2c;
int local_28;
CNetChan *local_24;
char local_20;
bVar25 = 0;
local_e4 = 0;
local_e0 = 0;
if (_exit == 0) {
local_d0 = 0;
}
else {
(**(code **)(_exit + 0x50))
(_exit,&local_e4,0,0,0,0,"/data/src/engine/./net_chan.cpp",0x9a6,
&_ProcessMessages(bf_read&)::tm_fmt,"(%s)%s","Unaccounted",
"CNetChan::ProcessMessages");
local_d0 = _exit;
}
iVar19 = _DAT_0040b9d4;
local_d8 = local_e4;
local_d4 = local_e0;
/* try { // try from 001b6bd6 to 001b6c24 has its CatchHandler @ 001b7b1c */
if (((_DAT_0040b028 != 0) || (DAT_0040b02c == '\0')) &&
(iVar14 = ThreadGetCurrentId(), iVar19 == iVar14)) {
if ((char *)*_DAT_0040b030 != "CNetChan::ProcessMessages") {
_DAT_0040b030 =
(int *)CVProfNode::GetSubNode((char *)_DAT_0040b030,0x2bb333,&DAT_00000001,0x2a054b);
}
CVProfNode::EnterScope();
DAT_0040b02c = '\0';
}
local_fc = "FCVAR_NEVER_AS_STRING";
this[6] = (CNetChan)0x0;
if ((net_showmsg[0x15] & 0x10) == 0) {
local_fc = "";
if (*(char **)(net_showmsg._28_4_ + 0x24) != (char *)0x0) {
local_fc = *(char **)(net_showmsg._28_4_ + 0x24);
}
}
local_100 = "FCVAR_NEVER_AS_STRING";
if ((net_blockmsg[0x15] & 0x10) == 0) {
local_100 = "";
if (*(char **)(net_blockmsg._28_4_ + 0x24) != (char *)0x0) {
local_100 = *(char **)(net_blockmsg._28_4_ + 0x24);
}
}
if (*local_fc == '0') {
local_fc = (char *)0x0;
}
pcVar10 = (char *)0x0;
if (*local_100 != '0') {
pcVar10 = local_100;
}
if (*(int *)(net_showpeaks._28_4_ + 0x30) < 1) {
iVar19 = *(int *)(param_1 + 0x20);
pcVar6 = local_fc;
}
else {
iVar19 = *(int *)(param_1 + 0x20);
iVar14 = *(int *)(param_1 + 8);
if (iVar19 == 0) {
iVar18 = 0;
}
else {
iVar18 = (((uint)(*(int *)(param_1 + 0x18) - iVar19) >> 2) * 0x20 - *(int *)(param_1 + 0x14))
+ (*(uint *)(param_1 + 0xc) & 3) * 8;
if (iVar14 < iVar18) {
iVar18 = iVar14;
}
}
pcVar6 = "1";
if (iVar14 - iVar18 >> 3 <= *(int *)(net_showpeaks._28_4_ + 0x30)) {
pcVar6 = local_fc;
}
}
if (iVar19 == 0) {
if (param_1[4] == (bf_read)0x0) goto LAB_001b664a;
LAB_001b7280:
/* try { // try from 001b7296 to 001b72b3 has its CatchHandler @ 001b79c3 */
CNetchanParanoidMode::Dump
((CNetchanParanoidMode *)g_NetParanoid,this,"Buffer overflow in net message");
(**(code **)(**(int **)(this + 0x4208) + 0x10))
(*(int **)(this + 0x4208),"Buffer overflow in net message");
}
else {
do {
while( true ) {
if (param_1[4] != (bf_read)0x0) goto LAB_001b7280;
LAB_001b664a:
iVar19 = *(int *)(param_1 + 8);
if (*(int *)(param_1 + 0x20) != 0) {
iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
if (iVar19 < iVar14) {
iVar14 = iVar19;
}
iVar19 = iVar19 - iVar14;
}
if (iVar19 < 6) {
if (0 < *(int *)(net_dumptest._28_4_ + 0x30)) {
if (*(int *)(net_dumptest._28_4_ + 0x30) == 2) {
DAT_00000000 = 1;
}
else {
/* try { // try from 001b6fa4 to 001b6fc3 has its CatchHandler @ 001b79c3 */
ConVar::SetValue(0x3ab9e0);
CNetchanParanoidMode::Dump
((CNetchanParanoidMode *)g_NetParanoid,this,"requested from console");
}
}
uVar11 = 1;
goto LAB_001b6c92;
}
/* try { // try from 001b6685 to 001b6809 has its CatchHandler @ 001b79c3 */
cVar8 = BContinueSocketProcessingFrameCheckpoint(this);
if (cVar8 == '\0') {
iVar19 = *(int *)(param_1 + 8);
uVar11 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x14);
uVar15 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x18);
if (*(int *)(param_1 + 0x20) == 0) {
iVar14 = 0;
}
else {
iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
if (iVar19 < iVar14) {
iVar14 = iVar19;
}
}
iVar18 = (iVar19 - iVar14) + 7;
iVar19 = (iVar19 - iVar14) + 0xe;
if (-1 < iVar18) {
iVar19 = iVar18;
}
/* try { // try from 001b7346 to 001b737d has its CatchHandler @ 001b79c3 */
uVar16 = (**(code **)(*(int *)this + 4))(this);
Msg("Messages from %s after processing time exceeded (%d bytes left), aborting connection after %llu usec tick\n"
,uVar16,iVar19 >> 3,uVar11,uVar15);
(**(code **)(**(int **)(this + 0x4208) + 0x10))
(*(int **)(this + 0x4208),"Processing time exceeded");
goto LAB_001b6c90;
}
iVar19 = *(int *)(param_1 + 0x14);
if (iVar19 < 6) break;
*(int *)(param_1 + 0x14) = iVar19 + -6;
uVar20 = *(uint *)(param_1 + 0x10) & 0x3f;
if (iVar19 + -6 == 0) {
puVar3 = *(undefined4 **)(param_1 + 0x18);
*(undefined4 *)(param_1 + 0x14) = 0x20;
if (puVar3 == *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
goto LAB_001b66bd;
}
if (puVar3 <= *(undefined4 **)(param_1 + 0x1c)) {
*(undefined4 **)(param_1 + 0x18) = puVar3 + 1;
*(undefined4 *)(param_1 + 0x10) = *puVar3;
goto LAB_001b66bd;
}
param_1[4] = (bf_read)0x1;
bVar9 = (byte)uVar20;
*(undefined4 *)(param_1 + 0x10) = 0;
local_f4 = (uint *)uVar20;
}
else {
*(uint *)(param_1 + 0x10) = *(uint *)(param_1 + 0x10) >> 6;
LAB_001b66bd:
bVar9 = (byte)uVar20;
local_f4 = (uint *)(uVar20 & 0xff);
}
if (bVar9 < 3) {
uVar20 = uVar20 & 0xff;
goto LAB_001b6c5a;
}
iVar19 = Plat_MSTime();
if (*(int *)(param_1 + 0x20) == 0) {
iVar14 = 0;
}
else {
iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
if (*(int *)(param_1 + 8) < iVar14) {
iVar14 = *(int *)(param_1 + 8);
}
}
this_00 = (INetMessage *)FindMessage(*(CNetChan **)(this + 0x423c),uVar20 & 0xff);
if (this_00 != (INetMessage *)0x0) {
uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
if (*(int *)(param_1 + 0x20) == 0) {
iVar18 = 0;
}
else {
iVar22 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
iVar18 = *(int *)(param_1 + 8);
if (iVar22 <= *(int *)(param_1 + 8)) {
iVar18 = iVar22;
}
}
CNetchanParanoidMode::AddMessage((CNetchanParanoidMode *)g_NetParanoid,this_00,iVar18);
cVar8 = (**(code **)(*(int *)this_00 + 0x18))(this_00,param_1);
if (cVar8 == '\0') {
/* try { // try from 001b73ee to 001b7427 has its CatchHandler @ 001b79c3 */
netadr_s::ToString((netadr_s *)(this + 0x98),false);
ConMsg("Netchannel: failed reading message %s from %s.\n",uVar11);
CNetchanParanoidMode::Dump
((CNetchanParanoidMode *)g_NetParanoid,this,"failed reading message");
goto LAB_001b6c90;
}
}
if (*(int *)(param_1 + 0x20) == 0) {
iVar18 = 0;
}
else {
iVar22 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
iVar18 = *(int *)(param_1 + 8);
if (iVar22 <= *(int *)(param_1 + 8)) {
iVar18 = iVar22;
}
}
_V_memset(&local_34,0,0x10);
_V_memset(&local_3c,0,0x20);
local_38 = 0;
local_2c = 1;
local_24 = this;
local_30 = 0;
iVar22 = (iVar18 - iVar14) + 7;
if (iVar22 < 0) {
iVar22 = (iVar18 - iVar14) + 0xe;
}
iVar22 = iVar22 >> 3;
local_3c = (uint)local_f4;
local_34 = iVar19 * 1000;
local_28 = iVar22;
if (this_00 == (INetMessage *)0x0) {
/* try { // try from 001b73a2 to 001b73d5 has its CatchHandler @ 001b7991 */
netadr_s::ToString((netadr_s *)(this + 0x98),false);
ConMsg("Netchannel: unknown net message (%i) from %s.\n",uVar20 & 0xff);
CNetchanParanoidMode::Dump((CNetchanParanoidMode *)g_NetParanoid,this,"unknown message");
goto LAB_001b70b0;
}
/* try { // try from 001b686e to 001b6a48 has its CatchHandler @ 001b7991 */
uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
if (*(int *)(param_1 + 0x20) == 0) {
iVar19 = 0;
}
else {
iVar14 = (((uint)(*(int *)(param_1 + 0x18) - *(int *)(param_1 + 0x20)) >> 2) * 0x20 -
*(int *)(param_1 + 0x14)) + (*(uint *)(param_1 + 0xc) & 3) * 8;
iVar19 = *(int *)(param_1 + 8);
if (iVar14 <= *(int *)(param_1 + 8)) {
iVar19 = iVar14;
}
}
CNetchanParanoidMode::UpdateMessage((CNetchanParanoidMode *)g_NetParanoid,this_00,iVar19);
cVar8 = (**(code **)(*(int *)this_00 + 0x14))(this_00,net_time,iVar22,this_00);
if (cVar8 == '\0') {
/* try { // try from 001b7037 to 001b70af has its CatchHandler @ 001b7991 */
lVar26 = (longdouble)Plat_FloatTime();
if ((double)lVar26 <= BShouldSpewNetChanOverflow()::s_flTimeLastBackPacketBatchStart + 5.0
) {
if (4 < BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount) goto LAB_001b70b0;
BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount =
BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount + 1;
}
else {
BShouldSpewNetChanOverflow()::s_flTimeLastBackPacketBatchStart = (double)lVar26;
BShouldSpewNetChanOverflow()::s_nBadPacketBatchCount = 1;
}
uVar11 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
uVar15 = (**(code **)(*(int *)this + 4))(this);
Warning("Msg from %s: %s rejected by msg bind (%d bytes)\n",uVar15,uVar11,iVar22);
goto LAB_001b70b0;
}
pcVar2 = *(code **)(*(int *)this + 0xe4);
(**(code **)(*(int *)this_00 + 0x28))(this_00);
(*pcVar2)(this);
if (pcVar6 != (char *)0x0) {
if (*pcVar6 != '1') {
pcVar12 = (char *)(**(code **)(*(int *)this_00 + 0x2c))(this_00);
iVar19 = _V_stricmp(pcVar6,pcVar12);
if (iVar19 != 0) goto LAB_001b69af;
}
(**(code **)(*(int *)this_00 + 0x34))(this_00);
netadr_s::ToString((netadr_s *)(this + 0x98),false);
ConMsg("Msg from %s: %s\n");
}
LAB_001b69af:
if (pcVar10 == (char *)0x0) {
LAB_001b69ea:
cVar8 = BContinueSocketProcessingFrameCheckpoint(this);
if (cVar8 == '\0') {
uVar11 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x14);
uVar15 = *(undefined4 *)(**(int **)(this + 0x425c) + 0x18);
/* try { // try from 001b7446 to 001b7664 has its CatchHandler @ 001b7991 */
uVar16 = (**(code **)(*(int *)this_00 + 0x2c))(this_00);
uVar17 = (**(code **)(*(int *)this + 4))(this);
Msg("Msg from %s: %s after processing time exceeded (%d bytes), aborting connection after %llu usec tick\n"
,uVar17,uVar16,iVar22,uVar11,uVar15);
if (((local_20 == '\0') &&
(local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
(g_pNetChannelProcessingActivePacket == local_24)) {
iVar19 = Plat_MSTime();
uVar11 = local_38;
uVar20 = local_3c;
pCVar7 = g_pNetChannelProcessingActivePacket;
bVar24 = (uint)(iVar19 * 1000) < local_34;
local_34 = iVar19 * 1000 - local_34;
local_30 = -(uint)bVar24 - local_30;
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
pCVar1 = pCVar7 + 0x42a0;
*(int *)pCVar1 = *(int *)pCVar1 + 1;
iVar19 = **(int **)(pCVar7 + 0x425c);
_V_memset(local_c4,0,0x10);
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(iVar19 + 0x24);
local_cc = uVar20;
local_c8 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_cc);
if (iVar14 == -1) {
_V_memset(local_ac,0,0x10);
local_b4 = uVar20;
local_b0 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_b4);
if (iVar14 == -1) {
_V_memset(local_94,0,0x10);
local_9c = uVar20;
local_98 = uVar11;
puVar21 = &local_34;
puVar23 = local_94;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_9c);
}
else {
puVar21 = &local_34;
puVar23 = (uint *)(iVar14 * 0x28 + *(int *)(iVar19 + 0x28) + 0x18);
for (iVar18 = 4; iVar18 != 0; iVar18 = iVar18 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
}
}
else {
iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
uVar11 = local_38;
uVar20 = local_3c;
pCVar1 = g_pNetChannelProcessingActivePacket;
_V_memset(local_7c,0,0x10);
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(pCVar1 + 0x42a8);
local_84 = uVar20;
local_80 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_84);
if (iVar19 == -1) {
/* try { // try from 001b79dd to 001b7b16 has its CatchHandler @ 001b7991 */
_V_memset(local_64,0,0x10);
local_6c = uVar20;
local_68 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_6c);
if (iVar19 == -1) {
_V_memset(&local_4c,0,0x10);
local_50 = uVar11;
local_54 = uVar20;
puVar21 = &local_34;
puVar23 = &local_4c;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
else {
puVar21 = &local_34;
puVar23 = (uint *)(iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac) + 0x18);
for (iVar14 = 4; iVar14 != 0; iVar14 = iVar14 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
}
}
else {
iVar19 = *(int *)(pCVar1 + 0x42ac) + iVar19 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
}
(**(code **)(*(int *)this_00 + 4))(this_00);
(**(code **)(**(int **)(this + 0x4208) + 0x10))
(*(int **)(this + 0x4208),"Processing time exceeded");
LAB_001b70b0:
if (((local_20 == '\0') &&
(local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
(g_pNetChannelProcessingActivePacket == local_24)) {
iVar19 = Plat_MSTime();
uVar11 = local_38;
uVar20 = local_3c;
pCVar7 = g_pNetChannelProcessingActivePacket;
bVar24 = (uint)(iVar19 * 1000) < local_34;
local_34 = iVar19 * 1000 - local_34;
local_30 = -(uint)bVar24 - local_30;
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
pCVar1 = pCVar7 + 0x42a0;
*(int *)pCVar1 = *(int *)pCVar1 + 1;
iVar19 = **(int **)(pCVar7 + 0x425c);
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(iVar19 + 0x24);
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_50 = uVar11;
local_54 = uVar20;
puVar21 = &local_34;
puVar23 = &local_4c;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
else {
iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
*(uint *)(iVar19 + 0x18) = local_34;
*(int *)(iVar19 + 0x1c) = local_30;
*(int *)(iVar19 + 0x20) = local_2c;
*(int *)(iVar19 + 0x24) = local_28;
}
}
else {
iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
uVar11 = local_38;
uVar20 = local_3c;
pCVar1 = g_pNetChannelProcessingActivePacket;
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(g_pNetChannelProcessingActivePacket + 0x42a8);
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar19 == -1) {
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar19 == -1) {
_V_memset(&local_4c,0,0x10);
local_50 = uVar11;
local_54 = uVar20;
puVar21 = &local_34;
puVar23 = &local_4c;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
else {
iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
*(uint *)(iVar19 + 0x18) = local_34;
*(int *)(iVar19 + 0x1c) = local_30;
*(int *)(iVar19 + 0x20) = local_2c;
*(int *)(iVar19 + 0x24) = local_28;
}
}
else {
iVar19 = *(int *)(pCVar1 + 0x42ac) + iVar19 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
}
goto LAB_001b6c90;
}
this[4] = (CNetChan)0x1;
cVar8 = (**(code **)(*(int *)this_00 + 0x10))();
this[4] = (CNetChan)0x0;
if (this[5] != (CNetChan)0x0) {
_ProcessMessages(bf_read&)::CPerMessageStatsRecorder_t::RecordStats
((CPerMessageStatsRecorder_t *)this_00);
(**(code **)(*(int *)this + 0x70))(this);
goto LAB_001b70b0;
}
if (this[6] != (CNetChan)0x0) goto LAB_001b70b0;
if (cVar8 == '\0') {
ConDMsg("Netchannel: failed processing message %s.\n",uVar11);
CNetchanParanoidMode::Dump
((CNetchanParanoidMode *)g_NetParanoid,this,"failed processing");
goto LAB_001b70b0;
}
cVar8 = (**(code **)(*(int *)this + 0xec))(this);
if (cVar8 != '\0') goto LAB_001b70b0;
if (((local_20 == '\0') &&
(local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
(g_pNetChannelProcessingActivePacket == local_24)) {
iVar19 = Plat_MSTime();
uVar11 = local_38;
uVar20 = local_3c;
pCVar7 = g_pNetChannelProcessingActivePacket;
bVar24 = (uint)(iVar19 * 1000) < local_34;
local_34 = iVar19 * 1000 - local_34;
local_30 = -(uint)bVar24 - local_30;
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
pCVar1 = pCVar7 + 0x42a0;
*(int *)pCVar1 = *(int *)pCVar1 + 1;
iVar19 = **(int **)(pCVar7 + 0x425c);
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(iVar19 + 0x24);
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
local_4c = local_34;
local_48 = local_30;
local_44 = local_2c;
local_40 = local_28;
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
else {
iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
*(uint *)(iVar19 + 0x18) = local_34;
*(int *)(iVar19 + 0x1c) = local_30;
*(int *)(iVar19 + 0x20) = local_2c;
*(int *)(iVar19 + 0x24) = local_28;
}
}
else {
iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
uVar11 = local_38;
uVar20 = local_3c;
pCVar1 = g_pNetChannelProcessingActivePacket;
local_10c = g_pNetChannelProcessingActivePacket;
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(pCVar1 + 0x42a8);
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar19 != -1) goto LAB_001b6b9c;
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar19 != -1) {
iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
goto LAB_001b6ec0;
}
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
local_4c = local_34;
local_48 = local_30;
local_44 = local_2c;
local_40 = local_28;
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
}
else {
if (*pcVar10 != '1') {
pcVar12 = (char *)(**(code **)(*(int *)this_00 + 0x2c))(this_00);
iVar19 = _V_stricmp(pcVar10,pcVar12);
if (iVar19 != 0) goto LAB_001b69ea;
}
/* try { // try from 001b6d0b to 001b6d1d has its CatchHandler @ 001b7991 */
(**(code **)(*(int *)this_00 + 0x34))(this_00);
ConMsg("Blocking message %s\n");
if (((local_20 == '\0') &&
(local_20 = '\x01', g_pNetChannelProcessingActivePacket != (CNetChan *)0x0)) &&
(g_pNetChannelProcessingActivePacket == local_24)) {
iVar19 = Plat_MSTime();
uVar11 = local_38;
uVar20 = local_3c;
pCVar7 = g_pNetChannelProcessingActivePacket;
bVar24 = (uint)(iVar19 * 1000) < local_34;
local_34 = iVar19 * 1000 - local_34;
local_30 = -(uint)bVar24 - local_30;
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) =
*(int *)(**(int **)(g_pNetChannelProcessingActivePacket + 0x425c) + 0x1c) + 1;
pCVar1 = pCVar7 + 0x42a0;
*(int *)pCVar1 = *(int *)pCVar1 + 1;
iVar19 = **(int **)(pCVar7 + 0x425c);
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(iVar19 + 0x24);
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar14 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,(Node_t *)&local_54);
if (iVar14 == -1) {
_V_memset(&local_4c,0,0x10);
local_50 = uVar11;
local_54 = uVar20;
puVar21 = &local_34;
puVar23 = &local_4c;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*puVar23 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
puVar23 = puVar23 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,(Node_t *)&local_54);
}
else {
iVar19 = iVar14 * 0x28 + *(int *)(iVar19 + 0x28);
*(uint *)(iVar19 + 0x18) = local_34;
*(int *)(iVar19 + 0x1c) = local_30;
*(int *)(iVar19 + 0x20) = local_2c;
*(int *)(iVar19 + 0x24) = local_28;
}
}
else {
iVar19 = *(int *)(iVar19 + 0x28) + iVar14 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
uVar11 = local_38;
uVar20 = local_3c;
pCVar1 = g_pNetChannelProcessingActivePacket;
local_f0 = (Node_t *)&local_54;
local_f4 = &local_4c;
local_10c = g_pNetChannelProcessingActivePacket;
_V_memset(local_f4,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
pCVar13 = (CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
*)(pCVar1 + 0x42a8);
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,local_f0);
if (iVar19 == -1) {
_V_memset(local_f4,0,0x10);
local_54 = uVar20;
local_50 = uVar11;
iVar19 = CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Find(pCVar13,local_f0);
if (iVar19 == -1) {
_V_memset(local_f4,0,0x10);
local_50 = uVar11;
local_54 = uVar20;
puVar21 = &local_34;
for (iVar19 = 4; iVar19 != 0; iVar19 = iVar19 + -1) {
*local_f4 = *puVar21;
puVar21 = puVar21 + (uint)bVar25 * -2 + 1;
local_f4 = local_f4 + (uint)bVar25 * -2 + 1;
}
CUtlRBTree<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int,CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::CKeyLess,CUtlMemory<UtlRBTreeNode_t<CUtlMap<unsigned_long_long,CNetChan::MessageProcessingStats_t,int>::Node_t,int>,int>>
::Insert(pCVar13,local_f0);
}
else {
iVar19 = iVar19 * 0x28 + *(int *)(pCVar1 + 0x42ac);
LAB_001b6ec0:
*(uint *)(iVar19 + 0x18) = local_34;
*(int *)(iVar19 + 0x1c) = local_30;
*(int *)(iVar19 + 0x20) = local_2c;
*(int *)(iVar19 + 0x24) = local_28;
}
}
else {
LAB_001b6b9c:
iVar19 = *(int *)(local_10c + 0x42ac) + iVar19 * 0x28;
puVar21 = (uint *)(iVar19 + 0x18);
uVar20 = *puVar21;
*puVar21 = *puVar21 + local_34;
*(int *)(iVar19 + 0x1c) =
*(int *)(iVar19 + 0x1c) + local_30 + (uint)CARRY4(uVar20,local_34);
*(int *)(iVar19 + 0x20) = *(int *)(iVar19 + 0x20) + local_2c;
*(int *)(iVar19 + 0x24) = *(int *)(iVar19 + 0x24) + local_28;
}
}
}
}
puVar21 = *(uint **)(param_1 + 0x18);
uVar20 = *(uint *)(param_1 + 0x10);
if (puVar21 == *(uint **)(param_1 + 0x1c)) {
*(undefined4 *)(param_1 + 0x14) = 1;
*(undefined4 *)(param_1 + 0x10) = 0;
*(uint **)(param_1 + 0x18) = puVar21 + 1;
param_1[4] = (bf_read)0x1;
}
else if (*(uint **)(param_1 + 0x1c) < puVar21) {
param_1[4] = (bf_read)0x1;
*(undefined4 *)(param_1 + 0x10) = 0;
}
else {
*(uint **)(param_1 + 0x18) = puVar21 + 1;
uVar4 = *puVar21;
*(uint *)(param_1 + 0x10) = uVar4;
if (param_1[4] == (bf_read)0x0) {
uVar5 = (&CBitBuffer::s_nMaskTable)[6 - iVar19];
*(int *)(param_1 + 0x14) = iVar19 + 0x1a;
uVar20 = (uVar5 & uVar4) << ((byte)iVar19 & 0x1f) | uVar20;
*(uint *)(param_1 + 0x10) = uVar4 >> ((byte)(6 - iVar19) & 0x1f);
goto LAB_001b66bd;
}
}
uVar20 = 0;
LAB_001b6c5a:
this[4] = (CNetChan)0x1;
/* try { // try from 001b6c6c to 001b6c70 has its CatchHandler @ 001b79c3 */
cVar8 = ProcessControlMessage(this,uVar20,param_1);
this[4] = (CNetChan)0x0;
} while (cVar8 != '\0');
if (this[5] != (CNetChan)0x0) {
(**(code **)(*(int *)this + 0x70))(this);
}
}
LAB_001b6c90:
uVar11 = 0;
LAB_001b6c92:
iVar19 = _DAT_0040b9d4;
if (((DAT_0040b02c == '\0') || (_DAT_0040b028 != 0)) &&
(iVar14 = ThreadGetCurrentId(), iVar19 == iVar14)) {
cVar8 = CVProfNode::ExitScope();
if (cVar8 != '\0') {
_DAT_0040b030 = (int *)_DAT_0040b030[0x19];
}
DAT_0040b02c = _DAT_0040b030 == (int *)0x40b034;
}
if (local_d0 != 0) {
(**(code **)(local_d0 + 0x54))(local_d0,local_d8,local_d4,0,0,0);
}
return uVar11;
}
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.