/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400e1930 FUN_1400e1930 * 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_1400e1930(longlong param_1,uint *param_2,undefined8 param_3,longlong param_4) { longlong *plVar1; int *piVar2; int iVar3; undefined8 uVar4; ulonglong uVar5; longlong lVar6; undefined8 *puVar7; longlong lVar8; longlong *plVar9; int *piVar10; undefined1 *puVar11; SIZE_T SVar12; wchar_t *pwVar13; bool bVar14; undefined1 auStack_19c8 [32]; undefined **local_19a8; undefined4 local_19a0; undefined2 local_199c; int local_1998 [2]; longlong local_1990; longlong local_1988; int local_197c; int *local_1970; undefined1 local_1968; undefined8 local_1960; longlong *local_1958; longlong *plStack_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 = 0x1400e1946; local_1960 = 0xfffffffffffffffe; local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_19c8; local_19a8 = Proud::AddrPort::vftable; lVar8 = 0; local_19a0 = 0; local_199c = 0; local_1958 = (longlong *)0x0; plStack_1950 = (longlong *)0x0; uVar4 = FUN_1400bc930(param_2,&local_1958,0x10); if (((char)uVar4 != '\0') && (uVar5 = FUN_1400bd360(param_2,(longlong)&local_19a8), (char)uVar5 != '\0')) { SVar12 = *(SIZE_T *)(param_1 + 0x108); lVar6 = lVar8; if (*(longlong **)(SVar12 + 0x1570) != (longlong *)0x0) { lVar6 = **(longlong **)(SVar12 + 0x1570); } bVar14 = local_1958 < *(longlong **)(lVar6 + 8); iVar3 = 0; plVar9 = local_1958; if ((local_1958 != *(longlong **)(lVar6 + 8)) || (bVar14 = plStack_1950 < *(longlong **)(lVar6 + 0x10), plVar9 = plStack_1950, plStack_1950 != *(longlong **)(lVar6 + 0x10))) { iVar3 = (1 - (uint)bVar14) - (uint)(bVar14 != 0); } if (iVar3 == 0) { lVar6 = lVar8; if (*(longlong **)(SVar12 + 0x1570) != (longlong *)0x0) { lVar6 = **(longlong **)(SVar12 + 0x1570); } if ((*(uint *)(lVar6 + 0xd0) == param_2[0xe]) && (*(short *)(lVar6 + 0xd4) == (short)param_2[0xf])) { FUN_1400bca00(local_1998); FUN_1400bc4d0((longlong)local_1998,plVar9,SVar12,param_4); FUN_1400bcb60(local_1998,0x800,SVar12,param_4); uVar4 = 0; FUN_1400bcb60(local_1998,0,SVar12,param_4); FUN_140054a10((longlong)local_1998,CONCAT71((int7)((ulonglong)uVar4 >> 8),0xe),SVar12, param_4); plVar9 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x1570); if (plVar9 != (longlong *)0x0) { lVar8 = *plVar9; } local_1958 = *(longlong **)(lVar8 + 8); plStack_1950 = *(longlong **)(lVar8 + 0x10); FUN_14005c0c0((longlong)local_1998,&local_1958,SVar12,param_4); puVar7 = FUN_1400a1000(*(longlong *)(param_1 + 0x108),&local_1970); FUN_1400bd600((longlong)local_1998,(longlong)puVar7,SVar12,param_4); FUN_1400bd600((longlong)local_1998,(longlong)&local_19a8,SVar12,param_4); local_cbc = 200; local_cc0 = 0; local_cc8 = local_1948; FUN_14007db50((longlong)local_cb8,(longlong)local_1998,SVar12); puVar11 = local_cb8; FUN_14007cb60((longlong)local_1948,(longlong)puVar11,SVar12,param_4); FUN_14007ca50((longlong)local_cb8,puVar11,SVar12,param_4); lVar8 = FUN_1400a0ef0(*(longlong *)(param_1 + 0x108)); *(undefined4 *)(lVar8 + 0x140) = local_19a0; *(undefined2 *)(lVar8 + 0x144) = local_199c; local_1958 = (longlong *)0x0; plStack_1950 = (longlong *)CONCAT71(plStack_1950._1_7_,1); lVar8 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); pwVar13 = (wchar_t *)&local_1958; puVar11 = local_1948; FUN_1400ef790(lVar8,(longlong)puVar11,(SIZE_T *)pwVar13,param_4); if ((*(char *)(*(longlong *)(param_1 + 0x108) + 0x1790) != '\0') || (*(int *)(*(longlong *)(param_1 + 0x108) + 0x6c8) != 0)) { plVar9 = FUN_140070660((longlong)&local_19a8,(longlong *)&local_1958,pwVar13,param_4); param_4 = *plVar9; pwVar13 = L"Message_ServerHolepunchAck. AddrOfHereAtServer=%s"; puVar11 = (undefined1 *)0x1; lVar8 = *(longlong *)(param_1 + 0x108); FUN_1400af0e0(lVar8,1,L"Message_ServerHolepunchAck. AddrOfHereAtServer=%s",param_4); plVar9 = local_1958; if ((local_1958 != (longlong *)0x0) && ((local_1958 != (longlong *)PTR_DAT_1401ac010 && (plVar1 = local_1958 + -1, plVar1 != (longlong *)0x0)))) { piVar10 = (int *)FUN_14006cb70(lVar8,puVar11,pwVar13,param_4); local_1970 = piVar10; FUN_14006b350(piVar10); local_1968 = 1; piVar2 = (int *)((longlong)plVar9 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar10); } } FUN_14007ca50((longlong)local_1948,puVar11,pwVar13,param_4); local_1958 = &local_1990; FUN_1400d1800(&local_1990); if ((local_1988 != 0) && (local_197c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } } } return; }