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

371 lines
12 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401e0470 FUN_1401e0470
* Pseudocode, not original source. */
void FUN_1401e0470(longlong *param_1,double param_2,undefined8 param_3)
{
longlong *plVar1;
int *piVar2;
longlong lVar3;
undefined8 *puVar4;
double dVar5;
bool bVar6;
DWORD DVar7;
DWORD DVar8;
undefined8 uVar9;
undefined *puVar10;
longlong *plVar11;
undefined8 uVar12;
char cVar13;
undefined *puVar14;
undefined *puVar15;
undefined *local_res10;
undefined8 local_res18;
undefined *local_res20;
undefined *local_168;
undefined8 local_160;
char local_158;
longlong *local_150;
undefined1 local_148;
undefined *local_140;
undefined *local_138;
undefined *local_130;
undefined *local_128;
undefined *local_120;
undefined *local_118;
undefined8 local_110;
undefined1 local_108;
undefined8 local_100;
undefined1 local_f8;
undefined8 local_f0;
undefined1 local_e8;
undefined8 local_e0;
undefined8 local_d8;
undefined1 local_d0;
undefined8 local_c8;
undefined1 local_c0;
undefined8 local_b8;
undefined1 local_b0;
undefined8 local_a8;
undefined1 local_a0;
undefined8 local_98;
undefined1 local_90;
undefined *local_88;
undefined1 local_80;
undefined8 local_78;
undefined1 local_70;
local_e0 = 0xfffffffffffffffe;
local_150 = param_1 + 0x95;
local_res18 = param_3;
FUN_14016db50();
local_148 = 1;
(**(code **)(param_1[1] + 0x18))();
bVar6 = false;
puVar15 = (undefined *)0x0;
puVar14 = puVar15;
if (param_1[0xad] != 0) {
puVar14 = *(undefined **)(param_1[0xad] + 0x38);
}
FUN_14016db50(puVar14 + 0x10);
puVar10 = puVar15;
if (param_1[0xad] != 0) {
puVar10 = *(undefined **)(param_1[0xad] + 0x38);
}
*(int *)(puVar10 + 0x288) = *(int *)(puVar10 + 0x288) + 1;
LOCK();
*(int *)(param_1 + 0xa2) = (int)param_1[0xa2] + 1;
UNLOCK();
FUN_14016dbe0(puVar14 + 0x10);
DVar7 = GetTickCount();
dVar5 = param_2 * 2.0 * 1000.0;
if (dVar5 <= 100000.0) {
dVar5 = 100000.0;
}
if (((char)param_1[0x2e4] != '\0') || ((int)param_1[0xcb] != 0)) {
puVar14 = puVar15;
if (param_1[0xad] != 0) {
puVar14 = *(undefined **)(param_1[0xad] + 0x38);
}
puVar14 = puVar14 + 0x10;
local_88 = puVar14;
FUN_14016db50(puVar14);
local_80 = 1;
FUN_1401d4c70(param_1 + -0xe,0,&DAT_140290e50,(int)param_1[0x2a1]);
FUN_14016dbe0(puVar14);
}
plVar1 = param_1 + -0xe;
puVar14 = puVar15;
do {
uVar9 = (**(code **)(*plVar1 + 0x58))(plVar1);
local_160 = uVar9;
FUN_14016db50(uVar9);
local_158 = '\x01';
if (((longlong *)param_1[0xac] == (longlong *)0x0) ||
(lVar3 = *(longlong *)param_1[0xac], lVar3 == 0)) {
if ((((longlong *)param_1[0x2a0] != (longlong *)0x0) && (*(longlong *)param_1[0x2a0] != 0)) ||
(((longlong *)param_1[0x296] != (longlong *)0x0 && (*(longlong *)param_1[0x296] != 0)))) {
FUN_14016d8c0();
local_140 = PTR_DAT_1403440a0;
plVar11 = (longlong *)FUN_14016f6b0(&local_118);
puVar14 = (undefined *)*plVar11;
if ((undefined *)*plVar11 == (undefined *)0x0) {
puVar14 = PTR_DAT_1403440a0;
}
FUN_14004c020(&local_140,L"Unstability in Disconnect #1! Process=%s",puVar14);
if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_1403440a0)) &&
(local_118 + -8 != (undefined *)0x0)) {
uVar12 = FUN_14016d8c0();
local_b8 = uVar12;
FUN_14016db50(uVar12);
local_b0 = 1;
piVar2 = (int *)(local_118 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(local_118 + -8);
}
FUN_14016dbe0(uVar12);
}
FUN_14016d8c0();
puVar14 = local_140;
local_168 = PTR_DAT_1403440a0;
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
local_168 = puVar15;
}
if (local_140 != PTR_DAT_1403440a0) {
uVar12 = FUN_14016d8c0();
local_98 = uVar12;
FUN_14016db50(uVar12);
local_90 = 1;
FUN_14004eb70(&local_168);
local_168 = puVar14;
if (((puVar14 != PTR_DAT_1403440a0) && (puVar14 != (undefined *)0x0)) &&
(puVar14 != (undefined *)0x8)) {
*(int *)(puVar14 + -4) = *(int *)(puVar14 + -4) + 1;
}
FUN_14016dbe0(uVar12);
}
FUN_1401be230(&local_168);
if (((puVar14 != (undefined *)0x0) && (puVar14 != PTR_DAT_1403440a0)) &&
(puVar14 + -8 != (undefined *)0x0)) {
uVar12 = FUN_14016d8c0();
local_78 = uVar12;
FUN_14016db50(uVar12);
local_70 = 1;
piVar2 = (int *)(puVar14 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar14 + -8);
}
FUN_14016dbe0(uVar12);
}
}
FUN_1401dd3e0(plVar1,1);
FUN_14016dbe0(uVar9);
LAB_1401e0c5d:
FUN_14016dbe0(local_150);
return;
}
if ((*(int *)(lVar3 + 0x100) == 5) && (param_1[0x2d5] == 0)) {
FUN_1401dd3e0(plVar1,1);
FUN_14016dbe0(local_160);
goto LAB_1401e0c5d;
}
if (DAT_14034c8c0 != '\0') {
FUN_1401dd3e0(plVar1,1);
FUN_14016dbe0(local_160);
goto LAB_1401e0c5d;
}
puVar10 = puVar15;
if (param_1[0xad] != 0) {
puVar10 = *(undefined **)(param_1[0xad] + 0x38);
}
if (*(longlong *)(puVar10 + 0x2b8) == 0) {
puVar14 = puVar15;
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar14 = *(undefined **)param_1[0xac];
}
FUN_1401ea690(puVar14,5);
FUN_14016d8c0();
local_138 = PTR_DAT_1403440a0;
plVar11 = (longlong *)FUN_14016f6b0(&local_128);
puVar14 = (undefined *)*plVar11;
if ((undefined *)*plVar11 == (undefined *)0x0) {
puVar14 = PTR_DAT_1403440a0;
}
FUN_14004c020(&local_138,L"Unstability in Disconnect #2! Process=%s",puVar14);
if (((local_128 != (undefined *)0x0) && (local_128 != PTR_DAT_1403440a0)) &&
(local_128 + -8 != (undefined *)0x0)) {
uVar9 = FUN_14016d8c0();
local_100 = uVar9;
FUN_14016db50(uVar9);
local_f8 = 1;
piVar2 = (int *)(local_128 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(local_128 + -8);
}
FUN_14016dbe0(uVar9);
}
FUN_14016d8c0();
puVar14 = local_138;
local_res20 = PTR_DAT_1403440a0;
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
local_res20 = puVar15;
}
if (local_138 != PTR_DAT_1403440a0) {
uVar9 = FUN_14016d8c0();
local_f0 = uVar9;
FUN_14016db50(uVar9);
local_e8 = 1;
FUN_14004eb70(&local_res20);
local_res20 = puVar14;
if (((puVar14 != PTR_DAT_1403440a0) && (puVar14 != (undefined *)0x0)) &&
(puVar14 != (undefined *)0x8)) {
*(int *)(puVar14 + -4) = *(int *)(puVar14 + -4) + 1;
}
FUN_14016dbe0(uVar9);
}
FUN_1401be230(&local_res20);
if (((puVar14 != (undefined *)0x0) && (puVar14 != PTR_DAT_1403440a0)) &&
(puVar14 + -8 != (undefined *)0x0)) {
uVar9 = FUN_14016d8c0();
local_d8 = uVar9;
FUN_14016db50(uVar9);
local_d0 = 1;
piVar2 = (int *)(puVar14 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar14 + -8);
}
FUN_14016dbe0(uVar9);
}
FUN_1401dd3e0(plVar1,1);
FUN_14016dbe0(local_160);
goto LAB_1401e0c5d;
}
DVar8 = GetTickCount();
if (dVar5 < (double)(DVar8 - DVar7)) {
FUN_14016d8c0();
local_130 = PTR_DAT_1403440a0;
plVar11 = (longlong *)FUN_14016f6b0(&local_120);
puVar14 = (undefined *)*plVar11;
if ((undefined *)*plVar11 == (undefined *)0x0) {
puVar14 = PTR_DAT_1403440a0;
}
puVar10 = puVar15;
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar10 = *(undefined **)param_1[0xac];
}
FUN_14004c020(&local_130,
L"CNetClient.Disconnect seems to be freezed ## State=%d##GarbageCount=%d##Process=%s"
,*(undefined4 *)(puVar10 + 0x100),param_1[0x2d5],puVar14);
if (((local_120 != (undefined *)0x0) && (local_120 != PTR_DAT_1403440a0)) &&
(local_120 + -8 != (undefined *)0x0)) {
uVar9 = FUN_14016d8c0();
local_110 = uVar9;
FUN_14016db50(uVar9);
local_108 = 1;
piVar2 = (int *)(local_120 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(local_120 + -8);
}
FUN_14016dbe0(uVar9);
}
FUN_14016d8c0();
puVar14 = local_130;
local_res10 = PTR_DAT_1403440a0;
if (PTR_DAT_1403440a0 == (undefined *)0x0) {
local_res10 = puVar15;
}
if (local_130 != PTR_DAT_1403440a0) {
uVar9 = FUN_14016d8c0();
local_a8 = uVar9;
FUN_14016db50(uVar9);
local_a0 = 1;
FUN_14004eb70(&local_res10);
local_res10 = puVar14;
if (((puVar14 != PTR_DAT_1403440a0) && (puVar14 != (undefined *)0x0)) &&
(puVar14 != (undefined *)0x8)) {
*(int *)(puVar14 + -4) = *(int *)(puVar14 + -4) + 1;
}
FUN_14016dbe0(uVar9);
}
FUN_1401be230(&local_res10);
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar15 = *(undefined **)param_1[0xac];
}
FUN_1401ea690(puVar15,5);
FUN_1401dd3e0(plVar1,1);
if (((puVar14 != (undefined *)0x0) && (puVar14 != PTR_DAT_1403440a0)) &&
(puVar14 + -8 != (undefined *)0x0)) {
uVar9 = FUN_14016d8c0();
local_c8 = uVar9;
FUN_14016db50(uVar9);
local_c0 = 1;
piVar2 = (int *)(puVar14 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar14 + -8);
}
FUN_14016dbe0(uVar9);
}
FUN_14016dbe0(local_160);
goto LAB_1401e0c5d;
}
if (!bVar6) {
bVar6 = true;
puVar10 = puVar15;
if (param_1[0xad] != 0) {
puVar10 = *(undefined **)(param_1[0xad] + 0x38);
}
FUN_14016dc80(puVar10 + 0x10);
puVar10 = puVar15;
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar10 = *(undefined **)param_1[0xac];
}
puVar4 = (undefined8 *)param_1[0xac];
if (*(int *)(puVar10 + 0x100) == 3) {
puVar10 = puVar15;
if (puVar4 != (undefined8 *)0x0) {
puVar10 = (undefined *)*puVar4;
}
uVar9 = (**(code **)(*param_1 + 0x1c0))(param_1);
*(undefined8 *)(puVar10 + 0xd0) = uVar9;
puVar10 = puVar15;
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar10 = *(undefined **)param_1[0xac];
}
*(double *)(puVar10 + 0xd8) = param_2;
(**(code **)(param_1[0x2f5] + 0x80))(param_1 + 0x2f5,1,&DAT_14034c4b0,local_res18);
}
else {
puVar10 = puVar15;
if (puVar4 != (undefined8 *)0x0) {
puVar10 = (undefined *)*puVar4;
}
if (*(int *)(puVar10 + 0x100) < 3) {
puVar10 = puVar15;
if ((undefined8 *)param_1[0xac] != (undefined8 *)0x0) {
puVar10 = *(undefined **)param_1[0xac];
}
FUN_1401ea690(puVar10,4);
}
}
}
uVar9 = local_160;
cVar13 = local_158;
if (0 < (int)puVar14) {
FUN_14016dbe0(local_160);
Sleep(10);
cVar13 = '\0';
}
puVar14 = (undefined *)(ulonglong)((int)puVar14 + 1);
if (cVar13 != '\0') {
FUN_14016dbe0(uVar9);
}
} while( true );
}