/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a50f0 FUN_1401a50f0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401a50f0(longlong param_1,undefined8 param_2,longlong param_3) { int *piVar1; undefined **ppuVar2; ulonglong uVar3; undefined **ppuVar4; char cVar5; int iVar6; undefined8 uVar7; undefined *puVar8; undefined8 uVar9; longlong *plVar10; longlong *plVar11; undefined *puVar12; bool bVar13; undefined1 auStack_da8 [32]; undefined *local_d88; undefined **local_d78; undefined4 local_d70; undefined2 local_d6c; undefined **local_d68; undefined4 local_d60; undefined2 local_d5c; undefined8 local_d58; undefined1 local_d50; undefined *local_d48; undefined *local_d40; undefined1 local_d38; undefined1 local_d30 [8]; undefined *local_d28; longlong local_d20; int local_d14; undefined8 local_d08; undefined8 local_d00; undefined1 local_cf8; undefined **local_ce8; undefined4 uStack_ce0; undefined2 uStack_cdc; undefined2 uStack_cda; undefined1 local_cd8 [3216]; ulonglong local_48; local_d08 = 0xfffffffffffffffe; local_48 = DAT_1403463c0 ^ (ulonglong)auStack_da8; FUN_1401b1b20(param_3 + 0xc0); local_d68 = Proud::AddrPort::vftable; local_d60 = 0; local_d5c = 0; local_d78 = Proud::AddrPort::vftable; local_d70 = 0; local_d6c = 0; local_ce8 = (undefined **)0x0; uStack_ce0 = 0; uStack_cdc = 0; uStack_cda = 0; cVar5 = FUN_14016b370(param_2,&local_ce8,0x10); if (cVar5 == '\0') { return; } cVar5 = FUN_14016bda0(param_2,&local_d68); if (cVar5 != '\0') { cVar5 = FUN_14016bda0(param_2,&local_d78); if (cVar5 == '\0') { return; } uVar7 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_d00 = uVar7; FUN_14016db50(uVar7); local_cf8 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_NotifyHolepunchSuccess"); } bVar13 = *(undefined ***)(param_3 + 0x728) < local_ce8; if ((*(undefined ***)(param_3 + 0x728) == local_ce8) && (uVar3 = CONCAT26(uStack_cda,CONCAT24(uStack_cdc,uStack_ce0)), bVar13 = *(ulonglong *)(param_3 + 0x730) < uVar3, *(ulonglong *)(param_3 + 0x730) == uVar3)) { iVar6 = 0; } else { iVar6 = (1 - (uint)bVar13) - (uint)(bVar13 != 0); } if ((iVar6 == 0) && (*(char *)(param_3 + 0x700) == '\0')) { *(undefined1 *)(param_3 + 0x700) = 1; uVar9 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); *(undefined8 *)(param_3 + 0x198) = uVar9; uVar9 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); *(undefined8 *)(param_3 + 0x1b8) = uVar9; local_ce8 = Proud::AddrPort::vftable; uStack_ce0 = local_d70; uStack_cdc = local_d6c; FUN_1401bc0e0(param_3 + 0x700,&local_ce8); *(undefined4 *)(param_3 + 0x720) = local_d60; *(undefined2 *)(param_3 + 0x724) = local_d5c; FUN_140181450(*(undefined8 *)(param_1 + 0x148),param_3); FUN_14016b440(local_d30); FUN_14016abe0(local_d30); FUN_14016b5a0(local_d30,0x800); FUN_14016b5a0(local_d30,0); FUN_14004eef0(local_d30,0xf); local_ce8 = *(undefined ***)(param_3 + 0x728); uStack_ce0 = *(undefined4 *)(param_3 + 0x730); uStack_cdc = (undefined2)*(undefined4 *)(param_3 + 0x734); uStack_cda = (undefined2)((uint)*(undefined4 *)(param_3 + 0x734) >> 0x10); FUN_140153d20(local_d30,&local_ce8); puVar8 = (undefined *)(**(code **)(*(longlong *)(param_3 + 0x108) + 0x10))(); local_d40 = puVar8; FUN_14016db50(puVar8); local_d38 = 1; uVar9 = FUN_14016e080(local_cd8,local_d30); local_ce8 = (undefined **)0x0; uStack_ce0 = CONCAT31(uStack_ce0._1_3_,1); FUN_1401ba860(*(undefined8 *)(param_3 + 0x748),uVar9,&local_ce8); FUN_14016ddc0(local_cd8); FUN_14016dbe0(puVar8); if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14016d8c0(); local_d40 = PTR_DAT_1403440a0; plVar10 = (longlong *)FUN_1401705d0(&local_d78,&local_ce8); plVar11 = (longlong *)FUN_1401705d0(&local_d68,&local_d48); local_d88 = (undefined *)*plVar10; if ((undefined *)*plVar10 == (undefined *)0x0) { local_d88 = PTR_DAT_1403440a0; } puVar8 = (undefined *)*plVar11; if ((undefined *)*plVar11 == (undefined *)0x0) { puVar8 = PTR_DAT_1403440a0; } FUN_14004c020(&local_d40,&DAT_140281cd0,*(undefined4 *)(param_3 + 0x6f8),puVar8); if (((local_d48 != (undefined *)0x0) && (local_d48 != PTR_DAT_1403440a0)) && (local_d48 + -8 != (undefined *)0x0)) { uVar9 = FUN_14016d8c0(); local_d58 = uVar9; FUN_14016db50(uVar9); local_d50 = 1; piVar1 = (int *)(local_d48 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_d48 + -8); } FUN_14016dbe0(uVar9); } ppuVar4 = local_ce8; local_d48 = PTR_DAT_1403440a0; if (((local_ce8 != (undefined **)0x0) && (local_ce8 != (undefined **)PTR_DAT_1403440a0)) && (ppuVar2 = local_ce8 + -1, ppuVar2 != (undefined **)0x0)) { uVar9 = FUN_14016d8c0(); local_d58 = uVar9; FUN_14016db50(uVar9); local_d50 = 1; piVar1 = (int *)((longlong)ppuVar4 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(ppuVar2); } FUN_14016dbe0(uVar9); } puVar8 = local_d40; puVar12 = local_d40; if (local_d40 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),1,puVar12); if (((puVar8 != (undefined *)0x0) && (puVar8 != PTR_DAT_1403440a0)) && (puVar8 + -8 != (undefined *)0x0)) { uVar9 = FUN_14016d8c0(); local_d58 = uVar9; FUN_14016db50(uVar9); local_d50 = 1; piVar1 = (int *)(puVar8 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar8 + -8); } FUN_14016dbe0(uVar9); } } local_ce8 = &local_d28; FUN_14016d0e0(&local_d28); if ((local_d20 != 0) && (local_d14 < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } FUN_14016dbe0(uVar7); return; } return; }