server-re/decomp/DBCServer_Release_x64/full/functions/0x1401aa4c0.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 );
}