/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14008d810 FUN_14008d810 * Pseudocode, not original source. */ undefined8 FUN_14008d810(longlong param_1,uint param_2,undefined8 param_3,uint *param_4,int *param_5) { int *piVar1; uint uVar2; undefined4 uVar3; undefined2 uVar4; short *psVar5; int *piVar6; int *piVar7; undefined8 uVar8; uint *puVar9; longlong *plVar10; longlong lVar11; longlong lVar12; ulonglong uVar13; undefined *puVar14; short *psVar15; longlong *local_res8; uint local_res10 [2]; short *local_res20; local_res10[0] = param_2; piVar6 = (int *)(**(code **)(**(longlong **)(param_1 + 0x20) + 0x58))(); FUN_14006b350(piVar6); if (DAT_1401b42cf != '\0') { (**(code **)(**(longlong **)(param_1 + 0x20) + 200))(); } uVar2 = *param_4; lVar11 = *(longlong *)(param_1 + 0x20); uVar13 = (ulonglong)uVar2 % (ulonglong)*(uint *)(lVar11 + 0xca0); if ((*(longlong *)(lVar11 + 0xc80) != 0) && (puVar9 = *(uint **)(*(longlong *)(lVar11 + 0xc80) + uVar13 * 8), puVar9 != (uint *)0x0)) { while ((uint)uVar13 == puVar9[8] % *(uint *)(lVar11 + 0xca0)) { if (*puVar9 == uVar2) { if ((*(longlong *)(puVar9 + 2) != 0) && (*(longlong *)(*(longlong *)(puVar9 + 2) + 0x228) == 0)) { FUN_14008c450(lVar11 + 0x2d8,(longlong *)&local_res8,local_res10[0],uVar2); if ((local_res8 != (longlong *)0x0) && ((lVar11 = *local_res8, lVar11 != 0 && (*(char *)(lVar11 + 8) == '\0')))) { lVar12 = 0; if (*param_5 != 0x1d) { *(undefined8 *)(lVar11 + 0x198) = 0; } uVar4 = DAT_1401ac3d4; uVar3 = DAT_1401ac3d0; if (local_res8 != (longlong *)0x0) { lVar12 = *local_res8; } if (*(char *)(lVar12 + 8) != '\x01') { *(undefined4 *)(lVar12 + 0x10) = 0; *(undefined4 *)(lVar12 + 0x20) = uVar3; *(undefined2 *)(lVar12 + 0x24) = uVar4; *(undefined4 *)(lVar12 + 0x30) = uVar3; *(undefined2 *)(lVar12 + 0x34) = uVar4; *(undefined1 *)(lVar12 + 0x38) = 0; uVar4 = DAT_1401ac3d4; uVar3 = DAT_1401ac3d0; *(undefined4 *)(lVar12 + 0x40) = 0; *(undefined4 *)(lVar12 + 0x50) = uVar3; *(undefined2 *)(lVar12 + 0x54) = uVar4; *(undefined4 *)(lVar12 + 0x60) = uVar3; *(undefined2 *)(lVar12 + 100) = uVar4; *(undefined1 *)(lVar12 + 0x68) = 0; *(undefined1 *)(lVar12 + 8) = 1; } plVar10 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x4a8); puVar9 = local_res10; puVar14 = &DAT_1401b6110; uVar13 = (ulonglong)*param_4; (**(code **)(*plVar10 + 0x70))(); if (*(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0) != 0) { FUN_14006cb70(plVar10,uVar13,puVar14,puVar9); local_res20 = (short *)PTR_DAT_1401ac010; uVar13 = (ulonglong)*param_4; FUN_140053d20((longlong *)&local_res20, L"Client %d-Client %d간 P2P UDP 홀펀칭 중도 해제", (ulonglong)local_res10[0],uVar13); psVar5 = local_res20; psVar15 = local_res20; if (local_res20 == (short *)0x0) { psVar15 = (short *)PTR_DAT_1401ac010; } uVar8 = 1; lVar11 = *(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0); FUN_1400cb700(lVar11,1,psVar15,uVar13); if (((psVar5 != (short *)0x0) && (psVar5 != (short *)PTR_DAT_1401ac010)) && (psVar5 + -4 != (short *)0x0)) { piVar7 = (int *)FUN_14006cb70(lVar11,uVar8,psVar15,uVar13); FUN_14006b350(piVar7); piVar1 = (int *)(psVar5 + -2); *piVar1 = *piVar1 + -1; if (*piVar1 == 0) { FUN_14006cc60(psVar5 + -4); } FUN_14006b3e0((longlong)piVar7); } local_res20 = (short *)PTR_DAT_1401ac010; } } if ((local_res8 != (longlong *)0x0) && (local_res8[1] = local_res8[1] + -1, local_res8[1] == 0)) { FUN_14007d350(local_res8); } } break; } puVar9 = *(uint **)(puVar9 + 4); if (puVar9 == (uint *)0x0) break; } } uVar8 = FUN_14006b3e0((longlong)piVar6); return CONCAT71((int7)((ulonglong)uVar8 >> 8),1); }