/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401fa820 FUN_1401fa820 * Pseudocode, not original source. */ /* WARNING: Function: __chkstk replaced with injection: alloca_probe */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401fa820(longlong *param_1,longlong param_2,ulonglong *param_3,longlong param_4) { undefined *puVar1; int *piVar2; longlong lVar3; int iVar4; longlong lVar5; undefined8 uVar6; longlong *plVar7; short sVar8; undefined *puVar9; bool bVar10; undefined1 auStack_19b8 [32]; undefined *local_1998; undefined1 local_1990; undefined1 local_1988 [8]; undefined1 local_1980 [8]; longlong local_1978; int local_196c; undefined8 local_1960; undefined1 local_1958; undefined8 local_1950; undefined1 local_1948 [3200]; undefined1 *local_cc8; undefined4 local_cc0; undefined4 local_cbc; undefined1 local_cb8 [3216]; ulonglong local_28; undefined8 uStack_20; uStack_20 = 0x1401fa836; local_1950 = 0xfffffffffffffffe; local_28 = DAT_1403463c0 ^ (ulonglong)auStack_19b8; lVar3 = param_1[2]; if ((lVar3 != 0) && (*(int *)(lVar3 + 8) == 0)) { bVar10 = *param_3 < *(ulonglong *)(lVar3 + 0x1c); if ((*param_3 == *(ulonglong *)(lVar3 + 0x1c)) && (bVar10 = param_3[1] < *(ulonglong *)(lVar3 + 0x24), param_3[1] == *(ulonglong *)(lVar3 + 0x24))) { iVar4 = 0; } else { iVar4 = (1 - (uint)bVar10) - (uint)(bVar10 != 0); } if ((iVar4 == 0) && (*(int *)(lVar3 + 0x18) < 1)) { plVar7 = *(longlong **)(*(longlong *)(*param_1 + 0x670) + 0x1570); sVar8 = DAT_140344454; iVar4 = DAT_140344450; if ((plVar7 != (longlong *)0x0) && (*plVar7 != 0)) { lVar5 = 0; if (plVar7 != (longlong *)0x0) { lVar5 = *plVar7; } sVar8 = *(short *)(lVar5 + 0xd4); iVar4 = *(int *)(lVar5 + 0xd0); } if ((((iVar4 == *(int *)(param_2 + 0x38)) && (sVar8 == *(short *)(param_2 + 0x3c))) && (plVar7 = *(longlong **)(*param_1 + 0x18), plVar7 != (longlong *)0x0)) && (*plVar7 != 0)) { FUN_14016b440(local_1988); FUN_14016abe0(local_1988); FUN_14016b5a0(local_1988,0x800); FUN_14016b5a0(local_1988,0); FUN_14004eef0(local_1988,0x12); if ((*(longlong **)(*param_1 + 0x18) == (longlong *)0x0) || (lVar5 = **(longlong **)(*param_1 + 0x18), lVar5 == 0)) { lVar5 = 0; } else { lVar5 = lVar5 + -0x40; } FUN_14016c2f0(local_1988,lVar5 + 0x128); FUN_14016c2f0(local_1988,param_4); FUN_140153c40(local_1988,*(undefined4 *)(*param_1 + 0x56c)); local_cbc = 200; local_cc0 = 0; local_cc8 = local_1948; FUN_14016e080(local_cb8,local_1988); FUN_14016ded0(local_1948,local_cb8); FUN_14016ddc0(); if ((*(longlong **)(*param_1 + 0x18) == (longlong *)0x0) || (lVar5 = **(longlong **)(*param_1 + 0x18), lVar5 == 0)) { lVar5 = 0; } else { lVar5 = lVar5 + -0x40; } *(undefined4 *)(lVar5 + 0x140) = *(undefined4 *)(param_4 + 8); *(undefined2 *)(lVar5 + 0x144) = *(undefined2 *)(param_4 + 0xc); local_1998 = (undefined *)0x0; local_1990 = 1; uVar6 = FUN_1401c71f0(*(undefined8 *)(*param_1 + 0x670)); FUN_1401f9d30(uVar6,local_1948,&local_1998); if ((*(char *)(*(longlong *)(*param_1 + 0x670) + 0x1790) != '\0') || (*(int *)(*(longlong *)(*param_1 + 0x670) + 0x6c8) != 0)) { plVar7 = (longlong *)FUN_1401705d0(param_4,&local_1998); puVar9 = (undefined *)*plVar7; if ((undefined *)*plVar7 == (undefined *)0x0) { puVar9 = PTR_DAT_1403440a0; } FUN_1401d4c70(*(undefined8 *)(*param_1 + 0x670),1, L"Message_PeerUdp_ServerHolepunchAck. AddrOfHereAtServer=%s",puVar9); puVar9 = local_1998; if (((local_1998 != (undefined *)0x0) && (local_1998 != PTR_DAT_1403440a0)) && (puVar1 = local_1998 + -8, puVar1 != (undefined *)0x0)) { uVar6 = FUN_14016d8c0(); local_1960 = uVar6; FUN_14016db50(uVar6); local_1958 = 1; piVar2 = (int *)(puVar9 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar1); } FUN_14016dbe0(uVar6); } } *(int *)(lVar3 + 0x18) = *(int *)(lVar3 + 0x18) + 1; FUN_14016ddc0(local_1948); local_1998 = local_1980; FUN_14016d0e0(local_1980); if ((local_1978 != 0) && (local_196c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } } } return; }