/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401a9020 FUN_1401a9020 * Pseudocode, not original source. */ undefined8 FUN_1401a9020(longlong param_1,undefined8 param_2,longlong param_3) { int *piVar1; uint uVar2; longlong lVar3; ulonglong uVar4; char cVar5; undefined8 uVar6; undefined *puVar7; longlong *plVar8; undefined8 *puVar9; undefined **ppuVar10; longlong lVar11; undefined *puVar12; undefined *local_res8; undefined *local_res20; undefined **local_60; undefined4 local_58; undefined2 local_54; undefined8 local_50; undefined1 local_48; uVar6 = (**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_50 = uVar6; FUN_14016db50(uVar6); local_48 = 1; if (DAT_14034c86f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200))(); } FUN_1401a1eb0(*(longlong *)(param_1 + 0x148) + 0x760); local_res8 = (undefined *)FUN_14016d940(0x780); puVar12 = (undefined *)0x0; puVar7 = puVar12; if (local_res8 != (undefined *)0x0) { local_60 = Proud::AddrPort::vftable; local_58 = *(undefined4 *)(param_3 + 8); local_54 = *(undefined2 *)(param_3 + 0xc); puVar7 = (undefined *) FUN_1401b4c70(local_res8,*(undefined8 *)(param_1 + 0x148),param_2,&local_60); } lVar3 = *(longlong *)(param_1 + 0x148); lVar11 = lVar3 + 0x1740; uVar2 = *(uint *)(lVar3 + 0x1768); uVar4 = ((ulonglong)puVar7 & 0xffffffff) % (ulonglong)uVar2; lVar3 = *(longlong *)(lVar3 + 0x1748); local_res8 = puVar7; if (lVar3 != 0) { for (plVar8 = *(longlong **)(lVar3 + uVar4 * 8); (plVar8 != (longlong *)0x0 && ((uint)uVar4 == *(uint *)(plVar8 + 4) % uVar2)); plVar8 = (longlong *)plVar8[2]) { if ((undefined *)*plVar8 == puVar7) goto LAB_1401a91c9; } if (lVar3 != 0) { for (plVar8 = *(longlong **)(lVar3 + uVar4 * 8); (plVar8 != (longlong *)0x0 && ((uint)uVar4 == *(uint *)(plVar8 + 4) % uVar2)); plVar8 = (longlong *)plVar8[2]) { if ((undefined *)*plVar8 == puVar7) goto LAB_1401a91c5; } if (lVar3 != 0) goto LAB_1401a919c; } } cVar5 = FUN_1401b5a10(lVar11,(ulonglong)uVar2,CONCAT71((int7)((ulonglong)lVar3 >> 8),1)); if (cVar5 == '\0') { /* WARNING: Subroutine does not return */ FUN_14004dc60(0x8007000e); } LAB_1401a919c: FUN_1401720a0(lVar11); plVar8 = (longlong *)FUN_140175d30(lVar11,&local_res8,uVar4,(ulonglong)puVar7 & 0xffffffff); FUN_1401720a0(lVar11); LAB_1401a91c5: *(undefined1 *)(plVar8 + 1) = 0; LAB_1401a91c9: if (puVar7 != (undefined *)0x0) { puVar12 = puVar7 + 0x38; } FUN_14019bd30(*(undefined8 *)(*(longlong *)(puVar7 + 0x748) + 0x110),puVar12); FUN_1401baa10(puVar7 + 0xc0); FUN_1401a2e00(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x788), *(undefined8 *)(*(longlong *)(puVar7 + 0x748) + 0x110),0xffffffffffffffff); lVar3 = *(longlong *)(param_1 + 0x148); uVar4 = (ulonglong)((uint)*(ushort *)(param_3 + 0xc) ^ *(uint *)(param_3 + 8)) % (ulonglong)*(uint *)(lVar3 + 0x1710); if (*(longlong *)(lVar3 + 0x16f0) != 0) { for (lVar11 = *(longlong *)(*(longlong *)(lVar3 + 0x16f0) + uVar4 * 8); (lVar11 != 0 && ((uint)uVar4 == *(uint *)(lVar11 + 0x28) % *(uint *)(lVar3 + 0x1710))); lVar11 = *(longlong *)(lVar11 + 0x18)) { if ((*(uint *)(lVar11 + 8) == *(uint *)(param_3 + 8)) && (*(ushort *)(lVar11 + 0xc) == *(ushort *)(param_3 + 0xc))) goto LAB_1401a9288; } } puVar9 = (undefined8 *)FUN_1401b7d10(lVar3 + 0x16e8,param_3); *puVar9 = puVar7; LAB_1401a9288: if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14016d8c0(); local_res8 = PTR_DAT_1403440a0; plVar8 = (longlong *)FUN_1401705d0(param_3,&local_res20); puVar12 = (undefined *)*plVar8; if ((undefined *)*plVar8 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } FUN_14004c020(&local_res8,L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s",puVar7, puVar12); if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_1403440a0)) && (local_res20 + -8 != (undefined *)0x0)) { ppuVar10 = (undefined **)FUN_14016d8c0(); local_60 = ppuVar10; FUN_14016db50(ppuVar10); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(local_res20 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(local_res20 + -8); } FUN_14016dbe0(ppuVar10); } puVar12 = local_res8; puVar7 = local_res8; if (local_res8 == (undefined *)0x0) { puVar7 = PTR_DAT_1403440a0; } FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),0,puVar7); if (((puVar12 != (undefined *)0x0) && (puVar12 != PTR_DAT_1403440a0)) && (puVar12 + -8 != (undefined *)0x0)) { ppuVar10 = (undefined **)FUN_14016d8c0(); local_60 = ppuVar10; FUN_14016db50(ppuVar10); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(puVar12 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14016d970(puVar12 + -8); } FUN_14016dbe0(ppuVar10); } } FUN_14016dbe0(uVar6); return 1; }