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

374 lines
10 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a16d0 FUN_1401a16d0
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
ulonglong FUN_1401a16d0(longlong *param_1,undefined8 param_2,longlong param_3,undefined4 *param_4,
undefined4 param_5)
{
int *piVar1;
undefined *puVar2;
byte bVar3;
int iVar4;
uint uVar5;
uint uVar6;
uint *puVar7;
undefined8 uVar8;
ulonglong uVar9;
ulonglong uVar10;
uint *puVar11;
undefined4 uVar12;
uint uVar13;
ulonglong uVar14;
undefined *puVar15;
undefined1 auStack_1b18 [32];
undefined ***local_1af8;
uint *local_1ae8;
longlong *local_1ae0;
int local_1ad8 [2];
undefined1 local_1ad0 [8];
longlong local_1ac8;
ulonglong local_1ac0;
int local_1ab8;
int local_1ab4;
undefined1 local_1aa8 [8];
longlong local_1aa0;
ulonglong local_1a98;
undefined4 local_1a90;
int local_1a8c;
undefined4 *local_1a80;
longlong local_1a78;
undefined *local_1a70;
undefined8 local_1a68;
undefined1 local_1a60;
undefined **local_1a58;
undefined8 local_1a50;
undefined8 local_1a48;
undefined8 local_1a40;
undefined8 local_1a38;
undefined8 local_1a30;
undefined1 local_1a28 [8];
longlong local_1a20;
longlong local_1a18;
undefined4 local_1a10;
int local_1a0c;
undefined1 local_1a00 [136];
undefined1 local_1978 [3200];
undefined1 *local_cf8;
undefined4 local_cf0;
undefined4 local_cec;
undefined1 local_ce8 [3216];
ulonglong local_58;
undefined8 uStack_48;
uStack_48 = 0x1401a16ef;
local_1a30 = 0xfffffffffffffffe;
local_58 = DAT_1403463c0 ^ (ulonglong)auStack_1b18;
local_1a80 = param_4;
local_1a78 = param_3;
if ((*(int *)(param_3 + 0x28) == 0) || (iVar4 = FUN_14019b440(param_2), iVar4 < 0x33))
goto LAB_1401a1d86;
FUN_14016b440(local_1aa8);
FUN_14016abe0(local_1aa8);
FUN_14016b820(local_1aa8,param_2);
if (local_1aa0 == 0) {
uVar12 = local_1a90;
if (local_1a98 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
}
else {
uVar12 = *(undefined4 *)(local_1aa0 + 0x18);
}
FUN_14016b440(local_1ad0);
FUN_14016abe0(local_1ad0);
FUN_14016b5a0(local_1ad0,uVar12);
local_1ad8[0] = FUN_1401c3b40(uVar12);
uVar9 = 0;
uVar14 = local_1a98;
if (local_1a98 == 0) {
if (local_1aa0 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
uVar14 = uVar9;
if (*(int *)(local_1aa0 + 0x18) != 0) {
uVar14 = *(ulonglong *)(local_1aa0 + 0x10);
}
}
uVar10 = local_1ac0;
if (local_1ac0 == 0) {
if (local_1ac8 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
uVar10 = uVar9;
if (*(int *)(local_1ac8 + 0x18) != 0) {
uVar10 = *(ulonglong *)(local_1ac8 + 0x10);
}
}
iVar4 = FUN_1401c39b0(uVar10,local_1ad8,uVar14,uVar12);
if (iVar4 == 0) {
uVar5 = FUN_14019b440(param_2);
if (local_1ad8[0] + 9U < uVar5) {
FUN_14016b5a0(local_1ad0);
FUN_14016b440(local_1a28);
FUN_14016b0c0(local_1a28,local_1a00,0x80);
FUN_14004eef0(local_1a28,0x26);
if (local_1ac8 == 0) {
iVar4 = local_1ab8;
if (local_1ac0 == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
}
else {
iVar4 = *(int *)(local_1ac8 + 0x18);
}
FUN_14016cac0(local_1a28,(longlong)iVar4);
iVar4 = FUN_14019b440(param_2);
FUN_14016cac0(local_1a28,(longlong)iVar4);
local_cec = 200;
local_cf0 = 0;
local_cf8 = local_1978;
FUN_14016e080(local_ce8,local_1a28);
FUN_14016ded0(local_1978,local_ce8);
FUN_14016ddc0(local_ce8);
FUN_14016e080(local_ce8,local_1ad0);
FUN_14016ded0(local_1978,local_ce8);
FUN_14016ddc0(local_ce8);
local_1af8 = (undefined ***)CONCAT44(local_1af8._4_4_,param_5);
bVar3 = FUN_14019ff40(param_1,local_1978,local_1a78,param_4);
FUN_14016ddc0(local_1978);
local_1ae0 = &local_1a20;
FUN_14016d0e0(&local_1a20);
if (local_1a18 != 0) {
if (local_1a0c < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1a10 = 0;
}
local_1ae0 = &local_1ac8;
FUN_14016d0e0(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_14016d0e0(&local_1aa0);
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
return (ulonglong)bVar3;
}
local_1ae0 = &local_1ac8;
FUN_14016d0e0(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_14016d0e0(&local_1aa0);
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
goto LAB_1401a1d86;
}
FUN_14016d8c0();
local_1a70 = PTR_DAT_1403440a0;
FUN_14004c020(&local_1a70,L"Packet compression failed! Error code=%d",iVar4);
puVar2 = local_1a70;
puVar15 = local_1a70;
if (local_1a70 == (undefined *)0x0) {
puVar15 = PTR_DAT_1403440a0;
}
FUN_14016d8c0();
local_1ae8 = (uint *)PTR_DAT_1403440a0;
uVar5 = FUN_14016d740(puVar15);
if ((local_1ae8 != (uint *)0x0) && (uVar9 = 0, local_1ae8 != (uint *)PTR_DAT_1403440a0)) {
uVar9 = (ulonglong)local_1ae8[-2];
}
uVar6 = uVar5;
if ((((int)uVar5 <= (int)uVar9) && (uVar6 = 0, local_1ae8 != (uint *)0x0)) &&
(uVar6 = 0, local_1ae8 != (uint *)PTR_DAT_1403440a0)) {
uVar6 = local_1ae8[-2];
}
uVar13 = 1;
if (1 < (int)uVar6) {
uVar13 = uVar6;
}
if (local_1ae8 == (uint *)0x0) {
uVar6 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) {
uVar6 = 0;
}
else {
uVar6 = local_1ae8[-2];
}
if ((int)uVar6 < (int)uVar13) {
if (local_1ae8 == (uint *)0x0) {
local_1ae8 = (uint *)PTR_DAT_1403440a0;
}
if ((int)uVar13 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
if (uVar13 == 0) {
FUN_14004eb70(&local_1ae8);
}
else {
if (local_1ae8 == (uint *)0x0) {
uVar6 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) {
uVar6 = 0;
}
else {
uVar6 = local_1ae8[-2];
}
if (uVar13 != uVar6) {
puVar7 = (uint *)FUN_14016d940((longlong)(int)uVar13 * 2 + 10);
if (puVar7 != (uint *)0x0) {
*puVar7 = 0;
puVar7[1] = 1;
}
*puVar7 = uVar13;
if (local_1ae8 == (uint *)0x0) {
uVar6 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1403440a0) {
uVar6 = 0;
}
else {
uVar6 = local_1ae8[-2];
}
puVar11 = (uint *)PTR_DAT_1403440a0;
if ((int)uVar13 < (int)uVar6) {
LAB_1401a1955:
if (local_1ae8 != (uint *)0x0) {
puVar11 = local_1ae8;
}
}
else {
if (local_1ae8 != (uint *)0x0) {
if (local_1ae8 == (uint *)PTR_DAT_1403440a0) {
uVar13 = 0;
}
else {
uVar13 = local_1ae8[-2];
}
goto LAB_1401a1955;
}
uVar13 = 0;
}
FUN_14016d770(puVar7 + 2,puVar11,uVar13);
FUN_14004eb70(&local_1ae8);
param_4 = local_1a80;
local_1ae8 = puVar7 + 2;
}
}
}
FUN_14004e850(&local_1ae8);
puVar7 = local_1ae8;
if (local_1ae8 == (uint *)0x0) {
puVar7 = (uint *)PTR_DAT_1403440a0;
}
FUN_14016d770(puVar7,puVar15,uVar5);
puVar7 = local_1ae8;
if (local_1ae8 == (uint *)0x0) {
puVar7 = (uint *)PTR_DAT_1403440a0;
}
uVar6 = FUN_14016d740(puVar7);
uVar13 = 0;
uVar5 = 0;
if (0 < (int)uVar6) {
uVar5 = uVar6;
}
uVar6 = uVar13;
if ((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1403440a0)) {
uVar6 = local_1ae8[-2];
}
if (((int)uVar5 < (int)uVar6) || (uVar5 = uVar13, local_1ae8 == (uint *)0x0)) {
LAB_1401a19f0:
if (((local_1ae8 != (uint *)PTR_DAT_1403440a0) && (local_1ae8 != (uint *)0x0)) &&
(local_1ae8 + -2 != (uint *)0x0)) {
local_1ae8[-2] = uVar5;
*(undefined2 *)((longlong)local_1ae8 + (longlong)(int)uVar5 * 2) = 0;
}
}
else if (local_1ae8 != (uint *)PTR_DAT_1403440a0) {
uVar5 = local_1ae8[-2];
goto LAB_1401a19f0;
}
local_1a50 = 0;
local_1a48 = 0;
local_1a40 = 0;
local_1a38 = 0;
local_1a58 = Proud::ByteArray::vftable;
local_1af8 = &local_1a58;
uVar8 = FUN_140198f80(&local_1ae0,0x27,*param_4,&local_1ae8);
(**(code **)(*param_1 + 0x80))(param_1,uVar8);
FUN_14019a9e0(&local_1a58);
puVar7 = local_1ae8;
if (((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1403440a0)) &&
(puVar11 = local_1ae8 + -2, puVar11 != (uint *)0x0)) {
uVar8 = FUN_14016d8c0();
local_1a68 = uVar8;
FUN_14016db50(uVar8);
local_1a60 = 1;
puVar7 = puVar7 + -1;
*puVar7 = *puVar7 - 1;
if (*puVar7 == 0) {
FUN_14016d970(puVar11);
}
FUN_14016dbe0(uVar8);
}
if (((puVar2 != (undefined *)0x0) && (puVar2 != PTR_DAT_1403440a0)) &&
(puVar2 + -8 != (undefined *)0x0)) {
uVar8 = FUN_14016d8c0();
local_1a68 = uVar8;
FUN_14016db50(uVar8);
local_1a60 = 1;
piVar1 = (int *)(puVar2 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(puVar2 + -8);
}
FUN_14016dbe0(uVar8);
}
local_1ae0 = &local_1ac8;
FUN_14016d0e0(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_14016d0e0(&local_1aa0);
param_4 = local_1a80;
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
LAB_1401a1d86:
local_1af8 = (undefined ***)CONCAT44(local_1af8._4_4_,param_5);
uVar9 = FUN_14019ff40(param_1,param_2,local_1a78,param_4);
return uVar9;
}