/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400e5160 FUN_1400e5160 * Pseudocode, not original source. */ void FUN_1400e5160(longlong param_1,undefined8 param_2,undefined *param_3,undefined ***param_4) { undefined **ppuVar1; int *piVar2; ushort uVar3; undefined4 uVar4; uint uVar5; uint uVar6; int iVar7; uint uVar8; longlong lVar9; uint *puVar10; longlong *plVar11; int *piVar12; int iVar13; ulonglong uVar14; undefined **ppuVar15; undefined ***pppuVar16; ulonglong uVar17; uint uVar18; int iVar19; double dVar20; undefined8 uVar21; undefined **local_res8; undefined *local_res10; longlong local_res18; undefined **local_50; undefined8 local_48; undefined8 local_40; undefined8 local_38; undefined8 local_30; lVar9 = *(longlong *)(param_1 + 0x108); if ((*(char *)(lVar9 + 0x1790) != '\0') || (*(int *)(lVar9 + 0x6c8) != 0)) { param_3 = &DAT_140149788; param_2 = 0; FUN_1400af0e0(lVar9,0,L"클라이언트 NetWorker thread 시작",param_4); } lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); uVar17 = 0; iVar19 = 0; uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } uVar4 = FUN_140074040(uVar14,param_2,param_3,param_4); uVar8 = 0; if ((char)uVar4 != '\0') { lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); FUN_1400ef580(lVar9,param_2,param_3,param_4); dVar20 = FUN_140076f50((char *)(*(longlong *)(param_1 + 0x108) + 0x1620)); *(double *)(param_1 + 200) = dVar20; lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } FUN_1400716a0(uVar14); lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } FUN_1400716b0(uVar14,0); lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); uVar14 = uVar17; if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar14 = **(ulonglong **)(lVar9 + 0x128); } uVar21 = 0; FUN_1400717a0(uVar14,'\0'); local_res8 = &local_res10; lVar9 = *(longlong *)(param_1 + 0x108); FUN_14006cb70(uVar14,uVar21,param_3,param_4); local_res10 = PTR_DAT_1401ac010; FUN_140003110((longlong *)&local_res10,(longlong *)(lVar9 + 0x1588),param_3,param_4); lVar9 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108)); if (*(ulonglong **)(lVar9 + 0x128) != (ulonglong *)0x0) { uVar17 = **(ulonglong **)(lVar9 + 0x128); } uVar3 = *(ushort *)(*(longlong *)(param_1 + 0x108) + 0x1590); uVar14 = (ulonglong)uVar3; uVar8 = FUN_1400729c0(uVar17,(longlong *)&local_res10,uVar3,param_4); if ((uVar8 == 0) || (uVar8 == 0x2733)) { if (0 < *(int *)(param_1 + 0x100)) { return; } *(undefined4 *)(param_1 + 0x40) = 0; *(undefined4 *)(param_1 + 0x100) = 1; uVar21 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))(); *(undefined8 *)(param_1 + 0x80) = uVar21; *(undefined1 *)(param_1 + 0xc0) = 0; return; } goto LAB_1400e542d; } FUN_14006cb70(uVar14,param_2,param_3,param_4); local_res8 = (undefined **)PTR_DAT_1401ac010; uVar5 = FUN_14006c9f0(L"Cannot bind TCP socket to a local address!"); if ((local_res8 != (undefined **)0x0) && (uVar17 = 0, local_res8 != (undefined **)PTR_DAT_1401ac010)) { uVar17 = (ulonglong)*(uint *)(local_res8 + -1); } uVar6 = uVar5; if ((((int)uVar5 <= (int)uVar17) && (uVar6 = uVar8, local_res8 != (undefined **)0x0)) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) { uVar6 = *(uint *)(local_res8 + -1); } uVar18 = 1; if (1 < (int)uVar6) { uVar18 = uVar6; } uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) { uVar6 = *(uint *)(local_res8 + -1); } if ((int)uVar6 < (int)uVar18) { if (local_res8 == (undefined **)0x0) { local_res8 = (undefined **)PTR_DAT_1401ac010; } if ((int)uVar18 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar18 == 0) { FUN_1400031e0((longlong *)&local_res8,PTR_DAT_1401ac010,uVar17,param_4); } else { uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) { uVar6 = *(uint *)(local_res8 + -1); } if (uVar18 != uVar6) { puVar10 = (uint *)FUN_14006cbf0((longlong)(int)uVar18 * 2 + 10); if (puVar10 != (uint *)0x0) { *puVar10 = 0; puVar10[1] = 1; } *puVar10 = uVar18; uVar6 = uVar8; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) { uVar6 = *(uint *)(local_res8 + -1); } ppuVar15 = (undefined **)PTR_DAT_1401ac010; if ((int)uVar18 < (int)uVar6) { LAB_1400e52d3: if (local_res8 != (undefined **)0x0) { ppuVar15 = local_res8; } } else { uVar18 = uVar8; if (local_res8 != (undefined **)0x0) { if (local_res8 != (undefined **)PTR_DAT_1401ac010) { uVar18 = *(uint *)(local_res8 + -1); } goto LAB_1400e52d3; } } uVar17 = (ulonglong)uVar18; FUN_14006ca20(puVar10 + 2,ppuVar15,uVar18); FUN_1400031e0((longlong *)&local_res8,ppuVar15,uVar17,param_4); local_res8 = (undefined **)(puVar10 + 2); } } } FUN_140002e40((longlong *)&local_res8); ppuVar15 = local_res8; if (local_res8 == (undefined **)0x0) { ppuVar15 = (undefined **)PTR_DAT_1401ac010; } FUN_14006ca20(ppuVar15,L"Cannot bind TCP socket to a local address!",uVar5); ppuVar15 = local_res8; if (local_res8 == (undefined **)0x0) { ppuVar15 = (undefined **)PTR_DAT_1401ac010; } iVar7 = FUN_14006c9f0((short *)ppuVar15); iVar13 = iVar19; if (0 < iVar7) { iVar13 = iVar7; } iVar7 = iVar19; if ((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) { iVar7 = *(int *)(local_res8 + -1); } if ((iVar13 < iVar7) || (iVar13 = iVar19, local_res8 == (undefined **)0x0)) { LAB_1400e5369: if (((local_res8 != (undefined **)PTR_DAT_1401ac010) && (local_res8 != (undefined **)0x0)) && (local_res8 + -1 != (undefined **)0x0)) { *(int *)(local_res8 + -1) = iVar13; *(undefined2 *)((longlong)local_res8 + (longlong)iVar13 * 2) = 0; } } else if (local_res8 != (undefined **)PTR_DAT_1401ac010) { iVar13 = *(int *)(local_res8 + -1); goto LAB_1400e5369; } local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; param_4 = &local_res8; plVar11 = FUN_140078c10(&local_res18,3,0,(longlong *)param_4,(longlong)&local_50); uVar14 = **(ulonglong **)(param_1 + 0x108); (**(code **)(uVar14 + 0x80))(); pppuVar16 = &local_50; FUN_140078360(pppuVar16); ppuVar15 = local_res8; if (((local_res8 != (undefined **)0x0) && (local_res8 != (undefined **)PTR_DAT_1401ac010)) && (ppuVar1 = local_res8 + -1, ppuVar1 != (undefined **)0x0)) { piVar12 = (int *)FUN_14006cb70(pppuVar16,plVar11,uVar14,param_4); FUN_14006b350(piVar12); piVar2 = (int *)((longlong)ppuVar15 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(ppuVar1); } FUN_14006b3e0((longlong)piVar12); } uVar8 = Ordinal_111(); LAB_1400e542d: FUN_1400e0130(param_1,uVar8,uVar14,param_4); return; }