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

308 lines
10 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x14017fb20 FUN_14017fb20
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Removing unreachable block (ram,0x00014017ff80) */
void FUN_14017fb20(longlong *param_1)
{
ulonglong _Size;
undefined4 uVar1;
longlong lVar2;
code *pcVar3;
undefined8 uVar4;
double dVar5;
undefined8 uVar6;
ulonglong uVar7;
undefined4 *puVar8;
longlong lVar9;
undefined1 *puVar10;
undefined1 *puVar11;
longlong lVar12;
longlong lVar13;
undefined8 *puVar14;
undefined1 auStack_dd8 [32];
undefined4 local_db8 [2];
longlong local_db0;
longlong local_da8;
undefined4 local_da0;
int local_d9c;
undefined8 local_d90;
char local_d88;
longlong *local_d80;
undefined8 local_d78;
undefined1 local_d70;
undefined8 local_d68;
undefined1 local_d60;
undefined8 local_d58;
undefined4 uStack_d50;
undefined4 uStack_d4c;
undefined8 local_d48;
undefined1 local_d40;
undefined8 local_d38;
undefined4 uStack_d30;
undefined4 uStack_d2c;
undefined8 local_d28;
undefined1 local_d20 [72];
undefined4 local_cd8;
undefined4 uStack_cd4;
undefined4 uStack_cd0;
undefined4 uStack_ccc;
undefined4 *local_58;
undefined4 local_50;
int local_4c;
ulonglong local_48;
puVar10 = auStack_dd8;
puVar11 = auStack_dd8;
local_d28 = 0xfffffffffffffffe;
local_48 = DAT_1403463c0 ^ (ulonglong)local_db8;
uVar6 = (**(code **)(*param_1 + 0x58))();
local_d48 = uVar6;
FUN_14016db50(uVar6);
local_d40 = 1;
if (DAT_14034c86f != '\0') {
(**(code **)(*param_1 + 200))(param_1,L"Proud::CNetServerImpl::PurgeTooOldUnmatureClient");
}
if ((int)param_1[0x2e1] < 1) {
FUN_14016dbe0(uVar6);
goto LAB_140180038;
}
lVar13 = (longlong)(int)param_1[0x2e1] * 8;
_Size = lVar13 + 0x10;
if (_Size < 0x401) {
uVar7 = lVar13 + 0x1f;
if (uVar7 <= _Size) {
uVar7 = 0xffffffffffffff0;
}
lVar13 = -(uVar7 & 0xfffffffffffffff0);
puVar10 = auStack_dd8 + lVar13;
puVar8 = (undefined4 *)((longlong)local_db8 + lVar13);
puVar14 = (undefined8 *)0x0;
puVar11 = auStack_dd8 + lVar13;
if (puVar8 != (undefined4 *)0x0) {
*puVar8 = 0xcccc;
LAB_14017fc18:
puVar14 = (undefined8 *)(puVar8 + 4);
puVar11 = puVar10;
}
}
else {
puVar8 = malloc(_Size);
puVar14 = (undefined8 *)0x0;
puVar11 = auStack_dd8;
if (puVar8 != (undefined4 *)0x0) {
*puVar8 = 0xdddd;
goto LAB_14017fc18;
}
}
*(undefined8 *)(puVar11 + -8) = 0x14017fc28;
dVar5 = (double)FUN_1401a1eb0(param_1 + 0xec);
lVar12 = 0;
lVar13 = lVar12;
if (param_1[0x2e1] != 0) {
lVar13 = param_1[0x2df];
}
for (; lVar13 != 0; lVar13 = *(longlong *)(lVar13 + 0x18)) {
lVar2 = *(longlong *)(lVar13 + 0x10);
if ((DAT_14034c8a8 < dVar5 - *(double *)(lVar2 + 0x690)) && (*(char *)(lVar2 + 0x698) == '\0'))
{
*(undefined8 *)(puVar11 + -8) = 0x14017fc7c;
FUN_1401baa10(lVar2 + 0xc0);
puVar14[lVar12] = lVar2;
lVar12 = lVar12 + 1;
}
}
*(undefined8 *)(puVar11 + -8) = 0x14017fc94;
FUN_14016dbe0(uVar6);
local_d40 = 0;
while ((0 < lVar12 && (lVar13 = 0, 0 < lVar12))) {
do {
lVar2 = puVar14[lVar13];
pcVar3 = *(code **)(*(longlong *)(lVar2 + 0x108) + 0x10);
*(undefined8 *)(puVar11 + -8) = 0x14017fcc2;
uVar6 = (*pcVar3)();
local_d88 = 0;
local_d90 = uVar6;
if (lVar13 == 0) {
local_d88 = 1;
*(undefined8 *)(puVar11 + -8) = 0x14017fe3d;
FUN_14016db50(uVar6);
*(undefined8 *)(puVar11 + -8) = 0x14017fe46;
FUN_14016b440(local_db8);
*(undefined8 *)(puVar11 + -8) = 0x14017fe50;
FUN_14016abe0(local_db8);
*(undefined8 *)(puVar11 + -8) = 0x14017fe5e;
FUN_14016b5a0(local_db8,0x800);
*(undefined8 *)(puVar11 + -8) = 0x14017fe69;
FUN_14016b5a0(local_db8,0);
*(undefined8 *)(puVar11 + -8) = 0x14017fe75;
FUN_14004eef0(local_db8,3);
local_4c = 200;
local_50 = 0;
local_58 = &local_cd8;
if (local_db0 == 0) {
uVar1 = local_da0;
if (local_da8 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar11 + -8) = 0x14018001f;
FUN_14016d1e0();
}
}
else {
uVar1 = *(undefined4 *)(local_db0 + 0x18);
}
lVar9 = local_da8;
if (local_da8 == 0) {
if (local_db0 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_140180019;
FUN_14016d1e0();
}
lVar9 = 0;
if (*(int *)(local_db0 + 0x18) != 0) {
lVar9 = *(longlong *)(local_db0 + 0x10);
}
}
local_50 = 1;
local_d38._0_4_ = (undefined4)lVar9;
local_d38._4_4_ = (undefined4)((ulonglong)lVar9 >> 0x20);
local_cd8 = (undefined4)local_d38;
uStack_cd4 = local_d38._4_4_;
uStack_ccc = uStack_d2c;
local_d68 = 0;
local_d60 = 1;
uVar4 = *(undefined8 *)(lVar2 + 0x748);
local_d38 = lVar9;
uStack_d30 = uVar1;
uStack_cd0 = uVar1;
*(undefined8 *)(puVar11 + -8) = 0x14017ff10;
FUN_1401ba860(uVar4,&local_cd8);
if (local_58 == (undefined4 *)0x0) {
*(undefined8 *)(puVar11 + -8) = 0x140180000;
FUN_14016d300(local_d20,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_140180013;
_CxxThrowException(local_d20,(ThrowInfo *)&DAT_1403417f8);
}
if (local_4c < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_14017ffec;
FUN_14016d6b0();
}
*(undefined1 *)(lVar2 + 0x698) = 1;
*(undefined8 *)(puVar11 + -8) = 0x14017ff3d;
FUN_14016dbe0(uVar6);
local_d88 = '\0';
*(undefined8 *)(puVar11 + -8) = 0x14017ff4f;
FUN_1401baa20(lVar2 + 0xc0);
*puVar14 = puVar14[lVar12 + -1];
lVar12 = lVar12 + -1;
local_d80 = &local_db0;
*(undefined8 *)(puVar11 + -8) = 0x14017ff6e;
FUN_14016d0e0(&local_db0);
if ((local_da8 != 0) && (local_d9c < 0)) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar11 + -8) = 0x14017ffe6;
FUN_14016d6b0();
}
}
else {
*(undefined8 *)(puVar11 + -8) = 0x14017fcde;
local_d88 = FUN_14016dba0();
if (local_d88 != '\0') {
*(undefined8 *)(puVar11 + -8) = 0x14017fcf5;
FUN_14016b440(local_db8);
*(undefined8 *)(puVar11 + -8) = 0x14017fcff;
FUN_14016abe0(local_db8);
*(undefined8 *)(puVar11 + -8) = 0x14017fd0d;
FUN_14016b5a0(local_db8,0x800);
*(undefined8 *)(puVar11 + -8) = 0x14017fd18;
FUN_14016b5a0(local_db8,0);
*(undefined8 *)(puVar11 + -8) = 0x14017fd24;
FUN_14004eef0(local_db8,3);
local_4c = 200;
local_50 = 0;
local_58 = &local_cd8;
if (local_db0 == 0) {
uVar1 = local_da0;
if (local_da8 == 0) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar11 + -8) = 0x14017ffe0;
FUN_14016d1e0();
}
}
else {
uVar1 = *(undefined4 *)(local_db0 + 0x18);
}
lVar9 = local_da8;
if (local_da8 == 0) {
if (local_db0 == 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_14017ffda;
FUN_14016d1e0();
}
lVar9 = 0;
if (*(int *)(local_db0 + 0x18) != 0) {
lVar9 = *(longlong *)(local_db0 + 0x10);
}
}
local_50 = 1;
local_d58._0_4_ = (undefined4)lVar9;
local_d58._4_4_ = (undefined4)((ulonglong)lVar9 >> 0x20);
local_cd8 = (undefined4)local_d58;
uStack_cd4 = local_d58._4_4_;
uStack_ccc = uStack_d4c;
local_d78 = 0;
local_d70 = 1;
uVar4 = *(undefined8 *)(lVar2 + 0x748);
local_d58 = lVar9;
uStack_d50 = uVar1;
uStack_cd0 = uVar1;
*(undefined8 *)(puVar11 + -8) = 0x14017fdba;
FUN_1401ba860(uVar4,&local_cd8);
if (local_58 == (undefined4 *)0x0) {
*(undefined8 *)(puVar11 + -8) = 0x14017ffc1;
FUN_14016d300(local_d20,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0);
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_14017ffd4;
_CxxThrowException(local_d20,(ThrowInfo *)&DAT_1403417f8);
}
if (local_4c < 0) {
/* WARNING: Subroutine does not return */
*(undefined **)(puVar11 + -8) = &UNK_14017ffad;
FUN_14016d6b0();
}
*(undefined1 *)(lVar2 + 0x698) = 1;
*(undefined8 *)(puVar11 + -8) = 0x14017fde7;
FUN_14016dbe0(uVar6);
local_d88 = '\0';
*(undefined8 *)(puVar11 + -8) = 0x14017fdf9;
FUN_1401baa20(lVar2 + 0xc0);
puVar14[lVar13] = puVar14[lVar12 + -1];
lVar12 = lVar12 + -1;
local_d80 = &local_db0;
*(undefined8 *)(puVar11 + -8) = 0x14017fe19;
FUN_14016d0e0(&local_db0);
if ((local_da8 != 0) && (local_d9c < 0)) {
/* WARNING: Subroutine does not return */
*(undefined8 *)(puVar11 + -8) = 0x14017ffa7;
FUN_14016d6b0();
}
}
}
lVar13 = lVar13 + 1;
} while (lVar13 < lVar12);
}
if ((puVar14 != (undefined8 *)0x0) && (*(int *)(puVar14 + -2) == 0xdddd)) {
*(undefined8 *)(puVar11 + -8) = 0x140180037;
free(puVar14 + -2);
}
LAB_140180038:
*(undefined8 *)(puVar11 + -8) = 0x140180047;
return;
}