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

351 lines
11 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401a2700 FUN_1401a2700
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_1401a2700(longlong param_1,longlong param_2,uint *param_3,uint param_4)
{
uint uVar1;
longlong lVar2;
undefined8 *puVar3;
longlong *plVar4;
longlong lVar5;
longlong *plVar6;
bool bVar7;
undefined4 uVar8;
undefined2 uVar9;
char cVar10;
int iVar11;
longlong lVar12;
undefined8 *puVar13;
undefined8 *puVar14;
undefined8 uVar15;
ulonglong uVar16;
ulonglong uVar17;
longlong *plVar18;
double dVar19;
double dVar20;
undefined1 auStack_2a8 [32];
uint local_288;
undefined4 local_280;
uint local_278 [2];
undefined8 local_270;
undefined4 local_268;
undefined4 uStack_264;
undefined4 local_260;
undefined2 local_25c;
ulonglong local_258;
undefined4 local_250;
undefined **local_248;
undefined4 local_240;
undefined2 local_23c;
int local_238;
uint local_234;
longlong local_230;
undefined8 local_228;
undefined8 local_220;
undefined4 local_218;
undefined8 local_210;
undefined4 local_208;
undefined **local_200;
undefined4 local_1f8;
undefined2 local_1f4;
longlong local_1f0;
uint *local_1e8;
longlong local_1e0;
longlong local_1d8;
undefined1 local_1d0;
undefined8 local_1c8;
longlong local_1b8 [3];
undefined4 auStack_1a0 [74];
ulonglong local_78;
local_1c8 = 0xfffffffffffffffe;
local_78 = DAT_1403463c0 ^ (ulonglong)auStack_2a8;
if (9 < *(uint *)(param_2 + 0x18)) {
local_234 = param_4;
local_1f0 = param_2;
local_1e8 = param_3;
if (*(longlong *)(param_1 + 0x28) == 0) {
SetLastError(0);
dVar19 = (double)FUN_1401a1eb0(param_1);
local_278[0] = 0;
*param_3 = 0;
local_230 = param_1 + 0x50;
plVar18 = (longlong *)(param_1 + 0x38);
do {
local_1d8 = param_1 + 0x50;
FUN_14016db50(local_1d8);
local_1d0 = 1;
local_238 = *(int *)(param_1 + 0x48) * 3 + 3;
puVar13 = (undefined8 *)*plVar18;
local_268 = 0x402776a0;
uStack_264 = 1;
local_258 = local_258 & 0xffffffff00000000;
local_270 = 0;
puVar3 = puVar13;
local_260 = DAT_140344450;
local_25c = DAT_140344454;
do {
if (puVar3 == (undefined8 *)0x0) break;
local_200 = Proud::AddrPort::vftable;
local_228 = 0;
local_210 = 0;
local_220 = 0;
local_218 = 5;
local_208 = 0;
local_1f8 = DAT_140344450;
local_1f4 = DAT_140344454;
cVar10 = FUN_14019c560(puVar3,0,&local_270);
if (cVar10 == '\0') {
cVar10 = FUN_14019c2f0(puVar3,0,&local_270);
if (cVar10 != '\0') {
local_218 = 2;
local_208 = *(undefined4 *)((longlong)puVar3 + 0x304);
FUN_14016f840(&local_200);
puVar14 = puVar3 + 0x30;
goto LAB_1401a2b38;
}
cVar10 = FUN_14019c3c0(puVar3,0,&local_270);
if (cVar10 != '\0') {
local_218 = 3;
puVar14 = puVar3 + 0x18;
goto LAB_1401a2b38;
}
cVar10 = FUN_14019c490(puVar3,0,&local_270);
if (cVar10 != '\0') {
local_218 = 4;
puVar14 = puVar3 + 0x68;
goto LAB_1401a2b38;
}
}
else {
local_218 = 1;
puVar14 = puVar3 + 0x48;
LAB_1401a2b38:
FUN_14019bbb0(puVar14,0,0);
local_228 = puVar3[0x5d];
local_220 = CONCAT44((int)((ulonglong)local_270 >> 0x20),(undefined4)local_258);
if (puVar3[2] != 0) {
FUN_14019c130();
}
if (puVar3[2] != 0) {
FUN_14019c130(plVar18);
}
if (*(longlong *)(param_1 + 0x40) == 0) {
*plVar18 = (longlong)puVar3;
}
else {
*(undefined8 **)(*(longlong *)(param_1 + 0x40) + 8) = puVar3;
*puVar3 = *(undefined8 *)(param_1 + 0x40);
}
*(undefined8 **)(param_1 + 0x40) = puVar3;
puVar3[2] = plVar18;
*(int *)(param_1 + 0x48) = *(int *)(param_1 + 0x48) + 1;
uVar1 = *param_3;
if (((int)uVar1 < 0) || (*(int *)(param_2 + 0x18) <= (int)uVar1)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
puVar14 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(param_2 + 0x10));
*puVar14 = local_228;
*(undefined4 *)(puVar14 + 1) = (undefined4)local_220;
*(undefined4 *)((longlong)puVar14 + 0xc) = local_220._4_4_;
*(undefined4 *)(puVar14 + 2) = local_218;
puVar14[3] = local_210;
*(undefined4 *)(puVar14 + 4) = local_208;
*(undefined4 *)(puVar14 + 6) = local_1f8;
*(undefined2 *)((longlong)puVar14 + 0x34) = local_1f4;
*param_3 = *param_3 + 1;
if (9 < *param_3) goto LAB_1401a2db3;
}
puVar3 = (undefined8 *)puVar3[1];
} while (puVar3 != puVar13);
lVar12 = *(longlong *)(param_1 + 0xa0);
uVar8 = DAT_140344450;
uVar9 = DAT_140344454;
while (DAT_140344450 = uVar8, DAT_140344454 = uVar9, lVar12 != 0) {
plVar4 = *(longlong **)(param_1 + 0x90);
if (plVar4 == (longlong *)0x0) {
/* WARNING: Subroutine does not return */
FUN_14004dc60(0x80004005);
}
lVar12 = plVar4[2];
lVar2 = plVar4[3];
local_1e0 = plVar4[4];
lVar5 = *plVar4;
*(longlong *)(param_1 + 0x90) = lVar5;
if (lVar5 == 0) {
*(undefined8 *)(param_1 + 0x98) = 0;
}
else {
*(undefined8 *)(lVar5 + 8) = 0;
}
plVar6 = *(longlong **)(param_1 + 0x88);
if (plVar6 == (longlong *)0x0) {
FUN_14016d970();
}
else {
(**(code **)(*plVar6 + 0x10))(plVar6,plVar4);
}
*(longlong *)(param_1 + 0xa0) = *(longlong *)(param_1 + 0xa0) + -1;
uVar15 = 0;
if (lVar12 != 0) {
uVar15 = *(undefined8 *)(lVar12 + 0x2e8);
}
uVar1 = *local_1e8;
if (((int)uVar1 < 0) || (*(int *)(local_1f0 + 0x18) <= (int)uVar1)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
puVar13 = (undefined8 *)((longlong)(int)uVar1 * 0x38 + *(longlong *)(local_1f0 + 0x10));
*puVar13 = uVar15;
puVar13[1] = 0;
*(int *)(puVar13 + 2) = (int)local_1e0;
puVar13[3] = lVar2;
*(undefined4 *)(puVar13 + 4) = 0;
*(undefined4 *)(puVar13 + 6) = uVar8;
*(undefined2 *)((longlong)puVar13 + 0x34) = uVar9;
*local_1e8 = *local_1e8 + 1;
if (9 < *local_1e8) goto LAB_1401a2db3;
param_3 = local_1e8;
param_2 = local_1f0;
uVar8 = DAT_140344450;
uVar9 = DAT_140344454;
lVar12 = *(longlong *)(param_1 + 0xa0);
}
if (*param_3 != 0) {
LAB_1401a2db3:
FUN_14016dbe0(local_230);
return 1;
}
FUN_14016dbe0(param_1 + 0x50);
local_1d0 = 0;
uVar16 = (ulonglong)local_234;
if ((local_234 == 0) ||
((local_234 != 0xffffffff &&
(dVar20 = (double)FUN_1401a1eb0(param_1), (double)uVar16 < (dVar20 - dVar19) * 1000.0)))
) {
return 0;
}
bVar7 = local_238 <= (int)local_278[0];
if (bVar7) {
local_278[0] = 0;
}
else {
local_278[0] = local_278[0] + 1;
}
Sleep((uint)bVar7);
} while( true );
}
uVar16 = 0;
local_278[0] = 0;
SetLastError(0);
lVar12 = FUN_14016f040();
local_280 = 0;
local_288 = param_4;
iVar11 = (**(code **)(lVar12 + 0x20))(*(undefined8 *)(param_1 + 0x28),local_1b8,10,local_278);
if (iVar11 == 0) {
GetLastError();
}
else if (local_278[0] != 0) {
*param_3 = local_278[0];
plVar18 = local_1b8 + 1;
uVar17 = uVar16;
do {
local_248 = Proud::AddrPort::vftable;
local_270 = 0;
local_258 = 0;
local_268 = 0;
uStack_264 = 0;
local_260 = 5;
local_250 = 0;
local_240 = DAT_140344450;
local_23c = DAT_140344454;
lVar12 = *plVar18;
iVar11 = (int)uVar17;
if (lVar12 == 0) {
uStack_264 = 0xffffffff;
if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
lVar12 = *(longlong *)(param_2 + 0x10);
*(undefined8 *)(uVar16 + lVar12) = 0;
}
else {
lVar2 = plVar18[-1];
if (lVar2 == 0) {
local_270 = 0;
}
else {
local_270 = *(undefined8 *)(lVar2 + 0x2e8);
}
if (lVar12 < 0) {
local_268 = (undefined4)plVar18[2];
uStack_264 = 0;
local_260 = 0;
local_250 = 0;
if ((iVar11 < 0) || (local_258 = lVar12, *(int *)(param_2 + 0x18) <= iVar11)) {
local_258 = lVar12;
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
}
else {
if (lVar2 == 0) {
LAB_1401a2935:
local_260 = 0;
local_258 = lVar12;
}
else if (lVar12 == lVar2 + 0x180) {
local_260 = 2;
local_250 = *(undefined4 *)(lVar2 + 0x304);
FUN_14016f840(&local_248,lVar2 + 0x2f0);
FUN_14019bbb0(lVar2 + 0x180,0,0);
}
else if (lVar12 == lVar2 + 0x240) {
local_260 = 1;
FUN_14019bbb0(lVar2 + 0x240,0,0);
}
else if (lVar12 == lVar2 + 0xc0) {
local_260 = 3;
FUN_14019bbb0(lVar2 + 0xc0,0,0);
}
else {
if (lVar12 != lVar2 + 0x340) goto LAB_1401a2935;
local_260 = 4;
FUN_14019bbb0(lVar2 + 0x340,0,0);
}
local_268 = (undefined4)plVar18[2];
uStack_264 = 0;
if ((iVar11 < 0) || (*(int *)(param_2 + 0x18) <= iVar11)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
}
uStack_264 = 0;
lVar12 = *(longlong *)(param_2 + 0x10);
*(undefined8 *)(uVar16 + lVar12) = local_270;
}
*(undefined4 *)(uVar16 + 8 + lVar12) = local_268;
*(undefined4 *)(uVar16 + 0xc + lVar12) = uStack_264;
*(undefined4 *)(uVar16 + 0x10 + lVar12) = local_260;
*(ulonglong *)(uVar16 + 0x18 + lVar12) = local_258;
*(undefined4 *)(uVar16 + 0x20 + lVar12) = local_250;
*(undefined4 *)(uVar16 + 0x30 + lVar12) = local_240;
*(undefined2 *)(uVar16 + 0x34 + lVar12) = local_23c;
uVar17 = (ulonglong)(iVar11 + 1U);
plVar18 = plVar18 + 4;
uVar16 = uVar16 + 0x38;
if (local_278[0] <= iVar11 + 1U) {
return 1;
}
} while( true );
}
}
return 0;
}