server-re/decomp/DBCServer_Release_x64/full/functions/0x1401a6a40.c

404 lines
15 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a6a40 FUN_1401a6a40
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x0001401a706e) */
void FUN_1401a6a40(longlong param_1,int *param_2,longlong *param_3)
{
int iVar1;
undefined4 uVar2;
code *pcVar3;
longlong *plVar4;
char cVar5;
int iVar6;
ulonglong uVar7;
undefined4 *puVar8;
undefined8 uVar9;
longlong lVar10;
ulonglong uVar11;
longlong lVar12;
longlong *plVar13;
int iVar14;
ulonglong uVar15;
undefined1 *puVar16;
undefined1 *puVar17;
longlong lVar18;
longlong *plVar19;
longlong lVar20;
longlong *plVar21;
longlong *plVar22;
undefined1 auStack_1b18 [32];
undefined4 local_1af8;
undefined4 local_1af4;
undefined8 local_1af0;
ulonglong local_1ae8;
undefined1 *local_1ae0;
char local_1ad8;
undefined4 local_1ad0 [2];
longlong local_1ac8;
undefined1 local_1ac0;
undefined4 local_1abc;
undefined1 local_1ab8;
undefined1 local_1ab7;
undefined4 local_1ab0 [2];
undefined **local_1aa8;
longlong *local_1aa0;
longlong *local_1a98;
ulonglong local_1a90;
undefined8 local_1a88;
undefined1 local_1a80 [8];
undefined1 local_1a78 [8];
longlong local_1a70;
undefined4 local_1a68;
int local_1a64;
longlong local_1a58;
longlong *local_1a50;
longlong local_1a48;
undefined8 local_1a40;
undefined1 local_1a38;
undefined8 local_1a30;
undefined1 local_1a28 [16];
undefined1 local_1a18 [8];
undefined1 local_1a10 [8];
longlong local_1a08;
undefined4 local_1a00;
int local_19fc;
undefined1 local_19f0 [136];
undefined1 local_1968 [3200];
undefined1 *local_ce8;
undefined4 local_ce0;
undefined4 local_cdc;
undefined1 local_cd8 [3216];
ulonglong local_48;
undefined8 uStack_40;
uStack_40 = 0x1401a6a56;
puVar17 = auStack_1b18;
local_1a30 = 0xfffffffffffffffe;
local_48 = DAT_1403463c0 ^ (ulonglong)&local_1af8;
local_1a58 = param_1;
cVar5 = FUN_14016bc20(param_2,local_1ab0);
puVar16 = auStack_1b18;
if ((cVar5 == '\0') ||
(cVar5 = FUN_14016ba10(param_2,&local_1a48), puVar16 = auStack_1b18, cVar5 == '\0'))
goto LAB_1401a717f;
plVar19 = (longlong *)0x0;
local_1aa0 = (longlong *)0x0;
local_1a98 = (longlong *)0x0;
local_1a90 = 0;
local_1a88 = 0;
local_1aa8 = Proud::HostIDArray::vftable;
cVar5 = FUN_14016ba10(param_2,&local_1ae8);
plVar13 = plVar19;
plVar21 = plVar19;
if ((cVar5 == '\0') ||
((iVar14 = (int)local_1ae8, plVar21 = (longlong *)0x0, iVar14 < 0 || (DAT_140344d70 < iVar14)))
) {
LAB_1401a715f:
puVar16 = auStack_1b18;
if (plVar21 == (longlong *)0x0) goto LAB_1401a717f;
puVar16 = auStack_1b18;
if (plVar13 == (longlong *)0x0) {
LAB_1401a7177:
*(undefined8 *)(puVar16 + -8) = 0x1401a717f;
FUN_14016d970(plVar21);
goto LAB_1401a717f;
}
lVar10 = *plVar13;
puVar16 = auStack_1b18;
}
else {
FUN_1401738d0(&local_1aa8,local_1ae8 & 0xffffffff);
plVar21 = local_1a98;
plVar13 = local_1a98;
if ((int)local_1a90 == 0) {
plVar13 = plVar19;
}
cVar5 = FUN_14016b370(param_2,plVar13,iVar14 * 4);
plVar13 = local_1aa0;
if (cVar5 == '\0') goto LAB_1401a715f;
cVar5 = FUN_14016ba10(param_2,&local_1ae8);
uVar15 = local_1ae8;
puVar16 = auStack_1b18;
if (cVar5 != '\0') {
iVar14 = (int)local_1ae8;
if ((iVar14 < 0) || (DAT_140344d70 <= iVar14)) {
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
puVar16 = auStack_1b18;
}
else {
iVar1 = *param_2;
iVar6 = FUN_14016afd0(param_2);
if (((int)((iVar1 >> 0x1f & 7U) + iVar1) >> 3) + iVar14 != iVar6) {
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
}
FUN_14016b440(local_1a80);
cVar5 = FUN_14016b6a0(param_2,local_1a80,uVar15 & 0xffffffff);
if (cVar5 == '\0') {
FUN_140193740(*(undefined8 *)(param_1 + 0x148),param_3,
"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1",2);
local_1ae0 = local_1a78;
FUN_14016d0e0(local_1a78);
puVar16 = auStack_1b18;
if (local_1a70 != 0) {
if (local_1a64 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1a68 = 0;
puVar16 = auStack_1b18;
}
}
else {
iVar14 = (int)local_1a90;
uVar15 = (ulonglong)(int)local_1a90;
if ((int)local_1a90 < 1) {
local_1ae0 = local_1a78;
FUN_14016d0e0(local_1a78);
puVar16 = auStack_1b18;
if (local_1a70 != 0) {
if (local_1a64 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1a68 = 0;
puVar16 = auStack_1b18;
}
}
else {
uVar11 = (uVar15 + 1) * 0x10;
local_1ae0 = (undefined1 *)uVar15;
if (uVar11 < 0x401) {
uVar7 = uVar11 + 0xf;
if (uVar7 <= uVar11) {
uVar7 = 0xffffffffffffff0;
}
lVar10 = -(uVar7 & 0xfffffffffffffff0);
puVar17 = auStack_1b18 + lVar10;
puVar8 = (undefined4 *)((longlong)&local_1af8 + lVar10);
plVar13 = (longlong *)0x0;
if (puVar8 != (undefined4 *)0x0) {
*puVar8 = 0xcccc;
puVar17 = auStack_1b18 + lVar10;
LAB_1401a6cd2:
plVar13 = (longlong *)(puVar8 + 4);
}
}
else {
puVar8 = malloc(uVar11);
plVar13 = (longlong *)0x0;
if (puVar8 != (undefined4 *)0x0) {
*puVar8 = 0xdddd;
puVar17 = auStack_1b18;
goto LAB_1401a6cd2;
}
}
pcVar3 = *(code **)(**(longlong **)(param_1 + 0x148) + 0x58);
*(undefined8 *)(puVar17 + -8) = 0x1401a6ce3;
uVar9 = (*pcVar3)();
local_1a40 = uVar9;
*(undefined8 *)(puVar17 + -8) = 0x1401a6cf2;
FUN_14016db50(uVar9);
local_1a38 = 1;
plVar22 = *(longlong **)(param_1 + 0x148);
if (DAT_14034c86f != '\0') {
pcVar3 = *(code **)(*plVar22 + 200);
*(undefined8 *)(puVar17 + -8) = 0x1401a6d1a;
(*pcVar3)(plVar22,
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_UnreliableRelay1");
}
pcVar3 = *(code **)(*param_3 + 0x10);
*(undefined8 *)(puVar17 + -8) = 0x1401a6d24;
local_1af4 = (*pcVar3)(param_3);
local_1af0 = (ulonglong)local_1af0._4_4_ << 0x20;
plVar22 = plVar19;
plVar4 = plVar13;
if (0 < iVar14) {
do {
local_1a50 = plVar4;
if (((longlong)plVar19 < 0) || ((int)uVar15 <= (int)plVar22)) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar17 + -8) = &UNK_1401a6dc7;
FUN_14016d6e0();
}
uVar2 = *(undefined4 *)((longlong)plVar21 + (longlong)plVar19 * 4);
uVar9 = *(undefined8 *)(param_1 + 0x148);
*(undefined8 *)(puVar17 + -8) = 0x1401a6d5d;
lVar10 = FUN_1401763d0(uVar9,uVar2);
local_1ac8 = CONCAT44(local_1ac8._4_4_,uVar2);
if (lVar10 != 0) {
*(undefined8 *)(puVar17 + -8) = 0x1401a6d74;
FUN_1401baa10(lVar10 + 0xc0);
uVar9 = *(undefined8 *)(local_1a58 + 0x148);
*(undefined8 *)(puVar17 + -8) = 0x1401a6d8a;
FUN_140189800(uVar9,lVar10);
*local_1a50 = lVar10;
local_1a50[1] = local_1ac8;
local_1af0 = CONCAT44(local_1af0._4_4_,(int)local_1af0 + 1);
local_1a50 = local_1a50 + 2;
}
plVar19 = (longlong *)((longlong)plVar19 + 1);
uVar15 = local_1a90 & 0xffffffff;
param_1 = local_1a58;
plVar22 = (longlong *)(ulonglong)((int)plVar22 + 1);
plVar4 = local_1a50;
} while ((longlong)plVar19 < (longlong)local_1ae0);
}
uVar9 = local_1a40;
*(undefined8 *)(puVar17 + -8) = 0x1401a6dd4;
FUN_14016dbe0(uVar9);
local_1a38 = 0;
*(undefined8 *)(puVar17 + -8) = 0x1401a6de7;
FUN_14016b440(local_1a18);
*(undefined8 *)(puVar17 + -8) = 0x1401a6e01;
FUN_14016b0c0(local_1a18,local_19f0,0x80);
*(undefined8 *)(puVar17 + -8) = 0x1401a6e10;
FUN_14004eef0(local_1a18,0x18);
uVar2 = local_1af4;
*(undefined8 *)(puVar17 + -8) = 0x1401a6e1f;
FUN_140153c40(local_1a18,uVar2);
*(undefined8 *)(puVar17 + -8) = 0x1401a6e32;
FUN_14016aaa0(local_1a28,local_1a18);
lVar10 = (longlong)(int)local_1ae8;
*(undefined8 *)(puVar17 + -8) = 0x1401a6e43;
FUN_14016cac0(local_1a18,lVar10);
local_cdc = 200;
local_ce0 = 0;
local_ce8 = local_1968;
*(undefined8 *)(puVar17 + -8) = 0x1401a6e74;
FUN_14016e080(local_cd8,local_1a18);
*(undefined8 *)(puVar17 + -8) = 0x1401a6e88;
FUN_14016ded0(local_1968,local_cd8);
*(undefined8 *)(puVar17 + -8) = 0x1401a6e95;
FUN_14016ddc0(local_cd8);
*(undefined8 *)(puVar17 + -8) = 0x1401a6ea5;
FUN_14016e080(local_cd8,local_1a80);
*(undefined8 *)(puVar17 + -8) = 0x1401a6eb9;
FUN_14016ded0(local_1968,local_cd8);
*(undefined8 *)(puVar17 + -8) = 0x1401a6ec6;
FUN_14016ddc0(local_cd8);
local_1af8._1_1_ = DAT_14034c540;
local_1af8._0_1_ = DAT_14034c560;
local_1af4 = local_1ab0[0];
lVar10 = (longlong)(int)local_1af0;
while ((0 < lVar10 && (lVar20 = 0, plVar21 = local_1a98, 0 < lVar10))) {
lVar18 = lVar10 * 0x10 + -0x10;
do {
lVar12 = plVar13[lVar20 * 2];
local_1af0 = lVar12;
local_1ae8 = plVar13[lVar20 * 2 + 1];
pcVar3 = *(code **)(*(longlong *)(lVar12 + 0x108) + 0x10);
*(undefined8 *)(puVar17 + -8) = 0x1401a6f34;
uVar15 = (*pcVar3)();
local_1ad8 = 0;
local_1ae0 = (undefined1 *)uVar15;
if (lVar20 == 0) {
local_1ad8 = 1;
*(undefined8 *)(puVar17 + -8) = 0x1401a6feb;
FUN_14016db50(uVar15);
local_1ad0[0] = local_1af4;
local_1ac8 = local_1a48;
local_1ac0 = local_1af8._1_1_;
local_1abc = 0xffffffff;
local_1ab8 = (undefined1)local_1af8;
local_1ab7 = 0;
uVar11 = local_1ae8 & 0xffffffff;
*(undefined8 *)(puVar17 + -8) = 0x1401a702f;
FUN_1401bbe20(lVar12 + 0x700,uVar11,local_1968,local_1ad0);
*(undefined8 *)(puVar17 + -8) = 0x1401a7037;
FUN_14016dbe0(uVar15);
local_1ad8 = '\0';
lVar12 = local_1af0 + 0xc0;
*(undefined8 *)(puVar17 + -8) = 0x1401a704c;
FUN_1401baa20(lVar12);
*plVar13 = 0;
*plVar13 = *(longlong *)(lVar18 + (longlong)plVar13);
plVar13[1] = *(longlong *)(lVar18 + 8 + (longlong)plVar13);
LAB_1401a7063:
lVar10 = lVar10 + -1;
lVar18 = lVar18 + -0x10;
}
else {
*(undefined8 *)(puVar17 + -8) = 0x1401a6f50;
local_1ad8 = FUN_14016dba0();
if (local_1ad8 != '\0') {
local_1ad0[0] = local_1af4;
local_1ac8 = local_1a48;
local_1ac0 = local_1af8._1_1_;
local_1abc = 0xffffffff;
local_1ab8 = (undefined1)local_1af8;
local_1ab7 = 0;
lVar12 = local_1af0 + 0x700;
uVar11 = local_1ae8 & 0xffffffff;
*(undefined8 *)(puVar17 + -8) = 0x1401a6fa6;
FUN_1401bbe20(lVar12,uVar11,local_1968,local_1ad0);
*(undefined8 *)(puVar17 + -8) = 0x1401a6fae;
FUN_14016dbe0(uVar15);
local_1ad8 = '\0';
lVar12 = local_1af0 + 0xc0;
*(undefined8 *)(puVar17 + -8) = 0x1401a6fc3;
FUN_1401baa20(lVar12);
plVar13[lVar20 * 2] = 0;
plVar13[lVar20 * 2] = *(longlong *)(lVar18 + (longlong)plVar13);
plVar13[lVar20 * 2 + 1] = *(longlong *)(lVar18 + 8 + (longlong)plVar13);
goto LAB_1401a7063;
}
}
lVar20 = lVar20 + 1;
plVar21 = local_1a98;
} while (lVar20 < lVar10);
}
if ((plVar13 != (longlong *)0x0) && ((int)plVar13[-2] == 0xdddd)) {
*(undefined8 *)(puVar17 + -8) = 0x1401a70af;
free(plVar13 + -2);
}
*(undefined8 *)(puVar17 + -8) = 0x1401a70bc;
FUN_14016ddc0(local_1968);
*(undefined8 *)(puVar17 + -8) = 0x1401a70c9;
FUN_14016aac0(local_1a28);
local_1ae0 = local_1a10;
*(undefined8 *)(puVar17 + -8) = 0x1401a70e1;
FUN_14016d0e0(local_1a10);
if (local_1a08 != 0) {
if (local_19fc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar17 + -8) = &UNK_1401a70fa;
FUN_14016d6b0();
}
local_1a00 = 0;
}
local_1ae0 = local_1a78;
*(undefined8 *)(puVar17 + -8) = 0x1401a7118;
FUN_14016d0e0(local_1a78);
puVar16 = puVar17;
if (local_1a70 != 0) {
if (local_1a64 < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar17 + -8) = &UNK_1401a7131;
FUN_14016d6b0();
}
local_1a68 = 0;
}
}
}
}
}
if (plVar21 == (longlong *)0x0) goto LAB_1401a717f;
if (local_1aa0 == (longlong *)0x0) goto LAB_1401a7177;
lVar10 = *local_1aa0;
plVar13 = local_1aa0;
}
pcVar3 = *(code **)(lVar10 + 0x18);
*(undefined8 *)(puVar16 + -8) = 0x1401a7175;
(*pcVar3)(plVar13,plVar21);
LAB_1401a717f:
*(undefined8 *)(puVar16 + -8) = 0x1401a718e;
return;
}