373 lines
14 KiB
C
373 lines
14 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400b6200 FUN_1400b6200
|
|
* Pseudocode, not original source. */
|
|
|
|
undefined8 FUN_1400b6200(longlong ****param_1,longlong *param_2,longlong *param_3,ulonglong param_4)
|
|
|
|
{
|
|
longlong ****pppplVar1;
|
|
undefined8 *puVar2;
|
|
longlong *plVar3;
|
|
char cVar4;
|
|
int iVar5;
|
|
wchar_t *pwVar6;
|
|
longlong *plVar7;
|
|
longlong *****ppppplVar8;
|
|
int *piVar9;
|
|
int *piVar10;
|
|
longlong ****pppplVar11;
|
|
longlong ****pppplVar12;
|
|
longlong ****pppplVar13;
|
|
undefined8 uVar14;
|
|
ushort *puVar15;
|
|
longlong **pplVar16;
|
|
longlong ***ppplVar17;
|
|
undefined1 local_res8 [8];
|
|
longlong ****local_res18;
|
|
longlong ****local_res20;
|
|
longlong *local_1c8;
|
|
longlong *local_1c0;
|
|
longlong *local_1b8;
|
|
longlong ****local_1b0;
|
|
longlong ****local_1a8;
|
|
undefined *local_1a0;
|
|
undefined *local_198;
|
|
int *local_190;
|
|
undefined1 local_188;
|
|
int *local_180;
|
|
undefined1 local_178;
|
|
longlong *****local_170;
|
|
undefined1 local_168;
|
|
int *local_160;
|
|
undefined1 local_158;
|
|
longlong *****local_150;
|
|
undefined1 local_148;
|
|
longlong ****local_140;
|
|
undefined1 local_138;
|
|
int *local_130;
|
|
undefined1 local_128;
|
|
longlong *****local_120;
|
|
undefined1 local_118;
|
|
undefined8 local_110;
|
|
undefined4 local_d8;
|
|
uint uStack_d4;
|
|
undefined4 local_d0;
|
|
uint uStack_cc;
|
|
exception local_c8 [72];
|
|
exception local_80 [72];
|
|
|
|
local_110 = 0xfffffffffffffffe;
|
|
local_140 = param_1 + 0x95;
|
|
FUN_14006b350((int *)local_140);
|
|
local_138 = 1;
|
|
pppplVar12 = param_1 + 1;
|
|
(*(code *)(*pppplVar12)[3])(pppplVar12);
|
|
LOCK();
|
|
*(int *)(param_1 + 0xaa) = *(int *)(param_1 + 0xaa) + 1;
|
|
UNLOCK();
|
|
pppplVar1 = param_1 + -0xe;
|
|
local_160 = (int *)(*(code *)(*pppplVar1)[0xb])(pppplVar1);
|
|
FUN_14006b350(local_160);
|
|
local_158 = 1;
|
|
local_res8[0] = 0;
|
|
pwVar6 = (wchar_t *)local_res8;
|
|
ppppplVar8 = (longlong *****)param_1;
|
|
iVar5 = (*(code *)(*param_1)[0x21])();
|
|
if (iVar5 != 0) {
|
|
pwVar6 = FUN_1400d9a30(iVar5);
|
|
FUN_14006ba50(local_c8,
|
|
L"Wrong state(%s)! Disconnect() or GetServerConnectionState() may be required.",
|
|
pwVar6,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_c8,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
pppplVar13 = (longlong ****)0x0;
|
|
if ((param_1[0xac] != (longlong ***)0x0) && (*param_1[0xac] != (longlong **)0x0)) {
|
|
FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_res20 = (longlong ****)PTR_DAT_1401ac010;
|
|
plVar7 = FUN_14006c8a0((longlong *)&local_1a0,pwVar6,param_3,param_4);
|
|
param_3 = (longlong *)*plVar7;
|
|
if (param_3 == (longlong *)0x0) {
|
|
param_3 = (longlong *)PTR_DAT_1401ac010;
|
|
}
|
|
pwVar6 = L"Unstability in Connect #3! Process=%s";
|
|
ppppplVar8 = &local_res20;
|
|
FUN_140053d20((longlong *)ppppplVar8,L"Unstability in Connect #3! Process=%s",param_3,param_4);
|
|
if (((local_1a0 != (undefined *)0x0) && (local_1a0 != PTR_DAT_1401ac010)) &&
|
|
(local_1a0 + -8 != (undefined *)0x0)) {
|
|
ppppplVar8 = (longlong *****)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_170 = ppppplVar8;
|
|
FUN_14006b350((int *)ppppplVar8);
|
|
local_168 = 1;
|
|
piVar9 = (int *)(local_1a0 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(local_1a0 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppppplVar8);
|
|
local_168 = 0;
|
|
}
|
|
local_1a0 = PTR_DAT_1401ac010;
|
|
FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
pppplVar11 = local_res20;
|
|
local_res18 = (longlong ****)PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_res18 = pppplVar13;
|
|
}
|
|
if (local_res20 != (longlong ****)PTR_DAT_1401ac010) {
|
|
piVar9 = (int *)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_190 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_188 = 1;
|
|
FUN_1400031e0((longlong *)&local_res18,pwVar6,param_3,param_4);
|
|
local_res18 = pppplVar11;
|
|
if (((pppplVar11 != (longlong ****)PTR_DAT_1401ac010) && (pppplVar11 != (longlong ****)0x0))
|
|
&& (pppplVar11 != (longlong ****)0x8)) {
|
|
*(int *)((longlong)pppplVar11 + -4) = *(int *)((longlong)pppplVar11 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
local_188 = 0;
|
|
}
|
|
ppppplVar8 = &local_res18;
|
|
FUN_14006fa80((longlong *)ppppplVar8,pwVar6,param_3,param_4);
|
|
if (((pppplVar11 != (longlong ****)0x0) && (pppplVar11 != (longlong ****)PTR_DAT_1401ac010)) &&
|
|
(pppplVar11 + -1 != (longlong ****)0x0)) {
|
|
ppppplVar8 = (longlong *****)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_150 = ppppplVar8;
|
|
FUN_14006b350((int *)ppppplVar8);
|
|
local_148 = 1;
|
|
piVar9 = (int *)((longlong)pppplVar11 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(pppplVar11 + -1);
|
|
}
|
|
FUN_14006b3e0((longlong)ppppplVar8);
|
|
local_148 = 0;
|
|
}
|
|
local_res20 = (longlong ****)PTR_DAT_1401ac010;
|
|
}
|
|
if (((param_1[0x296] != (longlong ***)0x0) && (*param_1[0x296] != (longlong **)0x0)) ||
|
|
((param_1[0x2a0] != (longlong ***)0x0 && (*param_1[0x2a0] != (longlong **)0x0)))) {
|
|
FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_1a8 = (longlong ****)PTR_DAT_1401ac010;
|
|
plVar7 = FUN_14006c8a0((longlong *)&local_198,pwVar6,param_3,param_4);
|
|
param_3 = (longlong *)*plVar7;
|
|
if (param_3 == (longlong *)0x0) {
|
|
param_3 = (longlong *)PTR_DAT_1401ac010;
|
|
}
|
|
pwVar6 = L"Unstability in Connect #1! Process=%s";
|
|
ppppplVar8 = &local_1a8;
|
|
FUN_140053d20((longlong *)ppppplVar8,L"Unstability in Connect #1! Process=%s",param_3,param_4);
|
|
if (((local_198 != (undefined *)0x0) && (local_198 != PTR_DAT_1401ac010)) &&
|
|
(local_198 + -8 != (undefined *)0x0)) {
|
|
ppppplVar8 = (longlong *****)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_120 = ppppplVar8;
|
|
FUN_14006b350((int *)ppppplVar8);
|
|
local_118 = 1;
|
|
piVar9 = (int *)(local_198 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(local_198 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppppplVar8);
|
|
local_118 = 0;
|
|
}
|
|
local_198 = PTR_DAT_1401ac010;
|
|
FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
pppplVar11 = local_1a8;
|
|
local_1b0 = (longlong ****)PTR_DAT_1401ac010;
|
|
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
|
|
local_1b0 = pppplVar13;
|
|
}
|
|
if (local_1a8 != (longlong ****)PTR_DAT_1401ac010) {
|
|
piVar9 = (int *)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_130 = piVar9;
|
|
FUN_14006b350(piVar9);
|
|
local_128 = 1;
|
|
FUN_1400031e0((longlong *)&local_1b0,pwVar6,param_3,param_4);
|
|
local_1b0 = pppplVar11;
|
|
if (((pppplVar11 != (longlong ****)PTR_DAT_1401ac010) && (pppplVar11 != (longlong ****)0x0))
|
|
&& (pppplVar11 != (longlong ****)0x8)) {
|
|
*(int *)((longlong)pppplVar11 + -4) = *(int *)((longlong)pppplVar11 + -4) + 1;
|
|
}
|
|
FUN_14006b3e0((longlong)piVar9);
|
|
local_128 = 0;
|
|
}
|
|
ppppplVar8 = &local_1b0;
|
|
FUN_14006fa80((longlong *)ppppplVar8,pwVar6,param_3,param_4);
|
|
if (((pppplVar11 != (longlong ****)0x0) && (pppplVar11 != (longlong ****)PTR_DAT_1401ac010)) &&
|
|
(pppplVar11 + -1 != (longlong ****)0x0)) {
|
|
piVar10 = (int *)FUN_14006cb70(ppppplVar8,pwVar6,param_3,param_4);
|
|
local_180 = piVar10;
|
|
FUN_14006b350(piVar10);
|
|
local_178 = 1;
|
|
piVar9 = (int *)((longlong)pppplVar11 + -4);
|
|
*piVar9 = *piVar9 + -1;
|
|
if (*piVar9 == 0) {
|
|
FUN_14006cc60(pppplVar11 + -1);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar10);
|
|
local_178 = 0;
|
|
}
|
|
local_1a8 = (longlong ****)PTR_DAT_1401ac010;
|
|
}
|
|
puVar15 = (ushort *)*param_2;
|
|
if ((ushort *)*param_2 == (ushort *)0x0) {
|
|
puVar15 = (ushort *)PTR_DAT_1401ac010;
|
|
}
|
|
iVar5 = FUN_14006ca30(puVar15,0x14013e0c0);
|
|
if (((iVar5 != 0) && ((short)param_2[1] != 0)) && ((short)param_2[1] != -1)) {
|
|
puVar15 = (ushort *)*param_2;
|
|
if ((ushort *)*param_2 == (ushort *)0x0) {
|
|
puVar15 = (ushort *)PTR_DAT_1401ac010;
|
|
}
|
|
pwVar6 = L"255.255.255.255";
|
|
iVar5 = FUN_14006ca30(puVar15,0x14013e0a0);
|
|
if (iVar5 != 0) {
|
|
ppplVar17 = (longlong ***)param_2[9];
|
|
if ((double)param_2[9] <= 0.0) {
|
|
ppplVar17 = DAT_1401ac1a0;
|
|
}
|
|
param_1[0x2fe] = ppplVar17;
|
|
FUN_1400f45b0((double *)(param_1 + 0x2e1));
|
|
FUN_1400f4580((double *)(param_1 + 0x301),(double)param_1[0x2fe]);
|
|
FUN_1400f45b0((double *)(param_1 + 0x301));
|
|
FUN_1400f45b0((double *)(param_1 + 9));
|
|
FUN_1400b5fc0((longlong *)(param_1 + 0x2ae),(longlong *)pwVar6,param_3,param_4);
|
|
FUN_1400b5fc0((longlong *)(param_1 + 0x2b2),(longlong *)pwVar6,param_3,param_4);
|
|
ppplVar17 = (longlong ***)(*(code *)(*param_1)[0x38])(param_1);
|
|
param_1[0x30a] = ppplVar17;
|
|
*(undefined1 *)(param_1 + 0xbc) = 0;
|
|
ppplVar17 = (longlong ***)FUN_14006cd20();
|
|
param_1[0xba] = ppplVar17;
|
|
param_1[0xbb] = DAT_1401ac090;
|
|
cVar4 = FUN_140077010((longlong)(param_1 + 0x2b6));
|
|
if (cVar4 == '\0') {
|
|
FUN_140076f10((char *)(param_1 + 0x2b6));
|
|
}
|
|
FUN_140076ec0((char *)(param_1 + 0x2b6));
|
|
uStack_d4 = uStack_d4 & 0xffffff00;
|
|
local_d8 = 0;
|
|
local_d0 = 0;
|
|
param_1[0xbd] = (longlong ***)0x0;
|
|
param_1[0xbe] = (longlong ***)0x0;
|
|
param_1[0xbf] = (longlong ***)0x0;
|
|
param_1[0xc0] = (longlong ***)0x0;
|
|
param_1[0xc1] = (longlong ***)0x0;
|
|
param_1[0xc2] = (longlong ***)0x0;
|
|
param_1[0xc3] = (longlong ***)((ulonglong)uStack_d4 << 0x20);
|
|
param_1[0xc4] = (longlong ***)((ulonglong)uStack_cc << 0x20);
|
|
ppplVar17 = (longlong ***)(*(code *)(*param_1)[0x38])(param_1);
|
|
param_1[699] = ppplVar17;
|
|
*(undefined4 *)(param_1 + 0xd2) = 0;
|
|
param_1[0xab] = (longlong ***)0x0;
|
|
*(undefined4 *)((longlong)param_1 + 0x47c) = 0;
|
|
param_1[0x90] = (longlong ***)0x0;
|
|
param_1[0x91] = (longlong ***)0x0;
|
|
param_1[0x92] = (longlong ***)0x0;
|
|
*(undefined4 *)(param_1 + 0x2a1) = 0;
|
|
param_1[0x304] = (longlong ***)0x0;
|
|
*(undefined4 *)(param_1 + 0x8d) = 0;
|
|
local_1b8 = operator_new(0x200);
|
|
pppplVar11 = pppplVar13;
|
|
if (local_1b8 != (longlong *)0x0) {
|
|
if (pppplVar1 != (longlong ****)0x0) {
|
|
pppplVar11 = pppplVar12;
|
|
}
|
|
pppplVar11 = (longlong ****)FUN_1400ef9f0(local_1b8,(longlong *)pppplVar11,param_3,param_4);
|
|
}
|
|
if ((pppplVar11 == (longlong ****)0x0) || (pppplVar11 + 8 == (longlong ****)0x0)) {
|
|
local_1b8 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_1b8 = (longlong *)FUN_14006cbf0(0x10);
|
|
local_1b8[1] = 1;
|
|
*local_1b8 = (longlong)(pppplVar11 + 8);
|
|
}
|
|
plVar7 = local_1b8;
|
|
FUN_1400a2a80((longlong *)(param_1 + 0x2ad),(longlong *)&local_1b8);
|
|
plVar3 = local_1b8;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
plVar7 = plVar7 + 1;
|
|
*plVar7 = *plVar7 + -1;
|
|
if (*plVar7 == 0) {
|
|
puVar2 = (undefined8 *)*local_1b8;
|
|
if (puVar2 != (undefined8 *)0x0) {
|
|
(**(code **)*puVar2)(puVar2,1);
|
|
}
|
|
FUN_14006cc60(plVar3);
|
|
}
|
|
}
|
|
*(undefined1 *)(param_1 + 0x8f) = 0;
|
|
FUN_1400a2e90((longlong *)(param_1 + 0x2a3),param_2,(SIZE_T)param_3,param_4);
|
|
plVar7 = FUN_1400a3ae0((longlong *)(param_1 + 0x2a3));
|
|
plVar7 = FUN_1400a26f0(plVar7);
|
|
FUN_140003110((longlong *)(param_1 + 0x2a3),plVar7,param_3,param_4);
|
|
ppplVar17 = param_1[0x2a3];
|
|
if (((ppplVar17 == (longlong ***)0x0) || (ppplVar17 == (longlong ***)PTR_DAT_1401ac010)) ||
|
|
(*(int *)(ppplVar17 + -1) == 0)) {
|
|
FUN_140008030((longlong *)(param_1 + 0x2a3),L"localhost",param_3,param_4);
|
|
}
|
|
local_1c8 = operator_new(0x240);
|
|
pppplVar12 = pppplVar13;
|
|
if (local_1c8 != (longlong *)0x0) {
|
|
pppplVar12 = (longlong ****)FUN_1400e8d80(local_1c8,(longlong)pppplVar1);
|
|
}
|
|
if (pppplVar12 == (longlong ****)0x0) {
|
|
local_1c8 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_1c8 = (longlong *)FUN_14006cbf0(0x10);
|
|
local_1c8[1] = 1;
|
|
*local_1c8 = (longlong)pppplVar12;
|
|
}
|
|
plVar7 = local_1c8;
|
|
FUN_1400a2a00((longlong *)(param_1 + 0x2a0),(longlong *)&local_1c8);
|
|
plVar3 = local_1c8;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
plVar7 = plVar7 + 1;
|
|
*plVar7 = *plVar7 + -1;
|
|
if (*plVar7 == 0) {
|
|
operator_delete((void *)*local_1c8);
|
|
FUN_14006cc60(plVar3);
|
|
}
|
|
}
|
|
local_1c0 = operator_new(0x140);
|
|
if (local_1c0 != (longlong *)0x0) {
|
|
pppplVar13 = (longlong ****)FUN_1400e0740(local_1c0,(longlong)pppplVar1,param_3,param_4);
|
|
}
|
|
if (pppplVar13 == (longlong ****)0x0) {
|
|
local_1c0 = (longlong *)0x0;
|
|
}
|
|
else {
|
|
local_1c0 = (longlong *)FUN_14006cbf0(0x10);
|
|
local_1c0[1] = 1;
|
|
*local_1c0 = (longlong)pppplVar13;
|
|
}
|
|
plVar7 = local_1c0;
|
|
pplVar16 = &local_1c0;
|
|
FUN_1400a3b80((longlong *)(param_1 + 0xac),(longlong *)pplVar16);
|
|
plVar3 = local_1c0;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
plVar7 = plVar7 + 1;
|
|
*plVar7 = *plVar7 + -1;
|
|
if (*plVar7 == 0) {
|
|
plVar7 = (longlong *)*local_1c0;
|
|
if (plVar7 != (longlong *)0x0) {
|
|
FUN_1400e14e0(plVar7,pplVar16,(ulonglong)param_3,param_4);
|
|
operator_delete(plVar7);
|
|
}
|
|
FUN_14006cc60(plVar3);
|
|
}
|
|
}
|
|
FUN_14006b3e0((longlong)local_160);
|
|
uVar14 = FUN_14006b3e0((longlong)local_140);
|
|
return CONCAT71((int7)((ulonglong)uVar14 >> 8),1);
|
|
}
|
|
}
|
|
pwVar6 = (wchar_t *)FUN_1400789a0(0xe);
|
|
FUN_14006ba50(local_80,pwVar6,param_3,param_4);
|
|
/* WARNING: Subroutine does not return */
|
|
_CxxThrowException(local_80,(ThrowInfo *)&DAT_1401a93e8);
|
|
}
|
|
|