/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c6ba0 FUN_1400c6ba0 * Pseudocode, not original source. */ undefined8 FUN_1400c6ba0(longlong param_1,longlong param_2,ulonglong param_3) { int *piVar1; uint uVar2; int *piVar3; short *psVar4; undefined8 uVar5; longlong *plVar6; undefined8 *puVar7; undefined **ppuVar8; short **ppsVar9; longlong lVar10; ulonglong uVar11; wchar_t *pwVar12; char *pcVar13; uint uVar14; ulonglong uVar15; longlong lVar16; ulonglong uVar17; undefined *puVar18; short *psVar19; short *local_res8; undefined *local_res20; undefined **local_60; undefined4 local_58; undefined2 local_54; int *local_50; undefined1 local_48; piVar3 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_50 = piVar3; FUN_14006b350(piVar3); local_48 = 1; if (DAT_1401b42cf != '\0') { (**(code **)(**(longlong **)(param_1 + 0x148) + 200))(); } FUN_140076f50((char *)(*(longlong *)(param_1 + 0x148) + 0x760)); local_res8 = (short *)FUN_14006cbf0(0x780); psVar19 = (short *)0x0; psVar4 = psVar19; if (local_res8 != (short *)0x0) { local_60 = Proud::AddrPort::vftable; local_58 = *(undefined4 *)(param_3 + 8); local_54 = *(undefined2 *)(param_3 + 0xc); psVar4 = (short *)FUN_1400d2b30((undefined8 *)local_res8,*(longlong *)(param_1 + 0x148),param_2, &local_60); } lVar10 = *(longlong *)(param_1 + 0x148); pcVar13 = (char *)(lVar10 + 0x1740); uVar2 = *(uint *)(lVar10 + 0x1768); uVar17 = (ulonglong)uVar2; uVar11 = ((ulonglong)psVar4 & 0xffffffff) % uVar17; uVar15 = *(ulonglong *)(lVar10 + 0x1748); uVar14 = (uint)uVar11; local_res8 = psVar4; if (uVar15 != 0) { for (plVar6 = *(longlong **)(uVar15 + uVar11 * 8); (plVar6 != (longlong *)0x0 && (uVar14 == *(uint *)(plVar6 + 4) % uVar2)); plVar6 = (longlong *)plVar6[2]) { if ((short *)*plVar6 == psVar4) goto LAB_1400c6d49; } if (uVar15 != 0) { for (plVar6 = *(longlong **)(uVar15 + uVar11 * 8); (plVar6 != (longlong *)0x0 && (uVar14 == *(uint *)(plVar6 + 4) % uVar2)); plVar6 = (longlong *)plVar6[2]) { if ((short *)*plVar6 == psVar4) goto LAB_1400c6d45; } if (uVar15 != 0) goto LAB_1400c6d1c; } } uVar5 = FUN_1400a1910((longlong)pcVar13,uVar2,'\x01'); if ((char)uVar5 == '\0') { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } LAB_1400c6d1c: FUN_1400e94c0(pcVar13); uVar17 = (ulonglong)psVar4 & 0xffffffff; plVar6 = FUN_14007d680(pcVar13,&local_res8,uVar14,(int)psVar4); FUN_1400e94c0(pcVar13); uVar15 = uVar11; LAB_1400c6d45: *(undefined1 *)(plVar6 + 1) = 0; LAB_1400c6d49: if (psVar4 != (short *)0x0) { psVar19 = psVar4 + 0x1c; } FUN_1400716c0(*(longlong *)(*(longlong *)(psVar4 + 0x3a4) + 0x110),psVar19,uVar15,uVar17); FUN_1400d8960((longlong)(psVar4 + 0x60)); FUN_140075f40(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x788), *(ULONG_PTR *)(*(longlong *)(psVar4 + 0x3a4) + 0x110), (LPOVERLAPPED)0xffffffffffffffff); lVar10 = *(longlong *)(param_1 + 0x148); pcVar13 = (char *)(ulonglong)*(uint *)(lVar10 + 0x1710); uVar15 = (ulonglong)((uint)*(ushort *)(param_3 + 0xc) ^ *(uint *)(param_3 + 8)) % (ulonglong)pcVar13; lVar16 = 0; if (*(longlong *)(lVar10 + 0x16f0) != 0) { lVar16 = *(longlong *)(*(longlong *)(lVar10 + 0x16f0) + uVar15 * 8); while ((lVar16 != 0 && (uVar11 = (ulonglong)*(uint *)(lVar16 + 0x28) % (ulonglong)pcVar13, (int)uVar15 == (int)uVar11))) { if ((*(uint *)(lVar16 + 8) == *(uint *)(param_3 + 8)) && (*(ushort *)(lVar16 + 0xc) == *(ushort *)(param_3 + 0xc))) goto LAB_1400c6e08; lVar16 = *(longlong *)(lVar16 + 0x18); } } pcVar13 = (char *)(lVar10 + 0x16e8); uVar11 = param_3; puVar7 = FUN_1400d5c60(pcVar13,param_3); *puVar7 = psVar4; LAB_1400c6e08: if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) { FUN_14006cb70(pcVar13,uVar11,lVar16,uVar15); local_res8 = (short *)PTR_DAT_1401ac010; plVar6 = FUN_140070660(param_3,(longlong *)&local_res20,lVar16,uVar15); puVar18 = (undefined *)*plVar6; if ((undefined *)*plVar6 == (undefined *)0x0) { puVar18 = PTR_DAT_1401ac010; } pwVar12 = L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s"; ppsVar9 = &local_res8; FUN_140053d20((longlong *)ppsVar9,L"new TCP socket is accepted. RemoteClient_S=%p,TCP socket=%s" ,psVar4,puVar18); if (((local_res20 != (undefined *)0x0) && (local_res20 != PTR_DAT_1401ac010)) && (local_res20 + -8 != (undefined *)0x0)) { ppuVar8 = (undefined **)FUN_14006cb70(ppsVar9,pwVar12,psVar4,puVar18); local_60 = ppuVar8; FUN_14006b350((int *)ppuVar8); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(local_res20 + -4); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(local_res20 + -8); } FUN_14006b3e0((longlong)ppuVar8); } psVar19 = local_res8; psVar4 = local_res8; if (local_res8 == (short *)0x0) { psVar4 = (short *)PTR_DAT_1401ac010; } uVar5 = 0; lVar10 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0); FUN_1400cb700(lVar10,0,psVar4,puVar18); if (((psVar19 != (short *)0x0) && (psVar19 != (short *)PTR_DAT_1401ac010)) && (psVar19 + -4 != (short *)0x0)) { ppuVar8 = (undefined **)FUN_14006cb70(lVar10,uVar5,psVar4,puVar18); local_60 = ppuVar8; FUN_14006b350((int *)ppuVar8); local_58 = CONCAT31(local_58._1_3_,1); piVar1 = (int *)(psVar19 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(psVar19 + -4); } FUN_14006b3e0((longlong)ppuVar8); } } uVar5 = FUN_14006b3e0((longlong)piVar3); return CONCAT71((int7)((ulonglong)uVar5 >> 8),1); }