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