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

147 lines
5.2 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x140009b10 FUN_140009b10
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
undefined8 FUN_140009b10(longlong *param_1,wchar_t *param_2,ulonglong param_3,undefined8 param_4)
{
longlong lVar1;
undefined *puVar2;
ulonglong uVar3;
int *piVar4;
int *piVar5;
undefined8 uVar6;
uint7 extraout_var;
undefined **ppuVar7;
int *piVar8;
undefined8 *puVar9;
wchar_t *pwVar10;
undefined *puVar11;
uint uVar12;
longlong lVar13;
undefined1 auStack_e8 [32];
int *local_c8;
undefined1 local_c0;
int *local_b8;
undefined1 local_b0;
int *local_a8;
undefined1 local_a0;
undefined8 local_98;
undefined *local_88;
undefined2 local_80;
undefined4 local_7c;
undefined4 local_78;
undefined4 local_74;
undefined4 local_70;
undefined8 local_68 [6];
ulonglong local_38;
local_98 = 0xfffffffffffffffe;
uVar3 = DAT_1401ac5a0 ^ (ulonglong)auStack_e8;
uVar12 = 0;
if (0 < DAT_1401bcf24) {
lVar13 = 0;
local_38 = uVar3;
do {
if (*(longlong *)(*param_1 + lVar13) != 0) {
lVar1 = *(longlong *)(*param_1 + lVar13);
if (*(longlong *)(lVar1 + 0x10) == 0) {
pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | m_NetClient is null!";
LAB_140009d4b:
FUN_14000aa90(4,pwVar10,param_3,param_4);
}
else {
puVar2 = *(undefined **)(lVar1 + 0x30);
if (((puVar2 == (undefined *)0x0) || (puVar2 == PTR_DAT_1401ac010)) ||
(*(int *)(puVar2 + -8) < 1)) {
pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | m_Address is empty!";
goto LAB_140009d4b;
}
if (*(char *)(lVar1 + 0x18) == '\0') {
pwVar10 = L"ERROR >> MagiCommonSession::Connect2 | IsUse is false!";
goto LAB_140009d4b;
}
if (*(char *)(lVar1 + 0x19) == '\x01') {
do {
Sleep(10);
param_2 = (wchar_t *)0x0;
uVar3 = (**(code **)(**(longlong **)(lVar1 + 0x10) + 0x98))();
} while (*(char *)(lVar1 + 0x19) != '\0');
if (*(char *)(lVar1 + 0x1a) == '\x01') goto LAB_140009d69;
}
ppuVar7 = &local_88;
FUN_1400780f0(ppuVar7,param_2,param_3,param_4);
local_7c = DAT_1401bcff0;
local_78 = _DAT_1401bcff4;
local_74 = _DAT_1401bcff8;
local_70 = _DAT_1401bcffc;
if (local_88 == (undefined *)0x0) {
local_88 = PTR_DAT_1401ac010;
}
if (*(undefined **)(lVar1 + 0x30) != local_88) {
piVar4 = (int *)FUN_14006cb70(ppuVar7,param_2,param_3,param_4);
piVar8 = piVar4;
local_c8 = piVar4;
FUN_14006b350(piVar4);
puVar2 = local_88;
local_c0 = 1;
if (((local_88 != (undefined *)0x0) && (local_88 != PTR_DAT_1401ac010)) &&
(puVar11 = local_88 + -8, puVar11 != (undefined *)0x0)) {
piVar5 = (int *)FUN_14006cb70(piVar8,param_2,param_3,param_4);
local_a8 = piVar5;
FUN_14006b350(piVar5);
local_a0 = 1;
piVar8 = (int *)(puVar2 + -4);
*piVar8 = *piVar8 + -1;
if (*piVar8 == 0) {
FUN_14006cc60(puVar11);
}
FUN_14006b3e0((longlong)piVar5);
local_a0 = 0;
}
local_88 = *(undefined **)(lVar1 + 0x30);
if (((local_88 != PTR_DAT_1401ac010) && (local_88 != (undefined *)0x0)) &&
(local_88 != (undefined *)0x8)) {
*(int *)(local_88 + -4) = *(int *)(local_88 + -4) + 1;
}
FUN_14006b3e0((longlong)piVar4);
local_c0 = 0;
}
local_80 = *(undefined2 *)(lVar1 + 0x38);
param_2 = (wchar_t *)&local_88;
uVar6 = FUN_140002310(lVar1,param_2,param_3,param_4);
puVar9 = local_68;
uVar3 = FUN_140078360(puVar9);
puVar2 = local_88;
if (((local_88 != (undefined *)0x0) && (local_88 != PTR_DAT_1401ac010)) &&
(puVar11 = local_88 + -8, puVar11 != (undefined *)0x0)) {
piVar4 = (int *)FUN_14006cb70(puVar9,param_2,param_3,param_4);
local_b8 = piVar4;
FUN_14006b350(piVar4);
local_b0 = 1;
piVar8 = (int *)(puVar2 + -4);
*piVar8 = *piVar8 + -1;
if (*piVar8 == 0) {
FUN_14006cc60(puVar11);
}
uVar3 = FUN_14006b3e0((longlong)piVar4);
local_b0 = 0;
}
if ((char)uVar6 != '\0') goto LAB_140009d69;
}
param_3 = (ulonglong)uVar12;
param_2 = L"ERROR >> DBC CONNECTION FAILED - [%d]";
FUN_14000aa90(0xc,L"ERROR >> DBC CONNECTION FAILED - [%d]",param_3,param_4);
uVar3 = (ulonglong)extraout_var << 8;
}
LAB_140009d69:
uVar12 = uVar12 + 1;
lVar13 = lVar13 + 8;
} while ((int)uVar12 < DAT_1401bcf24);
}
return CONCAT71((int7)(uVar3 >> 8),1);
}