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

224 lines
7.7 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401fc690 FUN_1401fc690
* Pseudocode, not original source. */
void FUN_1401fc690(longlong param_1,char param_2,int param_3)
{
int *piVar1;
double dVar2;
int iVar3;
undefined8 uVar4;
undefined8 *puVar5;
longlong *plVar6;
longlong *plVar7;
longlong lVar8;
longlong lVar9;
longlong lVar10;
undefined *puVar11;
undefined *puVar12;
undefined *puVar13;
int iVar14;
bool bVar15;
double dVar16;
double dVar17;
double dVar18;
undefined1 local_res8 [8];
int local_res18 [2];
undefined *local_res20;
undefined8 in_stack_fffffffffffffeb8;
undefined4 uVar19;
undefined *local_e8;
undefined *local_e0;
undefined *local_d8;
undefined *local_d0;
undefined8 local_c8;
undefined8 local_c0;
undefined8 local_b8;
undefined1 local_b0;
undefined8 local_a8;
undefined1 local_a0;
undefined8 local_98;
undefined1 local_90;
undefined8 local_88;
undefined1 local_80;
undefined8 local_78;
undefined1 local_70;
undefined1 local_68 [48];
uVar19 = (undefined4)((ulonglong)in_stack_fffffffffffffeb8 >> 0x20);
local_c0 = 0xfffffffffffffffe;
if (*(char *)(param_1 + 0x608) == '\0') {
local_res18[0] = param_3;
if (((param_2 != '\0') && (param_3 != 0x1d)) &&
((lVar8 = *(longlong *)(param_1 + 0x670), *(char *)(lVar8 + 0x1790) != '\0' ||
(*(int *)(lVar8 + 0x6c8) != 0)))) {
local_res8[0] = 0;
(**(code **)(*(longlong *)(lVar8 + 0x70) + 0x158))((longlong *)(lVar8 + 0x70),local_res8);
bVar15 = *(int *)(param_1 + 0x588) != *(int *)(param_1 + 0x578);
FUN_1401d37e0(*(undefined8 *)(param_1 + 0x670),&local_e0);
dVar16 = (double)(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))()
;
dVar18 = *(double *)(param_1 + 0x610);
if ((*(longlong **)(param_1 + 0x18) == (longlong *)0x0) ||
(lVar8 = **(longlong **)(param_1 + 0x18), lVar8 == 0)) {
lVar8 = 0;
}
else {
lVar8 = lVar8 + -0x40;
}
dVar17 = (double)(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))()
;
dVar2 = *(double *)(lVar8 + 0x180);
iVar14 = 1;
if (!bVar15) {
iVar14 = 2;
}
plVar7 = (longlong *)(*(longlong *)(param_1 + 0x670) + 0x70);
plVar7 = (longlong *)(**(code **)(*plVar7 + 0xb0))(plVar7,&local_d8);
puVar11 = (undefined *)*plVar7;
if (puVar11 == (undefined *)0x0) {
iVar3 = 0;
}
else if (puVar11 == PTR_DAT_1403440a0) {
iVar3 = 0;
}
else {
iVar3 = *(int *)(puVar11 + -8);
}
if (((local_d8 != (undefined *)0x0) && (local_d8 != PTR_DAT_1403440a0)) &&
(local_d8 + -8 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_78 = uVar4;
FUN_14016db50(uVar4);
local_70 = 1;
piVar1 = (int *)(local_d8 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(local_d8 + -8);
}
FUN_14016dbe0(uVar4);
}
if (iVar3 != 0) {
iVar14 = iVar14 + 1;
}
FUN_14016d8c0();
local_e8 = PTR_DAT_1403440a0;
puVar5 = (undefined8 *)FUN_1401c72e0(*(undefined8 *)(param_1 + 0x670),local_68);
plVar7 = (longlong *)FUN_14016f6b0(&local_d0);
plVar6 = (longlong *)(**(code **)*puVar5)(puVar5);
puVar11 = (undefined *)*plVar7;
if ((undefined *)*plVar7 == (undefined *)0x0) {
puVar11 = PTR_DAT_1403440a0;
}
puVar12 = local_e0;
if (local_e0 == (undefined *)0x0) {
puVar12 = PTR_DAT_1403440a0;
}
puVar13 = (undefined *)*plVar6;
if ((undefined *)*plVar6 == (undefined *)0x0) {
puVar13 = PTR_DAT_1403440a0;
}
lVar8 = *(longlong *)(*(longlong *)(param_1 + 0x670) + 0x5d8);
lVar10 = 0;
if (lVar8 != 0) {
lVar10 = *(longlong *)(lVar8 + 0x38);
}
lVar8 = *(longlong *)(*(longlong *)(param_1 + 0x670) + 0x5d8);
if (lVar8 == 0) {
lVar9 = 0;
lVar8 = 0;
}
else {
lVar9 = *(longlong *)(lVar8 + 0x38);
lVar8 = *(longlong *)(lVar8 + 0x38);
}
FUN_14004c020(&local_e8,
L"(first chance) to-peer client %d UDP punch lost##Reason:%d##CliInstCount=%d##RecentElapTime=%3.3f##DisconnedCount=%d##recv count=%d##last ok recv interval=%3.3f##Recurred:%d##LocalIP:%s##Remote peer behind NAT:%d##UDP kept time:%3.3f##Time diff since last RecvIssue:%3.3f##%s##Process=%s"
,*(undefined4 *)(param_1 + 0x56c),local_res18[0],
CONCAT44(uVar19,*(undefined4 *)(lVar8 + 0x2a8)),*(undefined8 *)(lVar9 + 0x180),
*(undefined4 *)(lVar10 + 0x288),*(undefined4 *)(param_1 + 0x100),
*(undefined8 *)(param_1 + 0x140),*(undefined4 *)(param_1 + 0x61c),puVar13,bVar15
,dVar16 - dVar18,dVar17 - dVar2,puVar12,puVar11);
if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_1403440a0)) &&
(local_res20 + -8 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_98 = uVar4;
FUN_14016db50(uVar4);
local_90 = 1;
piVar1 = (int *)(local_res20 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(local_res20 + -8);
}
FUN_14016dbe0(uVar4);
}
local_res20 = PTR_DAT_1403440a0;
if (((local_d0 != (undefined *)0x0) && (local_d0 != PTR_DAT_1403440a0)) &&
(local_d0 + -8 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_b8 = uVar4;
FUN_14016db50(uVar4);
local_b0 = 1;
piVar1 = (int *)(local_d0 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(local_d0 + -8);
}
FUN_14016dbe0(uVar4);
}
puVar11 = local_e8;
FUN_1401d51c0(*(undefined8 *)(param_1 + 0x670),iVar14,&DAT_1402b0a98,local_e8);
if (((puVar11 != (undefined *)0x0) && (puVar11 != PTR_DAT_1403440a0)) &&
(puVar11 + -8 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_a8 = uVar4;
FUN_14016db50(uVar4);
local_a0 = 1;
piVar1 = (int *)(puVar11 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(puVar11 + -8);
}
FUN_14016dbe0(uVar4);
}
if (((local_e0 != (undefined *)0x0) && (local_e0 != PTR_DAT_1403440a0)) &&
(local_e0 + -8 != (undefined *)0x0)) {
uVar4 = FUN_14016d8c0();
local_88 = uVar4;
FUN_14016db50(uVar4);
local_80 = 1;
piVar1 = (int *)(local_e0 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14016d970(local_e0 + -8);
}
FUN_14016dbe0(uVar4);
}
}
if (*(char *)(param_1 + 0x608) == '\0') {
*(undefined1 *)(param_1 + 0x618) = 1;
}
*(undefined1 *)(param_1 + 0x608) = 1;
if (*(longlong *)(param_1 + 0x640) != 0) {
*(undefined8 *)(*(longlong *)(param_1 + 0x640) + 0xd8) = 0;
}
if (param_2 != '\0') {
plVar7 = (longlong *)(*(longlong *)(param_1 + 0x670) + 0x1818);
(**(code **)(*plVar7 + 0x40))(plVar7,1,&DAT_14034c4b0,param_1 + 0x56c,local_res18);
}
local_c8 = 0;
FUN_1401d3e30(param_1 + 0x28,&local_c8);
if (local_res18[0] != 0x1d) {
FUN_1401e1850(*(undefined8 *)(param_1 + 0x670),*(undefined4 *)(param_1 + 0x56c));
}
if (*(int *)(param_1 + 0x61c) < DAT_140344cb8) {
*(int *)(param_1 + 0x61c) = *(int *)(param_1 + 0x61c) + 1;
dVar18 = (double)(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x670) + 0x70) + 0x1c0))()
;
*(double *)(param_1 + 0x620) = dVar18 + DAT_14034c8b0;
}
}
return;
}