/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401aa4c0 FUN_1401aa4c0 * Pseudocode, not original source. */ /* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */ void FUN_1401aa4c0(longlong param_1) { ulonglong *puVar1; longlong lVar2; undefined *puVar3; char cVar4; int iVar5; int iVar6; int *piVar7; undefined8 uVar8; int iVar9; int iVar10; ulonglong uVar11; int *piVar12; undefined *puVar13; ulonglong uVar14; int iVar15; ulonglong uVar16; undefined1 auStack_2a8 [32]; undefined ***local_288; undefined1 local_278 [8]; int *local_270; longlong local_268; longlong local_260; undefined **local_258; undefined4 local_250; undefined2 local_24c; undefined *local_238 [2]; undefined **local_228; undefined4 local_220; undefined2 local_21c; undefined8 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; undefined8 local_1d0; undefined1 local_1c8; undefined8 local_1c0; undefined8 local_1b8; undefined4 local_1b0; undefined8 local_1a8; undefined4 local_1a0; undefined **local_198; undefined4 local_190; undefined2 local_18c; undefined1 local_158 [8]; undefined8 local_150; ulonglong local_38; local_150 = 0xfffffffffffffffe; local_38 = DAT_1403463c0 ^ (ulonglong)auStack_2a8; local_260 = param_1; FUN_1401c5a10(local_278); uVar16 = 0; local_268 = 0; uVar14 = 1; do { while( true ) { while( true ) { if (*(char *)(param_1 + 0x140) != '\0') { if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14016d8c0(); local_238[0] = PTR_DAT_1403440a0; FUN_14004c020(local_238,&DAT_140282f80,L"Proud::CNetThreads_S::TcpListenerProc"); puVar3 = local_238[0]; puVar13 = local_238[0]; if (local_238[0] == (undefined *)0x0) { puVar13 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),0,puVar13); if (((puVar3 != (undefined *)0x0) && (puVar3 != PTR_DAT_1403440a0)) && (puVar3 + -8 != (undefined *)0x0)) { uVar8 = FUN_14016d8c0(); local_1c8 = 0; local_1d0 = uVar8; FUN_14016db50(uVar8); local_1c8 = 1; piVar7 = (int *)(puVar3 + -4); *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14016d970(puVar3 + -8); } FUN_14016dbe0(uVar8); } } lVar2 = local_268; if (local_268 != 0) { FUN_14019c9e0(local_268); FUN_14016d970(lVar2); } FUN_1401c5a40(local_278); return; } iVar15 = 0; if (((local_268 == 0) && ((char)uVar14 != '\0')) && (local_268 = FUN_1401a93d0(param_1), local_268 == 0)) { uVar14 = uVar16; } lVar2 = local_268; local_198 = Proud::AddrPort::vftable; local_1c0 = 0; local_1a8 = 0; local_1b8 = 0; local_1b0 = 5; local_1a0 = 0; local_190 = DAT_140344450; local_18c = DAT_140344454; cVar4 = FUN_1401a22b0(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x790),&local_1c0, DAT_140344c98); if (cVar4 == '\x01') break; puVar1 = *(ulonglong **)(*(longlong *)(param_1 + 0x148) + 0x748); uVar11 = uVar16; if (puVar1 != (ulonglong *)0x0) { uVar11 = *puVar1; } FUN_14019c8d0(uVar11); } if (lVar2 == 0) break; local_208 = Proud::AddrPort::vftable; local_200 = 0; local_1fc = 0; local_258 = Proud::AddrPort::vftable; local_250 = 0; local_24c = 0; puVar1 = *(ulonglong **)(*(longlong *)(param_1 + 0x148) + 0x748); uVar11 = uVar16; if (puVar1 != (ulonglong *)0x0) { uVar11 = *puVar1; } FUN_14019c720(lVar2,uVar11,&local_208,&local_258); cVar4 = FUN_14016f870(&local_258); if (cVar4 == '\0') { LAB_1401aa682: FUN_14019c9e0(lVar2); FUN_14016d970(lVar2); } else { local_228 = Proud::AddrPort::vftable; local_220 = local_250; local_21c = local_24c; cVar4 = FUN_1401a9020(param_1,lVar2,&local_228); if (cVar4 == '\0') goto LAB_1401aa682; } local_268 = 0; } FUN_14016d8c0(); local_270 = (int *)PTR_DAT_1403440a0; iVar5 = FUN_14016d740(L"acceptex getqueued but socket null"); iVar6 = iVar15; if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) { iVar6 = local_270[-2]; } iVar9 = 0; iVar10 = iVar5; if (((iVar5 <= iVar6) && (iVar10 = iVar9, local_270 != (int *)0x0)) && (local_270 != (int *)PTR_DAT_1403440a0)) { iVar10 = local_270[-2]; } iVar6 = 1; if (1 < iVar10) { iVar6 = iVar10; } uVar11 = uVar16; if ((local_270 != (int *)0x0) && (uVar11 = 0, local_270 != (int *)PTR_DAT_1403440a0)) { uVar11 = (ulonglong)(uint)local_270[-2]; } if ((int)uVar11 < iVar6) { if (local_270 == (int *)0x0) { local_270 = (int *)PTR_DAT_1403440a0; } if (iVar6 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (iVar6 == 0) { FUN_14004eb70(&local_270); } else { iVar10 = iVar9; if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) { iVar10 = local_270[-2]; } if (iVar6 != iVar10) { piVar7 = (int *)FUN_14016d940((longlong)iVar6 * 2 + 10); if (piVar7 != (int *)0x0) { *piVar7 = 0; piVar7[1] = 1; } *piVar7 = iVar6; iVar10 = iVar9; if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) { iVar10 = local_270[-2]; } piVar12 = (int *)PTR_DAT_1403440a0; if (iVar6 < iVar10) { LAB_1401aa7a7: if (local_270 != (int *)0x0) { piVar12 = local_270; } } else { iVar6 = iVar15; if (local_270 != (int *)0x0) { if (local_270 != (int *)PTR_DAT_1403440a0) { iVar6 = local_270[-2]; } goto LAB_1401aa7a7; } } FUN_14016d770(piVar7 + 2,piVar12,iVar6); FUN_14004eb70(&local_270); local_270 = piVar7 + 2; } } } FUN_14004e850(&local_270); piVar7 = local_270; if (local_270 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } FUN_14016d770(piVar7,L"acceptex getqueued but socket null",iVar5); piVar7 = local_270; if (local_270 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } iVar6 = FUN_14016d740(piVar7); iVar15 = 0; if (0 < iVar6) { iVar15 = iVar6; } iVar6 = iVar9; if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) { iVar6 = local_270[-2]; } if ((iVar15 < iVar6) || (iVar15 = iVar9, local_270 == (int *)0x0)) { LAB_1401aa84a: if (((local_270 != (int *)PTR_DAT_1403440a0) && (local_270 != (int *)0x0)) && (local_270 + -2 != (int *)0x0)) { local_270[-2] = iVar15; *(undefined2 *)((longlong)local_270 + (longlong)iVar15 * 2) = 0; } } else if (local_270 != (int *)PTR_DAT_1403440a0) { iVar15 = local_270[-2]; goto LAB_1401aa84a; } local_1f0 = 0; local_1e8 = 0; local_1e0 = 0; local_1d8 = 0; local_1f8 = Proud::ByteArray::vftable; local_288 = &local_1f8; uVar8 = FUN_140198f80(local_158,1,0,&local_270); (**(code **)(**(longlong **)(param_1 + 0x148) + 0x80))(*(longlong **)(param_1 + 0x148),uVar8); FUN_14019a9e0(&local_1f8); piVar7 = local_270; if (((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) && (piVar12 = local_270 + -2, piVar12 != (int *)0x0)) { uVar8 = FUN_14016d8c0(); local_210 = 0; local_218 = uVar8; FUN_14016db50(uVar8); local_210 = 1; piVar7 = piVar7 + -1; *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14016d970(piVar12); } FUN_14016dbe0(uVar8); local_210 = 0; } local_270 = (int *)PTR_DAT_1403440a0; } while( true ); }