371 lines
12 KiB
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 );
|
|
}
|
|
|