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

152 lines
4.9 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c7d50 FUN_1400c7d50
* Pseudocode, not original source. */
void FUN_1400c7d50(longlong param_1,longlong param_2,char *param_3,longlong param_4)
{
longlong *plVar1;
int iVar2;
ulonglong uVar3;
undefined8 *puVar4;
int *piVar5;
int *piVar6;
int *piVar7;
int **ppiVar8;
longlong lVar9;
int iVar10;
uint uVar11;
char *pcVar12;
int *local_res20;
int *local_198;
undefined1 local_190;
undefined8 local_120;
undefined1 local_118 [4];
undefined4 local_114;
char *local_e0;
exception local_70 [72];
local_120 = 0xfffffffffffffffe;
pcVar12 = param_3;
if ((int)(*(int *)(param_2 + 8) + (*(int *)(param_2 + 8) >> 0x1f & 7U)) >> 3 != 0) {
param_4 = 2;
pcVar12 = "Proud::CNetThreads_S::UserWorkerThread_FinalReceiveUserMessage";
FUN_14009b0d0(*(longlong **)(param_1 + 0x148),(wchar_t *)0x0,
"Proud::CNetThreads_S::UserWorkerThread_FinalReceiveUserMessage",2);
}
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0) {
FUN_140078060(local_118);
local_114 = *(undefined4 *)(param_2 + 0x30);
local_118[0] = *(undefined1 *)(param_2 + 0x48);
ppiVar8 = &local_res20;
local_e0 = param_3;
uVar3 = FUN_1400bcfd0((uint *)(param_2 + 8),ppiVar8,pcVar12,param_4);
if ((char)uVar3 != '\0') {
lVar9 = *(longlong *)(param_2 + 0x10);
if (lVar9 == 0) {
if (*(longlong *)(param_2 + 0x18) == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,ppiVar8,pcVar12,param_4);
}
iVar10 = *(int *)(param_2 + 0x20);
}
else {
iVar10 = *(int *)(lVar9 + 0x18);
}
iVar2 = (int)(*(int *)(param_2 + 8) + (*(int *)(param_2 + 8) >> 0x1f & 7U)) >> 3;
ppiVar8 = (int **)(longlong)iVar2;
uVar11 = iVar10 - iVar2;
pcVar12 = (char *)(ulonglong)uVar11;
if ((uint)local_res20 == uVar11) {
if (*(longlong *)(param_2 + 0x18) == 0) {
if (lVar9 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,ppiVar8,pcVar12,param_4);
}
if (*(int *)(lVar9 + 0x18) == 0) {
lVar9 = 0;
}
else {
lVar9 = *(longlong *)(lVar9 + 0x10);
}
}
else {
lVar9 = *(longlong *)(param_2 + 0x18);
if (lVar9 == 0) {
FUN_14006ba50(local_70,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,
pcVar12,param_4);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_70,(ThrowInfo *)&DAT_1401a93e8);
}
}
plVar1 = *(longlong **)(*(longlong *)(param_1 + 0x148) + 0x758);
param_4 = lVar9 + (longlong)ppiVar8;
(**(code **)(*plVar1 + 0x30))
(plVar1,*(undefined4 *)(param_2 + 0x30),local_118,param_4,(uint)local_res20);
goto LAB_1400c8017;
}
}
local_res20 = (int *)FUN_14006cbf0(0x60);
if (local_res20 == (int *)0x0) {
puVar4 = (undefined8 *)0x0;
}
else {
puVar4 = FUN_1400789e0((undefined8 *)local_res20,ppiVar8,pcVar12,param_4);
}
piVar7 = (int *)0x0;
if (puVar4 == (undefined8 *)0x0) {
local_res20 = (int *)0x0;
piVar5 = piVar7;
}
else {
piVar5 = (int *)FUN_14006cbf0(0x48);
local_198 = piVar5;
if (piVar5 != (int *)0x0) {
local_res20 = piVar5;
uVar3 = FUN_140079250();
pcVar12 = (char *)CONCAT71((int7)((ulonglong)pcVar12 >> 8),1);
FUN_14006b270(piVar5,uVar3 & 0xffffffff,pcVar12,param_4);
}
local_res20 = piVar5;
FUN_14006b350(piVar5);
piVar5[0x10] = 1;
piVar5[0x11] = 0;
*(undefined8 **)(piVar5 + 0xe) = puVar4;
FUN_14006b3e0((longlong)piVar5);
}
piVar6 = piVar7;
if (piVar5 != (int *)0x0) {
piVar6 = *(int **)(piVar5 + 0xe);
}
*piVar6 = 0x1f;
if (piVar5 != (int *)0x0) {
piVar7 = *(int **)(piVar5 + 0xe);
}
FUN_140008030((longlong *)(piVar7 + 4),L"Invalid payload size in User Message!",pcVar12,param_4)
;
local_198 = (int *)0x0;
FUN_140078ae0((ulonglong *)&local_198,(ulonglong *)&local_res20,pcVar12,param_4);
ppiVar8 = &local_198;
(**(code **)(**(longlong **)(param_1 + 0x148) + 0x80))();
if (piVar5 != (int *)0x0) {
local_190 = 0;
local_198 = piVar5;
FUN_14006b350(piVar5);
local_190 = 1;
plVar1 = (longlong *)(piVar5 + 0x10);
*plVar1 = *plVar1 + -1;
if (*plVar1 == 0) {
FUN_14006b3e0((longlong)piVar5);
local_190 = 0;
FUN_1400640e0(piVar5,ppiVar8,pcVar12,param_4);
}
else {
FUN_14006b3e0((longlong)piVar5);
}
}
}
LAB_1400c8017:
FUN_1400dee00((undefined8 *)(param_1 + 0x160),*(undefined4 *)(param_2 + 0x30),'\0',param_4);
return;
}