257 lines
7.2 KiB
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;
|
|
}
|
|
|