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

205 lines
7.5 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14007b9f0 FUN_14007b9f0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_14007b9f0(longlong param_1,uint *param_2,longlong param_3,TypeDescriptor *param_4)
{
undefined **ppuVar1;
undefined **ppuVar2;
int iVar3;
undefined8 uVar4;
ulonglong uVar5;
int *piVar6;
int *piVar7;
longlong lVar8;
longlong *plVar9;
longlong *plVar10;
int **ppiVar11;
SIZE_T SVar12;
undefined ***pppuVar13;
int *piVar14;
undefined *puVar15;
bool bVar16;
undefined1 auStack_da8 [32];
undefined *local_d88;
undefined **local_d78;
undefined4 local_d70;
undefined2 local_d6c;
undefined **local_d68;
undefined4 local_d60;
undefined2 local_d5c;
int **local_d58;
undefined1 local_d50;
undefined *local_d48;
int *local_d40;
undefined1 local_d38;
int local_d30 [2];
undefined *local_d28;
longlong local_d20;
int local_d14;
undefined8 local_d08;
int *local_d00;
undefined1 local_cf8;
undefined **local_ce8;
undefined8 uStack_ce0;
undefined1 local_cd8 [3216];
ulonglong local_48;
local_d08 = 0xfffffffffffffffe;
local_48 = DAT_14016f5a0 ^ (ulonglong)auStack_da8;
FUN_140079c10();
local_d68 = Proud::AddrPort::vftable;
local_d60 = 0;
local_d5c = 0;
local_d78 = Proud::AddrPort::vftable;
local_d70 = 0;
local_d6c = 0;
local_ce8 = (undefined **)0x0;
uStack_ce0 = 0;
SVar12 = 0x10;
uVar4 = FUN_140074ee0(param_2,&local_ce8,0x10);
if ((char)uVar4 == '\0') {
return;
}
uVar5 = FUN_140075910(param_2,(longlong)&local_d68);
if ((char)uVar5 != '\0') {
uVar5 = FUN_140075910(param_2,(longlong)&local_d78);
if ((char)uVar5 == '\0') {
return;
}
piVar6 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
local_d00 = piVar6;
FUN_14003d040(piVar6);
local_cf8 = 1;
if (DAT_14017614f != '\0') {
SVar12 = **(SIZE_T **)(param_1 + 0x148);
(**(code **)(SVar12 + 200))
(*(SIZE_T **)(param_1 + 0x148),
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_NotifyHolepunchSuccess");
}
bVar16 = *(undefined ***)(param_3 + 0x728) < local_ce8;
if ((*(undefined ***)(param_3 + 0x728) == local_ce8) &&
(bVar16 = *(ulonglong *)(param_3 + 0x730) < uStack_ce0,
*(ulonglong *)(param_3 + 0x730) == uStack_ce0)) {
iVar3 = 0;
}
else {
iVar3 = (1 - (uint)bVar16) - (uint)(bVar16 != 0);
}
if ((iVar3 == 0) && (*(char *)(param_3 + 0x700) == '\0')) {
*(undefined1 *)(param_3 + 0x700) = 1;
uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))();
*(undefined8 *)(param_3 + 0x198) = uVar4;
uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x118) + 8))();
*(undefined8 *)(param_3 + 0x1b8) = uVar4;
local_ce8 = Proud::AddrPort::vftable;
uStack_ce0._0_6_ = CONCAT24(local_d6c,local_d70);
FUN_140092c10(param_3 + 0x700,(longlong)&local_ce8);
*(undefined4 *)(param_3 + 0x720) = local_d60;
*(undefined2 *)(param_3 + 0x724) = local_d5c;
lVar8 = param_3;
FUN_14005a220(*(longlong *)(param_1 + 0x148),param_3,SVar12,param_4);
FUN_140074fb0(local_d30);
FUN_140074a40((longlong)local_d30,lVar8,SVar12,param_4);
FUN_140075110(local_d30,0x800,SVar12,param_4);
uVar4 = 0;
FUN_140075110(local_d30,0,SVar12,param_4);
FUN_140029d80((longlong)local_d30,CONCAT71((int7)((ulonglong)uVar4 >> 8),0xf),SVar12,param_4);
local_ce8 = *(undefined ***)(param_3 + 0x728);
uStack_ce0 = *(undefined8 *)(param_3 + 0x730);
FUN_140051cf0((longlong)local_d30,&local_ce8,SVar12,param_4);
piVar7 = (int *)(**(code **)(*(longlong *)(param_3 + 0x108) + 0x10))();
local_d40 = piVar7;
FUN_14003d040(piVar7);
local_d38 = 1;
lVar8 = FUN_14004ec50((longlong)local_cd8,(longlong)local_d30,SVar12);
local_ce8 = (undefined **)0x0;
uStack_ce0 = CONCAT71(uStack_ce0._1_7_,1);
pppuVar13 = &local_ce8;
FUN_140091090(*(char **)(param_3 + 0x748),lVar8,(SIZE_T *)pppuVar13,param_4);
FUN_14004db20((longlong)local_cd8,lVar8,pppuVar13,param_4);
FUN_14003d0d0((longlong)piVar7);
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
FUN_14003e7c0(piVar7,lVar8,pppuVar13,param_4);
local_d40 = (int *)PTR_DAT_14016f010;
plVar9 = FUN_1400420f0((longlong)&local_d78,(longlong *)&local_ce8,pppuVar13,param_4);
plVar10 = FUN_1400420f0((longlong)&local_d68,(longlong *)&local_d48,pppuVar13,param_4);
local_d88 = (undefined *)*plVar9;
if ((undefined *)*plVar9 == (undefined *)0x0) {
local_d88 = PTR_DAT_14016f010;
}
puVar15 = (undefined *)*plVar10;
if ((undefined *)*plVar10 == (undefined *)0x0) {
puVar15 = PTR_DAT_14016f010;
}
uVar5 = (ulonglong)*(uint *)(param_3 + 0x6f8);
ppiVar11 = &local_d40;
FUN_140029b80((longlong *)ppiVar11,
L"Client %d가 서버와의 UDP 홀펀칭 성공: Client local Addr=%s,Client addr at server=%s"
,uVar5,puVar15);
if (((local_d48 != (undefined *)0x0) && (local_d48 != PTR_DAT_14016f010)) &&
(local_d48 + -8 != (undefined *)0x0)) {
ppiVar11 = (int **)FUN_14003e7c0(ppiVar11,PTR_DAT_14016f010,uVar5,puVar15);
local_d58 = ppiVar11;
FUN_14003d040((int *)ppiVar11);
local_d50 = 1;
piVar7 = (int *)(local_d48 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14003e8b0(local_d48 + -8);
}
FUN_14003d0d0((longlong)ppiVar11);
}
ppuVar2 = local_ce8;
local_d48 = PTR_DAT_14016f010;
if (((local_ce8 != (undefined **)0x0) && (local_ce8 != (undefined **)PTR_DAT_14016f010)) &&
(ppuVar1 = local_ce8 + -1, ppuVar1 != (undefined **)0x0)) {
ppiVar11 = (int **)FUN_14003e7c0(ppiVar11,PTR_DAT_14016f010,uVar5,puVar15);
local_d58 = ppiVar11;
FUN_14003d040((int *)ppiVar11);
local_d50 = 1;
piVar7 = (int *)((longlong)ppuVar2 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14003e8b0(ppuVar1);
}
FUN_14003d0d0((longlong)ppiVar11);
}
piVar7 = local_d40;
piVar14 = local_d40;
if (local_d40 == (int *)0x0) {
piVar14 = (int *)PTR_DAT_14016f010;
}
uVar4 = 1;
lVar8 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0);
FUN_1400843d0(lVar8,1,(short *)piVar14,puVar15);
if (((piVar7 != (int *)0x0) && (piVar7 != (int *)PTR_DAT_14016f010)) &&
(piVar7 + -2 != (int *)0x0)) {
ppiVar11 = (int **)FUN_14003e7c0(lVar8,uVar4,piVar14,puVar15);
local_d58 = ppiVar11;
FUN_14003d040((int *)ppiVar11);
local_d50 = 1;
piVar14 = piVar7 + -1;
*piVar14 = *piVar14 + -1;
if (*piVar14 == 0) {
FUN_14003e8b0(piVar7 + -2);
}
FUN_14003d0d0((longlong)ppiVar11);
}
}
local_ce8 = &local_d28;
FUN_14008a320((longlong *)&local_d28);
if ((local_d20 != 0) && (local_d14 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14003dec0();
}
}
FUN_14003d0d0((longlong)piVar6);
return;
}
return;
}