360 lines
11 KiB
C
360 lines
11 KiB
C
/* 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);
|
|
}
|
|
|