/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401d5dd0 FUN_1401d5dd0 * Pseudocode, not original source. */ void FUN_1401d5dd0(longlong *param_1,undefined8 param_2,undefined4 param_3,longlong param_4, int *param_5,undefined4 *param_6) { undefined8 *puVar1; longlong lVar2; longlong lVar3; int iVar4; int iVar5; int iVar6; int *piVar7; undefined8 uVar8; longlong *plVar9; longlong lVar10; int *piVar11; longlong lVar12; longlong lVar13; longlong lVar14; int iVar15; int iVar16; ulonglong uVar17; ulonglong uVar18; double dVar19; longlong *local_res10; undefined **local_c8; undefined4 local_c0; undefined2 local_bc; undefined **local_b8; undefined8 local_b0; undefined8 local_a8; undefined8 local_a0; undefined8 local_98; undefined8 local_90; undefined4 local_88; longlong local_80; undefined4 local_78; undefined4 local_74; undefined1 local_68 [8]; undefined8 local_60; undefined8 local_58; undefined1 local_50; lVar3 = (longlong)param_5; local_60 = 0xfffffffffffffffe; FUN_1401a7d90(param_5,0); uVar17 = (ulonglong)*(int *)(lVar3 + 0x18); FUN_1401becf0(&local_90); local_80 = lVar3; lVar14 = 0; local_78 = 0; local_74 = *(undefined4 *)((longlong)param_1 + 0x6a4); local_90 = param_2; local_88 = param_3; iVar4 = FUN_1401bf780(&local_90,param_6); if (-1 < iVar4) { local_c8 = Proud::AddrPort::vftable; local_c0 = *(undefined4 *)(param_4 + 8); local_bc = *(undefined2 *)(param_4 + 0xc); plVar9 = (longlong *)FUN_1401d0f00(param_1,&local_res10,&local_c8); lVar13 = lVar14; if ((longlong *)*plVar9 != (longlong *)0x0) { lVar13 = *(longlong *)*plVar9; } if ((local_res10 != (longlong *)0x0) && (local_res10[1] = local_res10[1] + -1, local_res10[1] == 0)) { puVar1 = (undefined8 *)*local_res10; if (puVar1 != (undefined8 *)0x0) { (**(code **)*puVar1)(puVar1,1); } FUN_14016d970(local_res10); } if (iVar4 < 1) { return; } lVar12 = uVar17 * 0x48; uVar18 = uVar17; do { lVar10 = 0; if (((longlong)(uVar17 + lVar14) < 0) || (*(int *)(lVar3 + 0x18) <= (int)uVar18)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } lVar2 = *(longlong *)(lVar3 + 0x10); *(undefined4 *)(lVar12 + 0x38 + lVar2) = *(undefined4 *)(param_4 + 8); *(undefined2 *)(lVar12 + 0x3c + lVar2) = *(undefined2 *)(param_4 + 0xc); if (lVar13 == 0) { if ((longlong *)param_1[0x2ae] != (longlong *)0x0) { lVar10 = *(longlong *)param_1[0x2ae]; } if ((*(int *)(param_4 + 8) == *(int *)(lVar10 + 0xd0)) && (*(short *)(param_4 + 0xc) == *(short *)(lVar10 + 0xd4))) { *(undefined4 *)(lVar12 + 0x28 + lVar2) = 1; FUN_1401c7210(param_1); } else { *(undefined4 *)(lVar12 + 0x28 + lVar2) = 0; } } else { *(undefined4 *)(lVar12 + 0x28 + lVar2) = *(undefined4 *)(lVar13 + 0x56c); dVar19 = (double)(**(code **)(param_1[0xe] + 0x1c0))(param_1 + 0xe); dVar19 = dVar19 - *(double *)(lVar13 + 0xc0); if (0.0 < dVar19) { *(double *)(lVar13 + 0x140) = dVar19; } uVar8 = (**(code **)(param_1[0xe] + 0x1c0))(param_1 + 0xe); *(undefined8 *)(lVar13 + 0xc0) = uVar8; *(int *)(lVar13 + 0x100) = *(int *)(lVar13 + 0x100) + 1; } uVar18 = (ulonglong)((int)uVar18 + 1); lVar14 = lVar14 + 1; lVar12 = lVar12 + 0x48; } while (lVar14 < iVar4); return; } FUN_14016d8c0(); param_5 = (int *)PTR_DAT_1403440a0; iVar5 = FUN_14016d740(L"ExtractMessageFromUdpRecvQueue : addedCount < 0"); iVar16 = 0; iVar4 = 0; if ((param_5 != (int *)0x0) && (iVar4 = 0, param_5 != (int *)PTR_DAT_1403440a0)) { iVar4 = param_5[-2]; } iVar6 = iVar5; if (((iVar5 <= iVar4) && (iVar6 = iVar16, param_5 != (int *)0x0)) && (param_5 != (int *)PTR_DAT_1403440a0)) { iVar6 = param_5[-2]; } iVar4 = 1; if (1 < iVar6) { iVar4 = iVar6; } iVar6 = iVar16; if ((param_5 != (int *)0x0) && (param_5 != (int *)PTR_DAT_1403440a0)) { iVar6 = param_5[-2]; } iVar15 = 0; if (iVar6 < iVar4) { if (param_5 == (int *)0x0) { param_5 = (int *)PTR_DAT_1403440a0; } if (iVar4 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (iVar4 == 0) { FUN_14004eb70(¶m_5); } else { iVar6 = iVar16; if ((param_5 != (int *)0x0) && (param_5 != (int *)PTR_DAT_1403440a0)) { iVar6 = param_5[-2]; } if (iVar4 != iVar6) { piVar7 = (int *)FUN_14016d940((longlong)iVar4 * 2 + 10); if (piVar7 != (int *)0x0) { *piVar7 = 0; piVar7[1] = 1; } *piVar7 = iVar4; iVar6 = iVar15; if ((param_5 != (int *)0x0) && (param_5 != (int *)PTR_DAT_1403440a0)) { iVar6 = param_5[-2]; } piVar11 = (int *)PTR_DAT_1403440a0; if (iVar4 < iVar6) { LAB_1401d5f52: if (param_5 != (int *)0x0) { piVar11 = param_5; } } else { iVar4 = iVar16; if (param_5 != (int *)0x0) { if (param_5 != (int *)PTR_DAT_1403440a0) { iVar4 = param_5[-2]; } goto LAB_1401d5f52; } } FUN_14016d770(piVar7 + 2,piVar11,iVar4); FUN_14004eb70(¶m_5); param_5 = piVar7 + 2; } } } FUN_14004e850(¶m_5); piVar7 = param_5; if (param_5 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } FUN_14016d770(piVar7,L"ExtractMessageFromUdpRecvQueue : addedCount < 0",iVar5); piVar7 = param_5; if (param_5 == (int *)0x0) { piVar7 = (int *)PTR_DAT_1403440a0; } iVar5 = FUN_14016d740(piVar7); iVar4 = 0; if (0 < iVar5) { iVar4 = iVar5; } iVar5 = iVar15; if ((param_5 != (int *)0x0) && (param_5 != (int *)PTR_DAT_1403440a0)) { iVar5 = param_5[-2]; } if ((iVar5 <= iVar4) && (iVar4 = iVar15, param_5 != (int *)0x0)) { if (param_5 == (int *)PTR_DAT_1403440a0) goto LAB_1401d600a; iVar4 = param_5[-2]; } if (((param_5 != (int *)PTR_DAT_1403440a0) && (param_5 != (int *)0x0)) && (param_5 + -2 != (int *)0x0)) { param_5[-2] = iVar4; *(undefined2 *)((longlong)param_5 + (longlong)iVar4 * 2) = 0; } LAB_1401d600a: local_b0 = 0; local_a8 = 0; local_a0 = 0; local_98 = 0; local_b8 = Proud::ByteArray::vftable; uVar8 = FUN_140198f80(local_68,*param_6,(int)param_1[0x2af],¶m_5,&local_b8); (**(code **)(*param_1 + 0x88))(param_1,uVar8); FUN_14019a9e0(&local_b8); piVar7 = param_5; if (((param_5 != (int *)0x0) && (param_5 != (int *)PTR_DAT_1403440a0)) && (piVar11 = param_5 + -2, piVar11 != (int *)0x0)) { uVar8 = FUN_14016d8c0(); local_58 = uVar8; FUN_14016db50(uVar8); local_50 = 1; piVar7 = piVar7 + -1; *piVar7 = *piVar7 + -1; if (*piVar7 == 0) { FUN_14016d970(piVar11); } FUN_14016dbe0(uVar8); } return; }