server-re/decomp/AgentManager_Release_x64/full/functions/0x14001bbc0.c
2026-10-15 09:58:24 -04:00

251 lines
6.9 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14001bbc0 FUN_14001bbc0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_14001bbc0(int *param_1,int param_2,longlong param_3,uint *param_4)
{
int *piVar1;
LPCWSTR pWVar2;
undefined8 uVar3;
LPCWSTR pWVar4;
int iVar5;
longlong *plVar6;
char *****pppppcVar7;
longlong lVar8;
char *pcVar9;
uint uVar10;
uint uVar11;
ulonglong uVar12;
uint uVar13;
uint uVar14;
uint uVar15;
uint uVar16;
undefined1 auStack_418 [32];
uint local_3f8;
uint local_3f0;
uint local_3e8;
uint local_3e0;
LPCWSTR local_3d8;
int local_3d0;
int *local_3c8;
undefined1 local_3c0;
undefined8 local_3b8;
char ****local_3b0 [2];
char ***local_3a0;
char ***local_398;
undefined1 local_388;
undefined7 uStack_387;
undefined8 local_378;
ulonglong local_370;
ushort local_360 [8];
undefined1 local_350 [6];
ushort local_34a;
undefined1 local_340 [6];
ushort local_33a;
undefined1 local_330 [2];
ushort local_32e;
undefined1 local_320 [12];
ushort local_314;
ushort local_310 [8];
undefined1 local_300 [10];
ushort local_2f6;
undefined1 local_2f0 [10];
ushort local_2e6;
undefined1 local_2e0 [2];
ushort local_2de;
undefined1 local_2d0 [8];
ushort local_2c8;
undefined1 local_2c0 [8];
ushort local_2b8;
undefined1 local_2b0 [12];
ushort local_2a4;
void *local_2a0 [3];
ulonglong local_288;
undefined4 local_278;
undefined4 local_274;
char local_270 [520];
ulonglong local_68;
local_3b8 = 0xfffffffffffffffe;
local_68 = DAT_14016f5a0 ^ (ulonglong)auStack_418;
local_3d0 = param_2;
local_3c8 = param_1;
memset(local_270,0,0x200);
local_278 = 0x208;
local_274 = 0x4e2e;
local_398 = (char ***)0xf;
local_3a0 = (char ***)0x0;
local_3b0[0] = (char ****)((ulonglong)local_3b0[0] & 0xffffffffffffff00);
plVar6 = FUN_140010200((longlong *)local_2a0,&DAT_140175048);
pppppcVar7 = (char *****)FUN_1400102b0((undefined8 *)&local_388,plVar6);
if (local_3b0 != pppppcVar7) {
if ((char ****)0xf < local_398) {
operator_delete(local_3b0[0]);
}
local_398 = (char ***)0xf;
local_3a0 = (char ***)0x0;
local_3b0[0] = (char ****)((ulonglong)local_3b0[0] & 0xffffffffffffff00);
if (pppppcVar7[3] < (char ****)0x10) {
memmove(local_3b0,pppppcVar7,(longlong)pppppcVar7[2] + 1);
}
else {
local_3b0[0] = *pppppcVar7;
*pppppcVar7 = (char ****)0x0;
}
local_3a0 = (char ***)pppppcVar7[2];
local_398 = (char ***)pppppcVar7[3];
pppppcVar7[3] = (char ****)0xf;
pppppcVar7[2] = (char ****)0x0;
*(undefined1 *)pppppcVar7 = 0;
}
if (0xf < local_370) {
operator_delete((void *)CONCAT71(uStack_387,local_388));
}
local_370 = 0xf;
local_378 = 0;
local_388 = 0;
if (0xf < local_288) {
operator_delete(local_2a0[0]);
}
FUN_14000c480((ulonglong *)local_3b0,"<server-status>",0xf);
FUN_14000f580((longlong *)local_3b0,(ulonglong)*(uint *)(param_3 + 0xc),"world");
FUN_14000fa00((longlong *)local_3b0,(LPCWSTR)(param_3 + 0x20),"name");
FUN_14000f580((longlong *)local_3b0,(ulonglong)*param_4,"usercount");
FUN_14000f580((longlong *)local_3b0,(ulonglong)param_4[1],"servercount");
FUN_14000f580((longlong *)local_3b0,(ulonglong)param_4[2],"frame");
FUN_14000f580((longlong *)local_3b0,(ulonglong)(byte)param_4[6],"open");
FUN_14000f580((longlong *)local_3b0,(ulonglong)*(uint *)(param_3 + 0x10),"version");
uVar16 = param_4[4];
if (uVar16 == 0) {
pcVar9 = "DISCONNECT";
}
else if (uVar16 == 1) {
pcVar9 = "LOADING";
}
else if (uVar16 == 2) {
pcVar9 = "BAD";
}
else {
if (uVar16 != 3) goto LAB_14001be04;
pcVar9 = "GOOD";
}
FUN_14000f7e0((longlong *)local_3b0,pcVar9,"state");
LAB_14001be04:
uVar3 = *(undefined8 *)(param_3 + 0x18);
lVar8 = (**(code **)(PTR_PTR_14016f508 + 0x18))(&PTR_PTR_14016f508);
local_3d8 = (LPCWSTR)(lVar8 + 0x18);
iVar5 = Ordinal_185(uVar3,local_320);
uVar15 = 0xffffffff;
uVar16 = (uint)local_314;
if (iVar5 == 0) {
uVar16 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_2f0);
uVar14 = (uint)local_2e6;
if (iVar5 == 0) {
uVar14 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_2d0);
uVar13 = (uint)local_2c8;
if (iVar5 == 0) {
uVar13 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_340);
uVar11 = (uint)local_33a;
if (iVar5 == 0) {
uVar11 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_2e0);
uVar10 = (uint)local_2de;
if (iVar5 == 0) {
uVar10 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_360);
uVar12 = (ulonglong)local_360[0];
if (iVar5 == 0) {
uVar12 = 0xffffffff;
}
local_3f8 = uVar11;
local_3f0 = uVar13;
local_3e8 = uVar14;
local_3e0 = uVar16;
FUN_14001c310((longlong *)&local_3d8,L"%d-%d-%d %d:%d:%d",uVar12,(ulonglong)uVar10);
FUN_14000fa00((longlong *)local_3b0,local_3d8,"starttime");
uVar3 = *(undefined8 *)(param_4 + 8);
iVar5 = Ordinal_185(uVar3,local_2b0);
uVar16 = (uint)local_2a4;
if (iVar5 == 0) {
uVar16 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_300);
uVar14 = (uint)local_2f6;
if (iVar5 == 0) {
uVar14 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_2c0);
uVar13 = (uint)local_2b8;
if (iVar5 == 0) {
uVar13 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_350);
uVar11 = (uint)local_34a;
if (iVar5 == 0) {
uVar11 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_330);
uVar10 = (uint)local_32e;
if (iVar5 == 0) {
uVar10 = uVar15;
}
iVar5 = Ordinal_185(uVar3,local_310);
uVar12 = (ulonglong)local_310[0];
if (iVar5 == 0) {
uVar12 = 0xffffffff;
}
local_3f8 = uVar11;
local_3f0 = uVar13;
local_3e8 = uVar14;
local_3e0 = uVar16;
FUN_14001c310((longlong *)&local_3d8,L"%d-%d-%d %d:%d:%d",uVar12,(ulonglong)uVar10);
pWVar4 = local_3d8;
FUN_14000fa00((longlong *)local_3b0,local_3d8,"refreshtime");
FUN_14000c480((ulonglong *)local_3b0,"</server-status>",0x10);
if (local_3a0 < (char ****)0x400) {
pppppcVar7 = local_3b0;
if ((char ****)0xf < local_398) {
pppppcVar7 = (char *****)local_3b0[0];
}
strncpy(local_270,(char *)pppppcVar7,(size_t)local_3a0);
}
else {
printf("PWE_RESP_STATUS_SERVER - Msg Size Full!\n");
}
lVar8 = *(longlong *)(local_3c8 + 0x16);
if (lVar8 != 0) {
piVar1 = (int *)(lVar8 + 0x70);
local_3c8 = piVar1;
FUN_14003d040(piVar1);
local_3c0 = 1;
lVar8 = FUN_14003c450(lVar8,local_3d0);
if (lVar8 != 0) {
Ordinal_19(*(undefined8 *)(lVar8 + 8),&local_278,0x208,0);
}
FUN_14003d0d0((longlong)piVar1);
}
LOCK();
pWVar2 = pWVar4 + -4;
iVar5 = *(int *)pWVar2;
*(int *)pWVar2 = *(int *)pWVar2 + -1;
UNLOCK();
if (iVar5 + -1 < 1) {
(**(code **)(**(longlong **)(pWVar4 + -0xc) + 8))();
}
if ((char ****)0xf < local_398) {
operator_delete(local_3b0[0]);
}
return;
}