288 lines
8.5 KiB
C
288 lines
8.5 KiB
C
/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
|
|
* Ghidra 12.1.2 decompiler output for 0x1401aa4c0 FUN_1401aa4c0
|
|
* Pseudocode, not original source. */
|
|
|
|
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
|
|
|
|
void FUN_1401aa4c0(longlong param_1)
|
|
|
|
{
|
|
ulonglong *puVar1;
|
|
longlong lVar2;
|
|
undefined *puVar3;
|
|
char cVar4;
|
|
int iVar5;
|
|
int iVar6;
|
|
int *piVar7;
|
|
undefined8 uVar8;
|
|
int iVar9;
|
|
int iVar10;
|
|
ulonglong uVar11;
|
|
int *piVar12;
|
|
undefined *puVar13;
|
|
ulonglong uVar14;
|
|
int iVar15;
|
|
ulonglong uVar16;
|
|
undefined1 auStack_2a8 [32];
|
|
undefined ***local_288;
|
|
undefined1 local_278 [8];
|
|
int *local_270;
|
|
longlong local_268;
|
|
longlong local_260;
|
|
undefined **local_258;
|
|
undefined4 local_250;
|
|
undefined2 local_24c;
|
|
undefined *local_238 [2];
|
|
undefined **local_228;
|
|
undefined4 local_220;
|
|
undefined2 local_21c;
|
|
undefined8 local_218;
|
|
undefined1 local_210;
|
|
undefined **local_208;
|
|
undefined4 local_200;
|
|
undefined2 local_1fc;
|
|
undefined **local_1f8;
|
|
undefined8 local_1f0;
|
|
undefined8 local_1e8;
|
|
undefined8 local_1e0;
|
|
undefined8 local_1d8;
|
|
undefined8 local_1d0;
|
|
undefined1 local_1c8;
|
|
undefined8 local_1c0;
|
|
undefined8 local_1b8;
|
|
undefined4 local_1b0;
|
|
undefined8 local_1a8;
|
|
undefined4 local_1a0;
|
|
undefined **local_198;
|
|
undefined4 local_190;
|
|
undefined2 local_18c;
|
|
undefined1 local_158 [8];
|
|
undefined8 local_150;
|
|
ulonglong local_38;
|
|
|
|
local_150 = 0xfffffffffffffffe;
|
|
local_38 = DAT_1403463c0 ^ (ulonglong)auStack_2a8;
|
|
local_260 = param_1;
|
|
FUN_1401c5a10(local_278);
|
|
uVar16 = 0;
|
|
local_268 = 0;
|
|
uVar14 = 1;
|
|
do {
|
|
while( true ) {
|
|
while( true ) {
|
|
if (*(char *)(param_1 + 0x140) != '\0') {
|
|
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
|
|
FUN_14016d8c0();
|
|
local_238[0] = PTR_DAT_1403440a0;
|
|
FUN_14004c020(local_238,&DAT_140282f80,L"Proud::CNetThreads_S::TcpListenerProc");
|
|
puVar3 = local_238[0];
|
|
puVar13 = local_238[0];
|
|
if (local_238[0] == (undefined *)0x0) {
|
|
puVar13 = PTR_DAT_1403440a0;
|
|
}
|
|
FUN_1401adb30(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x17f0),0,puVar13);
|
|
if (((puVar3 != (undefined *)0x0) && (puVar3 != PTR_DAT_1403440a0)) &&
|
|
(puVar3 + -8 != (undefined *)0x0)) {
|
|
uVar8 = FUN_14016d8c0();
|
|
local_1c8 = 0;
|
|
local_1d0 = uVar8;
|
|
FUN_14016db50(uVar8);
|
|
local_1c8 = 1;
|
|
piVar7 = (int *)(puVar3 + -4);
|
|
*piVar7 = *piVar7 + -1;
|
|
if (*piVar7 == 0) {
|
|
FUN_14016d970(puVar3 + -8);
|
|
}
|
|
FUN_14016dbe0(uVar8);
|
|
}
|
|
}
|
|
lVar2 = local_268;
|
|
if (local_268 != 0) {
|
|
FUN_14019c9e0(local_268);
|
|
FUN_14016d970(lVar2);
|
|
}
|
|
FUN_1401c5a40(local_278);
|
|
return;
|
|
}
|
|
iVar15 = 0;
|
|
if (((local_268 == 0) && ((char)uVar14 != '\0')) &&
|
|
(local_268 = FUN_1401a93d0(param_1), local_268 == 0)) {
|
|
uVar14 = uVar16;
|
|
}
|
|
lVar2 = local_268;
|
|
local_198 = Proud::AddrPort::vftable;
|
|
local_1c0 = 0;
|
|
local_1a8 = 0;
|
|
local_1b8 = 0;
|
|
local_1b0 = 5;
|
|
local_1a0 = 0;
|
|
local_190 = DAT_140344450;
|
|
local_18c = DAT_140344454;
|
|
cVar4 = FUN_1401a22b0(*(undefined8 *)(*(longlong *)(param_1 + 0x148) + 0x790),&local_1c0,
|
|
DAT_140344c98);
|
|
if (cVar4 == '\x01') break;
|
|
puVar1 = *(ulonglong **)(*(longlong *)(param_1 + 0x148) + 0x748);
|
|
uVar11 = uVar16;
|
|
if (puVar1 != (ulonglong *)0x0) {
|
|
uVar11 = *puVar1;
|
|
}
|
|
FUN_14019c8d0(uVar11);
|
|
}
|
|
if (lVar2 == 0) break;
|
|
local_208 = Proud::AddrPort::vftable;
|
|
local_200 = 0;
|
|
local_1fc = 0;
|
|
local_258 = Proud::AddrPort::vftable;
|
|
local_250 = 0;
|
|
local_24c = 0;
|
|
puVar1 = *(ulonglong **)(*(longlong *)(param_1 + 0x148) + 0x748);
|
|
uVar11 = uVar16;
|
|
if (puVar1 != (ulonglong *)0x0) {
|
|
uVar11 = *puVar1;
|
|
}
|
|
FUN_14019c720(lVar2,uVar11,&local_208,&local_258);
|
|
cVar4 = FUN_14016f870(&local_258);
|
|
if (cVar4 == '\0') {
|
|
LAB_1401aa682:
|
|
FUN_14019c9e0(lVar2);
|
|
FUN_14016d970(lVar2);
|
|
}
|
|
else {
|
|
local_228 = Proud::AddrPort::vftable;
|
|
local_220 = local_250;
|
|
local_21c = local_24c;
|
|
cVar4 = FUN_1401a9020(param_1,lVar2,&local_228);
|
|
if (cVar4 == '\0') goto LAB_1401aa682;
|
|
}
|
|
local_268 = 0;
|
|
}
|
|
FUN_14016d8c0();
|
|
local_270 = (int *)PTR_DAT_1403440a0;
|
|
iVar5 = FUN_14016d740(L"acceptex getqueued but socket null");
|
|
iVar6 = iVar15;
|
|
if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar6 = local_270[-2];
|
|
}
|
|
iVar9 = 0;
|
|
iVar10 = iVar5;
|
|
if (((iVar5 <= iVar6) && (iVar10 = iVar9, local_270 != (int *)0x0)) &&
|
|
(local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar10 = local_270[-2];
|
|
}
|
|
iVar6 = 1;
|
|
if (1 < iVar10) {
|
|
iVar6 = iVar10;
|
|
}
|
|
uVar11 = uVar16;
|
|
if ((local_270 != (int *)0x0) && (uVar11 = 0, local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
uVar11 = (ulonglong)(uint)local_270[-2];
|
|
}
|
|
if ((int)uVar11 < iVar6) {
|
|
if (local_270 == (int *)0x0) {
|
|
local_270 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
if (iVar6 < 0) {
|
|
/* WARNING: Subroutine does not return */
|
|
FUN_14016d6b0();
|
|
}
|
|
if (iVar6 == 0) {
|
|
FUN_14004eb70(&local_270);
|
|
}
|
|
else {
|
|
iVar10 = iVar9;
|
|
if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar10 = local_270[-2];
|
|
}
|
|
if (iVar6 != iVar10) {
|
|
piVar7 = (int *)FUN_14016d940((longlong)iVar6 * 2 + 10);
|
|
if (piVar7 != (int *)0x0) {
|
|
*piVar7 = 0;
|
|
piVar7[1] = 1;
|
|
}
|
|
*piVar7 = iVar6;
|
|
iVar10 = iVar9;
|
|
if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar10 = local_270[-2];
|
|
}
|
|
piVar12 = (int *)PTR_DAT_1403440a0;
|
|
if (iVar6 < iVar10) {
|
|
LAB_1401aa7a7:
|
|
if (local_270 != (int *)0x0) {
|
|
piVar12 = local_270;
|
|
}
|
|
}
|
|
else {
|
|
iVar6 = iVar15;
|
|
if (local_270 != (int *)0x0) {
|
|
if (local_270 != (int *)PTR_DAT_1403440a0) {
|
|
iVar6 = local_270[-2];
|
|
}
|
|
goto LAB_1401aa7a7;
|
|
}
|
|
}
|
|
FUN_14016d770(piVar7 + 2,piVar12,iVar6);
|
|
FUN_14004eb70(&local_270);
|
|
local_270 = piVar7 + 2;
|
|
}
|
|
}
|
|
}
|
|
FUN_14004e850(&local_270);
|
|
piVar7 = local_270;
|
|
if (local_270 == (int *)0x0) {
|
|
piVar7 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
FUN_14016d770(piVar7,L"acceptex getqueued but socket null",iVar5);
|
|
piVar7 = local_270;
|
|
if (local_270 == (int *)0x0) {
|
|
piVar7 = (int *)PTR_DAT_1403440a0;
|
|
}
|
|
iVar6 = FUN_14016d740(piVar7);
|
|
iVar15 = 0;
|
|
if (0 < iVar6) {
|
|
iVar15 = iVar6;
|
|
}
|
|
iVar6 = iVar9;
|
|
if ((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) {
|
|
iVar6 = local_270[-2];
|
|
}
|
|
if ((iVar15 < iVar6) || (iVar15 = iVar9, local_270 == (int *)0x0)) {
|
|
LAB_1401aa84a:
|
|
if (((local_270 != (int *)PTR_DAT_1403440a0) && (local_270 != (int *)0x0)) &&
|
|
(local_270 + -2 != (int *)0x0)) {
|
|
local_270[-2] = iVar15;
|
|
*(undefined2 *)((longlong)local_270 + (longlong)iVar15 * 2) = 0;
|
|
}
|
|
}
|
|
else if (local_270 != (int *)PTR_DAT_1403440a0) {
|
|
iVar15 = local_270[-2];
|
|
goto LAB_1401aa84a;
|
|
}
|
|
local_1f0 = 0;
|
|
local_1e8 = 0;
|
|
local_1e0 = 0;
|
|
local_1d8 = 0;
|
|
local_1f8 = Proud::ByteArray::vftable;
|
|
local_288 = &local_1f8;
|
|
uVar8 = FUN_140198f80(local_158,1,0,&local_270);
|
|
(**(code **)(**(longlong **)(param_1 + 0x148) + 0x80))(*(longlong **)(param_1 + 0x148),uVar8);
|
|
FUN_14019a9e0(&local_1f8);
|
|
piVar7 = local_270;
|
|
if (((local_270 != (int *)0x0) && (local_270 != (int *)PTR_DAT_1403440a0)) &&
|
|
(piVar12 = local_270 + -2, piVar12 != (int *)0x0)) {
|
|
uVar8 = FUN_14016d8c0();
|
|
local_210 = 0;
|
|
local_218 = uVar8;
|
|
FUN_14016db50(uVar8);
|
|
local_210 = 1;
|
|
piVar7 = piVar7 + -1;
|
|
*piVar7 = *piVar7 + -1;
|
|
if (*piVar7 == 0) {
|
|
FUN_14016d970(piVar12);
|
|
}
|
|
FUN_14016dbe0(uVar8);
|
|
local_210 = 0;
|
|
}
|
|
local_270 = (int *)PTR_DAT_1403440a0;
|
|
} while( true );
|
|
}
|
|
|