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

160 lines
5.2 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401f2000 FUN_1401f2000
* Pseudocode, not original source. */
void FUN_1401f2000(longlong param_1,longlong param_2,longlong param_3)
{
undefined *puVar1;
int *piVar2;
longlong *plVar3;
undefined8 uVar4;
undefined4 uVar5;
int iVar6;
undefined8 uVar7;
longlong lVar8;
undefined8 *puVar9;
ulonglong uVar10;
ulonglong uVar11;
undefined *puVar12;
undefined8 uVar13;
undefined1 local_res8 [8];
undefined *local_res10;
undefined8 in_stack_fffffffffffffef8;
undefined4 uVar14;
longlong local_e8;
undefined **local_e0;
undefined4 local_d8;
undefined2 local_d4;
undefined **local_d0;
undefined8 local_c8;
longlong local_c0;
undefined8 local_b8;
undefined4 local_b0;
undefined4 local_ac;
undefined **local_a8;
undefined4 local_a0;
undefined2 local_9c;
undefined **local_98;
undefined4 local_90;
undefined2 local_8c;
undefined **local_88;
undefined4 local_80;
undefined2 local_7c;
undefined **local_78;
undefined4 local_70;
undefined2 local_6c;
undefined8 local_68;
undefined1 local_60;
undefined8 local_58;
uVar14 = (undefined4)((ulonglong)in_stack_fffffffffffffef8 >> 0x20);
local_58 = 0xfffffffffffffffe;
(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))();
*(undefined1 *)(param_2 + 0xc0) = 0;
if ((*(double *)(param_2 + 0x148) == 0.0) && (0 < *(int *)(param_3 + 8))) {
uVar13 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))();
plVar3 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x678);
*plVar3 = *plVar3 + 1;
plVar3 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x680);
*plVar3 = *plVar3 + (longlong)*(int *)(param_3 + 8);
local_e0 = Proud::AddrPort::vftable;
uVar11 = 0;
local_d8 = 0;
local_d4 = 0;
local_e8 = 0;
FUN_14016d8c0();
local_res10 = PTR_DAT_1403440a0;
local_78 = Proud::AddrPort::vftable;
local_80 = *(undefined4 *)(param_3 + 0x30);
local_7c = *(undefined2 *)(param_3 + 0x34);
local_88 = Proud::AddrPort::vftable;
uVar10 = uVar11;
if (*(ulonglong **)(param_2 + 0x100) != (ulonglong *)0x0) {
uVar10 = **(ulonglong **)(param_2 + 0x100);
}
uVar4 = *(undefined8 *)(param_2 + 0x188);
local_70 = local_80;
local_6c = local_7c;
uVar5 = (**(code **)(**(longlong **)(param_1 + 0x108) + 0xe0))
(*(longlong **)(param_1 + 0x108),&local_78);
uVar7 = FUN_14019c8b0(uVar10);
iVar6 = FUN_1401b8b00(uVar4,uVar7,*(undefined4 *)(param_3 + 8),&local_88,CONCAT44(uVar14,uVar5),
uVar13,&local_e8,&local_res10);
if (iVar6 == 0) {
local_c8 = 0;
local_c0 = 0;
local_b8 = 0;
local_d0 = Proud::CReceivedMessageList::vftable;
local_b0 = 1000;
local_ac = 1;
local_a8 = Proud::AddrPort::vftable;
local_a0 = local_d8;
local_9c = local_d4;
uVar10 = uVar11;
if (*(int *)(local_e8 + 0x40) != 0) {
uVar10 = *(ulonglong *)(local_e8 + 0x38);
}
FUN_1401d5dd0(*(undefined8 *)(param_1 + 0x108),uVar10,*(int *)(local_e8 + 0x40),&local_a8,
&local_d0,local_res8);
while (iVar6 = (int)uVar11, iVar6 != (int)local_b8) {
if ((iVar6 < 0) || ((int)local_b8 <= iVar6)) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
lVar8 = *(longlong *)(param_1 + 0x108);
uVar13 = FUN_1401ed6b0(lVar8 + 0x6e0,local_c0 + (longlong)iVar6 * 0x48,
*(undefined8 *)(lVar8 + 0x6f0),0);
if (*(undefined8 **)(lVar8 + 0x6f0) == (undefined8 *)0x0) {
*(undefined8 *)(lVar8 + 0x6e8) = uVar13;
}
else {
**(undefined8 **)(lVar8 + 0x6f0) = uVar13;
}
*(undefined8 *)(lVar8 + 0x6f0) = uVar13;
if ((int)local_b8 <= iVar6) {
/* WARNING: Subroutine does not return */
FUN_14016d6e0();
}
uVar11 = (ulonglong)(iVar6 + 1);
}
if ((*(longlong *)(param_2 + 0x120) != 0) ||
(lVar8 = FUN_1401c71d0(*(undefined8 *)(param_1 + 0x108)), param_2 == lVar8)) {
FUN_1401f1e50(param_1,param_2);
}
FUN_1401a7fe0(&local_d0);
}
else if (iVar6 == 2) {
puVar12 = local_res10;
if (local_res10 == (undefined *)0x0) {
puVar12 = PTR_DAT_1403440a0;
}
local_98 = Proud::AddrPort::vftable;
local_90 = *(undefined4 *)(param_3 + 0x30);
local_8c = *(undefined2 *)(param_3 + 0x34);
puVar9 = (undefined8 *)(*(longlong *)(param_1 + 0x108) + 0x88);
(**(code **)*puVar9)(puVar9,&local_98,puVar12);
}
puVar12 = local_res10;
if (((local_res10 != (undefined *)0x0) && (local_res10 != PTR_DAT_1403440a0)) &&
(puVar1 = local_res10 + -8, puVar1 != (undefined *)0x0)) {
uVar13 = FUN_14016d8c0();
local_68 = uVar13;
FUN_14016db50(uVar13);
local_60 = 1;
piVar2 = (int *)(puVar12 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar1);
}
FUN_14016dbe0(uVar13);
}
local_res10 = PTR_DAT_1403440a0;
if (local_e8 != 0) {
FUN_1401a4a90();
}
}
FUN_1401fdf10(param_2);
return;
}