server-re/decomp/DBCServer_Release_x64/full/functions/0x1401f17a0.c

257 lines
7.2 KiB
C

/* DBCServer_Release_x64.exe sha256 d9e4fccdf3482e50247686d4452c0b13c75a53efc4bd7320668eece8d1ce828c
* Ghidra 12.1.2 decompiler output for 0x1401f17a0 FUN_1401f17a0
* Pseudocode, not original source. */
undefined8 FUN_1401f17a0(longlong param_1,undefined8 param_2,int *param_3)
{
undefined8 *puVar1;
int *piVar2;
undefined8 *puVar3;
char cVar4;
char cVar5;
int iVar6;
undefined8 uVar7;
longlong lVar8;
undefined8 *local_res8;
undefined8 local_res10;
uint local_res18 [2];
undefined8 local_res20;
undefined **local_78;
undefined8 local_70;
longlong local_68;
undefined8 local_60;
undefined8 local_58;
int local_50;
undefined **local_48;
int local_40;
undefined2 local_3c;
undefined1 local_38;
local_res10 = param_2;
(**(code **)(*(longlong *)(*(longlong *)(param_1 + 0x108) + 0x78) + 0x10))();
iVar6 = (int)(*param_3 + (*param_3 >> 0x1f & 7U)) >> 3;
local_res20 = CONCAT44(local_res20._4_4_,iVar6);
cVar4 = FUN_14016bba0(param_3,local_res18);
if (cVar4 == '\0') goto LAB_1401f1d90;
cVar4 = '\0';
local_res8 = (undefined8 *)((ulonglong)local_res8 & 0xffffffffffffff00);
switch(local_res18[0]) {
case 1:
FUN_1401f1120(param_1,param_3,&local_res8);
cVar4 = (char)local_res8;
goto switchD_1401f1823_caseD_5;
case 2:
FUN_1401f14a0(param_1,param_3,&local_res8);
goto switchD_1401f1823_caseD_5;
case 3:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ea850(param_1,param_3);
}
break;
case 4:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401edcf0(param_1,param_3);
}
break;
default:
goto switchD_1401f1823_caseD_5;
case 6:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ee6c0(param_1,param_3);
}
break;
case 8:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ea8c0(param_1,param_3);
}
break;
case 9:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ea930(param_1,param_3);
}
break;
case 10:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401f0620(param_1,param_3);
}
break;
case 0xb:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ea7d0(param_1,param_3);
}
break;
case 0xd:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ec280(param_1,param_3);
}
break;
case 0xf:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401f0380(param_1,param_3);
}
break;
case 0x11:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401eb540(param_1,param_3);
}
break;
case 0x13:
FUN_1401eea40(param_1,local_res10,param_3);
break;
case 0x17:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401eee50(param_1,param_3);
}
break;
case 0x18:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401eb6b0(param_1,local_res10,param_3);
}
break;
case 0x19:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ef420(param_1,local_res10,param_3);
}
break;
case 0x1c:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401f0f50(param_1,param_3);
}
break;
case 0x1d:
break;
case 0x1e:
FUN_1401ea610(param_1,param_3);
break;
case 0x1f:
FUN_1401ea650(param_1,param_3);
break;
case 0x20:
FUN_1401ecf40(param_1,param_3);
break;
case 0x21:
FUN_1401ebb50(param_1,param_3);
break;
case 0x22:
if ((param_3[10] == 1) || (param_3[10] == 0)) {
FUN_1401ed760(param_1,local_res10,param_3);
}
break;
case 0x23:
FUN_1401ec5b0(param_1,local_res10,param_3);
break;
case 0x24:
case 0x25:
FUN_14016b440(&local_78);
local_48 = Proud::AddrPort::vftable;
local_38 = 0;
local_50 = 0;
local_40 = DAT_140344450;
local_3c = DAT_140344454;
cVar5 = FUN_1401a0e20(*(undefined8 *)(param_1 + 0x108),local_res18[0],param_3,&local_78);
if (cVar5 != '\0') {
local_38 = (undefined1)param_3[0x10];
local_40 = param_3[0xe];
local_3c = (undefined2)param_3[0xf];
local_50 = param_3[10];
cVar4 = FUN_1401f17a0(param_1,local_res10,&local_78);
}
local_res8 = &local_70;
FUN_14016d0e0(&local_70);
if ((local_68 != 0) && (local_60._4_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
goto switchD_1401f1823_caseD_5;
case 0x26:
FUN_14016b440(&local_78);
local_48 = Proud::AddrPort::vftable;
local_38 = 0;
local_50 = 0;
local_40 = DAT_140344450;
local_3c = DAT_140344454;
cVar5 = FUN_14019f250(*(undefined8 *)(param_1 + 0x108),param_3,&local_78);
if (cVar5 != '\0') {
local_38 = (undefined1)param_3[0x10];
local_40 = param_3[0xe];
local_3c = (undefined2)param_3[0xf];
local_50 = param_3[10];
cVar4 = FUN_1401f17a0(param_1,local_res10,&local_78);
}
local_res8 = &local_70;
FUN_14016d0e0(&local_70);
if ((local_68 != 0) && (local_60._4_4_ < 0)) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
goto switchD_1401f1823_caseD_5;
case 0x27:
FUN_1401ed1f0(param_1,local_res10,param_3);
break;
case 0x28:
FUN_1401ebcc0(param_1,param_3);
}
cVar4 = '\x01';
switchD_1401f1823_caseD_5:
if (*(longlong *)(param_3 + 2) == 0) {
if (*(longlong *)(param_3 + 4) == 0) {
/* WARNING: Subroutine does not return */
FUN_14016d1e0();
}
iVar6 = param_3[6];
}
else {
iVar6 = *(int *)(*(longlong *)(param_3 + 2) + 0x18);
}
if (cVar4 == '\x01') {
if (((iVar6 != (int)(*param_3 + (*param_3 >> 0x1f & 7U)) >> 3) && (local_res18[0] != 0x24)) &&
(local_res18[0] != 0x25)) {
FUN_14016d8c0();
local_res8 = (undefined8 *)PTR_DAT_1403440a0;
FUN_14004c020(&local_res8,&DAT_140293ae8,
L"Proud::CNetClientWorker::ProcessMessage_ProudNetLayer",local_res18[0]);
iVar6 = FUN_14016afd0(param_3);
local_res20 = FUN_14016b000(param_3);
local_78 = Proud::CFastArray<unsigned_char,1>::vftable;
local_70 = 0;
local_68 = 0;
local_60 = 0;
local_58 = 0;
if (iVar6 < 0) {
/* WARNING: Subroutine does not return */
FUN_14016d6b0();
}
FUN_14004f0e0(&local_78,iVar6);
lVar8 = local_68;
if ((int)local_60 == 0) {
lVar8 = 0;
}
FUN_14004f1a0(lVar8,local_res20,(longlong)iVar6);
local_78 = Proud::ByteArray::vftable;
uVar7 = FUN_140198f80(&local_res20,0x1f,param_3[10],&local_res8,&local_78);
(**(code **)(**(longlong **)(param_1 + 0x108) + 0x80))(*(longlong **)(param_1 + 0x108),uVar7);
FUN_14019a9e0(&local_78);
puVar3 = local_res8;
if (((local_res8 != (undefined8 *)0x0) && (local_res8 != (undefined8 *)PTR_DAT_1403440a0)) &&
(puVar1 = local_res8 + -1, puVar1 != (undefined8 *)0x0)) {
uVar7 = FUN_14016d8c0();
FUN_14016db50(uVar7);
piVar2 = (int *)((longlong)puVar3 + -4);
*piVar2 = *piVar2 + -1;
if (*piVar2 == 0) {
FUN_14016d970(puVar1);
}
FUN_14016dbe0(uVar7);
}
}
}
else if (cVar4 == '\0') {
iVar6 = (int)local_res20;
LAB_1401f1d90:
FUN_14016b040(param_3,iVar6);
return 0;
}
return 1;
}