/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ac1a0 FUN_1401ac1a0 * Pseudocode, not original source. */ void FUN_1401ac1a0(longlong param_1,longlong param_2,longlong param_3,undefined8 param_4) { int *piVar1; bool bVar2; int iVar3; undefined8 uVar4; undefined8 uVar5; longlong *plVar6; undefined8 uVar7; undefined8 *puVar8; longlong lVar9; undefined *puVar10; undefined *puVar11; undefined *local_res10; undefined1 local_res18 [16]; undefined ***pppuVar12; undefined8 in_stack_fffffffffffffec0; undefined4 uVar13; undefined *local_118; undefined **local_110; undefined8 local_108; undefined8 local_100; undefined8 local_f8; undefined8 local_f0; undefined **local_e8; undefined8 local_e0; undefined8 local_d8; undefined8 local_d0; undefined8 local_c8; undefined **local_c0; undefined8 local_b8; undefined8 local_b0; undefined8 local_a8; undefined8 local_a0; undefined8 local_98; undefined1 local_90; undefined8 local_88; undefined1 local_80; undefined8 local_78; undefined1 local_70; undefined8 local_68; undefined1 local_60; undefined8 local_58; undefined1 local_50; undefined8 local_48; uVar13 = (undefined4)((ulonglong)in_stack_fffffffffffffec0 >> 0x20); local_48 = 0xfffffffffffffffe; if (param_3 == 0) { lVar9 = 0; } else { lVar9 = param_3 + 0xc0; } FUN_1401baa30(local_res18,lVar9); uVar4 = (**(code **)(*(longlong *)(param_3 + 0x108) + 0x10))(); FUN_14016db50(uVar4); iVar3 = *(int *)(param_2 + 8); if (iVar3 < 1) { *(undefined1 *)(*(longlong *)(param_3 + 0x748) + 0x40) = 0; FUN_14016dbe0(uVar4); uVar5 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_88 = uVar5; FUN_14016db50(uVar5); local_80 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase"); } local_108 = 0; local_100 = 0; local_f8 = 0; local_f0 = 0; local_110 = Proud::ByteArray::vftable; pppuVar12 = &local_110; FUN_140196230(*(undefined8 *)(param_1 + 0x148),param_3,0xb,3,pppuVar12, L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase", *(undefined4 *)(param_2 + 0xc)); uVar13 = (undefined4)((ulonglong)pppuVar12 >> 0x20); FUN_14019a9e0(&local_110); (**(code **)(*(longlong *)(param_3 + 0xa0) + 0x40)) ((longlong *)(param_3 + 0xa0), L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase"); if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14016d8c0(); local_res10 = PTR_DAT_1403440a0; puVar8 = (undefined8 *)(*(longlong *)(param_3 + 0x748) + 0x128); plVar6 = (longlong *)(**(code **)*puVar8)(puVar8,&local_118); puVar11 = (undefined *)*plVar6; if ((undefined *)*plVar6 == (undefined *)0x0) { puVar11 = PTR_DAT_1403440a0; } FUN_14004c020(&local_res10,&DAT_140283480,*(undefined4 *)(param_3 + 0x6f8),puVar11, CONCAT44(uVar13,*(undefined4 *)(param_2 + 0xc))); if (((local_118 != (undefined *)0x0) && (local_118 != PTR_DAT_1403440a0)) && (local_118 + -8 != (undefined *)0x0)) { uVar7 = FUN_14016d8c0(); local_68 = uVar7; FUN_14016db50(uVar7); local_60 = 1; piVar1 = (int *)(local_118 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_118 + -8); } FUN_14016dbe0(uVar7); } puVar11 = local_res10; puVar10 = local_res10; if (local_res10 == (undefined *)0x0) { puVar10 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),0,puVar10); if (((puVar11 != (undefined *)0x0) && (puVar11 != PTR_DAT_1403440a0)) && (puVar11 + -8 != (undefined *)0x0)) { uVar7 = FUN_14016d8c0(); local_98 = uVar7; FUN_14016db50(uVar7); local_90 = 1; piVar1 = (int *)(puVar11 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar11 + -8); } FUN_14016dbe0(uVar7); } } LAB_1401ac684: bVar2 = false; FUN_14016dbe0(uVar5); } else { uVar5 = FUN_14019c8b0(*(undefined8 *)(*(longlong *)(param_3 + 0x748) + 0x110)); FUN_1401c5b60(*(longlong *)(param_3 + 0x748) + 200,uVar5,iVar3); FUN_1401a7d90(param_4,0); iVar3 = FUN_1401b4020(param_3,param_4); if (iVar3 != 0) { *(undefined1 *)(*(longlong *)(param_3 + 0x748) + 0x40) = 0; FUN_14016dbe0(uVar4); uVar4 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_78 = uVar4; FUN_14016db50(uVar4); local_70 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase"); } local_b8 = 0; local_b0 = 0; local_a8 = 0; local_a0 = 0; local_c0 = Proud::ByteArray::vftable; FUN_140196230(*(undefined8 *)(param_1 + 0x148),param_3,iVar3,3,&local_c0, L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase",0); FUN_14019a9e0(&local_c0); FUN_14016dbe0(uVar4); goto LAB_1401ac69b; } FUN_14016dbe0(uVar4); uVar5 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))(); *(undefined8 *)(param_3 + 0x180) = uVar5; *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x500) = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x500) + 1; *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x540) = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x540) + (longlong)*(int *)(param_2 + 8); FUN_1401abab0(param_1,param_3,param_4,0); bVar2 = true; FUN_14016db50(uVar4); *(undefined1 *)(*(longlong *)(param_3 + 0x748) + 0x40) = 0; iVar3 = FUN_1401ba4d0(*(undefined8 *)(param_3 + 0x748)); if (iVar3 != 0) { FUN_14016dbe0(uVar4); uVar5 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_58 = uVar5; FUN_14016db50(uVar5); local_50 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200)) (*(longlong **)(param_1 + 0x148), L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase"); } local_e0 = 0; local_d8 = 0; local_d0 = 0; local_c8 = 0; local_e8 = Proud::ByteArray::vftable; (**(code **)(*(longlong *)(param_3 + 0xa0) + 0x38)) (param_3 + 0xa0,0xb,3,&local_e8, L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase", CONCAT44(uVar13,iVar3)); FUN_14019a9e0(&local_e8); (**(code **)(*(longlong *)(param_3 + 0xa0) + 0x40)) (param_3 + 0xa0,L"Proud::CNetThreads_S::NetWorkerThread_TcpRecvCompletionCase"); goto LAB_1401ac684; } } if (bVar2) { FUN_14016dbe0(uVar4); } LAB_1401ac69b: FUN_1401baa40(local_res18); return; }