/* 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); }