475 lines
15 KiB
C
475 lines
15 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x14009e440 FUN_14009e440
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e5a1) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e5ad) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e5a5) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e5b3) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e543) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e54f) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e547) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e555) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e601) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e60d) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e606) */
|
|
/* WARNING: Removing unreachable block (ram,0x00014009e613) */
|
|
|
|
void FUN_14009e440(SIZE_T *param_1,undefined8 param_2,SIZE_T param_3,undefined ***param_4)
|
|
|
|
{
|
|
undefined **ppuVar1;
|
|
undefined8 *puVar2;
|
|
longlong *plVar3;
|
|
uint uVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int iVar7;
|
|
longlong *plVar8;
|
|
undefined ***pppuVar9;
|
|
undefined *puVar10;
|
|
longlong *plVar11;
|
|
undefined ***pppuVar12;
|
|
undefined ***pppuVar13;
|
|
undefined8 uVar14;
|
|
undefined **ppuVar15;
|
|
undefined **ppuVar16;
|
|
undefined ***pppuVar17;
|
|
longlong lVar18;
|
|
longlong lVar19;
|
|
longlong *plVar20;
|
|
undefined ***pppuVar21;
|
|
size_t _Size;
|
|
undefined ***pppuVar22;
|
|
undefined ***pppuVar23;
|
|
int iVar24;
|
|
undefined ***local_res10;
|
|
undefined ***local_res18;
|
|
undefined **local_168;
|
|
undefined ***local_160;
|
|
undefined **local_158;
|
|
undefined ***local_150;
|
|
undefined ***local_148;
|
|
undefined8 local_140;
|
|
undefined8 local_138;
|
|
undefined8 local_130;
|
|
longlong local_128;
|
|
longlong local_120;
|
|
ulonglong local_118;
|
|
longlong *local_110;
|
|
undefined ***local_108;
|
|
undefined4 local_fc;
|
|
undefined8 local_f8;
|
|
longlong local_f0;
|
|
longlong local_e8;
|
|
ulonglong local_e0;
|
|
undefined ***local_d8;
|
|
undefined ***local_d0;
|
|
undefined4 local_c4;
|
|
undefined **local_c0;
|
|
undefined ***local_b8;
|
|
undefined ***local_b0;
|
|
undefined8 local_a8;
|
|
undefined8 local_a0;
|
|
uint local_98 [2];
|
|
longlong local_90;
|
|
longlong local_88;
|
|
undefined4 local_80;
|
|
int local_7c;
|
|
int *local_70;
|
|
undefined1 local_68;
|
|
undefined8 local_60;
|
|
undefined8 local_58 [4];
|
|
|
|
local_60 = 0xfffffffffffffffe;
|
|
local_70 = (int *)(**(code **)(*param_1 + 0x58))();
|
|
FUN_14006b350(local_70);
|
|
local_68 = 1;
|
|
if (DAT_1401b42cf != '\0') {
|
|
param_3 = *param_1;
|
|
(**(code **)(param_3 + 200))(param_1,L"Proud::CNetServerImpl::TestReliableUdpFrame");
|
|
}
|
|
plVar8 = FUN_14006fb50(local_58);
|
|
pppuVar9 = (undefined ***)FUN_14006ccc0(0x800,plVar8,param_3,param_4);
|
|
pppuVar23 = (undefined ***)0x0;
|
|
local_150 = (undefined ***)0x0;
|
|
local_148 = (undefined ***)0x0;
|
|
local_140 = 0;
|
|
local_138 = 0;
|
|
local_158 = Proud::CUncompressedFrameNumberArray::vftable;
|
|
local_res18 = pppuVar9;
|
|
if (pppuVar9 == (undefined ***)0x0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_150 = pppuVar9;
|
|
FUN_14007b600((longlong)&local_158,1,param_3);
|
|
lVar18 = (longlong)(int)local_140;
|
|
pppuVar12 = local_148;
|
|
if ((int)local_140 == 0) {
|
|
pppuVar12 = pppuVar23;
|
|
}
|
|
*(uint *)pppuVar12 = 5;
|
|
if ((int)local_140 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007b600((longlong)&local_158,(int)local_140 + 1,param_3);
|
|
lVar19 = (longlong)(int)local_140;
|
|
pppuVar12 = local_148;
|
|
if ((int)local_140 == 0) {
|
|
pppuVar12 = pppuVar23;
|
|
}
|
|
*(uint *)((longlong)pppuVar12 + lVar18 * 4) = 1;
|
|
if ((int)local_140 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007b600((longlong)&local_158,(int)local_140 + 1,param_3);
|
|
lVar18 = (longlong)(int)local_140;
|
|
pppuVar12 = local_148;
|
|
if ((int)local_140 == 0) {
|
|
pppuVar12 = pppuVar23;
|
|
}
|
|
*(uint *)((longlong)pppuVar12 + lVar19 * 4) = 2;
|
|
if ((int)local_140 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
FUN_14007b600((longlong)&local_158,(int)local_140 + 1,param_3);
|
|
pppuVar23 = local_148;
|
|
iVar5 = (int)local_140;
|
|
lVar19 = (longlong)(int)local_140;
|
|
pppuVar12 = local_148;
|
|
if ((int)local_140 == 0) {
|
|
pppuVar12 = (undefined ***)0x0;
|
|
}
|
|
*(uint *)((longlong)pppuVar12 + lVar18 * 4) = 4;
|
|
pppuVar12 = local_148;
|
|
if ((int)local_140 == 0) {
|
|
pppuVar12 = (undefined ***)0x0;
|
|
}
|
|
_Size = 0;
|
|
uVar14 = 4;
|
|
FUN_14007bfa0((longlong)pppuVar12,4,0);
|
|
if (iVar5 < 1) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar12,uVar14,_Size,param_4);
|
|
}
|
|
if (*(uint *)pppuVar23 == 1) {
|
|
if (iVar5 < 2) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar12,uVar14,_Size,param_4);
|
|
}
|
|
if (*(uint *)((longlong)pppuVar23 + 4) != 2) goto LAB_14009e697;
|
|
if (iVar5 < 3) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar12,uVar14,_Size,param_4);
|
|
}
|
|
if (*(uint *)(pppuVar23 + 1) != 4) goto LAB_14009e697;
|
|
if (iVar5 < 4) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar12,uVar14,_Size,param_4);
|
|
}
|
|
if (*(uint *)((longlong)pppuVar23 + 0xc) != 5) goto LAB_14009e697;
|
|
}
|
|
else {
|
|
LAB_14009e697:
|
|
FUN_14006cb70(pppuVar12,uVar14,_Size,param_4);
|
|
local_res10 = (undefined ***)PTR_DAT_1401ac010;
|
|
uVar4 = FUN_14006c9f0(L"Proud.QuickSort() failed!");
|
|
puVar10 = FUN_140002f30((longlong *)&local_res10,uVar4);
|
|
_Size = (size_t)uVar4;
|
|
FUN_14006ca20(puVar10,L"Proud.QuickSort() failed!",uVar4);
|
|
FUN_140003010((longlong *)&local_res10);
|
|
FUN_14009b550(param_1,(wchar_t *)&local_res10,_Size,param_4);
|
|
}
|
|
plVar20 = (longlong *)0x0;
|
|
local_118 = 0;
|
|
local_120 = 0;
|
|
local_128 = 0;
|
|
local_110 = (longlong *)0x0;
|
|
local_130 = 0;
|
|
local_fc = 0;
|
|
pppuVar12 = &local_168;
|
|
local_108 = pppuVar9;
|
|
plVar11 = FUN_14008a380((longlong *)pppuVar12,(longlong *)pppuVar9,_Size,param_4);
|
|
plVar3 = local_110;
|
|
plVar8 = (longlong *)*plVar11;
|
|
if (plVar8 != (longlong *)0x0) {
|
|
plVar8[1] = plVar8[1] + 1;
|
|
plVar20 = plVar8;
|
|
}
|
|
if (local_110 != (longlong *)0x0) {
|
|
plVar8 = local_110 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
puVar2 = (undefined8 *)*local_110;
|
|
local_res10 = local_108;
|
|
*puVar2 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if ((LPVOID)puVar2[2] != (LPVOID)0x0) {
|
|
if ((longlong *)puVar2[1] == (longlong *)0x0) {
|
|
FUN_14006cc60((LPVOID)puVar2[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)puVar2[1] + 0x18))();
|
|
}
|
|
}
|
|
(*(code *)(*local_res10)[3])(local_res10,puVar2);
|
|
(*(code *)(*local_108)[3])(local_108,plVar3);
|
|
pppuVar12 = local_108;
|
|
}
|
|
}
|
|
pppuVar13 = local_160;
|
|
ppuVar15 = local_168;
|
|
pppuVar21 = (undefined ***)0x0;
|
|
local_108 = (undefined ***)plVar11[1];
|
|
ppuVar16 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
pppuVar17 = pppuVar21;
|
|
pppuVar22 = pppuVar21;
|
|
local_110 = plVar20;
|
|
if (local_168 != (undefined **)0x0) {
|
|
ppuVar1 = local_168 + 1;
|
|
*ppuVar1 = *ppuVar1 + -1;
|
|
if (*ppuVar1 == (undefined *)0x0) {
|
|
puVar2 = (undefined8 *)*local_168;
|
|
*puVar2 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if ((LPVOID)puVar2[2] != (LPVOID)0x0) {
|
|
if ((longlong *)puVar2[1] == (longlong *)0x0) {
|
|
FUN_14006cc60((LPVOID)puVar2[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)puVar2[1] + 0x18))();
|
|
}
|
|
}
|
|
(*(code *)(*pppuVar13)[3])(pppuVar13,puVar2);
|
|
pppuVar12 = local_160;
|
|
(*(code *)(*local_160)[3])();
|
|
ppuVar16 = ppuVar15;
|
|
}
|
|
}
|
|
do {
|
|
if (((longlong)pppuVar22 < 0) || (iVar5 <= (int)pppuVar17)) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be30(pppuVar12,ppuVar16,_Size,param_4);
|
|
}
|
|
pppuVar12 = pppuVar21;
|
|
if (local_110 != (longlong *)0x0) {
|
|
pppuVar12 = (undefined ***)*local_110;
|
|
}
|
|
ppuVar16 = (undefined **)(ulonglong)*(uint *)((longlong)pppuVar23 + (longlong)pppuVar22 * 4);
|
|
FUN_1400df690((longlong)pppuVar12,ppuVar16,_Size,param_4);
|
|
uVar4 = (int)pppuVar17 + 1;
|
|
pppuVar17 = (undefined ***)(ulonglong)uVar4;
|
|
pppuVar22 = (undefined ***)((longlong)pppuVar22 + 1);
|
|
} while ((int)uVar4 < iVar5);
|
|
FUN_1400bca00(local_98);
|
|
FUN_1400bc4d0((longlong)local_98,ppuVar16,_Size,param_4);
|
|
pppuVar12 = pppuVar21;
|
|
if (local_110 != (longlong *)0x0) {
|
|
pppuVar12 = (undefined ***)*local_110;
|
|
}
|
|
FUN_1400df900((longlong)pppuVar12,(longlong)local_98,_Size,param_4);
|
|
FUN_1400bc600((int *)local_98,0,_Size,param_4);
|
|
local_e0 = 0;
|
|
local_e8 = 0;
|
|
local_f0 = 0;
|
|
local_d8 = (undefined ***)0x0;
|
|
local_f8 = 0;
|
|
local_c4 = 0;
|
|
local_d0 = pppuVar9;
|
|
local_res10 = (undefined ***)
|
|
FUN_14008a380((longlong *)&local_168,(longlong *)pppuVar9,_Size,param_4);
|
|
pppuVar17 = local_d0;
|
|
pppuVar13 = local_d8;
|
|
pppuVar12 = (undefined ***)*local_res10;
|
|
if (pppuVar12 != (undefined ***)0x0) {
|
|
pppuVar12[1] = (undefined **)((longlong)pppuVar12[1] + 1);
|
|
pppuVar21 = pppuVar12;
|
|
}
|
|
if (local_d8 != (undefined ***)0x0) {
|
|
pppuVar12 = local_d8 + 1;
|
|
*pppuVar12 = (undefined **)((longlong)*pppuVar12 + -1);
|
|
if (*pppuVar12 == (undefined **)0x0) {
|
|
ppuVar15 = *local_d8;
|
|
*ppuVar15 = (undefined *)Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if (ppuVar15[2] != (undefined *)0x0) {
|
|
if ((longlong *)ppuVar15[1] == (longlong *)0x0) {
|
|
FUN_14006cc60(ppuVar15[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)ppuVar15[1] + 0x18))();
|
|
}
|
|
}
|
|
(*(code *)(*pppuVar17)[3])(pppuVar17,ppuVar15);
|
|
(*(code *)(*local_d0)[3])(local_d0,pppuVar13);
|
|
}
|
|
}
|
|
pppuVar12 = local_160;
|
|
pppuVar13 = (undefined ***)0x0;
|
|
local_d0 = (undefined ***)local_res10[1];
|
|
local_d8 = pppuVar21;
|
|
if (local_168 != (undefined **)0x0) {
|
|
ppuVar15 = local_168 + 1;
|
|
*ppuVar15 = *ppuVar15 + -1;
|
|
if (*ppuVar15 == (undefined *)0x0) {
|
|
puVar2 = (undefined8 *)*local_168;
|
|
*puVar2 = Proud::CFastArray<Proud::CCompressedFrameNumbers::Elem,1>::vftable;
|
|
if ((LPVOID)puVar2[2] != (LPVOID)0x0) {
|
|
if ((longlong *)puVar2[1] == (longlong *)0x0) {
|
|
FUN_14006cc60((LPVOID)puVar2[2]);
|
|
}
|
|
else {
|
|
(**(code **)(*(longlong *)puVar2[1] + 0x18))();
|
|
}
|
|
}
|
|
(*(code *)(*pppuVar12)[3])(pppuVar12,puVar2);
|
|
(*(code *)(*local_160)[3])(local_160,local_168);
|
|
}
|
|
}
|
|
pppuVar12 = pppuVar13;
|
|
if (local_d8 != (undefined ***)0x0) {
|
|
pppuVar12 = (undefined ***)*local_d8;
|
|
}
|
|
FUN_1400df450((uint *)pppuVar12,local_98,_Size,param_4);
|
|
local_b0 = (undefined ***)0x0;
|
|
local_a8 = 0;
|
|
local_a0 = 0;
|
|
local_c0 = Proud::CUncompressedFrameNumberArray::vftable;
|
|
pppuVar12 = pppuVar13;
|
|
if (local_d8 != (undefined ***)0x0) {
|
|
pppuVar12 = (undefined ***)*local_d8;
|
|
}
|
|
pppuVar17 = &local_c0;
|
|
local_b8 = pppuVar9;
|
|
FUN_1400df7e0((longlong)pppuVar12,(longlong)pppuVar17,_Size,param_4);
|
|
pppuVar21 = local_b0;
|
|
iVar24 = 0;
|
|
if (iVar5 == (int)local_a8) {
|
|
pppuVar12 = pppuVar23;
|
|
if (iVar5 == 0) {
|
|
pppuVar12 = pppuVar13;
|
|
}
|
|
pppuVar17 = local_b0;
|
|
if ((int)local_a8 == 0) {
|
|
pppuVar17 = pppuVar13;
|
|
}
|
|
_Size = lVar19 << 2;
|
|
iVar5 = memcmp(pppuVar12,pppuVar17,_Size);
|
|
if (iVar5 == 0) goto LAB_14009eb7a;
|
|
}
|
|
FUN_14006cb70(pppuVar12,pppuVar17,_Size,param_4);
|
|
local_res10 = (undefined ***)PTR_DAT_1401ac010;
|
|
iVar6 = FUN_14006c9f0(L"FrameNumberList pack/unpack failed!");
|
|
iVar5 = iVar24;
|
|
if ((local_res10 != (undefined ***)0x0) && (local_res10 != (undefined ***)PTR_DAT_1401ac010)) {
|
|
iVar5 = *(int *)(local_res10 + -1);
|
|
}
|
|
iVar7 = iVar6;
|
|
if (((iVar6 <= iVar5) && (iVar7 = iVar24, local_res10 != (undefined ***)0x0)) &&
|
|
(local_res10 != (undefined ***)PTR_DAT_1401ac010)) {
|
|
iVar7 = *(int *)(local_res10 + -1);
|
|
}
|
|
iVar5 = 1;
|
|
if (1 < iVar7) {
|
|
iVar5 = iVar7;
|
|
}
|
|
iVar7 = iVar24;
|
|
if ((local_res10 != (undefined ***)0x0) && (local_res10 != (undefined ***)PTR_DAT_1401ac010)) {
|
|
iVar7 = *(int *)(local_res10 + -1);
|
|
}
|
|
if (iVar7 < iVar5) {
|
|
FUN_140002d60((longlong *)&local_res10,iVar5);
|
|
}
|
|
FUN_140002e40((longlong *)&local_res10);
|
|
pppuVar12 = local_res10;
|
|
if (local_res10 == (undefined ***)0x0) {
|
|
pppuVar12 = (undefined ***)PTR_DAT_1401ac010;
|
|
}
|
|
FUN_14006ca20(pppuVar12,L"FrameNumberList pack/unpack failed!",iVar6);
|
|
pppuVar12 = local_res10;
|
|
if (local_res10 == (undefined ***)0x0) {
|
|
pppuVar12 = (undefined ***)PTR_DAT_1401ac010;
|
|
}
|
|
uVar4 = FUN_14006c9f0((short *)pppuVar12);
|
|
puVar10 = PTR_DAT_1401ac010;
|
|
if (0 < (int)uVar4) {
|
|
pppuVar13 = (undefined ***)(ulonglong)uVar4;
|
|
}
|
|
iVar5 = (int)pppuVar13;
|
|
if ((local_res10 != (undefined ***)0x0) && (local_res10 != (undefined ***)PTR_DAT_1401ac010)) {
|
|
iVar24 = *(int *)(local_res10 + -1);
|
|
}
|
|
if ((iVar5 < iVar24) || (iVar5 = 0, local_res10 == (undefined ***)0x0)) {
|
|
LAB_14009eb45:
|
|
if (((local_res10 != (undefined ***)PTR_DAT_1401ac010) && (local_res10 != (undefined ***)0x0))
|
|
&& (local_res10 + -1 != (undefined ***)0x0)) {
|
|
*(int *)(local_res10 + -1) = iVar5;
|
|
*(undefined2 *)((longlong)local_res10 + (longlong)iVar5 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_res10 != (undefined ***)PTR_DAT_1401ac010) {
|
|
iVar5 = *(int *)(local_res10 + -1);
|
|
goto LAB_14009eb45;
|
|
}
|
|
FUN_14009b550(param_1,(wchar_t *)&local_res10,(SIZE_T)puVar10,param_4);
|
|
pppuVar21 = local_b0;
|
|
LAB_14009eb7a:
|
|
local_c0 = Proud::CFastArray<Proud::FrameNumber,1>::vftable;
|
|
if (pppuVar21 != (undefined ***)0x0) {
|
|
if (local_b8 == (undefined ***)0x0) {
|
|
FUN_14006cc60(pppuVar21);
|
|
}
|
|
else {
|
|
(*(code *)(*local_b8)[3])(local_b8,pppuVar21);
|
|
}
|
|
}
|
|
if (local_d8 != (undefined ***)0x0) {
|
|
pppuVar12 = local_d8 + 1;
|
|
*pppuVar12 = (undefined **)((longlong)*pppuVar12 + -1);
|
|
if (*pppuVar12 == (undefined **)0x0) {
|
|
FUN_140080140((longlong)&local_d8,(longlong *)local_d8);
|
|
}
|
|
}
|
|
FUN_1400d1800(&local_f0);
|
|
if (local_e8 != 0) {
|
|
if ((longlong)local_e0 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_e0 = local_e0 & 0xffffffff00000000;
|
|
}
|
|
FUN_1400d1800(&local_90);
|
|
if (local_88 != 0) {
|
|
if (local_7c < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_80 = 0;
|
|
}
|
|
if (local_110 != (longlong *)0x0) {
|
|
plVar8 = local_110 + 1;
|
|
*plVar8 = *plVar8 + -1;
|
|
if (*plVar8 == 0) {
|
|
FUN_140080140((longlong)&local_110,local_110);
|
|
}
|
|
}
|
|
FUN_1400d1800(&local_128);
|
|
if (local_120 != 0) {
|
|
if ((longlong)local_118 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14006be00();
|
|
}
|
|
local_118 = local_118 & 0xffffffff00000000;
|
|
}
|
|
if (local_150 == (undefined ***)0x0) {
|
|
FUN_14006cc60(pppuVar23);
|
|
}
|
|
else {
|
|
(*(code *)(*local_150)[3])(local_150,pppuVar23);
|
|
}
|
|
(*(code *)**pppuVar9)(pppuVar9,1);
|
|
FUN_14006b3e0((longlong)local_70);
|
|
return;
|
|
}
|
|
|