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

216 lines
6.9 KiB
C

/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1
* Ghidra 12.1.2 decompiler output for 0x140004960 FUN_140004960
* Pseudocode, not original source. */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
undefined8 FUN_140004960(longlong param_1)
{
undefined1 uVar1;
longlong *plVar2;
longlong lVar3;
uint uVar4;
ushort uVar5;
int iVar6;
int iVar7;
longlong lVar8;
longlong lVar9;
ulonglong uVar10;
ulonglong uVar11;
undefined **ppuVar12;
longlong lVar13;
undefined1 auStack_e8 [32];
undefined8 local_c8;
undefined8 local_c0;
undefined8 local_b8;
undefined8 local_b0;
undefined8 local_a8;
undefined8 local_a0;
undefined8 local_98;
undefined8 local_90;
undefined8 local_88;
undefined8 local_80;
undefined4 local_78;
undefined8 local_68;
undefined1 local_60;
undefined7 uStack_5f;
undefined8 local_50;
ulonglong local_48;
ulonglong local_38;
local_68 = 0xfffffffffffffffe;
local_38 = DAT_1401ac5a0 ^ (ulonglong)auStack_e8;
iVar6 = _kbhit();
if (iVar6 != 0) {
lVar13 = 0;
do {
iVar6 = _getch();
iVar6 = (int)(char)iVar6;
if (*(int *)(param_1 + 0x40) == 0) {
iVar7 = toupper(iVar6);
switch(iVar7) {
case 0x45:
DAT_1401bcf14 = 1;
printf("%s\n");
return 0;
case 0x46:
DAT_1401bcf10 = 1;
printf("%s\n");
break;
default:
printf("........... Message : Unknown Control Command.\n");
break;
case 0x4c:
*(undefined4 *)(param_1 + 0x40) = 1;
printf("%s\n");
break;
case 0x4d:
FUN_140062910(DAT_1401bd020);
lVar9 = DAT_1401bd020;
if (*(longlong *)(param_1 + 0x30) != 0) {
*(undefined1 *)(*(longlong *)(param_1 + 0x30) + 0x18) =
*(undefined1 *)(DAT_1401bd020 + 0x16);
}
uVar4 = DAT_1401bcf24;
plVar2 = *(longlong **)(param_1 + 0x60);
uVar11 = (ulonglong)DAT_1401bcf24;
if ((plVar2 != (longlong *)0x0) &&
(uVar1 = *(undefined1 *)(lVar9 + 8), lVar8 = lVar13, uVar10 = uVar11,
0 < (int)DAT_1401bcf24)) {
do {
lVar3 = *plVar2;
if (*(longlong *)(lVar8 + lVar3) != 0) {
*(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1;
}
uVar10 = uVar10 - 1;
lVar8 = lVar8 + 8;
} while (uVar10 != 0);
}
plVar2 = *(longlong **)(param_1 + 0x68);
if ((plVar2 != (longlong *)0x0) &&
(uVar1 = *(undefined1 *)(lVar9 + 9), lVar8 = lVar13, uVar10 = uVar11, 0 < (int)uVar4))
{
do {
lVar3 = *plVar2;
if (*(longlong *)(lVar8 + lVar3) != 0) {
*(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1;
}
uVar10 = uVar10 - 1;
lVar8 = lVar8 + 8;
} while (uVar10 != 0);
}
plVar2 = *(longlong **)(param_1 + 0x70);
if ((plVar2 != (longlong *)0x0) &&
(uVar1 = *(undefined1 *)(lVar9 + 10), lVar8 = lVar13, uVar10 = uVar11, 0 < (int)uVar4))
{
do {
lVar3 = *plVar2;
if (*(longlong *)(lVar8 + lVar3) != 0) {
*(undefined1 *)(*(longlong *)(lVar8 + lVar3) + 0x18) = uVar1;
}
uVar10 = uVar10 - 1;
lVar8 = lVar8 + 8;
} while (uVar10 != 0);
}
plVar2 = *(longlong **)(param_1 + 0x78);
if ((plVar2 != (longlong *)0x0) &&
(uVar1 = *(undefined1 *)(lVar9 + 0xb), lVar9 = lVar13, 0 < (int)uVar4)) {
do {
lVar8 = *plVar2;
if (*(longlong *)(lVar8 + lVar9) != 0) {
*(undefined1 *)(*(longlong *)(lVar8 + lVar9) + 0x18) = uVar1;
}
uVar11 = uVar11 - 1;
lVar9 = lVar9 + 8;
} while (uVar11 != 0);
}
printf("%s\n");
break;
case 0x50:
lVar9 = *(longlong *)(param_1 + 0x58);
if (lVar9 != 0) {
local_88 = 0;
local_c0 = 0;
local_c8 = 0;
local_b0 = 0;
local_b8 = 0;
local_90 = 0;
local_98 = 0;
local_a0 = 0;
local_a8 = 0;
local_80 = 0;
local_78 = 0;
if (*(longlong *)(lVar9 + 0x40) != 0) {
(**(code **)(**(longlong **)(lVar9 + 0x40) + 0xb0))
(*(longlong **)(lVar9 + 0x40),&local_c8);
printf("--------------------------------------------------\n");
printf("%I64d totalTcpReceiveCount\n");
printf("%I64d totalTcpReceiveBytes\n");
printf("%I64d totalTcpSendCount\n");
printf("%I64d totalTcpSendBytes\n");
printf("%d p2pConnectionPairCount\n");
printf("%d p2pDirectConnectionPairCount\n");
printf("%d clientCount\n");
printf("--------------------------------------------------\n");
}
}
printf("%s\n");
break;
case 0x52:
DAT_1401bcf18 = (uint)(DAT_1401bcf18 == 0);
printf("%s %s\n");
break;
case 0x54:
DAT_1401bcf0f = DAT_1401bcf0f == '\0';
printf("%s %s\n");
break;
case 0x56:
if ((DAT_1401bd4f4 & 1) == 0) {
DAT_1401bd4f4 = DAT_1401bd4f4 | 1;
FUN_14011b100();
atexit((_func_5014 *)&LAB_14012f3d0);
}
FUN_140119840();
printf("%s\n");
}
}
else {
iVar7 = toupper(iVar6);
if (iVar7 == 0x55) {
*(undefined4 *)(param_1 + 0x40) = 0;
printf("%s\n");
ppuVar12 = &PTR_s_Server_Shutdown__1401b3458;
do {
uVar5 = GetAsyncKeyState(0xa0);
if (((uVar5 & 0x8001) != 0) || (*(char *)(ppuVar12 + 1) == '\0')) {
printf(" \'%c\'\t: %s\n");
}
ppuVar12 = ppuVar12 + 3;
} while ((longlong)ppuVar12 < 0x1401b3548);
}
}
iVar6 = toupper(iVar6);
if (iVar6 == 0x49) {
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
GetCurrentProcessId();
printf("ProcessID : %d\n");
printf("SVN : %d\n");
printf("Resource : %d\n");
printf("Build Date : %s\n");
FUN_140118c70((ulonglong *)&local_60);
printf("PROTOCOL : %s\n");
if (0xf < local_48) {
operator_delete((void *)CONCAT71(uStack_5f,local_60));
}
local_48 = 0xf;
local_50 = 0;
local_60 = 0;
printf("=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=\n");
}
iVar6 = _kbhit();
} while (iVar6 != 0);
}
return 2;
}