/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400f0270 FUN_1400f0270 * 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_1400f0270(SIZE_T *param_1,undefined *param_2,ulonglong *param_3,longlong param_4) { longlong *plVar1; int *piVar2; SIZE_T SVar3; uint uVar4; int iVar5; longlong lVar6; longlong *plVar7; int *piVar8; short sVar9; ulonglong uVar10; undefined8 uVar11; undefined1 *puVar12; SIZE_T SVar13; wchar_t *pwVar14; bool bVar15; undefined1 auStack_19b8 [32]; longlong *local_1998; undefined1 local_1990; int local_1988 [2]; longlong local_1980; longlong local_1978; int local_196c; int *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 = 0x1400f0286; local_1950 = 0xfffffffffffffffe; local_28 = DAT_1401ac5a0 ^ (ulonglong)auStack_19b8; SVar3 = param_1[2]; if ((SVar3 != 0) && (*(int *)(SVar3 + 8) == 0)) { bVar15 = *param_3 < *(ulonglong *)(SVar3 + 0x1c); if ((*param_3 == *(ulonglong *)(SVar3 + 0x1c)) && (bVar15 = param_3[1] < *(ulonglong *)(SVar3 + 0x24), param_3[1] == *(ulonglong *)(SVar3 + 0x24))) { iVar5 = 0; } else { iVar5 = (1 - (uint)bVar15) - (uint)(bVar15 != 0); } if ((iVar5 == 0) && (*(int *)(SVar3 + 0x18) < 1)) { SVar13 = *param_1; plVar7 = *(longlong **)(*(longlong *)(SVar13 + 0x670) + 0x1570); sVar9 = DAT_1401ac3d4; uVar4 = DAT_1401ac3d0; if ((plVar7 != (longlong *)0x0) && (*plVar7 != 0)) { lVar6 = 0; if (plVar7 != (longlong *)0x0) { lVar6 = *plVar7; } sVar9 = *(short *)(lVar6 + 0xd4); uVar4 = *(uint *)(lVar6 + 0xd0); } uVar10 = (ulonglong)uVar4; if ((((uVar4 == *(uint *)(param_2 + 0x38)) && (sVar9 == *(short *)(param_2 + 0x3c))) && (*(longlong **)(SVar13 + 0x18) != (longlong *)0x0)) && (**(longlong **)(SVar13 + 0x18) != 0)) { FUN_1400bca00(local_1988); FUN_1400bc4d0((longlong)local_1988,uVar10,SVar13,param_2); FUN_1400bcb60(local_1988,0x800,SVar13,param_2); uVar11 = 0; FUN_1400bcb60(local_1988,0,SVar13,param_2); FUN_140054a10((longlong)local_1988,CONCAT71((int7)((ulonglong)uVar11 >> 8),0x12),SVar13, param_2); if ((*(longlong **)(*param_1 + 0x18) == (longlong *)0x0) || (lVar6 = **(longlong **)(*param_1 + 0x18), lVar6 == 0)) { lVar6 = 0; } else { lVar6 = lVar6 + -0x40; } FUN_1400bd600((longlong)local_1988,lVar6 + 0x128,SVar13,param_2); FUN_1400bd600((longlong)local_1988,param_4,SVar13,param_2); FUN_140014500((longlong)local_1988,(ulonglong)*(uint *)(*param_1 + 0x56c),SVar13,param_2); local_cbc = 200; local_cc0 = 0; local_cc8 = local_1948; FUN_14007db50((longlong)local_cb8,(longlong)local_1988,SVar13); puVar12 = local_cb8; FUN_14007cb60((longlong)local_1948,(longlong)puVar12,SVar13,param_2); FUN_14007ca50((longlong)local_cb8,puVar12,SVar13,param_2); if ((*(longlong **)(*param_1 + 0x18) == (longlong *)0x0) || (lVar6 = **(longlong **)(*param_1 + 0x18), lVar6 == 0)) { lVar6 = 0; } else { lVar6 = lVar6 + -0x40; } *(undefined4 *)(lVar6 + 0x140) = *(undefined4 *)(param_4 + 8); *(undefined2 *)(lVar6 + 0x144) = *(undefined2 *)(param_4 + 0xc); local_1998 = (longlong *)0x0; local_1990 = 1; lVar6 = FUN_1400a0f10(*(longlong *)(*param_1 + 0x670)); pwVar14 = (wchar_t *)&local_1998; puVar12 = local_1948; FUN_1400ef790(lVar6,(longlong)puVar12,(SIZE_T *)pwVar14,param_2); if ((*(char *)(*(longlong *)(*param_1 + 0x670) + 0x1790) != '\0') || (*(int *)(*(longlong *)(*param_1 + 0x670) + 0x6c8) != 0)) { plVar7 = FUN_140070660(param_4,(longlong *)&local_1998,pwVar14,param_2); param_2 = (undefined *)*plVar7; if (param_2 == (undefined *)0x0) { param_2 = PTR_DAT_1401ac010; } pwVar14 = L"Message_PeerUdp_ServerHolepunchAck. AddrOfHereAtServer=%s"; puVar12 = (undefined1 *)0x1; lVar6 = *(longlong *)(*param_1 + 0x670); FUN_1400af0e0(lVar6,1,L"Message_PeerUdp_ServerHolepunchAck. AddrOfHereAtServer=%s",param_2 ); plVar7 = local_1998; if (((local_1998 != (longlong *)0x0) && (local_1998 != (longlong *)PTR_DAT_1401ac010)) && (plVar1 = local_1998 + -1, plVar1 != (longlong *)0x0)) { piVar8 = (int *)FUN_14006cb70(lVar6,puVar12,pwVar14,param_2); local_1960 = piVar8; FUN_14006b350(piVar8); local_1958 = 1; piVar2 = (int *)((longlong)plVar7 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(plVar1); } FUN_14006b3e0((longlong)piVar8); } } *(int *)(SVar3 + 0x18) = *(int *)(SVar3 + 0x18) + 1; FUN_14007ca50((longlong)local_1948,puVar12,pwVar14,param_2); local_1998 = &local_1980; FUN_1400d1800(&local_1980); if ((local_1978 != 0) && (local_196c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } } } } return; }