/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400b0ab0 FUN_1400b0ab0 * Pseudocode, not original source. */ void FUN_1400b0ab0(longlong *param_1,undefined8 param_2,SIZE_T param_3,undefined8 param_4) { int iVar1; double dVar2; undefined1 uVar3; ushort uVar4; undefined **ppuVar5; int *piVar6; undefined8 *puVar7; longlong *plVar8; longlong lVar9; undefined8 uVar10; longlong lVar11; wchar_t *pwVar12; longlong *plVar13; longlong *local_res8; undefined **local_88; undefined8 uStack_80; undefined4 local_78 [2]; undefined8 local_70; undefined1 local_68; undefined4 local_64; undefined1 local_60; undefined1 local_5f; int local_58 [2]; longlong local_50; longlong local_48; int local_40; int local_3c; FUN_1400bca00(local_58); FUN_1400bc4d0((longlong)local_58,param_2,param_3,param_4); FUN_1400bcb60(local_58,0x800,param_3,param_4); uVar10 = 0; FUN_1400bcb60(local_58,0,param_3,param_4); uVar10 = CONCAT71((int7)((ulonglong)uVar10 >> 8),0xc); piVar6 = local_58; FUN_140054a10((longlong)piVar6,uVar10,param_3,param_4); lVar11 = 0; lVar9 = lVar11; if ((longlong *)param_1[0x2ae] != (longlong *)0x0) { lVar9 = *(longlong *)param_1[0x2ae]; } local_88 = *(undefined ***)(lVar9 + 8); uStack_80 = *(undefined8 *)(lVar9 + 0x10); local_58[1] = 0; if (local_50 == 0) { if (local_48 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(piVar6,uVar10,param_3,param_4); } } else if (local_48 == 0) { if (local_50 == 0) { /* WARNING: Subroutine does not return */ FUN_1400d1900(piVar6,uVar10,param_3,param_4); } iVar1 = *(int *)(local_50 + 0x18); FUN_1400146f0(local_50,iVar1 + 0x10,param_3); lVar9 = lVar11; if (*(int *)(local_50 + 0x18) != 0) { lVar9 = *(longlong *)(local_50 + 0x10); } puVar7 = (undefined8 *)(lVar9 + iVar1); goto LAB_1400b0b98; } lVar9 = (longlong)local_40; local_40 = local_40 + 0x10; if ((local_40 < 0) || (local_3c < local_40)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } puVar7 = (undefined8 *)(local_48 + lVar9); LAB_1400b0b98: *puVar7 = local_88; puVar7[1] = uStack_80; FUN_140014820((longlong)local_58,&local_88,param_3,param_4); if (((char)param_1[0x2f2] != '\0') || ((int)param_1[0xd9] != 0)) { lVar9 = lVar11; if ((longlong *)param_1[0x2ae] != (longlong *)0x0) { lVar9 = *(longlong *)param_1[0x2ae]; } (*(code *)**(undefined8 **)(lVar9 + 200))((undefined8 *)(lVar9 + 200),&local_res8); pwVar12 = L"Sending ServerHolepunch: %s"; uVar10 = 1; plVar8 = param_1; plVar13 = local_res8; FUN_1400af0e0((longlong)param_1,1,L"Sending ServerHolepunch: %s",local_res8); if (((local_res8 != (longlong *)0x0) && (local_res8 != (longlong *)PTR_DAT_1401ac010)) && (local_res8 + -1 != (longlong *)0x0)) { ppuVar5 = (undefined **)FUN_14006cb70(plVar8,uVar10,pwVar12,plVar13); local_88 = ppuVar5; FUN_14006b350((int *)ppuVar5); uStack_80 = CONCAT71(uStack_80._1_7_,1); piVar6 = (int *)((longlong)local_res8 + -4); *piVar6 = *piVar6 + -1; if (*piVar6 == 0) { FUN_14006cc60(local_res8 + -1); } FUN_14006b3e0((longlong)ppuVar5); } } local_78[0] = 5; local_70 = 0; local_68 = 1; local_64 = 0xffffffff; local_60 = 1; local_5f = DAT_1401ac1cc; lVar9 = lVar11; if ((longlong *)param_1[0x2ae] != (longlong *)0x0) { lVar9 = *(longlong *)param_1[0x2ae]; } local_88 = Proud::AddrPort::vftable; uStack_80 = CONCAT26(uStack_80._6_2_,*(undefined6 *)(lVar9 + 0xd0)); if (((longlong *)param_1[0x2a4] != (longlong *)0x0) && (lVar9 = *(longlong *)param_1[0x2a4], lVar9 != 0)) { lVar11 = lVar9 + -0x40; } dVar2 = (double)(**(code **)(param_1[0xe] + 0x1c0))(); uVar3 = (**(code **)(*param_1 + 0x30))(param_1); uVar4 = FUN_1400d3400(uVar3,1); FUN_1400f3e80(lVar11,1,(ulonglong)uVar4,(longlong)&local_88,(longlong)local_58,dVar2, (undefined8 *)local_78); local_res8 = &local_50; FUN_1400d1800(&local_50); if ((local_48 != 0) && (local_3c < 0)) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } return; }