server-re/decomp/MessageServer_Release_x64/full/functions/0x1400c3fb0.c

495 lines
19 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c3fb0 FUN_1400c3fb0
* 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,0x0001400c465c) */
void FUN_1400c3fb0(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 = 0x1400c3fc6;
puVar18 = auStack_1b88;
puVar19 = auStack_1b88;
local_1a80 = 0xfffffffffffffffe;
local_48 = DAT_1401ac5a0 ^ (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_1400bd570(param_2,(longlong)&local_1b50,param_3,param_4);
puVar14 = auStack_1b88;
if (((char)uVar6 == '\0') ||
(uVar6 = FUN_1400bcfd0(param_2,&local_1b58,pwVar13,param_4), plVar16 = local_1b58,
puVar14 = auStack_1b88, (char)uVar6 == '\0')) {
LAB_1400c47ab:
pvVar4 = local_1b40;
plVar16 = local_1b48;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
if (local_1b40 == (LPVOID)0x0) goto LAB_1400c47db;
puVar19 = puVar14;
if (local_1b48 != (longlong *)0x0) {
pcVar3 = *(code **)(*local_1b48 + 0x18);
*(undefined8 *)(puVar14 + -8) = 0x1400c47d4;
(*pcVar3)(plVar16,pvVar4);
goto LAB_1400c47db;
}
}
else {
uVar20 = (uint)local_1b58;
if ((-1 < (int)uVar20) && ((int)uVar20 < DAT_1401ac140)) {
uVar1 = *param_2;
uVar12 = (int)uVar1 >> 0x1f & 7;
iVar5 = FUN_14007c120((longlong)param_2,(ulonglong)uVar12,pwVar13,param_4);
if (((int)(uVar12 + uVar1) >> 3) + uVar20 != iVar5) {
param_4 = 2;
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,
"msg.GetReadOffset() + payloadLength == msg.GetLength()",2);
}
FUN_1400bca00(local_1b20);
uVar6 = (ulonglong)plVar16 & 0xffffffff;
uVar7 = FUN_1400bcc60(param_2,local_1b20,uVar20,param_4);
if ((char)uVar7 == '\0') {
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),param_3,"0",2);
local_1b58 = &local_1b18;
FUN_1400d1800(&local_1b18);
puVar14 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
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_1400d1800(&local_1b18);
puVar14 = auStack_1b88;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
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_1400c418b:
puVar23 = (undefined8 *)(puVar10 + 4);
}
}
else {
puVar10 = malloc(uVar26);
puVar23 = (undefined8 *)0x0;
if (puVar10 != (undefined4 *)0x0) {
*puVar10 = 0xdddd;
puVar18 = auStack_1b88;
goto LAB_1400c418b;
}
}
pwVar13 = (wchar_t *)**(longlong **)(param_1 + 0x148);
pcVar3 = *(code **)(pwVar13 + 0x2c);
*(undefined8 *)(puVar18 + -8) = 0x1400c419c;
piVar11 = (int *)(*pcVar3)();
local_1ad0 = piVar11;
*(undefined8 *)(puVar18 + -8) = 0x1400c41ab;
FUN_14006b350(piVar11);
local_1ac8 = 1;
if (DAT_1401b42cf != '\0') {
uVar6 = **(ulonglong **)(param_1 + 0x148);
pwVar13 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ReliableRelay1";
pcVar3 = *(code **)(uVar6 + 200);
*(undefined8 *)(puVar18 + -8) = 0x1400c41d3;
(*pcVar3)();
}
pcVar3 = *(code **)(*(longlong *)param_3 + 0x10);
*(undefined8 *)(puVar18 + -8) = 0x1400c41dd;
local_1b28 = (*pcVar3)();
local_1b68[0] = 0;
puVar21 = puVar23;
uVar26 = uVar17;
if (0 < lVar8) {
do {
pvVar4 = local_1b40;
if ((longlong)uVar17 < 0) {
LAB_1400c427e:
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c4283;
FUN_14006be30(param_3,pwVar13,uVar6,param_4);
}
if ((int)local_1b38 <= (int)uVar26) goto LAB_1400c427e;
uVar20 = *(uint *)((longlong)local_1b40 + uVar17 * 8);
pwVar13 = (wchar_t *)(ulonglong)uVar20;
lVar8 = *(longlong *)(param_1 + 0x148);
*(undefined8 *)(puVar18 + -8) = 0x1400c421f;
lVar8 = FUN_14007dea0(lVar8,uVar20);
if (lVar8 != 0) {
*(undefined8 *)(puVar18 + -8) = 0x1400c4233;
FUN_1400d8960(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) = 0x1400c4290;
FUN_14006b3e0((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) = 0x1400c42eb;
piVar11 = (int *)(*pcVar3)();
local_1af0 = 0;
local_1af8 = piVar11;
*(undefined8 *)(puVar18 + -8) = 0x1400c4302;
FUN_1400bca00(local_1a18);
pSVar24 = (SIZE_T *)0x80;
puVar14 = local_19f0;
*(undefined8 *)(puVar18 + -8) = 0x1400c431c;
FUN_1400bc680((longlong)local_1a18,(longlong)puVar14,0x80,param_4);
*(undefined8 *)(puVar18 + -8) = 0x1400c432b;
FUN_140054a10((longlong)local_1a18,CONCAT71((int7)((ulonglong)puVar14 >> 8),0x17),
(SIZE_T)pSVar24,param_4);
uVar17 = (ulonglong)local_1b28;
*(undefined8 *)(puVar18 + -8) = 0x1400c433a;
FUN_140014500((longlong)local_1a18,uVar17,(SIZE_T)pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x1400c4348;
FUN_140014500((longlong)local_1a18,uVar6 & 0xffffffff,(SIZE_T)pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x1400c435b;
FUN_1400bc450((longlong *)&local_1ae8,(longlong)local_1a18);
lVar15 = (longlong)(int)local_1b58;
*(undefined8 *)(puVar18 + -8) = 0x1400c436c;
FUN_1400bddd0((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) = 0x1400c471d;
FUN_1400d1900(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_1400c4717;
FUN_1400d1900(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) = 0x1400c4423;
FUN_14007cb60((longlong)local_cd8,(longlong)plVar16,pSVar24,param_4);
if (local_ce8 == (longlong *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x1400c46fe;
FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c4711;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c46ea;
FUN_14006be00();
}
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) = 0x1400c46e4;
FUN_1400d1900(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_1400c46de;
FUN_1400d1900(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) = 0x1400c44cd;
FUN_14007cb60((longlong)local_cd8,(longlong)&local_1968,pSVar24,param_4);
if (local_ce8 == (longlong *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x1400c46c5;
FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c46d8;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_cdc < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c46b1;
FUN_14006be00();
}
if (lVar25 == 0) {
local_1af0 = 1;
*(undefined8 *)(puVar18 + -8) = 0x1400c4585;
FUN_14006b350(piVar11);
plVar16 = local_1b60;
local_1aa0 = 0;
local_1a98 = 1;
pSVar24 = &local_1aa0;
pcVar2 = *(char **)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar18 + -8) = 0x1400c45b1;
FUN_1400d87b0(pcVar2,(longlong)local_cd8,pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x1400c45b9;
FUN_14006b3e0((longlong)piVar11);
local_1af0 = 0;
*(undefined8 *)(puVar18 + -8) = 0x1400c45ca;
FUN_1400d8970((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_1400c45eb:
local_1b68[0] = local_1b68[0] + -1;
lVar8 = lVar8 + -1;
lVar22 = lVar22 + -0x18;
}
else {
*(undefined8 *)(puVar18 + -8) = 0x1400c44fa;
local_1af0 = FUN_14006b3a0(piVar11);
if ((bool)local_1af0) {
local_1ac0 = 0;
local_1ab8 = 1;
pSVar24 = &local_1ac0;
pcVar2 = *(char **)((longlong)local_1b60 + 0x748);
*(undefined8 *)(puVar18 + -8) = 0x1400c4538;
FUN_1400d87b0(pcVar2,(longlong)local_cd8,pSVar24,param_4);
*(undefined8 *)(puVar18 + -8) = 0x1400c4540;
FUN_14006b3e0((longlong)piVar11);
local_1af0 = 0;
lVar15 = (longlong)local_1b60 + 0xc0;
*(undefined8 *)(puVar18 + -8) = 0x1400c4555;
FUN_1400d8970(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_1400c45eb;
}
}
if (local_58 == (undefined1 *)0x0) {
*(undefined8 *)(puVar18 + -8) = 0x1400c4698;
FUN_14006ba50(local_1a78,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0
,pSVar24,param_4);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c46ab;
_CxxThrowException(local_1a78,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_4c < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c4684;
FUN_14006be00();
}
local_50 = 0;
*(undefined8 *)(puVar18 + -8) = 0x1400c4622;
FUN_1400bc470((longlong *)&local_1ae8);
local_1b60 = &local_1a10;
*(undefined8 *)(puVar18 + -8) = 0x1400c463a;
FUN_1400d1800(&local_1a10);
if (local_1a08 != 0) {
if (local_19fc < 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar18 + -8) = 0x1400c467e;
FUN_14006be00();
}
local_1a00 = 0;
}
lVar25 = lVar25 + 1;
} while (lVar25 < lVar8);
}
if ((puVar23 != (undefined8 *)0x0) && (*(int *)(puVar23 + -2) == 0xdddd)) {
*(undefined8 *)(puVar18 + -8) = 0x1400c4735;
free(puVar23 + -2);
}
local_1b58 = &local_1b18;
*(undefined8 *)(puVar18 + -8) = 0x1400c4747;
FUN_1400d1800(&local_1b18);
puVar14 = puVar18;
if (local_1b10 != 0) {
if (local_1b04 < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar18 + -8) = &UNK_1400c475a;
FUN_14006be00();
}
local_1b08 = 0;
}
}
}
goto LAB_1400c47ab;
}
FUN_14009b0d0(*(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_1400c47db;
if (local_1b48 != (longlong *)0x0) {
(**(code **)(*local_1b48 + 0x18))();
puVar14 = auStack_1b88;
goto LAB_1400c47db;
}
}
pvVar4 = local_1b40;
local_1b50 = Proud::CFastArray<Proud::BypassDest,0>::vftable;
*(undefined8 *)(puVar19 + -8) = 0x1400c47db;
FUN_14006cc60(pvVar4);
puVar14 = puVar19;
LAB_1400c47db:
*(undefined8 *)(puVar14 + -8) = 0x1400c47ea;
return;
}