/* 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::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; }