/* AgentManager_Release_x64.exe sha256 8fd8ca91725858651a7839d34257b10c2970ac16c97e60c523b8b0c983fcb186 * Ghidra 12.1.2 decompiler output for 0x14005ed10 FUN_14005ed10 * Pseudocode, not original source. */ undefined8 FUN_14005ed10(longlong param_1,uint param_2,undefined8 param_3,uint *param_4) { int *piVar1; uint uVar2; undefined4 uVar3; undefined2 uVar4; short *psVar5; int *piVar6; int *piVar7; uint *puVar8; longlong *plVar9; longlong lVar10; ulonglong uVar11; undefined *puVar12; short *psVar13; longlong *local_res8; uint local_res10 [2]; short *local_res20; undefined8 uVar14; int *piVar15; undefined1 uVar16; uVar14 = 0xfffffffffffffffe; local_res10[0] = param_2; piVar6 = (int *)(**(code **)(**(longlong **)(param_1 + 0x20) + 0x58))(); piVar15 = piVar6; FUN_14003d040(piVar6); uVar16 = 1; if (DAT_14017614f != '\0') { (**(code **)(**(longlong **)(param_1 + 0x20) + 200))(); } uVar2 = *param_4; lVar10 = *(longlong *)(param_1 + 0x20); uVar11 = (ulonglong)uVar2 % (ulonglong)*(uint *)(lVar10 + 0xca0); if ((*(longlong *)(lVar10 + 0xc80) != 0) && (puVar8 = *(uint **)(*(longlong *)(lVar10 + 0xc80) + uVar11 * 8), puVar8 != (uint *)0x0)) { while ((uint)uVar11 == puVar8[8] % *(uint *)(lVar10 + 0xca0)) { if (*puVar8 == uVar2) { if ((*(longlong *)(puVar8 + 2) != 0) && (*(longlong *)(*(longlong *)(puVar8 + 2) + 0x228) == 0)) { FUN_14005d550(lVar10 + 0x2d8,(longlong *)&local_res8,local_res10[0],uVar2); uVar4 = DAT_14016f3d4; uVar3 = DAT_14016f3d0; if ((local_res8 != (longlong *)0x0) && (lVar10 = *local_res8, lVar10 != 0)) { if (*(char *)(lVar10 + 8) != '\x01') { *(undefined4 *)(lVar10 + 0x10) = 0; *(undefined4 *)(lVar10 + 0x20) = uVar3; *(undefined2 *)(lVar10 + 0x24) = uVar4; *(undefined4 *)(lVar10 + 0x30) = uVar3; *(undefined2 *)(lVar10 + 0x34) = uVar4; *(undefined1 *)(lVar10 + 0x38) = 0; uVar4 = DAT_14016f3d4; uVar3 = DAT_14016f3d0; *(undefined4 *)(lVar10 + 0x40) = 0; *(undefined4 *)(lVar10 + 0x50) = uVar3; *(undefined2 *)(lVar10 + 0x54) = uVar4; *(undefined4 *)(lVar10 + 0x60) = uVar3; *(undefined2 *)(lVar10 + 100) = uVar4; *(undefined1 *)(lVar10 + 0x68) = 0; *(undefined1 *)(lVar10 + 8) = 1; } plVar9 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x4a8); (**(code **)(*plVar9 + 0x110)) (plVar9,*param_4,&DAT_140177f90,local_res10,uVar14,piVar15,uVar16); plVar9 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x4a8); puVar12 = &DAT_140177f90; uVar11 = (ulonglong)local_res10[0]; puVar8 = param_4; (**(code **)(*plVar9 + 0x110))(); if (*(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0) != 0) { FUN_14003e7c0(plVar9,uVar11,puVar12,puVar8); local_res20 = (short *)PTR_DAT_14016f010; uVar11 = (ulonglong)*param_4; FUN_140029b80((longlong *)&local_res20, L"Client %d-Client %d간 P2P UDP 홀펀칭을 완전히 처음부터 다시 시작합니다. 한쪽 UDP 소켓이 Restore이니까." ,(ulonglong)local_res10[0],uVar11); psVar5 = local_res20; psVar13 = local_res20; if (local_res20 == (short *)0x0) { psVar13 = (short *)PTR_DAT_14016f010; } uVar14 = 1; lVar10 = *(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0); FUN_1400843d0(lVar10,1,psVar13,uVar11); if (((psVar5 != (short *)0x0) && (psVar5 != (short *)PTR_DAT_14016f010)) && (psVar5 + -4 != (short *)0x0)) { piVar7 = (int *)FUN_14003e7c0(lVar10,uVar14,psVar13,uVar11); FUN_14003d040(piVar7); piVar1 = (int *)(psVar5 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14003e8b0(psVar5 + -4); } FUN_14003d0d0((longlong)piVar7); } local_res20 = (short *)PTR_DAT_14016f010; } } if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, piVar6 = piVar15, local_res8[1] == 0)) { FUN_14004e450(local_res8); } } break; } puVar8 = *(uint **)(puVar8 + 4); if (puVar8 == (uint *)0x0) break; } } uVar14 = FUN_14003d0d0((longlong)piVar6); return CONCAT71((int7)((ulonglong)uVar14 >> 8),1); }