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

346 lines
11 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400e4500 FUN_1400e4500
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Type propagation algorithm not settling */
void FUN_1400e4500(undefined ***param_1,uint *param_2,undefined8 param_3,undefined8 param_4)
{
undefined **ppuVar1;
undefined8 *puVar2;
uint uVar3;
uint uVar4;
undefined8 uVar5;
ulonglong uVar6;
uint *puVar7;
longlong *plVar8;
undefined ***pppuVar9;
undefined **ppuVar10;
uint uVar11;
int iVar12;
ulonglong uVar13;
undefined8 uVar14;
undefined1 *puVar15;
IMAGE_DOS_HEADER *pIVar16;
IMAGE_DOS_HEADER *pIVar17;
undefined ***pppuVar18;
uint uVar19;
uint uVar20;
undefined1 auStackY_df8 [32];
undefined **local_dc8;
ulonglong *local_dc0;
uint local_db8;
uint local_db4;
uint local_db0 [2];
undefined1 *local_da8;
longlong local_da0 [4];
longlong *local_d80;
undefined8 local_d78;
undefined4 local_d6c;
undefined1 local_d68 [88];
undefined **local_d10;
byte local_d08 [32];
undefined ***local_ce8;
undefined1 local_ce0;
longlong local_cd8 [2];
undefined1 local_cc8 [3216];
ulonglong local_38;
local_cd8[1] = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_df8;
(**(code **)(param_1[0x21][0xf] + 0x10))();
uVar5 = FUN_1400bd3c0(param_2,local_db0,param_3,param_4);
if ((char)uVar5 == '\0') {
return;
}
uVar14 = 4;
uVar5 = FUN_1400bc930(param_2,(undefined8 *)&local_db4,4);
if ((char)uVar5 == '\0') {
return;
}
uVar6 = FUN_1400bcfd0(param_2,&local_da8,uVar14,param_4);
if ((char)uVar6 == '\0') {
return;
}
if ((int)(uint)local_da8 < 0) {
return;
}
if (DAT_1401ac140 <= (int)(uint)local_da8) {
return;
}
FUN_1400bca00((undefined4 *)(local_d68 + 0x28));
uVar5 = FUN_1400bcc60(param_2,(int *)(local_d68 + 0x28),(uint)local_da8,param_4);
if ((char)uVar5 == '\0') {
local_da8 = local_d68 + 0x30;
FUN_1400d1800((longlong *)(local_d68 + 0x30));
if (local_d68._56_8_ == 0) {
return;
}
if (-1 < (int)local_d68._68_4_) {
return;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
uVar6 = (ulonglong)local_db0[0];
FUN_1400aca90((longlong *)param_1[0x21],(longlong *)&local_dc0,local_db0[0]);
if ((((local_dc0 == (ulonglong *)0x0) || (uVar13 = *local_dc0, uVar13 == 0)) ||
(*(char *)(uVar13 + 0x684) != '\0')) || (*(char *)(uVar13 + 0x650) != '\0'))
goto LAB_1400e4a40;
local_d78 = (**(code **)(param_1[0x21][0x11] + 0x18))();
uVar13 = 0;
uVar19 = 0;
local_da0[3] = 0;
local_da0[2] = 0;
local_da0[1] = 0;
local_d80 = (longlong *)0x0;
local_da0[0] = 0;
uVar20 = 0;
local_d6c = 0;
FUN_14007db50((longlong)local_cc8,(longlong)(local_d68 + 0x28),uVar6);
plVar8 = local_da0;
puVar15 = local_cc8;
uVar6 = (ulonglong)local_db4;
FUN_1400df040(param_1[0x21][0x9c],uVar6,(SIZE_T)puVar15,(undefined4 *)plVar8);
FUN_14007ca50((longlong)local_cc8,uVar6,puVar15,plVar8);
local_d68._8_2_ = 0;
local_d68._10_2_ = 0;
local_d68._12_2_ = 0;
local_d68._14_2_ = 0;
local_d68._16_8_ = 0;
local_d68._24_2_ = 0;
local_d68._26_2_ = 0;
local_d68._28_2_ = 0;
local_d68._30_2_ = 0;
local_d68._0_8_ = Proud::CReceivedMessageList::vftable;
local_d68._32_2_ = 1000;
local_d68._34_2_ = 0;
local_d68._36_2_ = 1;
local_d68._38_2_ = 0;
uVar6 = uVar13;
if (local_dc0 != (ulonglong *)0x0) {
uVar6 = *local_dc0;
}
pppuVar9 = (undefined ***)(uVar6 + 0x638);
pppuVar18 = (undefined ***)&local_db8;
pIVar16 = (IMAGE_DOS_HEADER *)local_d68;
plVar8 = local_da0;
FUN_1400f5010((longlong)pppuVar9,plVar8,(longlong)pIVar16,(undefined4 *)pppuVar18);
if (local_db8 != 0) {
FUN_14006cb70(pppuVar9,plVar8,pIVar16,pppuVar18);
local_dc8 = (undefined **)PTR_DAT_1401ac010;
uVar3 = FUN_14006c9f0(L"Stream Extract Error at Reliable UDP");
uVar6 = uVar13;
if ((local_dc8 != (undefined **)0x0) &&
(uVar6 = 0, local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar6 = (ulonglong)*(uint *)(local_dc8 + -1);
}
uVar4 = uVar3;
if ((((int)uVar3 <= (int)uVar6) && (uVar4 = uVar20, local_dc8 != (undefined **)0x0)) &&
(local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
uVar11 = 1;
if (1 < (int)uVar4) {
uVar11 = uVar4;
}
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
if ((int)uVar4 < (int)uVar11) {
if (local_dc8 == (undefined **)0x0) {
local_dc8 = (undefined **)PTR_DAT_1401ac010;
}
if ((int)uVar11 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar11 == 0) {
FUN_1400031e0((longlong *)&local_dc8,PTR_DAT_1401ac010,uVar6,pppuVar18);
}
else {
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
if (uVar11 != uVar4) {
puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar11 * 2 + 10);
if (puVar7 != (uint *)0x0) {
*puVar7 = 0;
puVar7[1] = 1;
}
*puVar7 = uVar11;
uVar4 = uVar20;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar4 = *(uint *)(local_dc8 + -1);
}
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
if ((int)uVar11 < (int)uVar4) {
LAB_1400e480e:
if (local_dc8 != (undefined **)0x0) {
ppuVar10 = local_dc8;
}
}
else {
uVar11 = uVar20;
if (local_dc8 != (undefined **)0x0) {
if (local_dc8 != (undefined **)PTR_DAT_1401ac010) {
uVar11 = *(uint *)(local_dc8 + -1);
}
goto LAB_1400e480e;
}
}
uVar6 = (ulonglong)uVar11;
FUN_14006ca20(puVar7 + 2,ppuVar10,uVar11);
FUN_1400031e0((longlong *)&local_dc8,ppuVar10,uVar6,pppuVar18);
local_dc8 = (undefined **)(puVar7 + 2);
}
}
}
FUN_140002e40((longlong *)&local_dc8);
ppuVar10 = local_dc8;
if (local_dc8 == (undefined **)0x0) {
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
}
FUN_14006ca20(ppuVar10,L"Stream Extract Error at Reliable UDP",uVar3);
ppuVar10 = local_dc8;
if (local_dc8 == (undefined **)0x0) {
ppuVar10 = (undefined **)PTR_DAT_1401ac010;
}
uVar3 = FUN_14006c9f0((short *)ppuVar10);
uVar20 = uVar19;
if (0 < (int)uVar3) {
uVar20 = uVar3;
}
uVar3 = uVar19;
if ((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) {
uVar3 = *(uint *)(local_dc8 + -1);
}
if (((int)uVar20 < (int)uVar3) || (uVar20 = uVar19, local_dc8 == (undefined **)0x0)) {
LAB_1400e48aa:
if (((local_dc8 != (undefined **)PTR_DAT_1401ac010) && (local_dc8 != (undefined **)0x0)) &&
(local_dc8 + -1 != (undefined **)0x0)) {
*(uint *)(local_dc8 + -1) = uVar20;
*(undefined2 *)((longlong)local_dc8 + (longlong)(int)uVar20 * 2) = 0;
}
}
else if (local_dc8 != (undefined **)PTR_DAT_1401ac010) {
uVar20 = *(uint *)(local_dc8 + -1);
goto LAB_1400e48aa;
}
local_d08[0] = 0;
local_d08[1] = 0;
local_d08[2] = 0;
local_d08[3] = 0;
local_d08[4] = 0;
local_d08[5] = 0;
local_d08[6] = 0;
local_d08[7] = 0;
local_d08[8] = 0;
local_d08[9] = 0;
local_d08[10] = 0;
local_d08[0xb] = 0;
local_d08[0xc] = 0;
local_d08[0xd] = 0;
local_d08[0xe] = 0;
local_d08[0xf] = 0;
local_d08[0x10] = 0;
local_d08[0x11] = 0;
local_d08[0x12] = 0;
local_d08[0x13] = 0;
local_d08[0x14] = 0;
local_d08[0x15] = 0;
local_d08[0x16] = 0;
local_d08[0x17] = 0;
local_d08[0x18] = 0;
local_d08[0x19] = 0;
local_d08[0x1a] = 0;
local_d08[0x1b] = 0;
local_d08[0x1c] = 0;
local_d08[0x1d] = 0;
local_d08[0x1e] = 0;
local_d08[0x1f] = 0;
local_d10 = Proud::ByteArray::vftable;
uVar6 = uVar13;
if (local_dc0 != (ulonglong *)0x0) {
uVar6 = *local_dc0;
}
pppuVar18 = &local_dc8;
plVar8 = FUN_140078c10(local_cd8,(ulonglong)local_db8,(ulonglong)*(uint *)(uVar6 + 0x56c),
(longlong *)pppuVar18,(longlong)&local_d10);
pIVar16 = (IMAGE_DOS_HEADER *)*param_1[0x21];
(**(code **)(pIVar16 + 1))();
pppuVar9 = &local_d10;
FUN_140078360(pppuVar9);
ppuVar10 = local_dc8;
if (((local_dc8 != (undefined **)0x0) && (local_dc8 != (undefined **)PTR_DAT_1401ac010)) &&
(ppuVar1 = local_dc8 + -1, ppuVar1 != (undefined **)0x0)) {
pppuVar9 = (undefined ***)FUN_14006cb70(pppuVar9,plVar8,pIVar16,pppuVar18);
local_ce8 = pppuVar9;
FUN_14006b350((int *)pppuVar9);
local_ce0 = 1;
puVar7 = (uint *)((longlong)ppuVar10 + -4);
*puVar7 = *puVar7 - 1;
if (*puVar7 == 0) {
FUN_14006cc60(ppuVar1);
}
FUN_14006b3e0((longlong)pppuVar9);
local_ce0 = 0;
}
local_dc8 = (undefined **)PTR_DAT_1401ac010;
}
while (iVar12 = (int)uVar13, iVar12 != local_d68._24_4_) {
if ((iVar12 < 0) || ((int)local_d68._24_4_ <= iVar12)) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pppuVar9,plVar8,pIVar16,pppuVar18);
}
pIVar17 = (IMAGE_DOS_HEADER *)(local_d68._16_8_ + (longlong)iVar12 * 0x48);
pIVar17->e_program[0] = 1;
FUN_1400bc600((int *)pIVar17,0,pIVar16,pppuVar18);
plVar8 = (longlong *)0x0;
pppuVar9 = param_1;
FUN_1400e6e40((IMAGE_DOS_HEADER *)param_1,(IMAGE_DOS_HEADER *)0x0,pIVar17,pppuVar18);
if ((int)local_d68._24_4_ <= iVar12) {
/* WARNING: Subroutine does not return */
FUN_14006be30(pppuVar9,plVar8,pIVar17,pppuVar18);
}
pIVar16 = pIVar17;
uVar13 = (ulonglong)(iVar12 + 1);
}
FUN_1400c5af0((undefined8 *)local_d68);
if (local_d80 != (longlong *)0x0) {
plVar8 = local_d80 + 1;
*plVar8 = *plVar8 + -1;
if (*plVar8 == 0) {
FUN_140080140((longlong)&local_d80,local_d80);
}
}
local_d68._80_8_ = local_da0 + 1;
FUN_1400d1800(local_da0 + 1);
if (local_da0[2] != 0) {
if (local_da0[3] < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_da0[3] = local_da0[3] & 0xffffffff00000000;
}
LAB_1400e4a40:
if ((local_dc0 != (ulonglong *)0x0) && (local_dc0[1] = local_dc0[1] - 1, local_dc0[1] == 0)) {
puVar2 = (undefined8 *)*local_dc0;
if (puVar2 != (undefined8 *)0x0) {
(**(code **)*puVar2)(puVar2,1);
}
FUN_14006cc60(local_dc0);
}
local_d68._80_8_ = local_d68 + 0x30;
FUN_1400d1800((longlong *)(local_d68 + 0x30));
if ((local_d68._56_8_ != 0) && ((int)local_d68._68_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
return;
}