/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c3820 FUN_1400c3820 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400c3820(longlong param_1,uint *param_2,longlong param_3,longlong param_4) { undefined **ppuVar1; int *piVar2; short *psVar3; undefined **ppuVar4; ushort uVar5; undefined8 uVar6; int *piVar7; longlong *plVar8; int *piVar9; ulonglong *puVar10; short **ppsVar11; longlong lVar12; undefined ***pppuVar13; longlong lVar14; wchar_t *pwVar15; SIZE_T SVar16; ulonglong uVar17; undefined *puVar18; short *psVar19; undefined1 auStackY_db8 [32]; short *local_d88; int local_d80 [2]; undefined *local_d78; longlong local_d70; uint local_d68; int local_d64; int *local_d58; undefined8 local_d50; undefined1 local_d48; undefined4 local_d44; undefined1 local_d40; undefined1 local_d3f; int *local_d38; undefined1 local_d30; undefined8 local_d28; exception local_d20 [72]; undefined **local_cd8; undefined8 uStack_cd0; longlong local_cc8; undefined8 uStack_cc0; longlong *local_48; undefined4 local_40; int local_3c; ulonglong local_38; local_d28 = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_db8; lVar12 = param_4; FUN_1400cf890(); local_cd8 = (undefined **)0x0; uStack_cd0 = 0; SVar16 = 0x10; pppuVar13 = &local_cd8; uVar6 = FUN_1400bc930(param_2,pppuVar13,0x10); if ((char)uVar6 != '\0') { FUN_1400bca00(local_d80); FUN_1400bc4d0((longlong)local_d80,pppuVar13,SVar16,lVar12); FUN_1400bcb60(local_d80,0x800,SVar16,lVar12); uVar6 = 0; FUN_1400bcb60(local_d80,0,SVar16,lVar12); FUN_140054a10((longlong)local_d80,CONCAT71((int7)((ulonglong)uVar6 >> 8),0xd),SVar16,lVar12); FUN_14005c0c0((longlong)local_d80,&local_cd8,SVar16,lVar12); lVar14 = param_3; FUN_1400bd600((longlong)local_d80,param_3,SVar16,lVar12); uVar6 = uStack_cd0; local_3c = 200; local_40 = 0; local_48 = &local_cc8; if (local_d78 == (undefined *)0x0) { if (local_d70 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,lVar14,0,lVar12); } } else { local_d68 = *(uint *)(local_d78 + 0x18); } local_cc8 = local_d70; if (local_d70 == 0) { if (local_d78 == (undefined *)0x0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(0,(ulonglong)local_d68,0,lVar12); } local_cc8 = 0; if (*(int *)(local_d78 + 0x18) != 0) { local_cc8 = *(longlong *)(local_d78 + 0x10); } } uStack_cd0 = CONCAT44(uStack_cd0._4_4_,local_d68); local_40 = 1; uStack_cc0 = uStack_cd0; local_d58 = (int *)CONCAT44(local_d58._4_4_,5); local_d50 = 0; local_d48 = 1; local_d44 = 0xffffffff; local_d40 = 1; local_d3f = DAT_1401ac1cc; local_cd8 = Proud::AddrPort::vftable; uStack_cd0 = CONCAT26(SUB82(uVar6,6),*(undefined6 *)(param_3 + 8)); uVar5 = FUN_1400d3400(1,0); uVar17 = (ulonglong)uVar5; pppuVar13 = &local_cd8; pwVar15 = (wchar_t *)0x0; FUN_1400d8df0(param_4,0,uVar5,(longlong)pppuVar13,(longlong)&local_cc8,(uint *)&local_d58); if (local_48 == (longlong *)0x0) { FUN_14006ba50(local_d20,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,uVar17, pppuVar13); /* WARNING: Subroutine does not return */ _CxxThrowException(local_d20,(ThrowInfo *)&DAT_1401a93e8); } if (local_3c < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } piVar7 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_d38 = piVar7; FUN_14006b350(piVar7); local_d30 = 1; puVar10 = *(ulonglong **)(param_1 + 0x148); if (DAT_1401b42cf != '\0') { uVar17 = *puVar10; pwVar15 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_ServerHolepunch"; (**(code **)(uVar17 + 200))(); } if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14006cb70(puVar10,pwVar15,uVar17,pppuVar13); local_d88 = (short *)PTR_DAT_1401ac010; plVar8 = FUN_140070660(param_3,(longlong *)&local_cd8,uVar17,pppuVar13); puVar18 = (undefined *)*plVar8; if ((undefined *)*plVar8 == (undefined *)0x0) { puVar18 = PTR_DAT_1401ac010; } pwVar15 = L"MessageType_ServerHolepunch from %s"; ppsVar11 = &local_d88; FUN_140053d20((longlong *)ppsVar11,L"MessageType_ServerHolepunch from %s",puVar18,pppuVar13); ppuVar4 = local_cd8; if (((local_cd8 != (undefined **)0x0) && (local_cd8 != (undefined **)PTR_DAT_1401ac010)) && (ppuVar1 = local_cd8 + -1, ppuVar1 != (undefined **)0x0)) { piVar9 = (int *)FUN_14006cb70(ppsVar11,pwVar15,puVar18,pppuVar13); local_d58 = piVar9; FUN_14006b350(piVar9); local_d50 = CONCAT71(local_d50._1_7_,1); piVar2 = (int *)((longlong)ppuVar4 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(ppuVar1); } FUN_14006b3e0((longlong)piVar9); } psVar3 = local_d88; psVar19 = local_d88; if (local_d88 == (short *)0x0) { psVar19 = (short *)PTR_DAT_1401ac010; } uVar6 = 1; lVar12 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0); FUN_1400cb700(lVar12,1,psVar19,pppuVar13); if (((psVar3 != (short *)0x0) && (psVar3 != (short *)PTR_DAT_1401ac010)) && (psVar3 + -4 != (short *)0x0)) { piVar9 = (int *)FUN_14006cb70(lVar12,uVar6,psVar19,pppuVar13); local_d58 = piVar9; FUN_14006b350(piVar9); local_d50 = CONCAT71(local_d50._1_7_,1); piVar2 = (int *)(psVar3 + -2); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(psVar3 + -4); } FUN_14006b3e0((longlong)piVar9); } } FUN_14006b3e0((longlong)piVar7); local_cd8 = &local_d78; FUN_1400d1800((longlong *)&local_d78); if ((local_d70 != 0) && (local_d64 < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } return; }