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

477 lines
18 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x1400e5cc0 FUN_1400e5cc0
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
void FUN_1400e5cc0(longlong param_1,uint *param_2,SIZE_T param_3,undefined4 *param_4)
{
ushort uVar1;
uint uVar2;
uint uVar3;
undefined8 uVar4;
ulonglong uVar5;
longlong lVar6;
int *piVar7;
undefined8 *puVar8;
longlong *plVar9;
undefined ****ppppuVar10;
uint *puVar11;
longlong *plVar12;
undefined ***pppuVar13;
uint uVar14;
undefined4 *puVar15;
LPWSTR lpFilename;
uint *puVar16;
int iVar17;
int *piVar18;
uint uVar19;
undefined *puVar20;
undefined ***pppuVar21;
uint **ppuVar22;
undefined1 auStackY_4a8 [32];
undefined1 local_478 [8];
uint *local_470;
uint *local_468;
undefined ***local_460;
undefined8 local_458;
undefined4 local_450 [2];
undefined ***local_448;
undefined4 local_440 [2];
undefined ***local_438;
undefined *local_430;
undefined **local_428;
undefined4 local_420;
undefined2 local_41c;
undefined *local_418;
undefined **local_410;
undefined **local_408;
undefined8 local_400;
undefined8 local_3f8;
undefined8 local_3f0;
undefined8 local_3e8;
int *local_3e0;
undefined1 local_3d8;
longlong local_3d0;
undefined ****local_3c8;
undefined1 local_3c0;
int *local_3b8;
undefined1 local_3b0;
int *local_3a8;
undefined1 local_3a0;
int *local_398;
undefined1 local_390;
undefined ****local_388;
undefined1 local_380;
int *local_378;
undefined1 local_370;
longlong local_368 [4];
undefined4 local_348 [20];
uint *local_2f8;
undefined ***local_2f0;
undefined4 local_2e8;
undefined4 local_2e4;
undefined4 local_2d8;
undefined4 local_298;
undefined2 local_294;
undefined4 local_258;
undefined4 local_254;
undefined4 local_250;
undefined4 local_24c;
WCHAR local_248 [264];
ulonglong local_38;
local_368[1] = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStackY_4a8;
plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x78);
puVar11 = param_2;
(**(code **)(*plVar12 + 0x10))();
pppuVar21 = (undefined ***)0x0;
local_458 = 0;
local_460 = (undefined ***)0x0;
local_468 = (uint *)0x0;
local_468 = (uint *)FUN_1400d1840(plVar12,puVar11,param_3);
local_468[10] = 1;
local_468[0xb] = 0;
local_428 = Proud::AddrPort::vftable;
local_420 = 0;
local_41c = 0;
pppuVar13 = (undefined ***)local_440;
puVar11 = param_2;
uVar4 = FUN_1400bd3c0(param_2,(undefined4 *)pppuVar13,param_3,param_4);
if ((char)uVar4 != '\0') {
local_258 = 0;
local_254 = 0;
local_250 = 0;
local_24c = 0;
param_3 = 0x10;
pppuVar13 = (undefined ***)&local_258;
puVar11 = param_2;
uVar4 = FUN_1400bc930(param_2,pppuVar13,0x10);
if ((char)uVar4 != '\0') {
pppuVar13 = &local_410;
puVar11 = param_2;
uVar5 = FUN_1400bcfd0(param_2,pppuVar13,param_3,param_4);
if ((((char)uVar5 != '\0') && (iVar17 = (int)local_410, -1 < iVar17)) &&
(iVar17 <= DAT_1401ac140)) {
if (local_460 == (undefined ***)0x0) {
puVar11 = local_468;
if (iVar17 < 1) {
if (local_468 == (uint *)0x0) goto LAB_1400e62f7;
iVar17 = 0;
}
else if (local_468 == (uint *)0x0) {
/* WARNING: Subroutine does not return */
FUN_1400d1900(0,0,param_3,param_4);
}
FUN_1400146f0((longlong)local_468,iVar17,param_3);
}
else {
if (local_458._4_4_ < iVar17) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
local_458 = CONCAT44(local_458._4_4_,iVar17);
}
pppuVar13 = local_460;
if (local_460 == (undefined ***)0x0) {
if (local_468 == (uint *)0x0) {
LAB_1400e62f7:
/* WARNING: Subroutine does not return */
FUN_1400d1900(puVar11,0,param_3,param_4);
}
pppuVar13 = pppuVar21;
if (local_468[6] != 0) {
pppuVar13 = *(undefined ****)(local_468 + 4);
}
}
param_3 = (ulonglong)local_410 & 0xffffffff;
puVar11 = param_2;
uVar4 = FUN_1400bc930(param_2,pppuVar13,param_3);
if ((char)uVar4 != '\0') {
pppuVar13 = &local_428;
uVar5 = FUN_1400bd360(param_2,(longlong)pppuVar13);
puVar11 = param_2;
if ((char)uVar5 != '\0') {
*(undefined4 *)(*(longlong *)(param_1 + 0x108) + 0x1578) = local_440[0];
plVar12 = *(longlong **)(*(longlong *)(param_1 + 0x108) + 0x15d8);
if ((plVar12 != (longlong *)0x0) && (*plVar12 != 0)) {
lVar6 = FUN_1400a0f10(*(longlong *)(param_1 + 0x108));
*(undefined4 *)(lVar6 + 0x108) = local_420;
*(undefined2 *)(lVar6 + 0x10c) = local_41c;
}
piVar7 = (int *)(**(code **)(**(longlong **)(param_1 + 0x108) + 0x58))();
local_3a8 = piVar7;
FUN_14006b350(piVar7);
local_3a0 = 1;
FUN_140093310((longlong)local_348);
local_348[0] = 1;
if (local_468 == local_2f8) {
local_2e4 = local_458._4_4_;
local_2f0 = local_460;
local_2e8 = (undefined4)local_458;
}
else {
FUN_1400d1800((longlong *)&local_2f8);
if (local_468 != (uint *)0x0) {
*(longlong *)(local_468 + 10) = *(longlong *)(local_468 + 10) + 1;
local_2f8 = local_468;
}
}
local_2d8 = 1;
plVar12 = FUN_140009db0(local_368,(longlong *)(*(longlong *)(param_1 + 0x108) + 0x1588),
param_3,param_4);
uVar1 = *(ushort *)(*(longlong *)(param_1 + 0x108) + 0x1590);
puVar20 = (undefined *)(ulonglong)uVar1;
puVar8 = FUN_14006ff80(local_368 + 2,plVar12,uVar1,param_4);
local_298 = *(undefined4 *)(puVar8 + 1);
local_294 = *(undefined2 *)((longlong)puVar8 + 0xc);
puVar15 = local_348;
FUN_1400b7290(*(longlong **)(param_1 + 0x108),puVar15,(SIZE_T)puVar20,param_4);
lVar6 = *(longlong *)(param_1 + 0x108);
*(undefined4 *)(lVar6 + 0x6d0) = local_258;
*(undefined4 *)(lVar6 + 0x6d4) = local_254;
*(undefined4 *)(lVar6 + 0x6d8) = local_250;
*(undefined4 *)(lVar6 + 0x6dc) = local_24c;
if (*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) != 0) {
piVar18 = (int *)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x98);
local_378 = piVar18;
FUN_14006b350(piVar18);
local_370 = 1;
local_478[0] = 0;
plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70);
local_450[0] = (**(code **)(*plVar12 + 0x108))(plVar12,local_478);
param_4 = local_450;
puVar20 = &DAT_1401b6110;
puVar15 = (undefined4 *)0x1;
(**(code **)(*(longlong *)
(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x58) + 0x68) + 0x60))()
;
FUN_14006b3e0((longlong)piVar18);
}
FUN_1400933c0((longlong)local_348,puVar15,puVar20,param_4);
FUN_14006b3e0((longlong)piVar7);
lVar6 = *(longlong *)(param_1 + 0x108);
if ((*(char *)(lVar6 + 0x1790) != '\0') || (*(int *)(lVar6 + 0x6c8) != 0)) {
param_4 = (undefined4 *)(ulonglong)*(uint *)(lVar6 + 0x1578);
puVar20 = &DAT_140149958;
puVar15 = (undefined4 *)0x1;
FUN_1400af0e0(lVar6,1,L"서버와의 연결 성공. HostID=%d",param_4);
}
if (*(int *)(*(longlong *)(param_1 + 0x108) + 0x1578) == 0x32) {
uVar2 = FUN_140076bf0(lVar6,puVar15,puVar20,param_4);
uVar14 = (int)uVar2 / 3 + ((int)uVar2 >> 0x1f) +
(int)(((longlong)(int)uVar2 / 3 + ((longlong)(int)uVar2 >> 0x3f) &
0xffffffffU) >> 0x1f);
uVar3 = uVar14 * 3;
if (uVar2 == uVar3) {
FUN_14006cb70((ulonglong)uVar3,(ulonglong)uVar14,puVar20,param_4);
pppuVar13 = (undefined ***)PTR_DAT_1401ac010;
local_438 = (undefined ***)PTR_DAT_1401ac010;
puVar20 = (undefined *)0x104;
lpFilename = local_248;
GetModuleFileNameW((HMODULE)0x0,lpFilename,0x104);
ppppuVar10 = *(undefined *****)(param_1 + 0x108);
if ((ppppuVar10[699] != (undefined ***)0x0) &&
(*ppppuVar10[699] != (undefined **)0x0)) {
lVar6 = FUN_1400a0f10((longlong)ppppuVar10);
plVar12 = (longlong *)(*(longlong *)(param_1 + 0x108) + 0x70);
plVar12 = (longlong *)(**(code **)(*plVar12 + 0xb0))(plVar12,&local_418);
plVar9 = (longlong *)
(*(code *)**(undefined8 **)(lVar6 + 0x100))
((undefined8 *)(lVar6 + 0x100),&local_430);
param_4 = (undefined4 *)*plVar12;
if ((undefined4 *)*plVar12 == (undefined4 *)0x0) {
param_4 = (undefined4 *)PTR_DAT_1401ac010;
}
puVar20 = (undefined *)*plVar9;
if ((undefined *)*plVar9 == (undefined *)0x0) {
puVar20 = PTR_DAT_1401ac010;
}
ppppuVar10 = &local_438;
FUN_140053d20((longlong *)ppppuVar10,L"Usage: %s ## %s ## %s",puVar20,param_4);
if (((local_430 != (undefined *)0x0) && (local_430 != PTR_DAT_1401ac010)) &&
(local_430 + -8 != (undefined *)0x0)) {
ppppuVar10 = (undefined ****)
FUN_14006cb70(ppppuVar10,PTR_DAT_1401ac010,puVar20,param_4);
local_388 = ppppuVar10;
FUN_14006b350((int *)ppppuVar10);
local_380 = 1;
piVar7 = (int *)(local_430 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(local_430 + -8);
}
FUN_14006b3e0((longlong)ppppuVar10);
}
lpFilename = (LPWSTR)PTR_DAT_1401ac010;
local_430 = PTR_DAT_1401ac010;
if (((local_418 != (undefined *)0x0) && (local_418 != PTR_DAT_1401ac010)) &&
(local_418 + -8 != (undefined *)0x0)) {
ppppuVar10 = (undefined ****)
FUN_14006cb70(ppppuVar10,PTR_DAT_1401ac010,puVar20,param_4);
local_3c8 = ppppuVar10;
FUN_14006b350((int *)ppppuVar10);
local_3c0 = 1;
piVar7 = (int *)(local_418 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(local_418 + -8);
}
FUN_14006b3e0((longlong)ppppuVar10);
}
FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4);
pppuVar13 = local_438;
local_448 = (undefined ***)PTR_DAT_1401ac010;
if (PTR_DAT_1401ac010 == (undefined *)0x0) {
local_448 = pppuVar21;
}
if (local_438 != (undefined ***)PTR_DAT_1401ac010) {
piVar7 = (int *)FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4);
local_3b8 = piVar7;
FUN_14006b350(piVar7);
local_3b0 = 1;
FUN_1400031e0((longlong *)&local_448,lpFilename,puVar20,param_4);
local_448 = pppuVar13;
if (((pppuVar13 != (undefined ***)PTR_DAT_1401ac010) &&
(pppuVar13 != (undefined ***)0x0)) && (pppuVar13 != (undefined ***)0x8)) {
*(int *)((longlong)pppuVar13 + -4) = *(int *)((longlong)pppuVar13 + -4) + 1;
}
FUN_14006b3e0((longlong)piVar7);
}
ppppuVar10 = &local_448;
FUN_14006fa80((longlong *)ppppuVar10,lpFilename,puVar20,param_4);
}
if (((pppuVar13 != (undefined ***)0x0) &&
(pppuVar13 != (undefined ***)PTR_DAT_1401ac010)) &&
(pppuVar13 + -1 != (undefined ***)0x0)) {
piVar18 = (int *)FUN_14006cb70(ppppuVar10,lpFilename,puVar20,param_4);
local_398 = piVar18;
FUN_14006b350(piVar18);
local_390 = 1;
piVar7 = (int *)((longlong)pppuVar13 + -4);
*piVar7 = *piVar7 + -1;
if (*piVar7 == 0) {
FUN_14006cc60(pppuVar13 + -1);
}
FUN_14006b3e0((longlong)piVar18);
}
}
}
FUN_1400d1800((longlong *)&local_468);
if (local_460 == (undefined ***)0x0) {
return;
}
if (-1 < local_458) {
return;
}
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
}
}
}
}
FUN_14006cb70(puVar11,pppuVar13,param_3,param_4);
local_470 = (uint *)PTR_DAT_1401ac010;
uVar3 = FUN_14006c9f0(L"Bad format in NotifyServerConnectSuccess");
if ((local_470 != (uint *)0x0) &&
(pppuVar21 = (undefined ***)0x0, local_470 != (uint *)PTR_DAT_1401ac010)) {
pppuVar21 = (undefined ***)(ulonglong)local_470[-2];
}
uVar14 = 0;
uVar2 = uVar3;
if ((((int)uVar3 <= (int)pppuVar21) && (uVar2 = uVar14, local_470 != (uint *)0x0)) &&
(local_470 != (uint *)PTR_DAT_1401ac010)) {
uVar2 = local_470[-2];
}
uVar19 = 1;
if (1 < (int)uVar2) {
uVar19 = uVar2;
}
uVar2 = uVar14;
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) {
uVar2 = local_470[-2];
}
if ((int)uVar2 < (int)uVar19) {
if (local_470 == (uint *)0x0) {
local_470 = (uint *)PTR_DAT_1401ac010;
}
if ((int)uVar19 < 0) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
if (uVar19 == 0) {
FUN_1400031e0((longlong *)&local_470,PTR_DAT_1401ac010,pppuVar21,param_4);
}
else {
uVar2 = uVar14;
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) {
uVar2 = local_470[-2];
}
if (uVar19 != uVar2) {
puVar11 = (uint *)FUN_14006cbf0((longlong)(int)uVar19 * 2 + 10);
if (puVar11 != (uint *)0x0) {
*puVar11 = 0;
puVar11[1] = 1;
}
*puVar11 = uVar19;
uVar2 = uVar14;
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) {
uVar2 = local_470[-2];
}
puVar16 = (uint *)PTR_DAT_1401ac010;
if ((int)uVar19 < (int)uVar2) {
LAB_1400e63fc:
if (local_470 != (uint *)0x0) {
puVar16 = local_470;
}
}
else {
uVar19 = uVar14;
if (local_470 != (uint *)0x0) {
if (local_470 != (uint *)PTR_DAT_1401ac010) {
uVar19 = local_470[-2];
}
goto LAB_1400e63fc;
}
}
uVar5 = (ulonglong)uVar19;
FUN_14006ca20(puVar11 + 2,puVar16,uVar19);
FUN_1400031e0((longlong *)&local_470,puVar16,uVar5,param_4);
local_470 = puVar11 + 2;
}
}
}
FUN_140002e40((longlong *)&local_470);
puVar11 = local_470;
if (local_470 == (uint *)0x0) {
puVar11 = (uint *)PTR_DAT_1401ac010;
}
FUN_14006ca20(puVar11,L"Bad format in NotifyServerConnectSuccess",uVar3);
puVar11 = local_470;
if (local_470 == (uint *)0x0) {
puVar11 = (uint *)PTR_DAT_1401ac010;
}
uVar2 = FUN_14006c9f0((short *)puVar11);
uVar3 = 0;
if (0 < (int)uVar2) {
uVar3 = uVar2;
}
uVar2 = uVar14;
if ((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) {
uVar2 = local_470[-2];
}
if (((int)uVar2 <= (int)uVar3) && (uVar3 = uVar14, local_470 != (uint *)0x0)) {
if (local_470 == (uint *)PTR_DAT_1401ac010) goto LAB_1400e64b6;
uVar3 = local_470[-2];
}
if (((local_470 != (uint *)PTR_DAT_1401ac010) && (local_470 != (uint *)0x0)) &&
(local_470 + -2 != (uint *)0x0)) {
local_470[-2] = uVar3;
*(undefined2 *)((longlong)local_470 + (longlong)(int)uVar3 * 2) = 0;
}
LAB_1400e64b6:
local_400 = 0;
local_3f8 = 0;
local_3f0 = 0;
local_3e8 = 0;
local_408 = Proud::ByteArray::vftable;
ppuVar22 = &local_470;
plVar12 = FUN_140078c10(&local_3d0,8,1,(longlong *)ppuVar22,(longlong)&local_408);
uVar4 = 0x1f;
FUN_1400ba2f0(*(longlong **)(param_1 + 0x108),(undefined4 *)0x1f,plVar12,ppuVar22);
pppuVar13 = &local_408;
FUN_140078360(pppuVar13);
puVar11 = local_470;
if (((local_470 != (uint *)0x0) && (local_470 != (uint *)PTR_DAT_1401ac010)) &&
(puVar16 = local_470 + -2, puVar16 != (uint *)0x0)) {
piVar7 = (int *)FUN_14006cb70(pppuVar13,uVar4,plVar12,ppuVar22);
local_3e0 = piVar7;
FUN_14006b350(piVar7);
local_3d8 = 1;
puVar11 = puVar11 + -1;
*puVar11 = *puVar11 - 1;
if (*puVar11 == 0) {
FUN_14006cc60(puVar16);
}
FUN_14006b3e0((longlong)piVar7);
local_3d8 = 0;
}
local_470 = (uint *)PTR_DAT_1401ac010;
if (*(int *)(param_1 + 0x100) < 4) {
*(undefined4 *)(param_1 + 0x40) = 0;
*(undefined4 *)(param_1 + 0x100) = 4;
uVar4 = (**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x70) + 0x1c0))();
*(undefined8 *)(param_1 + 0x80) = uVar4;
*(undefined1 *)(param_1 + 0xc0) = 0;
}
FUN_1400d1800((longlong *)&local_468);
if ((local_460 != (undefined ***)0x0) && (local_458 < 0)) {
/* WARNING: Subroutine does not return */
FUN_14006be00();
}
return;
}