/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a5df0 FUN_1401a5df0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401a5df0(longlong param_1,undefined8 param_2,longlong param_3,longlong param_4) { undefined **ppuVar1; int *piVar2; undefined **ppuVar3; char cVar4; undefined2 uVar5; longlong lVar6; undefined8 uVar7; longlong *plVar8; undefined8 uVar9; undefined *puVar10; undefined *puVar11; undefined1 auStack_dc8 [32]; undefined4 *local_da8; undefined8 *local_da0; undefined4 local_d98 [2]; undefined *local_d90; undefined1 local_d88 [8]; longlong local_d80; longlong local_d78; undefined4 local_d70; int local_d6c; undefined8 local_d60; undefined8 local_d58; undefined1 local_d50; undefined4 local_d4c; undefined1 local_d48; undefined1 local_d47; undefined8 local_d40; undefined1 local_d38; undefined8 local_d30; undefined1 local_d28 [80]; undefined8 local_cd8; undefined8 uStack_cd0; undefined4 local_cc8; undefined4 uStack_cc4; undefined4 uStack_cc0; undefined4 uStack_cbc; undefined4 *local_48; undefined4 local_40; int local_3c; ulonglong local_38; local_d30 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_dc8; FUN_1401b1b20(param_4 + 0x40); local_cd8 = (undefined **)0x0; uStack_cd0 = 0; cVar4 = FUN_14016b370(param_2,&local_cd8); if ((cVar4 != '\0') && (cVar4 = FUN_14016be00(param_2,local_d98), cVar4 != '\0')) { FUN_14016b440(local_d88); FUN_14016abe0(local_d88); FUN_14016b5a0(local_d88,0x800); FUN_14016b5a0(local_d88,0); FUN_14004eef0(local_d88,0x11); FUN_140153d20(local_d88,&local_cd8); FUN_14016c2f0(local_d88,param_3); FUN_140153c40(local_d88,local_d98[0]); local_3c = 200; local_40 = 0; local_48 = &local_cc8; if (local_d80 == 0) { if (local_d78 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { local_d70 = *(undefined4 *)(local_d80 + 0x18); } lVar6 = local_d78; if (local_d78 == 0) { if (local_d80 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } lVar6 = 0; if (*(int *)(local_d80 + 0x18) != 0) { lVar6 = *(longlong *)(local_d80 + 0x10); } } local_40 = 1; local_cd8._0_4_ = (undefined4)lVar6; local_cd8._4_4_ = (undefined4)((ulonglong)lVar6 >> 0x20); local_cc8 = (undefined4)local_cd8; uStack_cc4 = local_cd8._4_4_; uStack_cbc = uStack_cd0._4_4_; local_d60 = CONCAT44(local_d60._4_4_,5); local_d58 = 0; local_d50 = 1; local_d4c = 0xffffffff; local_d48 = 1; local_d47 = DAT_140344dfc; local_cd8 = Proud::AddrPort::vftable; uStack_cd0 = CONCAT26(uStack_cd0._6_2_,*(undefined6 *)(param_3 + 8)); uStack_cc0 = local_d70; uVar5 = FUN_1401b5550(1); local_da0 = &local_d60; local_da8 = &local_cc8; FUN_1401baf20(param_4,0,uVar5,&local_cd8); if (local_48 == (undefined4 *)0x0) { FUN_14016d300(local_d28,PTR_u_ArrayWithExternalBuffer_is_unini_1403440d0); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d28,(ThrowInfo *)&DAT_1403417f8); } if (local_3c < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } uVar7 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_d40 = uVar7; FUN_14016db50(uVar7); local_d38 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_PeerUdp_ServerHolepunch"); } if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14016d8c0(); local_d90 = PTR_DAT_1403440a0; plVar8 = (longlong *)FUN_1401705d0(param_3,&local_cd8); puVar10 = (undefined *)*plVar8; if ((undefined *)*plVar8 == (undefined *)0x0) { puVar10 = PTR_DAT_1403440a0; } FUN_14004c020(&local_d90,L"MessageType_PeerUdp_ServerHolepunch from %s",puVar10); ppuVar3 = local_cd8; if (((local_cd8 != (undefined **)0x0) && (local_cd8 != (undefined **)PTR_DAT_1403440a0)) && (ppuVar1 = local_cd8 + -1, ppuVar1 != (undefined **)0x0)) { uVar9 = FUN_14016d8c0(); local_d60 = uVar9; FUN_14016db50(uVar9); local_d58 = CONCAT71(local_d58._1_7_,1); piVar2 = (int *)((longlong)ppuVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(ppuVar1); } FUN_14016dbe0(uVar9); } puVar10 = local_d90; puVar11 = local_d90; if (local_d90 == (undefined *)0x0) { puVar11 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),1,puVar11); if (((puVar10 != (undefined *)0x0) && (puVar10 != PTR_DAT_1403440a0)) && (puVar10 + -8 != (undefined *)0x0)) { uVar9 = FUN_14016d8c0(); local_d60 = uVar9; FUN_14016db50(uVar9); local_d58 = CONCAT71(local_d58._1_7_,1); piVar2 = (int *)(puVar10 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(puVar10 + -8); } FUN_14016dbe0(uVar9); } } FUN_14016dbe0(uVar7); local_cd8 = (undefined **)&local_d80; FUN_14016d0e0(&local_d80); if ((local_d78 != 0) && (local_d6c < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } } return; }