server-re/decomp/MessageServer_Release_x64/full/functions/0x1400b0790.c

185 lines
5.7 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400b0790 FUN_1400b0790
* Pseudocode, not original source. */
void FUN_1400b0790(longlong *param_1,longlong param_2,undefined8 param_3,undefined8 param_4)
{
longlong lVar1;
longlong *plVar2;
uint uVar3;
uint uVar4;
uint uVar5;
ulonglong uVar6;
uint *puVar7;
longlong *plVar8;
int *piVar9;
undefined ***pppuVar10;
uint *puVar11;
uint uVar12;
uint uVar13;
undefined8 uVar15;
longlong lVar16;
ulonglong uVar17;
uint **ppuVar18;
uint local_res8 [2];
uint *local_res18;
longlong local_res20;
undefined **local_50;
undefined8 local_48;
undefined8 local_40;
undefined8 local_38;
undefined8 local_30;
longlong *plVar14;
FUN_1400ac2e0(param_2,0,param_3,param_4);
(**(code **)(param_1[0xf] + 0x10))();
plVar14 = (longlong *)0x0;
uVar13 = 0;
if (((longlong *)param_1[699] == (longlong *)0x0) ||
(lVar16 = *(longlong *)param_1[699], plVar8 = (longlong *)(lVar16 + -0x40), lVar16 == 0)) {
plVar8 = plVar14;
}
plVar8 = plVar8 + 0x26;
uVar17 = (ulonglong)*(uint *)((longlong)param_1 + 0x6a4);
uVar15 = 1;
uVar6 = FUN_1400dbe90(plVar8,param_2,1,uVar17,local_res8);
if (-1 < (int)uVar6) {
return;
}
FUN_14006cb70(plVar8,param_2,uVar15,uVar17);
local_res18 = (uint *)PTR_DAT_1401ac010;
uVar3 = FUN_14006c9f0(L"Received stream from TCP server became inconsistent!");
uVar5 = 0;
plVar8 = plVar14;
if ((local_res18 != (uint *)0x0) &&
(plVar8 = (longlong *)0x0, local_res18 != (uint *)PTR_DAT_1401ac010)) {
plVar8 = (longlong *)(ulonglong)local_res18[-2];
}
uVar4 = uVar3;
if ((((int)uVar3 <= (int)plVar8) && (uVar4 = uVar5, local_res18 != (uint *)0x0)) &&
(local_res18 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_res18[-2];
}
uVar12 = 1;
if (1 < (int)uVar4) {
uVar12 = uVar4;
}
uVar4 = uVar5;
if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_res18[-2];
}
if ((int)uVar4 < (int)uVar12) {
if (local_res18 == (uint *)0x0) {
local_res18 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar12 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar12 == 0) {
FUN_1400031e0((longlong *)&local_res18,PTR_DAT_1401ac010,plVar8,uVar17);
}
else {
uVar4 = uVar5;
if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_res18[-2];
}
if (uVar12 != uVar4) {
puVar7 = (uint *)FUN_14006cbf0((longlong)(int)uVar12 * 2 + 10);
if (puVar7 != (uint *)0x0) {
*puVar7 = 0;
puVar7[1] = 1;
}
*puVar7 = uVar12;
uVar4 = uVar5;
if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_res18[-2];
}
puVar11 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar12 < (int)uVar4) {
LAB_1400b090b:
if (local_res18 != (uint *)0x0) {
puVar11 = local_res18;
}
}
else {
uVar12 = uVar5;
if (local_res18 != (uint *)0x0) {
if (local_res18 != (uint *)PTR_DAT_1401ac010) {
uVar12 = local_res18[-2];
}
goto LAB_1400b090b;
}
}
uVar6 = (ulonglong)uVar12;
FUN_14006ca20(puVar7 + 2,puVar11,uVar12);
FUN_1400031e0((longlong *)&local_res18,puVar11,uVar6,uVar17);
local_res18 = puVar7 + 2;
}
}
}
FUN_140002e40((longlong *)&local_res18);
puVar7 = local_res18;
if (local_res18 == (uint *)0x0) {
puVar7 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar7,L"Received stream from TCP server became inconsistent!",uVar3);
puVar7 = local_res18;
if (local_res18 == (uint *)0x0) {
puVar7 = (uint *)PTR_DAT_1401ac010;
}
uVar5 = FUN_14006c9f0((short *)puVar7);
uVar3 = uVar13;
if (0 < (int)uVar5) {
uVar3 = uVar5;
}
uVar5 = uVar13;
if ((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_1401ac010)) {
uVar5 = local_res18[-2];
}
if (((int)uVar5 <= (int)uVar3) && (uVar3 = uVar13, local_res18 != (uint *)0x0)) {
if (local_res18 == (uint *)PTR_DAT_1401ac010) goto LAB_1400b09bb;
uVar3 = local_res18[-2];
}
if (((local_res18 != (uint *)PTR_DAT_1401ac010) && (local_res18 != (uint *)0x0)) &&
(local_res18 + -2 != (uint *)0x0)) {
local_res18[-2] = uVar3;
*(undefined2 *)((longlong)local_res18 + (longlong)(int)uVar3 * 2) = 0;
}
LAB_1400b09bb:
local_48 = 0;
local_40 = 0;
local_38 = 0;
local_30 = 0;
local_50 = Proud::ByteArray::vftable;
ppuVar18 = &local_res18;
plVar8 = FUN_140078c10(&local_res20,(ulonglong)local_res8[0],1,(longlong *)ppuVar18,
(longlong)&local_50);
lVar16 = *param_1;
(**(code **)(lVar16 + 0x80))(param_1);
pppuVar10 = &local_50;
FUN_140078360(pppuVar10);
puVar7 = local_res18;
if (((local_res18 != (uint *)0x0) && (local_res18 != (uint *)PTR_DAT_1401ac010)) &&
(puVar11 = local_res18 + -2, puVar11 != (uint *)0x0)) {
piVar9 = (int *)FUN_14006cb70(pppuVar10,plVar8,lVar16,ppuVar18);
FUN_14006b350(piVar9);
puVar7 = puVar7 + -1;
*puVar7 = *puVar7 - 1;
if (*puVar7 == 0) {
FUN_14006cc60(puVar11);
}
FUN_14006b3e0((longlong)piVar9);
}
if ((((longlong *)param_1[699] != (longlong *)0x0) &&
(lVar1 = *(longlong *)param_1[699], lVar1 != 0)) &&
((plVar2 = *(longlong **)(lVar1 + 0xe8), plVar2 != (longlong *)0x0 && (*plVar2 != 0)))) {
if (plVar2 != (longlong *)0x0) {
plVar14 = (longlong *)*plVar2;
}
FUN_140071fc0(plVar14,plVar8,lVar16,ppuVar18);
}
return;
}