205 lines
6 KiB
C
205 lines
6 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401a22b0 FUN_1401a22b0
|
|
* Pseudocode, not original source. */
|
|
|
|
undefined8 FUN_1401a22b0(longlong param_1,undefined8 *param_2,uint param_3)
|
|
|
|
{
|
|
undefined8 *puVar1;
|
|
undefined8 *puVar2;
|
|
bool bVar3;
|
|
undefined4 uVar4;
|
|
undefined2 uVar5;
|
|
int iVar6;
|
|
char cVar7;
|
|
DWORD DVar8;
|
|
longlong lVar9;
|
|
undefined8 *puVar10;
|
|
int iVar11;
|
|
double dVar12;
|
|
double dVar13;
|
|
int local_res8 [2];
|
|
longlong local_res20;
|
|
longlong local_a8;
|
|
undefined1 local_a0;
|
|
undefined8 local_98;
|
|
longlong local_90;
|
|
undefined8 local_88;
|
|
undefined4 local_80;
|
|
undefined8 local_78;
|
|
undefined **local_70;
|
|
undefined4 local_68;
|
|
undefined2 local_64;
|
|
undefined4 local_60;
|
|
|
|
local_98 = 0xfffffffffffffffe;
|
|
if (*(longlong *)(param_1 + 0x28) == 0) {
|
|
SetLastError(0);
|
|
dVar12 = (double)FUN_1401a1eb0(param_1);
|
|
local_res20 = param_1 + 0x50;
|
|
puVar1 = (undefined8 *)(param_1 + 0x38);
|
|
iVar11 = 0;
|
|
do {
|
|
local_a8 = param_1 + 0x50;
|
|
FUN_14016db50(local_a8);
|
|
local_a0 = 1;
|
|
local_res8[0] = *(int *)(param_1 + 0x48) * 3 + 3;
|
|
puVar2 = (undefined8 *)*puVar1;
|
|
local_70 = Proud::AddrPort::vftable;
|
|
local_60 = 0;
|
|
local_78 = 0;
|
|
local_68 = DAT_140344450;
|
|
local_64 = DAT_140344454;
|
|
for (; puVar2 != (undefined8 *)0x0; puVar2 = (undefined8 *)puVar2[1]) {
|
|
cVar7 = FUN_14019c560(puVar2,0,&local_78);
|
|
if (cVar7 != '\0') {
|
|
*(undefined4 *)(param_2 + 2) = 1;
|
|
puVar10 = puVar2 + 0x48;
|
|
LAB_1401a2619:
|
|
FUN_14019bbb0(puVar10,0,0);
|
|
*param_2 = puVar2[0x5d];
|
|
*(undefined4 *)((longlong)param_2 + 0xc) = local_78._4_4_;
|
|
*(undefined4 *)(param_2 + 1) = local_60;
|
|
if (puVar2[2] != 0) {
|
|
FUN_14019c130(puVar2[2],puVar2);
|
|
}
|
|
if (puVar2[2] != 0) {
|
|
FUN_14019c130(puVar1,puVar2);
|
|
}
|
|
if (*(longlong *)(param_1 + 0x40) == 0) {
|
|
*puVar1 = puVar2;
|
|
}
|
|
else {
|
|
*(undefined8 **)(*(longlong *)(param_1 + 0x40) + 8) = puVar2;
|
|
*puVar2 = *(undefined8 *)(param_1 + 0x40);
|
|
}
|
|
*(undefined8 **)(param_1 + 0x40) = puVar2;
|
|
puVar2[2] = puVar1;
|
|
*(int *)(param_1 + 0x48) = *(int *)(param_1 + 0x48) + 1;
|
|
lVar9 = local_res20;
|
|
goto LAB_1401a26ca;
|
|
}
|
|
cVar7 = FUN_14019c2f0(puVar2,0,&local_78);
|
|
if (cVar7 != '\0') {
|
|
*(undefined4 *)(param_2 + 2) = 2;
|
|
*(undefined4 *)(param_2 + 4) = *(undefined4 *)((longlong)puVar2 + 0x304);
|
|
FUN_14016f840(param_2 + 5,puVar2 + 0x5e);
|
|
puVar10 = puVar2 + 0x30;
|
|
goto LAB_1401a2619;
|
|
}
|
|
cVar7 = FUN_14019c3c0(puVar2,0,&local_78);
|
|
if (cVar7 != '\0') {
|
|
*(undefined4 *)(param_2 + 2) = 3;
|
|
puVar10 = puVar2 + 0x18;
|
|
goto LAB_1401a2619;
|
|
}
|
|
cVar7 = FUN_14019c490(puVar2,0,&local_78);
|
|
if (cVar7 != '\0') {
|
|
*(undefined4 *)(param_2 + 2) = 4;
|
|
puVar10 = puVar2 + 0x68;
|
|
goto LAB_1401a2619;
|
|
}
|
|
}
|
|
if (*(longlong *)(param_1 + 0xa0) != 0) {
|
|
FUN_1401a2180(param_1 + 0x88,&local_90);
|
|
if (local_90 == 0) {
|
|
*param_2 = 0;
|
|
}
|
|
else {
|
|
*param_2 = *(undefined8 *)(local_90 + 0x2e8);
|
|
}
|
|
*(undefined4 *)(param_2 + 2) = local_80;
|
|
param_2[3] = local_88;
|
|
param_2[1] = 0;
|
|
lVar9 = param_1 + 0x50;
|
|
LAB_1401a26ca:
|
|
FUN_14016dbe0(lVar9);
|
|
return 1;
|
|
}
|
|
FUN_14016dbe0(param_1 + 0x50);
|
|
local_a0 = 0;
|
|
if ((param_3 == 0) ||
|
|
((param_3 != 0xffffffff &&
|
|
(dVar13 = (double)FUN_1401a1eb0(param_1), (double)param_3 < (dVar13 - dVar12) * 1000.0))))
|
|
{
|
|
return 0;
|
|
}
|
|
bVar3 = local_res8[0] <= iVar11;
|
|
iVar6 = 0;
|
|
if (!bVar3) {
|
|
iVar6 = iVar11 + 1;
|
|
}
|
|
iVar11 = iVar6;
|
|
Sleep((uint)bVar3);
|
|
} while( true );
|
|
}
|
|
local_res8[0] = 0;
|
|
local_a8 = 0;
|
|
local_res20 = 0;
|
|
SetLastError(0);
|
|
uVar5 = DAT_140344454;
|
|
uVar4 = DAT_140344450;
|
|
*param_2 = 0;
|
|
param_2[1] = 0;
|
|
*(undefined4 *)(param_2 + 2) = 5;
|
|
param_2[3] = 0;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
*(undefined4 *)(param_2 + 6) = uVar4;
|
|
*(undefined2 *)((longlong)param_2 + 0x34) = uVar5;
|
|
lVar9 = FUN_14016f040();
|
|
(**(code **)(lVar9 + 0x18))
|
|
(*(undefined8 *)(param_1 + 0x28),local_res8,&local_a8,&local_res20,param_3);
|
|
if (local_res20 == 0) {
|
|
DVar8 = GetLastError();
|
|
*(DWORD *)((longlong)param_2 + 0xc) = DVar8;
|
|
return 0;
|
|
}
|
|
if (local_a8 == 0) {
|
|
*param_2 = 0;
|
|
}
|
|
else {
|
|
*param_2 = *(undefined8 *)(local_a8 + 0x2e8);
|
|
}
|
|
if (local_res20 < 0) {
|
|
*(int *)(param_2 + 1) = local_res8[0];
|
|
param_2[3] = local_res20;
|
|
*(undefined8 *)((longlong)param_2 + 0xc) = 0;
|
|
*(undefined4 *)(param_2 + 6) = DAT_140344450;
|
|
*(undefined2 *)((longlong)param_2 + 0x34) = DAT_140344454;
|
|
*(undefined4 *)(param_2 + 4) = 0;
|
|
return 1;
|
|
}
|
|
if (local_a8 != 0) {
|
|
lVar9 = local_a8 + 0x180;
|
|
if (local_res20 == lVar9) {
|
|
*(undefined4 *)(param_2 + 2) = 2;
|
|
*(undefined4 *)(param_2 + 4) = *(undefined4 *)(local_a8 + 0x304);
|
|
FUN_14016f840(param_2 + 5,local_a8 + 0x2f0);
|
|
FUN_14019bbb0(lVar9,0,0);
|
|
goto LAB_1401a2461;
|
|
}
|
|
if (local_res20 == local_a8 + 0x240) {
|
|
*(undefined4 *)(param_2 + 2) = 1;
|
|
FUN_14019bbb0(local_a8 + 0x240,0,0);
|
|
goto LAB_1401a2461;
|
|
}
|
|
if (local_res20 == local_a8 + 0xc0) {
|
|
*(undefined4 *)(param_2 + 2) = 3;
|
|
FUN_14019bbb0(local_a8 + 0xc0,0,0);
|
|
goto LAB_1401a2461;
|
|
}
|
|
if (local_res20 == local_a8 + 0x340) {
|
|
*(undefined4 *)(param_2 + 2) = 4;
|
|
FUN_14019bbb0(local_a8 + 0x340,0,0);
|
|
goto LAB_1401a2461;
|
|
}
|
|
}
|
|
*(undefined4 *)(param_2 + 2) = 0;
|
|
param_2[3] = local_res20;
|
|
LAB_1401a2461:
|
|
*(int *)(param_2 + 1) = local_res8[0];
|
|
*(undefined4 *)((longlong)param_2 + 0xc) = 0;
|
|
GetLastError();
|
|
return 1;
|
|
}
|
|
|