/* 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; }