server-re/decomp/AgentManager_Release_x64/full/functions/0x14007cae0.c
2026-10-15 09:58:24 -04:00

495 lines
19 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14007cae0 FUN_14007cae0
* 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,0x00014007d18c) */
void FUN_14007cae0(longlong param_1,uint *param_2,wchar_t *param_3,longlong param_4)
{
uint uVar1;
char *pcVar2;
code *pcVar3;
LPVOID pvVar4;
int iVar5;
ulonglong uVar6;
undefined8 uVar7;
longlong lVar8;
ulonglong uVar9;
undefined4 *puVar10;
int *piVar11;
uint uVar12;
wchar_t *pwVar13;
undefined1 *puVar14;
longlong lVar15;
longlong *plVar16;
ulonglong uVar17;
undefined1 *puVar18;
undefined1 *puVar19;
uint uVar20;
undefined8 *puVar21;
longlong lVar22;
undefined8 *puVar23;
SIZE_T *pSVar24;
longlong lVar25;
ulonglong uVar26;
undefined1 auStack_1b88 [32];
int local_1b68 [2];
longlong *local_1b60;
longlong *local_1b58;
undefined **local_1b50;
longlong *local_1b48;
LPVOID local_1b40;
undefined8 local_1b38;
undefined8 local_1b30;
uint local_1b28;
int local_1b20 [2];
longlong local_1b18;
longlong local_1b10;
uint local_1b08;
int local_1b04;
int *local_1af8;
undefined1 local_1af0;
undefined4 local_1ae8;
undefined4 uStack_1ae4;
undefined4 local_1ad8;
undefined4 uStack_1ad4;
int *local_1ad0;
undefined1 local_1ac8;
SIZE_T local_1ac0;
undefined1 local_1ab8;
longlong local_1ab0;
uint uStack_1aa8;
undefined4 uStack_1aa4;
SIZE_T local_1aa0;
undefined1 local_1a98;
longlong local_1a90;
uint uStack_1a88;
undefined4 uStack_1a84;
undefined8 local_1a80;
exception local_1a78 [88];
undefined8 local_1a20;
undefined4 local_1a18 [2];
longlong local_1a10;
longlong local_1a08;
uint local_1a00;
int local_19fc;
undefined1 local_19f0 [136];
longlong local_1968;
undefined8 uStack_1960;
longlong *local_ce8;
undefined4 local_ce0;
int local_cdc;
undefined1 local_cd8 [3200];
undefined1 *local_58;
undefined4 local_50;
int local_4c;
ulonglong local_48;
undefined8 uStack_40;
uStack_40 = 0x14007caf6;
puVar18 = auStack_1b88;
puVar19 = auStack_1b88;
local_1a80 = 0xfffffffffffffffe;
local_48 = DAT_14016f5a0 ^ (ulonglong)local_1b68;
uVar17 = 0;
local_1b48 = (longlong *)0x0;
local_1b40 = (LPVOID)0x0;
local_1b38 = 0;
local_1b30 = 0;
local_1b50 = Proud::BypassDestList::vftable;
pwVar13 = param_3;
uVar6 = thunk_FUN_140075b20(param_2,(longlong)&local_1b50,param_3,param_4);
puVar14 = auStack_1b88;
if (((char)uVar6 == '\0') ||
(uVar6 = FUN_140075580(param_2,&local_1b58,pwVar13,param_4), plVar16 = local_1b58,
puVar14 = auStack_1b88, (char)uVar6 == '\0')) {
LAB_14007d2db:
pvVar4 = local_1b40;
plVar16 = local_1b48;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
if (local_1b40 == (LPVOID)0x0) goto LAB_14007d30b;
puVar19 = puVar14;
if (local_1b48 != (longlong *)0x0) {
pcVar3 = *(code **)(*local_1b48 + 0x18);
*(undefined8 *)(puVar14 + -8) = 0x14007d304;
(*pcVar3)(plVar16,pvVar4);
goto LAB_14007d30b;
}
}
else {
uVar20 = (uint)local_1b58;
if ((-1 < (int)uVar20) && ((int)uVar20 < DAT_14016f140)) {
uVar1 = *param_2;
uVar12 = (int)uVar1 >> 0x1f & 7;
iVar5 = FUN_14004d230((longlong)param_2,(ulonglong)uVar12,pwVar13,param_4);
if (((int)(uVar12 + uVar1) >> 3) + uVar20 != iVar5) {
param_4 = 2;
FUN_14006c410(*(longlong **)(param_1 + 0x148),param_3,
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
}
FUN_140074fb0(local_1b20);
uVar6 = (ulonglong)plVar16 & 0xffffffff;
uVar7 = FUN_140075210(param_2,local_1b20,uVar20,param_4);
if ((char)uVar7 == '\0') {
FUN_14006c410(*(longlong **)(param_1 + 0x148),param_3,"0",2);
local_1b58 = &local_1b18;
FUN_14008a320(&local_1b18);
puVar14 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
local_1b08 = 0;
puVar14 = auStack_1b88;
}
}
else {
lVar8 = (longlong)(int)local_1b38;
local_1b60 = (longlong *)CONCAT44(local_1b60._4_4_,(int)local_1b38);
if ((int)local_1b38 < 1) {
local_1b58 = &local_1b18;
FUN_14008a320(&local_1b18);
puVar14 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
local_1b08 = 0;
puVar14 = auStack_1b88;
}
}
else {
lVar25 = lVar8 * 0x18;
uVar26 = lVar25 + 0x10;
if (uVar26 < 0x401) {
uVar9 = lVar25 + 0x1f;
if (uVar9 <= uVar26) {
uVar9 = 0xffffffffffffff0;
}
lVar25 = -(uVar9 & 0xfffffffffffffff0);
puVar18 = auStack_1b88 + lVar25;
puVar10 = (undefined4 *)((longlong)local_1b68 + lVar25);
puVar23 = (undefined8 *)0x0;
if (puVar10 != (undefined4 *)0x0) {
*puVar10 = 0xcccc;
puVar18 = auStack_1b88 + lVar25;
LAB_14007ccbb:
puVar23 = (undefined8 *)(puVar10 + 4);
}
}
else {
puVar10 = malloc(uVar26);
puVar23 = (undefined8 *)0x0;
if (puVar10 != (undefined4 *)0x0) {
*puVar10 = 0xdddd;
puVar18 = auStack_1b88;
goto LAB_14007ccbb;
}
}
pwVar13 = (wchar_t *)**(longlong **)(param_1 + 0x148);
pcVar3 = *(code **)(pwVar13 + 0x2c);
*(undefined8 *)(puVar18 + -8) = 0x14007cccc;
piVar11 = (int *)(*pcVar3)();
local_1ad0 = piVar11;
*(undefined8 *)(puVar18 + -8) = 0x14007ccdb;
FUN_14003d040(piVar11);
local_1ac8 = 1;
if (DAT_14017614f != '\0') {
uVar6 = **(ulonglong **)(param_1 + 0x148);
pwVar13 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ReliableRelay1";
pcVar3 = *(code **)(uVar6 + 200);
*(undefined8 *)(puVar18 + -8) = 0x14007cd03;
(*pcVar3)();
}
pcVar3 = *(code **)(*(longlong *)param_3 + 0x10);
*(undefined8 *)(puVar18 + -8) = 0x14007cd0d;
local_1b28 = (*pcVar3)();
local_1b68[0] = 0;
puVar21 = puVar23;
uVar26 = uVar17;
if (0 < lVar8) {
do {
pvVar4 = local_1b40;
if ((longlong)uVar17 < 0) {
LAB_14007cdae:
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007cdb3;
FUN_14003def0(param_3,pwVar13,uVar6,param_4);
}
if ((int)local_1b38 <= (int)uVar26) goto LAB_14007cdae;
uVar20 = *(uint *)((longlong)local_1b40 + uVar17 * 8);
pwVar13 = (wchar_t *)(ulonglong)uVar20;
lVar8 = *(longlong *)(param_1 + 0x148);
*(undefined8 *)(puVar18 + -8) = 0x14007cd4f;
lVar8 = FUN_14004f000(lVar8,uVar20);
if (lVar8 != 0) {
*(undefined8 *)(puVar18 + -8) = 0x14007cd63;
FUN_140091240(lVar8 + 0xc0);
local_1ae8 = *(undefined4 *)((longlong)pvVar4 + uVar17 * 8 + 4);
local_1ad8 = *(undefined4 *)((longlong)pvVar4 + uVar17 * 8);
*puVar21 = CONCAT44(uStack_1ae4,local_1ae8);
puVar21[1] = lVar8;
puVar21[2] = CONCAT44(uStack_1ad4,local_1ad8);
local_1b68[0] = local_1b68[0] + 1;
puVar21 = puVar21 + 3;
}
uVar17 = uVar17 + 1;
param_3 = (wchar_t *)(longlong)(int)local_1b60;
uVar26 = (ulonglong)((int)uVar26 + 1);
} while ((longlong)uVar17 < (longlong)param_3);
}
piVar11 = local_1ad0;
iVar5 = local_1b68[0];
*(undefined8 *)(puVar18 + -8) = 0x14007cdc0;
FUN_14003d0d0((longlong)piVar11);
local_1ac8 = 0;
lVar8 = (longlong)iVar5;
while ((0 < lVar8 && (lVar25 = 0, 0 < lVar8))) {
lVar22 = lVar8 * 0x18 + -0x18;
do {
uVar6 = puVar23[lVar25 * 3];
local_1b60 = (longlong *)puVar23[lVar25 * 3 + 1];
local_1a20 = puVar23[lVar25 * 3 + 2];
pcVar3 = *(code **)(*(longlong *)(puVar23[lVar25 * 3 + 1] + 0x108) + 0x10);
*(undefined8 *)(puVar18 + -8) = 0x14007ce1b;
piVar11 = (int *)(*pcVar3)();
local_1af0 = 0;
local_1af8 = piVar11;
*(undefined8 *)(puVar18 + -8) = 0x14007ce32;
FUN_140074fb0(local_1a18);
pSVar24 = (SIZE_T *)0x80;
puVar14 = local_19f0;
*(undefined8 *)(puVar18 + -8) = 0x14007ce4c;
FUN_140074c30((longlong)local_1a18,(longlong)puVar14,0x80,param_4);
*(undefined8 *)(puVar18 + -8) = 0x14007ce5b;
FUN_140029d80((longlong)local_1a18,CONCAT71((int7)((ulonglong)puVar14 >> 8),0x17),
(SIZE_T)pSVar24,param_4);
uVar17 = (ulonglong)local_1b28;
*(undefined8 *)(puVar18 + -8) = 0x14007ce6a;
FUN_140029e60((longlong)local_1a18,uVar17,(SIZE_T)pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x14007ce78;
FUN_140029e60((longlong)local_1a18,uVar6 & 0xffffffff,(SIZE_T)pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x14007ce8b;
FUN_140074a00((longlong *)&local_1ae8,(longlong)local_1a18);
lVar15 = (longlong)(int)local_1b58;
*(undefined8 *)(puVar18 + -8) = 0x14007ce9c;
FUN_140076380((longlong)local_1a18,lVar15,(SIZE_T)pSVar24,param_4);
local_4c = 200;
local_50 = 0;
local_58 = local_cd8;
local_cdc = 200;
local_ce0 = 0;
local_ce8 = &local_1968;
if (local_1a10 == 0) {
uVar20 = local_1a00;
if (local_1a08 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar18 + -8) = 0x14007d24d;
FUN_14008a420(0,lVar15,pSVar24,param_4);
}
}
else {
uVar20 = *(uint *)(local_1a10 + 0x18);
}
lVar15 = local_1a08;
if (local_1a08 == 0) {
if (local_1a10 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d247;
FUN_14008a420(0,(ulonglong)uVar20,pSVar24,param_4);
}
lVar15 = 0;
if (*(int *)(local_1a10 + 0x18) != 0) {
lVar15 = *(longlong *)(local_1a10 + 0x10);
}
}
local_ce0 = 1;
uStack_1960 = CONCAT44(uStack_1aa4,uVar20);
plVar16 = &local_1968;
local_1ab0 = lVar15;
uStack_1aa8 = uVar20;
local_1968 = lVar15;
*(undefined8 *)(puVar18 + -8) = 0x14007cf53;
FUN_14004dc30((longlong)local_cd8,(longlong)plVar16,pSVar24,param_4);
if (local_ce8 == (longlong *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x14007d22e;
FUN_14003db10(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_140170368
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d241;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_14016c210);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d21a;
FUN_14003dec0();
}
local_cdc = 200;
local_ce0 = 0;
local_ce8 = &local_1968;
if (local_1b18 == 0) {
uVar20 = local_1b08;
if (local_1b10 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar18 + -8) = 0x14007d214;
FUN_14008a420(0,plVar16,pSVar24,param_4);
}
}
else {
uVar20 = *(uint *)(local_1b18 + 0x18);
}
lVar15 = local_1b10;
if (local_1b10 == 0) {
if (local_1b18 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d20e;
FUN_14008a420(0,(ulonglong)uVar20,pSVar24,param_4);
}
lVar15 = 0;
if (*(int *)(local_1b18 + 0x18) != 0) {
lVar15 = *(longlong *)(local_1b18 + 0x10);
}
}
local_ce0 = 1;
uStack_1960 = CONCAT44(uStack_1a84,uVar20);
local_1a90 = lVar15;
uStack_1a88 = uVar20;
local_1968 = lVar15;
*(undefined8 *)(puVar18 + -8) = 0x14007cffd;
FUN_14004dc30((longlong)local_cd8,(longlong)&local_1968,pSVar24,param_4);
if (local_ce8 == (longlong *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x14007d1f5;
FUN_14003db10(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_140170368
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d208;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_14016c210);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d1e1;
FUN_14003dec0();
}
if (lVar25 == 0) {
local_1af0 = 1;
*(undefined8 *)(puVar18 + -8) = 0x14007d0b5;
FUN_14003d040(piVar11);
plVar16 = local_1b60;
local_1aa0 = 0;
local_1a98 = 1;
pSVar24 = &local_1aa0;
pcVar2 = *(char **)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar18 + -8) = 0x14007d0e1;
FUN_140091090(pcVar2,(longlong)local_cd8,pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x14007d0e9;
FUN_14003d0d0((longlong)piVar11);
local_1af0 = 0;
*(undefined8 *)(puVar18 + -8) = 0x14007d0fa;
FUN_140091250((longlong)plVar16 + 0xc0);
puVar23[1] = 0;
*puVar23 = *(undefined8 *)(lVar22 + (longlong)puVar23);
puVar23[1] = *(undefined8 *)(lVar22 + 8 + (longlong)puVar23);
puVar23[2] = *(undefined8 *)(lVar22 + 0x10 + (longlong)puVar23);
LAB_14007d11b:
local_1b68[0] = local_1b68[0] + -1;
lVar8 = lVar8 + -1;
lVar22 = lVar22 + -0x18;
}
else {
*(undefined8 *)(puVar18 + -8) = 0x14007d02a;
local_1af0 = FUN_14003d090(piVar11);
if ((bool)local_1af0) {
local_1ac0 = 0;
local_1ab8 = 1;
pSVar24 = &local_1ac0;
pcVar2 = *(char **)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar18 + -8) = 0x14007d068;
FUN_140091090(pcVar2,(longlong)local_cd8,pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x14007d070;
FUN_14003d0d0((longlong)piVar11);
local_1af0 = 0;
lVar15 = (longlong)local_1b60 + 0xc0;
*(undefined8 *)(puVar18 + -8) = 0x14007d085;
FUN_140091250(lVar15);
puVar23[lVar25 * 3 + 1] = 0;
puVar23[lVar25 * 3] = *(undefined8 *)(lVar22 + (longlong)puVar23);
puVar23[lVar25 * 3 + 1] = *(undefined8 *)(lVar22 + 8 + (longlong)puVar23);
puVar23[lVar25 * 3 + 2] = *(undefined8 *)(lVar22 + 0x10 + (longlong)puVar23);
goto LAB_14007d11b;
}
}
if (local_58 == (undefined1 *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x14007d1c8;
FUN_14003db10(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_140170368
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d1db;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_14016c210);
}
if (local_4c < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d1b4;
FUN_14003dec0();
}
local_50 = 0;
*(undefined8 *)(puVar18 + -8) = 0x14007d152;
FUN_140074a20((longlong *)&local_1ae8);
local_1b60 = &local_1a10;
*(undefined8 *)(puVar18 + -8) = 0x14007d16a;
FUN_14008a320(&local_1a10);
if (local_1a08 != 0) {
if (local_19fc < 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar18 + -8) = 0x14007d1ae;
FUN_14003dec0();
}
local_1a00 = 0;
}
lVar25 = lVar25 + 1;
} while (lVar25 < lVar8);
}
if ((puVar23 != (undefined8 *)0x0) && (*(int *)(puVar23 + -2) == 0xdddd)) {
*(undefined8 *)(puVar18 + -8) = 0x14007d265;
free(puVar23 + -2);
}
local_1b58 = &local_1b18;
*(undefined8 *)(puVar18 + -8) = 0x14007d277;
FUN_14008a320(&local_1b18);
puVar14 = puVar18;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_14007d28a;
FUN_14003dec0();
}
local_1b08 = 0;
}
}
}
goto LAB_14007d2db;
}
FUN_14006c410(*(longlong **)(param_1 + 0x148),param_3,"0",2);
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
puVar14 = auStack_1b88;
if (local_1b40 == (LPVOID)0x0) goto LAB_14007d30b;
if (local_1b48 != (longlong *)0x0) {
(**(code **)(*local_1b48 + 0x18))();
puVar14 = auStack_1b88;
goto LAB_14007d30b;
}
}
pvVar4 = local_1b40;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
*(undefined8 *)(puVar19 + -8) = 0x14007d30b;
FUN_14003e8b0(pvVar4);
puVar14 = puVar19;
LAB_14007d30b:
*(undefined8 *)(puVar14 + -8) = 0x14007d31a;
return;
}