/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401ef420 FUN_1401ef420 * Pseudocode, not original source. */ void FUN_1401ef420(longlong param_1,undefined8 param_2,longlong param_3) { longlong *plVar1; longlong lVar2; undefined8 *puVar3; char cVar4; uint uVar5; uint uVar6; uint uVar7; uint *puVar8; undefined8 uVar9; void *pvVar10; uint *puVar11; int iVar12; void *pvVar13; uint uVar14; void *_Dst; uint uVar15; longlong *local_res18; undefined4 local_res20 [2]; uint *local_128; longlong *local_120; undefined4 local_118; undefined4 local_114; longlong local_110; void *local_108; undefined8 local_100; longlong local_f8; undefined8 local_f0; undefined4 local_e4; undefined4 local_e0 [2]; undefined1 local_d8 [8]; longlong local_d0; void *local_c8; int local_c0; int local_bc; undefined **local_b0; undefined8 local_a8; longlong local_a0; undefined8 local_98; undefined4 local_90; undefined4 local_8c; ulonglong local_88; undefined **local_80; undefined8 local_78; undefined8 local_70; undefined8 local_68; undefined8 local_60; undefined8 local_58; undefined1 local_50; undefined1 local_48 [8]; longlong *local_40; undefined8 local_38; local_38 = 0xfffffffffffffffe; if (*(int *)(param_3 + 0x28) != 1) { return; } (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))(); cVar4 = FUN_14016be00(param_3,local_res20); if (cVar4 == '\0') { return; } cVar4 = FUN_14016b370(param_3,local_e0,4); if (cVar4 == '\0') { return; } cVar4 = FUN_14016ba10(param_3,&local_88); if (cVar4 == '\0') { return; } if ((int)local_88 < 0) { return; } if (DAT_140344d70 <= (int)local_88) { return; } FUN_14016b440(local_d8); cVar4 = FUN_14016b6a0(param_3,local_d8,local_88 & 0xffffffff); if (cVar4 == '\0') { local_res18 = &local_d0; FUN_14016d0e0(&local_d0); if (local_c8 == (void *)0x0) { return; } if (-1 < local_bc) { return; } /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } FUN_1401d2620(*(undefined8 *)(param_1 + 0x108),&local_120,local_res20[0]); if ((((local_120 == (longlong *)0x0) || (lVar2 = *local_120, lVar2 == 0)) || (*(char *)(lVar2 + 0x684) != '\0')) || (*(char *)(lVar2 + 0x650) != '\0')) goto LAB_1401efa29; local_f0 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x88) + 0x18))(); pvVar13 = (void *)0x0; local_100 = 0; local_108 = (void *)0x0; local_110 = 0; local_f8 = 0; uVar15 = 0; local_e4 = 0; local_118 = 1; local_114 = local_e0[0]; local_110 = FUN_14016d120(); *(undefined8 *)(local_110 + 0x28) = 1; if (local_d0 == 0) { iVar12 = local_c0; if (local_c8 == (void *)0x0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { iVar12 = *(int *)(local_d0 + 0x18); } if (iVar12 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (local_108 == (void *)0x0) { if (iVar12 < 1) { if (local_110 == 0) goto LAB_1401ef635; iVar12 = 0; } else if (local_110 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } FUN_14004f0e0(local_110,iVar12); } else { if (local_100._4_4_ < iVar12) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_100 = CONCAT44(local_100._4_4_,iVar12); } LAB_1401ef635: if (local_d0 == 0) { if (local_c8 == (void *)0x0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } } else { local_c0 = *(int *)(local_d0 + 0x18); } pvVar10 = local_c8; if (local_c8 == (void *)0x0) { if (local_d0 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } pvVar10 = pvVar13; if (*(int *)(local_d0 + 0x18) != 0) { pvVar10 = *(void **)(local_d0 + 0x10); } } _Dst = local_108; if (local_108 == (void *)0x0) { if (local_110 == 0) { /* WARNING: Subroutine does not return */ FUN_14016d1e0(); } _Dst = pvVar13; if (*(int *)(local_110 + 0x18) != 0) { _Dst = *(void **)(local_110 + 0x10); } } memcpy(_Dst,pvVar10,(longlong)local_c0); local_a8 = 0; local_a0 = 0; local_98 = 0; local_b0 = Proud::CReceivedMessageList::vftable; local_90 = 1000; local_8c = 1; pvVar10 = pvVar13; if (local_120 != (longlong *)0x0) { pvVar10 = (void *)*local_120; } FUN_1401ff510((longlong)pvVar10 + 0x638,&local_118,&local_b0,&local_res18); if ((int)local_res18 != 0) { FUN_14016d8c0(); local_128 = (uint *)PTR_DAT_1403440a0; uVar5 = FUN_14016d740(L"Stream Extract Error at Reliable UDP"); pvVar10 = pvVar13; if ((local_128 != (uint *)0x0) && (pvVar10 = (void *)0x0, local_128 != (uint *)PTR_DAT_1403440a0)) { pvVar10 = (void *)(ulonglong)local_128[-2]; } uVar6 = 0; uVar7 = uVar5; if ((((int)uVar5 <= (int)pvVar10) && (uVar7 = uVar15, local_128 != (uint *)0x0)) && (uVar7 = uVar6, local_128 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_128[-2]; } uVar14 = 1; if (1 < (int)uVar7) { uVar14 = uVar7; } uVar7 = uVar6; if ((local_128 != (uint *)0x0) && (local_128 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_128[-2]; } if ((int)uVar7 < (int)uVar14) { if (local_128 == (uint *)0x0) { local_128 = (uint *)PTR_DAT_1403440a0; } if ((int)uVar14 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } if (uVar14 == 0) { FUN_14004eb70(&local_128); } else { uVar7 = uVar15; if ((local_128 != (uint *)0x0) && (local_128 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_128[-2]; } if (uVar14 != uVar7) { puVar8 = (uint *)FUN_14016d940((longlong)(int)uVar14 * 2 + 10); if (puVar8 != (uint *)0x0) { *puVar8 = 0; puVar8[1] = 1; } *puVar8 = uVar14; uVar7 = uVar15; if ((local_128 != (uint *)0x0) && (local_128 != (uint *)PTR_DAT_1403440a0)) { uVar7 = local_128[-2]; } puVar11 = (uint *)PTR_DAT_1403440a0; if ((int)uVar14 < (int)uVar7) { LAB_1401ef7e5: if (local_128 != (uint *)0x0) { puVar11 = local_128; } } else { uVar14 = uVar15; if (local_128 != (uint *)0x0) { if (local_128 != (uint *)PTR_DAT_1403440a0) { uVar14 = local_128[-2]; } goto LAB_1401ef7e5; } } FUN_14016d770(puVar8 + 2,puVar11,uVar14); FUN_14004eb70(&local_128); local_128 = puVar8 + 2; } } } FUN_14004e850(&local_128); puVar8 = local_128; if (local_128 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_1403440a0; } FUN_14016d770(puVar8,L"Stream Extract Error at Reliable UDP",uVar5); puVar8 = local_128; if (local_128 == (uint *)0x0) { puVar8 = (uint *)PTR_DAT_1403440a0; } uVar5 = FUN_14016d740(puVar8); uVar15 = 0; if (0 < (int)uVar5) { uVar15 = uVar5; } uVar5 = uVar6; if ((local_128 != (uint *)0x0) && (local_128 != (uint *)PTR_DAT_1403440a0)) { uVar5 = local_128[-2]; } if (((int)uVar15 < (int)uVar5) || (uVar15 = uVar6, local_128 == (uint *)0x0)) { LAB_1401ef881: if (((local_128 != (uint *)PTR_DAT_1403440a0) && (local_128 != (uint *)0x0)) && (local_128 + -2 != (uint *)0x0)) { local_128[-2] = uVar15; *(undefined2 *)((longlong)local_128 + (longlong)(int)uVar15 * 2) = 0; } } else if (local_128 != (uint *)PTR_DAT_1403440a0) { uVar15 = local_128[-2]; goto LAB_1401ef881; } local_78 = 0; local_70 = 0; local_68 = 0; local_60 = 0; local_80 = Proud::ByteArray::vftable; pvVar10 = pvVar13; if (local_120 != (longlong *)0x0) { pvVar10 = (void *)*local_120; } uVar9 = FUN_140198f80(local_48,(ulonglong)local_res18 & 0xffffffff, *(undefined4 *)((longlong)pvVar10 + 0x56c),&local_128,&local_80); (**(code **)(**(longlong **)(param_1 + 0x108) + 0x80))(*(longlong **)(param_1 + 0x108),uVar9); FUN_14019a9e0(&local_80); puVar8 = local_128; if (((local_128 != (uint *)0x0) && (local_128 != (uint *)PTR_DAT_1403440a0)) && (puVar11 = local_128 + -2, puVar11 != (uint *)0x0)) { uVar9 = FUN_14016d8c0(); local_58 = uVar9; FUN_14016db50(uVar9); local_50 = 1; puVar8 = puVar8 + -1; *puVar8 = *puVar8 - 1; if (*puVar8 == 0) { FUN_14016d970(puVar11); } FUN_14016dbe0(uVar9); local_50 = 0; } local_128 = (uint *)PTR_DAT_1403440a0; } while (iVar12 = (int)pvVar13, iVar12 != (int)local_98) { if ((iVar12 < 0) || ((int)local_98 <= iVar12)) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } *(undefined1 *)(local_a0 + (longlong)iVar12 * 0x48 + 0x40) = 1; FUN_1401f17a0(param_1,param_2); if ((int)local_98 <= iVar12) { /* WARNING: Subroutine does not return */ FUN_14016d6e0(); } pvVar13 = (void *)(ulonglong)(iVar12 + 1); } FUN_1401a7fe0(&local_b0); if (local_f8 != 0) { plVar1 = (longlong *)(local_f8 + 8); *plVar1 = *plVar1 + -1; if (*plVar1 == 0) { FUN_140178750(&local_f8,local_f8); } } local_40 = &local_110; FUN_14016d0e0(&local_110); if (local_108 != (void *)0x0) { if ((longlong)local_100 < 0) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } local_100 = local_100 & 0xffffffff00000000; } LAB_1401efa29: if ((local_120 != (longlong *)0x0) && (local_120[1] = local_120[1] + -1, local_120[1] == 0)) { puVar3 = (undefined8 *)*local_120; if (puVar3 != (undefined8 *)0x0) { (**(code **)*puVar3)(puVar3,1); } FUN_14016d970(local_120); } local_res18 = &local_d0; FUN_14016d0e0(&local_d0); if ((local_c8 != (void *)0x0) && (local_bc < 0)) { /* WARNING: Subroutine does not return */ FUN_14016d6b0(); } return; }