199 lines
7.4 KiB
C
199 lines
7.4 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400c3340 FUN_1400c3340
|
|
* Pseudocode, not original source. */
|
|
|
|
void FUN_1400c3340(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_1400cf890();
|
|
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_1400bd360(param_2,(longlong)&local_118);
|
|
if ((((char)uVar8 != '\0') &&
|
|
(uVar8 = FUN_1400bd360(param_2,(longlong)&local_130), (char)uVar8 != '\0')) &&
|
|
(uVar9 = FUN_1400bd3c0(param_2,local_res18,lVar11,param_4), (char)uVar9 != '\0')) {
|
|
piVar10 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
|
|
local_f8 = piVar10;
|
|
FUN_14006b350(piVar10);
|
|
local_f0 = 1;
|
|
if (DAT_1401b42cf != '\0') {
|
|
(**(code **)(**(longlong **)(param_1 + 0x148) + 200))
|
|
(*(longlong **)(param_1 + 0x148),
|
|
L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_PeerUdp_NotifyHolepunchSuccess"
|
|
);
|
|
}
|
|
lVar11 = FUN_14007dea0(*(longlong *)(param_1 + 0x148),local_res18[0]);
|
|
if (lVar11 != 0) {
|
|
plVar12 = FUN_14008c450(*(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_140079800((longlong)pvVar2);
|
|
operator_delete(pvVar2);
|
|
}
|
|
FUN_14006cc60(local_res20);
|
|
piVar10 = local_f8;
|
|
}
|
|
if (((lVar18 != 0) && (*(char *)(lVar18 + 0x1a0) == '\0')) &&
|
|
(cVar5 = FUN_140079840(lVar18), cVar5 != '\0')) {
|
|
iVar6 = FUN_1400797c0(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_140079560(lVar18,*(int *)(param_3 + 0x6f8),(longlong)&local_108,(longlong)&local_e0);
|
|
iVar7 = FUN_1400797c0(lVar18);
|
|
if ((iVar7 == 2) && (iVar6 == 1)) {
|
|
lVar21 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x4a8);
|
|
puVar13 = FUN_140079740(lVar18,local_78,*(int *)(lVar11 + 0x6f8));
|
|
puVar14 = FUN_140079640(lVar18,local_98,*(int *)(lVar11 + 0x6f8));
|
|
(**(code **)(lVar21 + 0x60))
|
|
(*(longlong *)(param_1 + 0x148) + 0x4a8,*(undefined4 *)(param_3 + 0x6f8),
|
|
&DAT_1401b6110,lVar11 + 0x6f8,puVar14,puVar13);
|
|
lVar3 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x4a8);
|
|
FUN_140079740(lVar18,local_58,*(int *)(param_3 + 0x6f8));
|
|
FUN_140079640(lVar18,local_88,*(int *)(param_3 + 0x6f8));
|
|
lVar17 = *(longlong *)(param_1 + 0x148) + 0x4a8;
|
|
lVar21 = param_3 + 0x6f8;
|
|
puVar19 = &DAT_1401b6110;
|
|
uVar8 = (ulonglong)*(uint *)(lVar11 + 0x6f8);
|
|
(**(code **)(lVar3 + 0x60))();
|
|
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
|
|
FUN_14006cb70(lVar17,uVar8,puVar19,lVar21);
|
|
local_138 = (short *)PTR_DAT_1401ac010;
|
|
puVar13 = FUN_140079740(lVar18,local_68,*(int *)(lVar11 + 0x6f8));
|
|
puVar14 = FUN_140079740(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_140053d20((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_1401ac010)) &&
|
|
(local_120 + -8 != (undefined *)0x0)) {
|
|
ppsVar15 = (short **)FUN_14006cb70(ppsVar15,PTR_DAT_1401ac010,uVar8,uVar22);
|
|
local_b0 = ppsVar15;
|
|
FUN_14006b350((int *)ppsVar15);
|
|
local_a8 = 1;
|
|
piVar1 = (int *)(local_120 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14006cc60(local_120 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)ppsVar15);
|
|
}
|
|
local_120 = PTR_DAT_1401ac010;
|
|
if (((local_e8 != (undefined *)0x0) && (local_e8 != PTR_DAT_1401ac010)) &&
|
|
(local_e8 + -8 != (undefined *)0x0)) {
|
|
piVar16 = (int *)FUN_14006cb70(ppsVar15,PTR_DAT_1401ac010,uVar8,uVar22);
|
|
local_c0 = piVar16;
|
|
FUN_14006b350(piVar16);
|
|
local_b8 = 1;
|
|
piVar1 = (int *)(local_e8 + -4);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14006cc60(local_e8 + -8);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar16);
|
|
}
|
|
psVar4 = local_138;
|
|
psVar20 = local_138;
|
|
if (local_138 == (short *)0x0) {
|
|
psVar20 = (short *)PTR_DAT_1401ac010;
|
|
}
|
|
uVar9 = 1;
|
|
lVar18 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0);
|
|
FUN_1400cb700(lVar18,1,psVar20,uVar22);
|
|
if (((psVar4 != (short *)0x0) && (psVar4 != (short *)PTR_DAT_1401ac010)) &&
|
|
(psVar4 + -4 != (short *)0x0)) {
|
|
piVar16 = (int *)FUN_14006cb70(lVar18,uVar9,psVar20,uVar22);
|
|
local_d0 = piVar16;
|
|
FUN_14006b350(piVar16);
|
|
local_c8 = 1;
|
|
piVar1 = (int *)(psVar4 + -2);
|
|
*piVar1 = *piVar1 + -1;
|
|
if (*piVar1 == 0) {
|
|
FUN_14006cc60(psVar4 + -4);
|
|
}
|
|
FUN_14006b3e0((longlong)piVar16);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
FUN_14006b3e0((longlong)piVar10);
|
|
}
|
|
return;
|
|
}
|
|
|