/* 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 ); }