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

118 lines
4.4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400d6760 FUN_1400d6760
* Pseudocode, not original source. */
void FUN_1400d6760(longlong *param_1,undefined8 param_2,undefined8 param_3,ulonglong param_4,
longlong param_5,double param_6,uint *param_7)
{
ushort uVar1;
longlong lVar2;
int iVar3;
uint uVar4;
ulonglong uVar5;
longlong *plVar6;
longlong *plVar7;
longlong *plVar8;
undefined8 uVar9;
undefined2 uVar10;
longlong **pplVar11;
ulonglong uVar12;
ulonglong uVar13;
longlong *local_78;
exception local_70 [88];
uVar10 = (undefined2)param_3;
uVar9 = param_2;
uVar12 = param_4;
uVar5 = FUN_14006fbe0(param_4);
if (((char)uVar5 != '\0') && (iVar3 = FUN_1400de5d0(param_5,uVar9,param_3,uVar12), 0 < iVar3)) {
uVar1 = *(ushort *)(param_4 + 0xc);
pplVar11 = (longlong **)(ulonglong)uVar1;
uVar4 = *(uint *)(param_4 + 8);
uVar13 = (ulonglong)uVar4;
uVar12 = (ulonglong)(uVar1 ^ uVar4) % (ulonglong)*(uint *)(param_1 + 9);
uVar5 = uVar12;
if (param_1[5] != 0) {
lVar2 = *(longlong *)(param_1[5] + uVar12 * 8);
while ((lVar2 != 0 &&
(uVar5 = (ulonglong)*(uint *)(lVar2 + 0x28) % (ulonglong)*(uint *)(param_1 + 9),
(int)uVar12 == (int)uVar5))) {
if ((*(uint *)(lVar2 + 8) == uVar4) && (*(ushort *)(lVar2 + 0xc) == uVar1)) {
plVar6 = *(longlong **)(lVar2 + 0x10);
goto LAB_1400d6878;
}
lVar2 = *(longlong *)(lVar2 + 0x18);
}
}
plVar6 = FUN_1400d6330((longlong *)param_1[0xf],uVar5,pplVar11,uVar13);
pplVar11 = &local_78;
plVar6[0x31] = param_1[0xf];
*(undefined4 *)((longlong)plVar6 + 0x1bc) = 1;
plVar6[0x32] = (longlong)param_1;
*(undefined4 *)(plVar6 + 0x2f) = *(undefined4 *)(param_4 + 8);
*(undefined2 *)((longlong)plVar6 + 0x17c) = *(undefined2 *)(param_4 + 0xc);
*(undefined2 *)(plVar6 + 0x30) = uVar10;
plVar6[0x2d] = (longlong)param_6;
uVar5 = param_4;
local_78 = plVar6;
FUN_1400d6280((char *)(param_1 + 4),param_4,pplVar11);
LAB_1400d6878:
if (((int)plVar6[0x2f] != *(int *)(param_4 + 8)) ||
(*(short *)((longlong)plVar6 + 0x17c) != *(short *)(param_4 + 0xc))) {
FUN_14006ba50(local_70,L"PacketQueue consistency failed!",pplVar11,uVar13);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_70,(ThrowInfo *)&DAT_1401a93e8);
}
uVar4 = *param_7;
if (((int)uVar4 < 0) || (5 < (int)uVar4)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (DAT_1401ac144 == '\0') {
uVar4 = 0;
}
*param_7 = uVar4;
if (5 < uVar4) {
/* WARNING: Subroutine does not return */
FUN_14006be30(0,uVar5,pplVar11,uVar13);
}
plVar8 = plVar6 + (longlong)(int)uVar4 * 7 + 3;
iVar3 = (int)param_2;
if ((*(longlong *)(param_7 + 2) != 0) && (iVar3 != 0)) {
if (*(char *)((longlong)param_7 + 0x19) == '\0') {
plVar7 = (longlong *)plVar8[3];
}
else {
plVar7 = (longlong *)*plVar8;
}
for (; plVar7 != (longlong *)0x0; plVar7 = (longlong *)plVar7[1]) {
if (((plVar7[8] != 0) && (*(longlong *)(param_7 + 2) == plVar7[8])) &&
(iVar3 == *(int *)((longlong)plVar7 + 0x4c))) goto LAB_1400d695b;
}
}
plVar7 = (longlong *)FUN_1400d4440(param_1 + 0x10);
if (*(char *)((longlong)param_7 + 0x19) == '\0') {
plVar8 = plVar8 + 3;
}
FUN_1400d37e0(plVar8,plVar7,pplVar11,uVar13);
plVar7[8] = *(longlong *)(param_7 + 2);
uVar4 = param_7[5];
*(int *)((longlong)plVar7 + 0x4c) = iVar3;
*(uint *)(plVar7 + 9) = uVar4;
LAB_1400d695b:
thunk_FUN_1400de670(param_5,(longlong)(plVar7 + 3),(SIZE_T)pplVar11,uVar13);
if ((int)plVar6[0x2b] + (int)plVar6[0x28] + (int)plVar6[0x24] + (int)plVar6[0x21] +
(int)plVar6[0x1d] + (int)plVar6[0x1a] + (int)plVar6[0x16] + (int)plVar6[0x13] +
(int)plVar6[0xf] + (int)plVar6[0xc] + (int)plVar6[8] + (int)plVar6[5] + (int)plVar6[0x36] <
1) {
FUN_14006ba50(local_70,L"PacketQueue consistency 2 failed!",pplVar11,uVar13);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_70,(ThrowInfo *)&DAT_1401a93e8);
}
plVar6[0x2d] = (longlong)param_6;
FUN_1400d3e60(param_1,plVar6,param_6,uVar13);
}
return;
}