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

197 lines
6.7 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400c3bc0 FUN_1400c3bc0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1400c3bc0(longlong param_1,uint *param_2,longlong param_3,longlong param_4)
{
undefined **ppuVar1;
int *piVar2;
short *psVar3;
undefined **ppuVar4;
ushort uVar5;
undefined8 uVar6;
int *piVar7;
longlong *plVar8;
int *piVar9;
ulonglong *puVar10;
short **ppsVar11;
longlong lVar12;
uint *puVar13;
ulonglong uVar14;
wchar_t *pwVar15;
SIZE_T SVar16;
undefined *puVar17;
short *psVar18;
undefined ***pppuVar19;
undefined1 auStackY_dc8 [32];
uint local_d98 [2];
short *local_d90;
int local_d88 [2];
undefined *local_d80;
longlong local_d78;
uint local_d70;
int local_d6c;
int *local_d60;
undefined8 local_d58;
undefined1 local_d50;
undefined4 local_d4c;
undefined1 local_d48;
undefined1 local_d47;
int *local_d40;
undefined1 local_d38;
undefined8 local_d30;
exception local_d28 [80];
undefined **local_cd8;
undefined8 uStack_cd0;
longlong local_cc8;
undefined8 uStack_cc0;
longlong *local_48;
undefined4 local_40;
int local_3c;
ulonglong local_38;
local_d30 = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_dc8;
lVar12 = param_4;
FUN_1400cf890();
local_cd8 = (undefined **)0x0;
uStack_cd0 = 0;
SVar16 = 0x10;
uVar6 = FUN_1400bc930(param_2,&local_cd8,0x10);
if ((char)uVar6 != '\0') {
puVar13 = local_d98;
uVar6 = FUN_1400bd3c0(param_2,puVar13,SVar16,lVar12);
if ((char)uVar6 != '\0') {
FUN_1400bca00(local_d88);
FUN_1400bc4d0((longlong)local_d88,puVar13,SVar16,lVar12);
FUN_1400bcb60(local_d88,0x800,SVar16,lVar12);
uVar6 = 0;
FUN_1400bcb60(local_d88,0,SVar16,lVar12);
FUN_140054a10((longlong)local_d88,CONCAT71((int7)((ulonglong)uVar6 >> 8),0x11),SVar16,lVar12);
FUN_14005c0c0((longlong)local_d88,&local_cd8,SVar16,lVar12);
FUN_1400bd600((longlong)local_d88,param_3,SVar16,lVar12);
uVar14 = (ulonglong)local_d98[0];
FUN_140014500((longlong)local_d88,uVar14,SVar16,lVar12);
uVar6 = uStack_cd0;
local_3c = 200;
local_40 = 0;
local_48 = &local_cc8;
if (local_d80 == (undefined *)0x0) {
if (local_d78 == 0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,uVar14,0,lVar12);
}
}
else {
local_d70 = *(uint *)(local_d80 + 0x18);
}
local_cc8 = local_d78;
if (local_d78 == 0) {
if (local_d80 == (undefined *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,(ulonglong)local_d70,0,lVar12);
}
local_cc8 = 0;
if (*(int *)(local_d80 + 0x18) != 0) {
local_cc8 = *(longlong *)(local_d80 + 0x10);
}
}
uStack_cd0 = CONCAT44(uStack_cd0._4_4_,local_d70);
local_40 = 1;
uStack_cc0 = uStack_cd0;
local_d60 = (int *)CONCAT44(local_d60._4_4_,5);
local_d58 = 0;
local_d50 = 1;
local_d4c = 0xffffffff;
local_d48 = 1;
local_d47 = DAT_1401ac1cc;
local_cd8 = Proud::AddrPort::vftable;
uStack_cd0 = CONCAT26(SUB82(uVar6,6),*(undefined6 *)(param_3 + 8));
uVar5 = FUN_1400d3400(1,0);
uVar14 = (ulonglong)uVar5;
pppuVar19 = &local_cd8;
pwVar15 = (wchar_t *)0x0;
FUN_1400d8df0(param_4,0,uVar5,(longlong)pppuVar19,(longlong)&local_cc8,(uint *)&local_d60);
if (local_48 == (longlong *)0x0) {
FUN_14006ba50(local_d28,(wchar_t *)PTR_u_ArrayWithExternalBuffer_is_unini_1401ad9a0,uVar14,
pppuVar19);
/* WARNING: Subroutine does not return */
_CxxThrowException(local_d28,(ThrowInfo *)&DAT_1401a93e8);
}
if (local_3c < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
piVar7 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))();
local_d40 = piVar7;
FUN_14006b350(piVar7);
local_d38 = 1;
puVar10 = *(ulonglong **)(param_1 + 0x148);
if (DAT_1401b42cf != '\0') {
uVar14 = *puVar10;
pwVar15 = L"Proud::CNetThreads_S::NetWorkerThread_ProcessMessage_PeerUdp_ServerHolepunch";
(**(code **)(uVar14 + 200))();
}
if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0) != 0) {
FUN_14006cb70(puVar10,pwVar15,uVar14,pppuVar19);
local_d90 = (short *)PTR_DAT_1401ac010;
plVar8 = FUN_140070660(param_3,(longlong *)&local_cd8,uVar14,pppuVar19);
puVar17 = (undefined *)*plVar8;
if ((undefined *)*plVar8 == (undefined *)0x0) {
puVar17 = PTR_DAT_1401ac010;
}
pwVar15 = L"MessageType_PeerUdp_ServerHolepunch from %s";
ppsVar11 = &local_d90;
FUN_140053d20((longlong *)ppsVar11,L"MessageType_PeerUdp_ServerHolepunch from %s",puVar17,
pppuVar19);
ppuVar4 = local_cd8;
if (((local_cd8 != (undefined **)0x0) && (local_cd8 != (undefined **)PTR_DAT_1401ac010)) &&
(ppuVar1 = local_cd8 + -1, ppuVar1 != (undefined **)0x0)) {
piVar9 = (int *)FUN_14006cb70(ppsVar11,pwVar15,puVar17,pppuVar19);
local_d60 = piVar9;
FUN_14006b350(piVar9);
local_d58 = CONCAT71(local_d58._1_7_,1);
piVar2 = (int *)((longlong)ppuVar4 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14006cc60(ppuVar1);
}
FUN_14006b3e0((longlong)piVar9);
}
psVar3 = local_d90;
psVar18 = local_d90;
if (local_d90 == (short *)0x0) {
psVar18 = (short *)PTR_DAT_1401ac010;
}
uVar6 = 1;
lVar12 = *(longlong *)(*(longlong *)(param_1 + 0x148) + 0x17f0);
FUN_1400cb700(lVar12,1,psVar18,pppuVar19);
if (((psVar3 != (short *)0x0) && (psVar3 != (short *)PTR_DAT_1401ac010)) &&
(psVar3 + -4 != (short *)0x0)) {
piVar9 = (int *)FUN_14006cb70(lVar12,uVar6,psVar18,pppuVar19);
local_d60 = piVar9;
FUN_14006b350(piVar9);
local_d58 = CONCAT71(local_d58._1_7_,1);
piVar2 = (int *)(psVar3 + -2);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14006cc60(psVar3 + -4);
}
FUN_14006b3e0((longlong)piVar9);
}
}
FUN_14006b3e0((longlong)piVar7);
local_cd8 = &local_d80;
FUN_1400d1800((longlong *)&local_d80);
if ((local_d78 != 0) && (local_d6c < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
}
return;
}