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

199 lines
7.4 KiB
C

/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186
* Ghidra 12.1.2 decompiler output for 0x14007be70 FUN_14007be70
* Pseudocode, not original source. */
void FUN_14007be70(longlong param_1,uint *param_2,longlong param_3,undefined8 param_4)
{
int *piVar1;
void *pvVar2;
longlong lVar3;
short *psVar4;
char cVar5;
int iVar6;
int iVar7;
ulonglong uVar8;
undefined8 uVar9;
int *piVar10;
longlong lVar11;
longlong *plVar12;
undefined8 *puVar13;
undefined8 *puVar14;
short **ppsVar15;
int *piVar16;
longlong lVar17;
longlong lVar18;
undefined *puVar19;
short *psVar20;
longlong lVar21;
ulonglong uVar22;
uint local_res18 [2];
undefined8 *local_res20;
short *local_138;
undefined **local_130;
undefined4 local_128;
undefined2 local_124;
undefined *local_120;
undefined **local_118;
undefined4 local_110;
undefined2 local_10c;
undefined **local_108;
undefined4 local_100;
undefined2 local_fc;
int *local_f8;
undefined1 local_f0;
undefined *local_e8;
undefined **local_e0;
undefined4 local_d8;
undefined2 local_d4;
int *local_d0;
undefined1 local_c8;
int *local_c0;
undefined1 local_b8;
short **local_b0;
undefined1 local_a8;
undefined8 local_a0;
undefined8 local_98 [2];
undefined8 local_88 [2];
undefined8 local_78 [2];
undefined8 local_68 [2];
undefined8 local_58 [2];
undefined8 local_48 [2];
local_a0 = 0xfffffffffffffffe;
lVar11 = param_3;
FUN_140079c10();
local_118 = Proud::AddrPort::vftable;
lVar18 = 0;
local_110 = 0;
local_10c = 0;
local_130 = Proud::AddrPort::vftable;
local_128 = 0;
local_124 = 0;
uVar8 = FUN_140075910(param_2,(longlong)&local_118);
if ((((char)uVar8 != '\0') &&
(uVar8 = FUN_140075910(param_2,(longlong)&local_130), (char)uVar8 != '\0')) &&
(uVar9 = FUN_140075970(param_2,local_res18,lVar11,param_4), (char)uVar9 != '\0')) {
piVar10 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
local_f8 = piVar10;
FUN_14003d040(piVar10);
local_f0 = 1;
if (DAT_14017614f != '\0') {
(**(code **)(**(longlong **)(param_1 + 0x148) + 200))
(*(longlong **)(param_1 + 0x148),
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_PeerUdp_NotifyHolepunchSuccess"
);
}
lVar11 = FUN_14004f000(*(longlong *)(param_1 + 0x148),local_res18[0]);
if (lVar11 != 0) {
plVar12 = FUN_14005d550(*(longlong *)(param_1 + 0x148) + 0x2d8,(longlong *)&local_res20,
local_res18[0],*(uint *)(param_3 + 0x6f8));
if ((longlong *)*plVar12 != (longlong *)0x0) {
lVar18 = *(longlong *)*plVar12;
}
if ((local_res20 != (undefined8 *)0x0) &&
(local_res20[1] = local_res20[1] + -1, piVar10 = local_f8, local_res20[1] == 0)) {
pvVar2 = (void *)*local_res20;
if (pvVar2 != (void *)0x0) {
FUN_14004a500((longlong)pvVar2);
operator_delete(pvVar2);
}
FUN_14003e8b0(local_res20);
piVar10 = local_f8;
}
if (((lVar18 != 0) && (*(char *)(lVar18 + 0x1a0) == '\0')) &&
(cVar5 = FUN_14004a540(lVar18), cVar5 != '\0')) {
iVar6 = FUN_14004a4c0(lVar18);
local_e0 = Proud::AddrPort::vftable;
local_d8 = local_128;
local_d4 = local_124;
local_108 = Proud::AddrPort::vftable;
local_100 = local_110;
local_fc = local_10c;
FUN_14004a260(lVar18,*(int *)(param_3 + 0x6f8),(longlong)&local_108,(longlong)&local_e0);
iVar7 = FUN_14004a4c0(lVar18);
if ((iVar7 == 2) && (iVar6 == 1)) {
lVar21 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x4a8);
puVar13 = FUN_14004a440(lVar18,local_78,*(int *)(lVar11 + 0x6f8));
puVar14 = FUN_14004a340(lVar18,local_98,*(int *)(lVar11 + 0x6f8));
(**(code **)(lVar21 + 0x60))
(*(longlong *)(param_1 + 0x148) + 0x4a8,*(undefined4 *)(param_3 + 0x6f8),
&DAT_140177f90,lVar11 + 0x6f8,puVar14,puVar13);
lVar3 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x4a8);
FUN_14004a440(lVar18,local_58,*(int *)(param_3 + 0x6f8));
FUN_14004a340(lVar18,local_88,*(int *)(param_3 + 0x6f8));
lVar17 = *(longlong *)(param_1 + 0x148) + 0x4a8;
lVar21 = param_3 + 0x6f8;
puVar19 = &DAT_140177f90;
uVar8 = (ulonglong)*(uint *)(lVar11 + 0x6f8);
(**(code **)(lVar3 + 0x60))();
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
FUN_14003e7c0(lVar17,uVar8,puVar19,lVar21);
local_138 = (short *)PTR_DAT_14016f010;
puVar13 = FUN_14004a440(lVar18,local_68,*(int *)(lVar11 + 0x6f8));
puVar14 = FUN_14004a440(lVar18,local_48,*(int *)(param_3 + 0x6f8));
(**(code **)*puVar13)(puVar13,&local_e8);
(**(code **)*puVar14)(puVar14,&local_120);
uVar22 = (ulonglong)*(uint *)(lVar11 + 0x6f8);
uVar8 = (ulonglong)*(uint *)(param_3 + 0x6f8);
ppsVar15 = &local_138;
FUN_140029b80((longlong *)ppsVar15,
L"Client %d와 Client %d가 쌍방 홀펀칭을 위한 단계 1 완료: Client %d External Addr=%s,Client %d External Addr=%s"
,uVar8,uVar22);
if (((local_120 != (undefined *)0x0) && (local_120 != PTR_DAT_14016f010)) &&
(local_120 + -8 != (undefined *)0x0)) {
ppsVar15 = (short **)FUN_14003e7c0(ppsVar15,PTR_DAT_14016f010,uVar8,uVar22);
local_b0 = ppsVar15;
FUN_14003d040((int *)ppsVar15);
local_a8 = 1;
piVar1 = (int *)(local_120 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14003e8b0(local_120 + -8);
}
FUN_14003d0d0((longlong)ppsVar15);
}
local_120 = PTR_DAT_14016f010;
if (((local_e8 != (undefined *)0x0) && (local_e8 != PTR_DAT_14016f010)) &&
(local_e8 + -8 != (undefined *)0x0)) {
piVar16 = (int *)FUN_14003e7c0(ppsVar15,PTR_DAT_14016f010,uVar8,uVar22);
local_c0 = piVar16;
FUN_14003d040(piVar16);
local_b8 = 1;
piVar1 = (int *)(local_e8 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14003e8b0(local_e8 + -8);
}
FUN_14003d0d0((longlong)piVar16);
}
psVar4 = local_138;
psVar20 = local_138;
if (local_138 == (short *)0x0) {
psVar20 = (short *)PTR_DAT_14016f010;
}
uVar9 = 1;
lVar18 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0);
FUN_1400843d0(lVar18,1,psVar20,uVar22);
if (((psVar4 != (short *)0x0) && (psVar4 != (short *)PTR_DAT_14016f010)) &&
(psVar4 + -4 != (short *)0x0)) {
piVar16 = (int *)FUN_14003e7c0(lVar18,uVar9,psVar20,uVar22);
local_d0 = piVar16;
FUN_14003d040(piVar16);
local_c8 = 1;
piVar1 = (int *)(psVar4 + -2);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14003e8b0(psVar4 + -4);
}
FUN_14003d0d0((longlong)piVar16);
}
}
}
}
}
FUN_14003d0d0((longlong)piVar10);
}
return;
}