server-re/decomp/MessageServer_Release_x64/full/functions/0x14008d2e0.c

212 lines
7.4 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x14008d2e0 FUN_14008d2e0
* Pseudocode, not original source. */
undefined8
FUN_14008d2e0(longlong param_1,undefined8 param_2,undefined8 param_3,uint *param_4,uint *param_5,
undefined8 *param_6,undefined8 *param_7,undefined8 *param_8,undefined8 *param_9)
{
int *piVar1;
short *psVar2;
longlong *plVar3;
short **ppsVar4;
int *piVar5;
longlong lVar6;
ulonglong uVar7;
undefined *puVar8;
short *psVar9;
uint *puVar10;
ulonglong uVar11;
undefined8 uVar12;
longlong *local_res8;
undefined8 *local_108;
short *local_100;
undefined *local_f8;
undefined *local_f0;
undefined *local_e8;
undefined *local_e0;
undefined **local_d8;
undefined4 local_d0;
undefined2 local_cc;
undefined **local_c8;
undefined4 local_c0;
undefined2 local_bc;
undefined **local_b8;
undefined4 local_b0;
undefined2 local_ac;
undefined **local_a8;
undefined4 local_a0;
undefined2 local_9c;
short **local_98;
undefined1 local_90;
short **local_88;
undefined1 local_80;
int *local_78;
undefined1 local_70;
short **local_68;
undefined1 local_60;
int *local_58;
undefined1 local_50;
int *local_48;
undefined1 local_40;
undefined8 local_38;
local_38 = 0xfffffffffffffffe;
local_48 = (int *)(**(code **)(**(longlong **)(param_1 + 0x20) + 0x58))();
FUN_14006b350(local_48);
local_40 = 1;
if (DAT_1401b42cf != '\0') {
(**(code **)(**(longlong **)(param_1 + 0x20) + 200))
(*(longlong **)(param_1 + 0x20),
L"Proud::CNetServerImpl::C2SStub::NotifyP2PHolepunchSuccess");
}
local_res8 = (longlong *)0x0;
plVar3 = FUN_14008c450(*(longlong *)(param_1 + 0x20) + 0x2d8,(longlong *)&local_108,*param_4,
*param_5);
if (*plVar3 != 0) {
*(longlong *)(*plVar3 + 8) = *(longlong *)(*plVar3 + 8) + 1;
local_res8 = (longlong *)*plVar3;
}
if ((local_108 != (undefined8 *)0x0) && (local_108[1] = local_108[1] + -1, local_108[1] == 0)) {
FUN_14007d350(local_108);
}
if (((local_res8 != (longlong *)0x0) && (lVar6 = *local_res8, lVar6 != 0)) &&
(*(char *)(lVar6 + 8) == '\x01')) {
if (*(char *)(lVar6 + 8) != '\0') {
*(undefined1 *)(lVar6 + 8) = 0;
}
lVar6 = *local_res8;
uVar12 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x20) + 0x118) + 8))();
*(undefined8 *)(lVar6 + 0x198) = uVar12;
local_b8 = Proud::AddrPort::vftable;
local_b0 = *(undefined4 *)(param_9 + 1);
local_ac = *(undefined2 *)((longlong)param_9 + 0xc);
local_d8 = Proud::AddrPort::vftable;
local_d0 = *(undefined4 *)(param_6 + 1);
local_cc = *(undefined2 *)((longlong)param_6 + 0xc);
FUN_140079850(*local_res8,*param_4,(longlong)&local_d8,(longlong)&local_b8);
local_c8 = Proud::AddrPort::vftable;
local_c0 = *(undefined4 *)(param_7 + 1);
local_bc = *(undefined2 *)((longlong)param_7 + 0xc);
local_a8 = Proud::AddrPort::vftable;
local_a0 = *(undefined4 *)(param_8 + 1);
local_9c = *(undefined2 *)((longlong)param_8 + 0xc);
FUN_140079850(*local_res8,*param_5,(longlong)&local_a8,(longlong)&local_c8);
plVar3 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x4a8);
(**(code **)(*plVar3 + 0x90))
(plVar3,*param_4,&DAT_1401b6110,param_4,param_5,param_6,param_7,param_8,param_9);
plVar3 = (longlong *)(*(longlong *)(param_1 + 0x20) + 0x4a8);
puVar8 = &DAT_1401b6110;
uVar7 = (ulonglong)*param_5;
puVar10 = param_4;
(**(code **)(*plVar3 + 0x90))();
if (*(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0) != 0) {
FUN_14006cb70(plVar3,uVar7,puVar8,puVar10);
local_100 = (short *)PTR_DAT_1401ac010;
(**(code **)*param_9)(param_9,&local_e0);
(**(code **)*param_8)(param_8,&local_f0);
(**(code **)*param_7)(param_7,&local_e8);
(**(code **)*param_6)(param_6,&local_f8);
uVar11 = (ulonglong)*param_5;
uVar7 = (ulonglong)*param_4;
ppsVar4 = &local_100;
FUN_140053d20((longlong *)ppsVar4,
L"Client %d-Client %d간 P2P UDP 홀펀칭 최종 단계 성공: ABSendAddr=%s ABRecvAddr=%s BASendAddr=%s BARecvAddr=%s"
,uVar7,uVar11);
if (((local_f8 != (undefined *)0x0) && (local_f8 != PTR_DAT_1401ac010)) &&
(local_f8 + -8 != (undefined *)0x0)) {
ppsVar4 = (short **)FUN_14006cb70(ppsVar4,PTR_DAT_1401ac010,uVar7,uVar11);
local_98 = ppsVar4;
FUN_14006b350((int *)ppsVar4);
local_90 = 1;
piVar1 = (int *)(local_f8 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(local_f8 + -8);
}
FUN_14006b3e0((longlong)ppsVar4);
local_90 = 0;
}
local_f8 = PTR_DAT_1401ac010;
if (((local_e8 != (undefined *)0x0) && (local_e8 != PTR_DAT_1401ac010)) &&
(local_e8 + -8 != (undefined *)0x0)) {
ppsVar4 = (short **)FUN_14006cb70(ppsVar4,PTR_DAT_1401ac010,uVar7,uVar11);
local_68 = ppsVar4;
FUN_14006b350((int *)ppsVar4);
local_60 = 1;
piVar1 = (int *)(local_e8 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(local_e8 + -8);
}
FUN_14006b3e0((longlong)ppsVar4);
local_60 = 0;
}
local_e8 = PTR_DAT_1401ac010;
if (((local_f0 != (undefined *)0x0) && (local_f0 != PTR_DAT_1401ac010)) &&
(local_f0 + -8 != (undefined *)0x0)) {
ppsVar4 = (short **)FUN_14006cb70(ppsVar4,PTR_DAT_1401ac010,uVar7,uVar11);
local_88 = ppsVar4;
FUN_14006b350((int *)ppsVar4);
local_80 = 1;
piVar1 = (int *)(local_f0 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(local_f0 + -8);
}
FUN_14006b3e0((longlong)ppsVar4);
local_80 = 0;
}
local_f0 = PTR_DAT_1401ac010;
if (((local_e0 != (undefined *)0x0) && (local_e0 != PTR_DAT_1401ac010)) &&
(local_e0 + -8 != (undefined *)0x0)) {
piVar5 = (int *)FUN_14006cb70(ppsVar4,PTR_DAT_1401ac010,uVar7,uVar11);
local_78 = piVar5;
FUN_14006b350(piVar5);
local_70 = 1;
piVar1 = (int *)(local_e0 + -4);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(local_e0 + -8);
}
FUN_14006b3e0((longlong)piVar5);
local_70 = 0;
}
psVar2 = local_100;
psVar9 = local_100;
if (local_100 == (short *)0x0) {
psVar9 = (short *)PTR_DAT_1401ac010;
}
uVar12 = 1;
lVar6 = *(longlong *)(*(longlong *)(param_1 + 0x20) + 0x17f0);
local_e0 = PTR_DAT_1401ac010;
FUN_1400cb700(lVar6,1,psVar9,uVar11);
if (((psVar2 != (short *)0x0) && (psVar2 != (short *)PTR_DAT_1401ac010)) &&
(psVar2 + -4 != (short *)0x0)) {
piVar5 = (int *)FUN_14006cb70(lVar6,uVar12,psVar9,uVar11);
local_58 = piVar5;
FUN_14006b350(piVar5);
local_50 = 1;
piVar1 = (int *)(psVar2 + -2);
*piVar1 = *piVar1 + -1;
if (*piVar1 == 0) {
FUN_14006cc60(psVar2 + -4);
}
FUN_14006b3e0((longlong)piVar5);
local_50 = 0;
}
local_100 = (short *)PTR_DAT_1401ac010;
}
}
if (local_res8 != (longlong *)0x0) {
plVar3 = local_res8 + 1;
*plVar3 = *plVar3 + -1;
if (*plVar3 == 0) {
FUN_14007d350(local_res8);
}
}
uVar12 = FUN_14006b3e0((longlong)local_48);
return CONCAT71((int7)((ulonglong)uVar12 >> 8),1);
}