/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c * Ghidra 12.1.2 decompiler output for 0x1401dbac0 FUN_1401dbac0 * Pseudocode, not original source. */ undefined8 FUN_1401dbac0(longlong *param_1,longlong *param_2) { longlong *plVar1; int *piVar2; undefined8 *puVar3; void *pvVar4; undefined8 *puVar5; char cVar6; int iVar7; undefined8 uVar8; longlong *plVar9; longlong *plVar10; longlong *plVar11; undefined *puVar12; double dVar13; longlong lVar14; undefined1 local_res8 [8]; longlong *local_res18; longlong *local_res20; undefined8 *local_1c8; undefined8 *local_1c0; longlong *local_1b8; longlong *local_1b0; longlong *local_1a8; undefined *local_1a0; undefined *local_198; undefined8 local_190; undefined1 local_188; undefined8 local_180; undefined1 local_178; undefined8 local_170; undefined1 local_168; undefined8 local_160; undefined1 local_158; undefined8 local_150; undefined1 local_148; longlong *local_140; undefined1 local_138; undefined8 local_130; undefined1 local_128; undefined8 local_120; undefined1 local_118; undefined8 local_110; undefined4 local_d8; uint uStack_d4; undefined4 local_d0; uint uStack_cc; undefined1 local_c8 [72]; undefined1 local_80 [72]; local_110 = 0xfffffffffffffffe; local_140 = param_1 + 0x95; FUN_14016db50(); local_138 = 1; plVar10 = param_1 + 1; (**(code **)(*plVar10 + 0x18))(plVar10); LOCK(); *(int *)(param_1 + 0xaa) = (int)param_1[0xaa] + 1; UNLOCK(); plVar1 = param_1 + -0xe; local_160 = (**(code **)(*plVar1 + 0x58))(plVar1); FUN_14016db50(local_160); local_158 = 1; local_res8[0] = 0; iVar7 = (**(code **)(*param_1 + 0x108))(param_1,local_res8); if (iVar7 != 0) { uVar8 = FUN_1401bbcc0(iVar7); FUN_14016d300(local_c8, L"Wrong state(%s)! Disconnect() or GetServerConnectionState() may be required.", uVar8); /* WARNING: Subroutine does not return */ _CxxThrowException(local_c8,(ThrowInfo *)&DAT_1403417f8); } plVar11 = (longlong *)0x0; if (((longlong *)param_1[0xac] != (longlong *)0x0) && (*(longlong *)param_1[0xac] != 0)) { FUN_14016d8c0(); local_res20 = (longlong *)PTR_DAT_1403440a0; plVar9 = (longlong *)FUN_14016f6b0(&local_1a0); puVar12 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } FUN_14004c020(&local_res20,L"Unstability in Connect #3! Process=%s",puVar12); if (((local_1a0 != (undefined *)0x0) && (local_1a0 != PTR_DAT_1403440a0)) && (local_1a0 + -8 != (undefined *)0x0)) { uVar8 = FUN_14016d8c0(); local_170 = uVar8; FUN_14016db50(uVar8); local_168 = 1; piVar2 = (int *)(local_1a0 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(local_1a0 + -8); } FUN_14016dbe0(uVar8); local_168 = 0; } local_1a0 = PTR_DAT_1403440a0; FUN_14016d8c0(); plVar9 = local_res20; local_res18 = (longlong *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { local_res18 = plVar11; } if (local_res20 != (longlong *)PTR_DAT_1403440a0) { uVar8 = FUN_14016d8c0(); local_190 = uVar8; FUN_14016db50(uVar8); local_188 = 1; FUN_14004eb70(&local_res18); local_res18 = plVar9; if (((plVar9 != (longlong *)PTR_DAT_1403440a0) && (plVar9 != (longlong *)0x0)) && (plVar9 != (longlong *)0x8)) { *(int *)((longlong)plVar9 + -4) = *(int *)((longlong)plVar9 + -4) + 1; } FUN_14016dbe0(uVar8); local_188 = 0; } FUN_1401be230(&local_res18); if (((plVar9 != (longlong *)0x0) && (plVar9 != (longlong *)PTR_DAT_1403440a0)) && (plVar9 + -1 != (longlong *)0x0)) { uVar8 = FUN_14016d8c0(); local_150 = uVar8; FUN_14016db50(uVar8); local_148 = 1; piVar2 = (int *)((longlong)plVar9 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(plVar9 + -1); } FUN_14016dbe0(uVar8); local_148 = 0; } local_res20 = (longlong *)PTR_DAT_1403440a0; } if ((((longlong *)param_1[0x296] != (longlong *)0x0) && (*(longlong *)param_1[0x296] != 0)) || (((longlong *)param_1[0x2a0] != (longlong *)0x0 && (*(longlong *)param_1[0x2a0] != 0)))) { FUN_14016d8c0(); local_1a8 = (longlong *)PTR_DAT_1403440a0; plVar9 = (longlong *)FUN_14016f6b0(&local_198); puVar12 = (undefined *)*plVar9; if ((undefined *)*plVar9 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } FUN_14004c020(&local_1a8,L"Unstability in Connect #1! Process=%s",puVar12); if (((local_198 != (undefined *)0x0) && (local_198 != PTR_DAT_1403440a0)) && (local_198 + -8 != (undefined *)0x0)) { uVar8 = FUN_14016d8c0(); local_120 = uVar8; FUN_14016db50(uVar8); local_118 = 1; piVar2 = (int *)(local_198 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(local_198 + -8); } FUN_14016dbe0(uVar8); local_118 = 0; } local_198 = PTR_DAT_1403440a0; FUN_14016d8c0(); plVar9 = local_1a8; local_1b0 = (longlong *)PTR_DAT_1403440a0; if (PTR_DAT_1403440a0 == (undefined *)0x0) { local_1b0 = plVar11; } if (local_1a8 != (longlong *)PTR_DAT_1403440a0) { uVar8 = FUN_14016d8c0(); local_130 = uVar8; FUN_14016db50(uVar8); local_128 = 1; FUN_14004eb70(&local_1b0); local_1b0 = plVar9; if (((plVar9 != (longlong *)PTR_DAT_1403440a0) && (plVar9 != (longlong *)0x0)) && (plVar9 != (longlong *)0x8)) { *(int *)((longlong)plVar9 + -4) = *(int *)((longlong)plVar9 + -4) + 1; } FUN_14016dbe0(uVar8); local_128 = 0; } FUN_1401be230(&local_1b0); if (((plVar9 != (longlong *)0x0) && (plVar9 != (longlong *)PTR_DAT_1403440a0)) && (plVar9 + -1 != (longlong *)0x0)) { uVar8 = FUN_14016d8c0(); local_180 = uVar8; FUN_14016db50(uVar8); local_178 = 1; piVar2 = (int *)((longlong)plVar9 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14016d970(plVar9 + -1); } FUN_14016dbe0(uVar8); local_178 = 0; } local_1a8 = (longlong *)PTR_DAT_1403440a0; } puVar12 = (undefined *)*param_2; if ((undefined *)*param_2 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } iVar7 = FUN_14016d780(puVar12,L"0.0.0.0"); if (((iVar7 != 0) && ((short)param_2[1] != 0)) && ((short)param_2[1] != -1)) { puVar12 = (undefined *)*param_2; if ((undefined *)*param_2 == (undefined *)0x0) { puVar12 = PTR_DAT_1403440a0; } iVar7 = FUN_14016d780(puVar12,L"255.255.255.255"); if (iVar7 != 0) { dVar13 = (double)param_2[9]; if ((double)param_2[9] <= 0.0) { dVar13 = DAT_140344dd0; } param_1[0x2fe] = (longlong)dVar13; FUN_1401c59d0(param_1 + 0x2e1); FUN_1401c59a0(param_1 + 0x301,param_1[0x2fe]); FUN_1401c59d0(param_1 + 0x301); FUN_1401c59d0(param_1 + 9); FUN_1401db880(param_1 + 0x2ae); FUN_1401db880(param_1 + 0x2b2); lVar14 = (**(code **)(*param_1 + 0x1c0))(param_1); param_1[0x30a] = lVar14; *(undefined1 *)(param_1 + 0xbc) = 0; lVar14 = FUN_140198870(); param_1[0xba] = lVar14; param_1[0xbb] = DAT_140344cc0; cVar6 = FUN_1401a1f70(param_1 + 0x2b6); if (cVar6 == '\0') { FUN_1401a1e70(param_1 + 0x2b6); } FUN_1401a1e20(param_1 + 0x2b6); uStack_d4 = uStack_d4 & 0xffffff00; local_d8 = 0; local_d0 = 0; param_1[0xbd] = 0; param_1[0xbe] = 0; param_1[0xbf] = 0; param_1[0xc0] = 0; param_1[0xc1] = 0; param_1[0xc2] = 0; param_1[0xc3] = (ulonglong)uStack_d4 << 0x20; param_1[0xc4] = (ulonglong)uStack_cc << 0x20; lVar14 = (**(code **)(*param_1 + 0x1c0))(param_1); param_1[699] = lVar14; *(undefined4 *)(param_1 + 0xd2) = 0; param_1[0xab] = 0; *(undefined4 *)((longlong)param_1 + 0x47c) = 0; param_1[0x90] = 0; param_1[0x91] = 0; param_1[0x92] = 0; *(undefined4 *)(param_1 + 0x2a1) = 0; param_1[0x304] = 0; *(undefined4 *)(param_1 + 0x8d) = 0; local_1b8 = operator_new(0x200); plVar9 = plVar11; if (local_1b8 != (longlong *)0x0) { if (plVar1 != (longlong *)0x0) { plVar9 = plVar10; } plVar9 = (longlong *)FUN_1401f9f90(local_1b8,plVar9); } if ((plVar9 == (longlong *)0x0) || (plVar9 + 8 == (longlong *)0x0)) { local_1b8 = (longlong *)0x0; } else { local_1b8 = (longlong *)FUN_14016d940(0x10); local_1b8[1] = 1; *local_1b8 = (longlong)(plVar9 + 8); } plVar10 = local_1b8; FUN_1401eb200(param_1 + 0x2ad,&local_1b8); plVar9 = local_1b8; if (plVar10 != (longlong *)0x0) { plVar10 = plVar10 + 1; *plVar10 = *plVar10 + -1; if (*plVar10 == 0) { puVar3 = (undefined8 *)*local_1b8; if (puVar3 != (undefined8 *)0x0) { (**(code **)*puVar3)(puVar3,1); } FUN_14016d970(plVar9); } } *(undefined1 *)(param_1 + 0x8f) = 0; FUN_1401c8a20(param_1 + 0x2a3,param_2); uVar8 = FUN_1401c9690(param_1 + 0x2a3); uVar8 = FUN_1401c8300(uVar8); FUN_14004e6d0(param_1 + 0x2a3,uVar8); puVar12 = (undefined *)param_1[0x2a3]; if (((puVar12 == (undefined *)0x0) || (puVar12 == PTR_DAT_1403440a0)) || (*(int *)(puVar12 + -8) == 0)) { FUN_14004c050(param_1 + 0x2a3,L"localhost"); } local_1c8 = operator_new(0x240); plVar10 = plVar11; if (local_1c8 != (undefined8 *)0x0) { plVar10 = (longlong *)FUN_1401f36e0(local_1c8,plVar1); } if (plVar10 == (longlong *)0x0) { local_1c8 = (undefined8 *)0x0; } else { local_1c8 = (undefined8 *)FUN_14016d940(0x10); local_1c8[1] = 1; *local_1c8 = plVar10; } puVar3 = local_1c8; FUN_1401c8610(param_1 + 0x2a0,&local_1c8); puVar5 = local_1c8; if (puVar3 != (undefined8 *)0x0) { plVar10 = puVar3 + 1; *plVar10 = *plVar10 + -1; if (*plVar10 == 0) { operator_delete((void *)*local_1c8); FUN_14016d970(puVar5); } } local_1c0 = operator_new(0x140); if (local_1c0 != (undefined8 *)0x0) { plVar11 = (longlong *)FUN_1401eb070(local_1c0,plVar1); } if (plVar11 == (longlong *)0x0) { local_1c0 = (undefined8 *)0x0; } else { local_1c0 = (undefined8 *)FUN_14016d940(0x10); local_1c0[1] = 1; *local_1c0 = plVar11; } puVar3 = local_1c0; FUN_1401c9730(param_1 + 0xac,&local_1c0); puVar5 = local_1c0; if (puVar3 != (undefined8 *)0x0) { plVar10 = puVar3 + 1; *plVar10 = *plVar10 + -1; if (*plVar10 == 0) { pvVar4 = (void *)*local_1c0; if (pvVar4 != (void *)0x0) { FUN_1401ebe30(pvVar4); operator_delete(pvVar4); } FUN_14016d970(puVar5); } } FUN_14016dbe0(local_160); FUN_14016dbe0(local_140); return 1; } } uVar8 = FUN_140198ea0(0xe); FUN_14016d300(local_80,uVar8); /* WARNING: Subroutine does not return */ _CxxThrowException(local_80,(ThrowInfo *)&DAT_1403417f8); }