/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c8040 FUN_1400c8040 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1400c8040(undefined ***param_1,undefined ***param_2,undefined ***param_3, undefined ***param_4) { undefined **ppuVar1; int *piVar2; uint uVar3; uint uVar4; undefined8 uVar5; ulonglong uVar6; uint *puVar7; undefined ***pppuVar8; int *piVar9; uint uVar10; uint uVar11; char *pcVar12; undefined ***pppuVar13; undefined **ppuVar14; undefined *puVar15; undefined ***pppuVar16; uint uVar17; undefined ***pppuVar18; undefined1 auStackY_2a8 [32]; undefined **local_278; undefined **local_270; undefined ***local_268; undefined ***local_260; undefined **local_258; undefined4 local_250; undefined2 local_24c; undefined ***local_238 [2]; undefined **local_228; undefined4 local_220; undefined2 local_21c; undefined ***local_218; undefined1 local_210; undefined **local_208; undefined4 local_200; undefined2 local_1fc; undefined **local_1f8; undefined8 local_1f0; undefined8 local_1e8; undefined8 local_1e0; undefined8 local_1d8; int *local_1d0; undefined1 local_1c8; undefined **local_1c0; undefined8 local_1b8; undefined4 local_1b0; undefined8 local_1a8; undefined4 local_1a0; undefined **local_198; undefined4 local_190; undefined2 local_18c; longlong local_158 [36]; ulonglong local_38; local_158[1] = 0xfffffffffffffffe; local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_2a8; pppuVar8 = &local_278; local_260 = param_1; FUN_1400f8570(pppuVar8); pppuVar18 = (undefined ***)0x0; local_268 = (undefined ***)0x0; pppuVar16 = (undefined ***)0x1; do { while( true ) { while( true ) { if (*(char *)(param_1 + 0x28) != '\0') { if (param_1[0x29][0x2fe] != (undefined *)0x0) { FUN_14006cb70(pppuVar8,param_2,param_3,param_4); local_238[0] = (undefined ***)PTR_DAT_1401ac010; FUN_140053d20((longlong *)local_238,L"%s thread 종료.", L"Proud::CNetThreads_S::TcpListenerProc",param_4); pppuVar8 = local_238[0]; param_3 = local_238[0]; if (local_238[0] == (undefined ***)0x0) { param_3 = (undefined ***)PTR_DAT_1401ac010; } param_2 = (undefined ***)0x0; puVar15 = param_1[0x29][0x2fe]; FUN_1400cb700((longlong)puVar15,0,(short *)param_3,param_4); if (((pppuVar8 != (undefined ***)0x0) && (pppuVar8 != (undefined ***)PTR_DAT_1401ac010)) && (pppuVar8 + -1 != (undefined ***)0x0)) { piVar9 = (int *)FUN_14006cb70(puVar15,param_2,param_3,param_4); local_1c8 = 0; local_1d0 = piVar9; FUN_14006b350(piVar9); local_1c8 = 1; piVar2 = (int *)((longlong)pppuVar8 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(pppuVar8 + -1); } FUN_14006b3e0((longlong)piVar9); } } pppuVar8 = local_268; if (local_268 != (undefined ***)0x0) { FUN_140072370((longlong *)local_268,param_2,(longlong *)param_3,param_4); FUN_14006cc60(pppuVar8); } FUN_1400f85a0((char *)&local_278); return; } uVar17 = 0; if (((local_268 == (undefined ***)0x0) && ((char)pppuVar16 != '\0')) && (local_268 = (undefined ***) FUN_1400c6f50((longlong)param_1,param_2,(undefined **)param_3, (undefined **)param_4), local_268 == (undefined ***)0x0)) { pppuVar16 = pppuVar18; } pppuVar13 = local_268; local_198 = Proud::AddrPort::vftable; local_1c0 = (undefined **)0x0; local_1a8 = 0; local_1b8 = 0; local_1b0 = 5; local_1a0 = 0; local_190 = DAT_1401ac3d0; local_18c = DAT_1401ac3d4; param_3 = (undefined ***)(ulonglong)DAT_1401ac068; param_2 = &local_1c0; pcVar12 = param_1[0x29][0xf2]; uVar5 = FUN_1400753f0(pcVar12,(longlong *)param_2,(ulonglong)param_3,param_4); if ((char)uVar5 == '\x01') break; pppuVar8 = pppuVar18; if ((undefined8 *)param_1[0x29][0xe9] != (undefined8 *)0x0) { pppuVar8 = *(undefined ****)param_1[0x29][0xe9]; } FUN_140072260((longlong)pppuVar8); } if (pppuVar13 == (undefined ***)0x0) break; local_208 = Proud::AddrPort::vftable; local_200 = 0; local_1fc = 0; local_258 = Proud::AddrPort::vftable; local_250 = 0; local_24c = 0; param_2 = pppuVar18; if ((undefined8 *)param_1[0x29][0xe9] != (undefined8 *)0x0) { param_2 = *(undefined ****)param_1[0x29][0xe9]; } param_4 = &local_258; param_3 = &local_208; FUN_1400720b0((longlong)pppuVar13,(longlong)param_2,(longlong)param_3,(longlong)param_4); uVar6 = FUN_14006fbe0((longlong)&local_258); if ((char)uVar6 == '\0') { LAB_1400c8202: FUN_140072370((longlong *)pppuVar13,param_2,(longlong *)param_3,param_4); FUN_14006cc60(pppuVar13); pppuVar8 = pppuVar13; } else { local_228 = Proud::AddrPort::vftable; local_220 = local_250; local_21c = local_24c; param_3 = &local_228; pppuVar8 = param_1; param_2 = pppuVar13; uVar5 = FUN_1400c6ba0((longlong)param_1,(longlong)pppuVar13,(ulonglong)param_3); if ((char)uVar5 == '\0') goto LAB_1400c8202; } local_268 = (undefined ***)0x0; } FUN_14006cb70(pcVar12,param_2,param_3,param_4); local_270 = (undefined **)PTR_DAT_1401ac010; uVar3 = FUN_14006c9f0(L"acceptex getqueued but socket null"); uVar4 = uVar17; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar4 = *(uint *)(local_270 + -1); } uVar10 = uVar3; if ((((int)uVar3 <= (int)uVar4) && (uVar10 = uVar17, local_270 != (undefined **)0x0)) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar10 = *(uint *)(local_270 + -1); } uVar4 = 1; if (1 < (int)uVar10) { uVar4 = uVar10; } uVar11 = 0; uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar10 = *(uint *)(local_270 + -1); } if ((int)uVar10 < (int)uVar4) { if (local_270 == (undefined **)0x0) { local_270 = (undefined **)PTR_DAT_1401ac010; } if ((int)uVar4 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (uVar4 == 0) { FUN_1400031e0((longlong *)&local_270,PTR_DAT_1401ac010,param_3,param_4); } else { uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar10 = *(uint *)(local_270 + -1); } if (uVar4 != uVar10) { puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar4 * 2 + 10); if (puVar7 != (uint *)0x0) { *puVar7 = 0; puVar7[1] = 1; } *puVar7 = uVar4; uVar10 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar10 = *(uint *)(local_270 + -1); } ppuVar14 = (undefined **)PTR_DAT_1401ac010; if ((int)uVar4 < (int)uVar10) { LAB_1400c8327: if (local_270 != (undefined **)0x0) { ppuVar14 = local_270; } } else { uVar4 = uVar17; if (local_270 != (undefined **)0x0) { if (local_270 != (undefined **)PTR_DAT_1401ac010) { uVar4 = *(uint *)(local_270 + -1); } goto LAB_1400c8327; } } uVar6 = (ulonglong)uVar4; FUN_14006ca20(puVar7 + 2,ppuVar14,uVar4); FUN_1400031e0((longlong *)&local_270,ppuVar14,uVar6,param_4); local_270 = (undefined **)(puVar7 + 2); } } } FUN_140002e40((longlong *)&local_270); ppuVar14 = local_270; if (local_270 == (undefined **)0x0) { ppuVar14 = (undefined **)PTR_DAT_1401ac010; } FUN_14006ca20(ppuVar14,L"acceptex getqueued but socket null",uVar3); ppuVar14 = local_270; if (local_270 == (undefined **)0x0) { ppuVar14 = (undefined **)PTR_DAT_1401ac010; } uVar4 = FUN_14006c9f0((short *)ppuVar14); uVar17 = 0; if (0 < (int)uVar4) { uVar17 = uVar4; } uVar4 = uVar11; if ((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) { uVar4 = *(uint *)(local_270 + -1); } if (((int)uVar17 < (int)uVar4) || (uVar17 = uVar11, local_270 == (undefined **)0x0)) { LAB_1400c83ca: if (((local_270 != (undefined **)PTR_DAT_1401ac010) && (local_270 != (undefined **)0x0)) && (local_270 + -1 != (undefined **)0x0)) { *(uint *)(local_270 + -1) = uVar17; *(undefined2 *)((longlong)local_270 + (longlong)(int)uVar17 * 2) = 0; } } else if (local_270 != (undefined **)PTR_DAT_1401ac010) { uVar17 = *(uint *)(local_270 + -1); goto LAB_1400c83ca; } local_1f0 = 0; local_1e8 = 0; local_1e0 = 0; local_1d8 = 0; local_1f8 = Proud::ByteArray::vftable; param_4 = &local_270; param_2 = (undefined ***)FUN_140078c10(local_158,1,0,(longlong *)param_4,(longlong)&local_1f8); param_3 = (undefined ***)*param_1[0x29]; (*(code *)param_3[0x10])(); pppuVar8 = &local_1f8; FUN_140078360(pppuVar8); ppuVar14 = local_270; if (((local_270 != (undefined **)0x0) && (local_270 != (undefined **)PTR_DAT_1401ac010)) && (ppuVar1 = local_270 + -1, ppuVar1 != (undefined **)0x0)) { pppuVar8 = (undefined ***)FUN_14006cb70(pppuVar8,param_2,param_3,param_4); local_210 = 0; local_218 = pppuVar8; FUN_14006b350((int *)pppuVar8); local_210 = 1; puVar7 = (uint *)((longlong)ppuVar14 + -4); *puVar7 = *puVar7 - 1; if (*puVar7 == 0) { FUN_14006cc60(ppuVar1); } FUN_14006b3e0((longlong)pppuVar8); local_210 = 0; } local_270 = (undefined **)PTR_DAT_1401ac010; } while( true ); }