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

404 lines
12 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c0ec0 FUN_1400c0ec0
* Pseudocode, not original source. */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
ulonglong FUN_1400c0ec0(longlong *param_1,longlong *param_2,int *param_3,uint *param_4,uint param_5)
{
short *psVar1;
int iVar2;
uint uVar3;
uint uVar4;
ulonglong uVar5;
uint *puVar6;
longlong *plVar7;
undefined ***pppuVar8;
ulonglong uVar9;
undefined8 *puVar10;
ulonglong uVar11;
short **ppsVar12;
undefined4 *puVar13;
wchar_t *pwVar14;
uint *puVar15;
undefined1 *puVar16;
undefined8 uVar17;
longlong lVar18;
uint uVar19;
ulonglong uVar20;
SIZE_T SVar21;
int *piVar22;
ulonglong uVar23;
uint **ppuVar24;
short *psVar25;
undefined1 auStackY_1b18 [32];
uint *local_1ae8;
longlong *local_1ae0;
uint local_1ad8 [2];
int local_1ad0 [2];
longlong local_1ac8;
ulonglong local_1ac0;
int local_1ab8;
int local_1ab4;
undefined8 local_1aa8;
longlong local_1aa0;
ulonglong local_1a98;
uint local_1a90;
int local_1a8c;
uint *local_1a80;
int *local_1a78;
short *local_1a70;
undefined ***local_1a68;
undefined1 local_1a60;
undefined **local_1a58;
undefined8 local_1a50;
undefined8 local_1a48;
undefined8 local_1a40;
undefined8 local_1a38;
undefined8 local_1a30;
undefined4 local_1a28 [2];
longlong local_1a20;
longlong local_1a18;
undefined4 local_1a10;
int local_1a0c;
undefined1 local_1a00 [136];
longlong local_1978 [400];
longlong *local_cf8;
undefined4 local_cf0;
undefined4 local_cec;
undefined1 local_ce8 [3216];
ulonglong local_58;
undefined8 uStack_48;
uStack_48 = 0x1400c0edf;
local_1a30 = 0xfffffffffffffffe;
local_58 = DAT_1401ac5a0 ^ (ulonglong)auStackY_1b18;
local_1a80 = param_4;
local_1a78 = param_3;
if ((param_3[10] == 0) ||
(plVar7 = param_2, puVar6 = param_4,
iVar2 = FUN_1400de5d0((longlong)param_2,param_2,param_3,param_4), iVar2 < 0x33))
goto LAB_1400c1576;
FUN_1400bca00((undefined4 *)&local_1aa8);
FUN_1400bc4d0((longlong)&local_1aa8,plVar7,(SIZE_T)param_3,puVar6);
puVar10 = &local_1aa8;
plVar7 = param_2;
FUN_1400bcde0(puVar10,(longlong)param_2,(SIZE_T)param_3,(longlong)puVar6);
if (local_1aa0 == 0) {
uVar3 = local_1a90;
if (local_1a98 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar10,plVar7,param_3,puVar6);
}
}
else {
uVar3 = *(uint *)(local_1aa0 + 0x18);
}
FUN_1400bca00(local_1ad0);
FUN_1400bc4d0((longlong)local_1ad0,plVar7,(SIZE_T)param_3,puVar6);
uVar5 = (ulonglong)uVar3;
FUN_1400bcb60(local_1ad0,uVar5,(SIZE_T)param_3,puVar6);
uVar11 = (ulonglong)uVar3;
local_1ad8[0] = FUN_1400f6750(uVar3);
uVar9 = 0;
uVar20 = local_1a98;
if (local_1a98 == 0) {
if (local_1aa0 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(uVar11,uVar5,0,puVar6);
}
uVar20 = uVar9;
if (*(int *)(local_1aa0 + 0x18) != 0) {
uVar20 = *(ulonglong *)(local_1aa0 + 0x10);
}
}
uVar11 = local_1ac0;
if (local_1ac0 == 0) {
if (local_1ac8 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,uVar5,uVar20,puVar6);
}
uVar11 = uVar9;
if (*(int *)(local_1ac8 + 0x18) != 0) {
uVar11 = *(ulonglong *)(local_1ac8 + 0x10);
}
}
uVar23 = (ulonglong)uVar3;
puVar6 = local_1ad8;
uVar5 = FUN_1400f65c0(uVar11,puVar6,uVar20,uVar3);
if ((int)uVar5 == 0) {
uVar3 = FUN_1400de5d0((longlong)param_2,puVar6,uVar20,uVar23);
if (local_1ad8[0] + 9 < uVar3) {
FUN_1400bcb60(local_1ad0,(ulonglong)local_1ad8[0],uVar20,uVar23);
FUN_1400bca00(local_1a28);
SVar21 = 0x80;
puVar16 = local_1a00;
FUN_1400bc680((longlong)local_1a28,(longlong)puVar16,0x80,uVar23);
uVar17 = CONCAT71((int7)((ulonglong)puVar16 >> 8),0x26);
puVar13 = local_1a28;
FUN_140054a10((longlong)puVar13,uVar17,SVar21,uVar23);
if (local_1ac8 == 0) {
iVar2 = local_1ab8;
if (local_1ac0 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar13,uVar17,SVar21,uVar23);
}
}
else {
iVar2 = *(int *)(local_1ac8 + 0x18);
}
lVar18 = (longlong)iVar2;
FUN_1400bddd0((longlong)local_1a28,lVar18,SVar21,uVar23);
iVar2 = FUN_1400de5d0((longlong)param_2,lVar18,SVar21,uVar23);
FUN_1400bddd0((longlong)local_1a28,(longlong)iVar2,SVar21,uVar23);
local_cec = 200;
local_cf0 = 0;
local_cf8 = local_1978;
FUN_14007db50((longlong)local_ce8,(longlong)local_1a28,SVar21);
puVar16 = local_ce8;
FUN_14007cb60((longlong)local_1978,(longlong)puVar16,SVar21,uVar23);
FUN_14007ca50((longlong)local_ce8,puVar16,SVar21,uVar23);
FUN_14007db50((longlong)local_ce8,(longlong)local_1ad0,SVar21);
puVar16 = local_ce8;
FUN_14007cb60((longlong)local_1978,(longlong)puVar16,SVar21,uVar23);
FUN_14007ca50((longlong)local_ce8,puVar16,SVar21,uVar23);
plVar7 = local_1978;
piVar22 = local_1a78;
uVar9 = FUN_1400bf730(param_1,plVar7,local_1a78,(int *)param_4,param_5);
FUN_14007ca50((longlong)local_1978,plVar7,piVar22,param_4);
local_1ae0 = &local_1a20;
FUN_1400d1800(&local_1a20);
if (local_1a18 != 0) {
if (local_1a0c < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_1a10 = 0;
}
local_1ae0 = &local_1ac8;
FUN_1400d1800(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_1400d1800(&local_1aa0);
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
return uVar9 & 0xff;
}
local_1ae0 = &local_1ac8;
FUN_1400d1800(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_1400d1800(&local_1aa0);
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
goto LAB_1400c1576;
}
FUN_14006cb70(uVar11,puVar6,uVar20,uVar23);
local_1a70 = (short *)PTR_DAT_1401ac010;
uVar5 = uVar5 & 0xffffffff;
pwVar14 = L"Packet compression failed! Error code=%d";
ppsVar12 = &local_1a70;
FUN_140053d20((longlong *)ppsVar12,L"Packet compression failed! Error code=%d",uVar5,uVar23);
psVar1 = local_1a70;
psVar25 = local_1a70;
if (local_1a70 == (short *)0x0) {
psVar25 = (short *)PTR_DAT_1401ac010;
}
FUN_14006cb70(ppsVar12,pwVar14,uVar5,uVar23);
local_1ae8 = (uint *)PTR_DAT_1401ac010;
uVar3 = FUN_14006c9f0(psVar25);
if ((local_1ae8 != (uint *)0x0) && (uVar9 = 0, local_1ae8 != (uint *)PTR_DAT_1401ac010)) {
uVar9 = (ulonglong)local_1ae8[-2];
}
uVar4 = uVar3;
if ((((int)uVar3 <= (int)uVar9) && (uVar4 = 0, local_1ae8 != (uint *)0x0)) &&
(local_1ae8 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_1ae8[-2];
}
uVar19 = 1;
if (1 < (int)uVar4) {
uVar19 = uVar4;
}
if (local_1ae8 == (uint *)0x0) {
uVar4 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) {
uVar4 = 0;
}
else {
uVar4 = local_1ae8[-2];
}
if ((int)uVar4 < (int)uVar19) {
if (local_1ae8 == (uint *)0x0) {
local_1ae8 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar19 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar19 == 0) {
FUN_1400031e0((longlong *)&local_1ae8,PTR_DAT_1401ac010,uVar9,uVar23);
}
else {
if (local_1ae8 == (uint *)0x0) {
uVar4 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) {
uVar4 = 0;
}
else {
uVar4 = local_1ae8[-2];
}
if (uVar19 != uVar4) {
puVar6 = (uint *)FUN_14006cbf0((longlong)(int)uVar19 * 2 + 10);
if (puVar6 != (uint *)0x0) {
*puVar6 = 0;
puVar6[1] = 1;
}
*puVar6 = uVar19;
if (local_1ae8 == (uint *)0x0) {
uVar4 = 0;
}
else if (local_1ae8 == (uint *)PTR_DAT_1401ac010) {
uVar4 = 0;
}
else {
uVar4 = local_1ae8[-2];
}
puVar15 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar19 < (int)uVar4) {
LAB_1400c1145:
if (local_1ae8 != (uint *)0x0) {
puVar15 = local_1ae8;
}
}
else {
if (local_1ae8 != (uint *)0x0) {
if (local_1ae8 == (uint *)PTR_DAT_1401ac010) {
uVar19 = 0;
}
else {
uVar19 = local_1ae8[-2];
}
goto LAB_1400c1145;
}
uVar19 = 0;
}
uVar9 = (ulonglong)uVar19;
FUN_14006ca20(puVar6 + 2,puVar15,uVar19);
FUN_1400031e0((longlong *)&local_1ae8,puVar15,uVar9,uVar23);
param_4 = local_1a80;
local_1ae8 = puVar6 + 2;
}
}
}
FUN_140002e40((longlong *)&local_1ae8);
puVar6 = local_1ae8;
if (local_1ae8 == (uint *)0x0) {
puVar6 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar6,psVar25,uVar3);
puVar6 = local_1ae8;
if (local_1ae8 == (uint *)0x0) {
puVar6 = (uint *)PTR_DAT_1401ac010;
}
uVar4 = FUN_14006c9f0((short *)puVar6);
uVar19 = 0;
uVar3 = 0;
if (0 < (int)uVar4) {
uVar3 = uVar4;
}
uVar4 = uVar19;
if ((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1401ac010)) {
uVar4 = local_1ae8[-2];
}
if (((int)uVar3 < (int)uVar4) || (uVar3 = uVar19, local_1ae8 == (uint *)0x0)) {
LAB_1400c11e0:
if (((local_1ae8 != (uint *)PTR_DAT_1401ac010) && (local_1ae8 != (uint *)0x0)) &&
(local_1ae8 + -2 != (uint *)0x0)) {
local_1ae8[-2] = uVar3;
*(undefined2 *)((longlong)local_1ae8 + (longlong)(int)uVar3 * 2) = 0;
}
}
else if (local_1ae8 != (uint *)PTR_DAT_1401ac010) {
uVar3 = local_1ae8[-2];
goto LAB_1400c11e0;
}
local_1a50 = 0;
local_1a48 = 0;
local_1a40 = 0;
local_1a38 = 0;
local_1a58 = Proud::ByteArray::vftable;
ppuVar24 = &local_1ae8;
plVar7 = FUN_140078c10((longlong *)&local_1ae0,0x27,(ulonglong)*param_4,(longlong *)ppuVar24,
(longlong)&local_1a58);
lVar18 = *param_1;
(**(code **)(lVar18 + 0x80))(param_1);
pppuVar8 = &local_1a58;
FUN_140078360(pppuVar8);
puVar6 = local_1ae8;
if (((local_1ae8 != (uint *)0x0) && (local_1ae8 != (uint *)PTR_DAT_1401ac010)) &&
(puVar15 = local_1ae8 + -2, puVar15 != (uint *)0x0)) {
pppuVar8 = (undefined ***)FUN_14006cb70(pppuVar8,plVar7,lVar18,ppuVar24);
local_1a68 = pppuVar8;
FUN_14006b350((int *)pppuVar8);
local_1a60 = 1;
puVar6 = puVar6 + -1;
*puVar6 = *puVar6 - 1;
if (*puVar6 == 0) {
FUN_14006cc60(puVar15);
}
FUN_14006b3e0((longlong)pppuVar8);
}
if (((psVar1 != (short *)0x0) && (psVar1 != (short *)PTR_DAT_1401ac010)) &&
(psVar1 + -4 != (short *)0x0)) {
pppuVar8 = (undefined ***)FUN_14006cb70(pppuVar8,plVar7,lVar18,ppuVar24);
local_1a68 = pppuVar8;
FUN_14006b350((int *)pppuVar8);
local_1a60 = 1;
piVar22 = (int *)(psVar1 + -2);
*piVar22 = *piVar22 + -1;
if (*piVar22 == 0) {
FUN_14006cc60(psVar1 + -4);
}
FUN_14006b3e0((longlong)pppuVar8);
}
local_1ae0 = &local_1ac8;
FUN_1400d1800(&local_1ac8);
if (local_1ac0 != 0) {
if (local_1ab4 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_1ab8 = 0;
}
local_1ae0 = &local_1aa0;
FUN_1400d1800(&local_1aa0);
param_4 = local_1a80;
if ((local_1a98 != 0) && (local_1a8c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
LAB_1400c1576:
uVar9 = FUN_1400bf730(param_1,param_2,local_1a78,(int *)param_4,param_5);
return uVar9;
}