123 lines
3.7 KiB
C
123 lines
3.7 KiB
C
/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
|
|
* Ghidra 12.1.2 decompiler output for 0x1400d96c0 FUN_1400d96c0
|
|
* Pseudocode, not original source. */
|
|
|
|
undefined8 *
|
|
FUN_1400d96c0(undefined8 *param_1,longlong param_2,undefined8 param_3,undefined8 param_4)
|
|
|
|
{
|
|
undefined8 *puVar1;
|
|
ulonglong uVar2;
|
|
undefined8 *puVar3;
|
|
longlong *plVar4;
|
|
longlong *plVar5;
|
|
longlong *plVar6;
|
|
undefined8 **ppuVar7;
|
|
longlong *plVar8;
|
|
undefined8 *local_res10;
|
|
longlong local_50;
|
|
undefined4 local_44;
|
|
undefined8 *local_40;
|
|
|
|
*param_1 = Proud::ICompletionContext::vftable;
|
|
plVar6 = (longlong *)0x0;
|
|
param_1[0x12] = 0;
|
|
param_1[0x13] = 0;
|
|
param_1[0x14] = 0;
|
|
param_1[1] = Proud::IUdpPacketFragBoardDg::vftable;
|
|
param_1[2] = Proud::IUdpPacketDefragBoardDg::vftable;
|
|
FUN_1400d8920(param_1 + 8);
|
|
*param_1 = Proud::CUdpSocket_S::vftable;
|
|
param_1[1] = Proud::CUdpSocket_S::vftable;
|
|
param_1[2] = Proud::CUdpSocket_S::vftable;
|
|
param_1[8] = Proud::CUdpSocket_S::vftable;
|
|
param_1[0x11] = Proud::CUdpSocket_S::vftable;
|
|
uVar2 = FUN_140079250();
|
|
plVar8 = (longlong *)CONCAT71((int7)((ulonglong)param_3 >> 8),1);
|
|
FUN_14006b270((undefined4 *)(param_1 + 0x15),uVar2 & 0xffffffff,plVar8,param_4);
|
|
param_1[0x1c] = 0;
|
|
param_1[0x2a] = 0;
|
|
param_1[0x2b] = Proud::AddrPort::vftable;
|
|
*(undefined4 *)(param_1 + 0x2c) = 0;
|
|
*(undefined2 *)((longlong)param_1 + 0x164) = 0;
|
|
param_1[0x2d] = 0;
|
|
param_1[0x2e] = 0;
|
|
param_1[0x2f] = 0;
|
|
FUN_14006fb50(&local_50);
|
|
local_50 = 0;
|
|
local_44 = 1;
|
|
local_40 = param_1 + 0x15;
|
|
puVar3 = FUN_14006ccc0(0x800,&local_50,plVar8,param_4);
|
|
param_1[0x1c] = puVar3;
|
|
local_res10 = operator_new(0x90);
|
|
plVar4 = plVar6;
|
|
if (local_res10 != (undefined8 *)0x0) {
|
|
plVar8 = param_1 + 1;
|
|
plVar4 = FUN_1400d80e0(local_res10,param_1[0x1c],plVar8);
|
|
}
|
|
param_1[0x2d] = plVar4;
|
|
*(undefined1 *)(plVar4 + 0x11) = 0;
|
|
plVar5 = operator_new(0x6b8);
|
|
plVar4 = plVar6;
|
|
if (plVar5 != (longlong *)0x0) {
|
|
*plVar5 = 0;
|
|
plVar5[3] = 0;
|
|
plVar5[1] = 0;
|
|
plVar5[2] = 100;
|
|
plVar5[0xcf] = (longlong)Proud::CFastArray<Proud::UdpPacketCtx*___ptr64,1>::vftable;
|
|
plVar5[0xd0] = 0;
|
|
plVar5[0xd1] = 0;
|
|
plVar5[0xd2] = 0;
|
|
plVar5[0xd3] = 0;
|
|
plVar5[0xd4] = (longlong)Proud::AddrPort::vftable;
|
|
*(undefined4 *)(plVar5 + 0xd5) = 0;
|
|
*(undefined2 *)((longlong)plVar5 + 0x6ac) = 0;
|
|
plVar4 = plVar5;
|
|
}
|
|
param_1[0x2e] = plVar4;
|
|
*(undefined1 *)(param_1 + 0x20) = 0;
|
|
*(undefined1 *)(param_1 + 0x28) = 0;
|
|
local_res10 = (undefined8 *)FUN_14006cbf0(0x400);
|
|
plVar4 = plVar6;
|
|
if (local_res10 != (undefined8 *)0x0) {
|
|
plVar8 = (longlong *)(param_2 + 0x60);
|
|
if (param_2 == 0) {
|
|
plVar8 = plVar6;
|
|
}
|
|
plVar4 = FUN_1400724c0(local_res10,1,plVar8,param_4);
|
|
}
|
|
if (plVar4 == (longlong *)0x0) {
|
|
local_res10 = (undefined8 *)0x0;
|
|
}
|
|
else {
|
|
local_res10 = (undefined8 *)FUN_14006cbf0(0x10);
|
|
local_res10[1] = 1;
|
|
*local_res10 = plVar4;
|
|
}
|
|
puVar3 = local_res10;
|
|
ppuVar7 = &local_res10;
|
|
FUN_14006e8a0(param_1 + 0x2a,(longlong *)ppuVar7);
|
|
puVar1 = local_res10;
|
|
if (puVar3 != (undefined8 *)0x0) {
|
|
plVar4 = puVar3 + 1;
|
|
*plVar4 = *plVar4 + -1;
|
|
if (*plVar4 == 0) {
|
|
plVar4 = (longlong *)*local_res10;
|
|
if (plVar4 != (longlong *)0x0) {
|
|
FUN_140072370(plVar4,ppuVar7,plVar8,param_4);
|
|
FUN_14006cc60(plVar4);
|
|
}
|
|
FUN_14006cc60(puVar1);
|
|
}
|
|
}
|
|
param_1[0x29] = param_2;
|
|
*(undefined4 *)(param_1 + 0x2c) = DAT_1401ac3d0;
|
|
*(undefined2 *)((longlong)param_1 + 0x164) = DAT_1401ac3d4;
|
|
local_res10 = operator_new(0x60);
|
|
if (local_res10 != (undefined8 *)0x0) {
|
|
plVar6 = FUN_1400d8240(local_res10,param_1 + 2,plVar8,param_4);
|
|
}
|
|
param_1[0x2f] = plVar6;
|
|
return param_1;
|
|
}
|
|
|