/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400b6a40 FUN_1400b6a40 * Pseudocode, not original source. */ void FUN_1400b6a40(longlong *param_1,undefined8 param_2,undefined8 param_3,ulonglong param_4) { longlong *plVar1; undefined8 *puVar2; longlong lVar3; longlong *plVar4; undefined ***pppuVar5; longlong local_res10 [2]; longlong *local_res20; undefined **local_70; undefined8 local_68; undefined8 local_60; undefined8 local_58; undefined8 local_50; *param_1 = (longlong)Proud::CNetClientImpl::vftable; param_1[0xc] = (longlong)Proud::CNetClientImpl::vftable; param_1[0xd] = (longlong)Proud::CNetClientImpl::vftable; plVar4 = param_1 + 0xe; *plVar4 = (longlong)Proud::CNetClientImpl::vftable; param_1[0xf] = (longlong)Proud::CNetClientImpl::vftable; param_1[0x11] = (longlong)Proud::CNetClientImpl::vftable; param_1[0x12] = (longlong)Proud::CNetClientImpl::vftable; param_1[0x13] = (longlong)Proud::CNetClientImpl::vftable; lVar3 = 0; local_68 = 0; local_60 = 0; local_58 = 0; local_50 = 0; local_70 = Proud::ByteArray::vftable; pppuVar5 = &local_70; (**(code **)(*plVar4 + 0x80))(plVar4,DAT_1401ac130,pppuVar5,param_4,0xfffffffffffffffe); FUN_140078360(&local_70); FUN_1400bef00((longlong)param_1,param_2,pppuVar5,param_4); if (param_1[0xbb] != 0) { lVar3 = *(longlong *)(param_1[0xbb] + 0x38); } FUN_14006b350((int *)(lVar3 + 0x10)); FUN_1400b5820((char *)(param_1 + 0xbc)); local_res10[0] = 0; plVar4 = local_res10; FUN_1400a2a00(param_1 + 0x2ae,plVar4); FUN_1400b5fc0(param_1 + 700,plVar4,pppuVar5,param_4); FUN_1400b5fc0(param_1 + 0x2c0,plVar4,pppuVar5,param_4); FUN_1400ae340(param_1 + 0x2e0); FUN_1400ae510(param_1 + 0x2a6); FUN_1400ae510(param_1 + 0xdc); FUN_1400afeb0((char *)(param_1 + 0x2ca)); local_res10[1] = 0; plVar4 = local_res10 + 1; FUN_1400a2a80(param_1 + 0x2a4,plVar4); if ((longlong *)param_1[0x16] != (longlong *)0x0) { plVar4 = param_1; FUN_1400a0600((longlong *)param_1[0x16],(longlong)param_1,pppuVar5,param_4); } FUN_14006b3e0(lVar3 + 0x10); if ((undefined8 *)param_1[0xb] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0xb])(); } param_1[0xb] = 0; FUN_1400c15f0(param_1 + 0x307); FUN_1400be370(param_1 + 0x303); FUN_1400c15f0(param_1 + 0x2fe); FUN_1400be370(param_1 + 0x2fa); FUN_1400ae5b0(param_1 + 0x2f6,plVar4,pppuVar5,param_4); if ((undefined8 *)param_1[0x2f6] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x2f6])(); } FUN_1400b1aa0((char *)(param_1 + 0x2e4)); FUN_1400ae340(param_1 + 0x2e0); if ((undefined8 *)param_1[0x2e0] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x2e0])(); } FUN_1400b1aa0((char *)(param_1 + 0x2d5)); FUN_1400b1aa0((char *)(param_1 + 0x2ca)); FUN_1400b5fc0(param_1 + 0x2c0,plVar4,pppuVar5,param_4); if ((undefined8 *)param_1[0x2c0] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x2c0])(); } FUN_1400b5fc0(param_1 + 700,plVar4,pppuVar5,param_4); if ((undefined8 *)param_1[700] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[700])(); } if ((param_1[699] != 0) && (*(longlong *)(param_1[699] + 8) = *(longlong *)(param_1[699] + 8) + -1, *(longlong *)(param_1[699] + 8) == 0)) { plVar1 = (longlong *)param_1[699]; puVar2 = (undefined8 *)*plVar1; if (puVar2 != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (**(code **)*puVar2)(); } FUN_14006cc60(plVar1); } local_res20 = param_1 + 0x2b1; FUN_140078360(param_1 + 0x2b5); FUN_1400031e0(param_1 + 0x2b1,plVar4,pppuVar5,param_4); if ((param_1[0x2ae] != 0) && (*(longlong *)(param_1[0x2ae] + 8) = *(longlong *)(param_1[0x2ae] + 8) + -1, *(longlong *)(param_1[0x2ae] + 8) == 0)) { puVar2 = (undefined8 *)param_1[0x2ae]; operator_delete((void *)*puVar2); FUN_14006cc60(puVar2); } param_1[0x2ac] = 0; param_1[0x2ab] = (longlong)Proud::IP2PGroupMember::vftable; param_1[0x2aa] = (longlong)Proud::ISendDest_C::vftable; FUN_1400ae510(param_1 + 0x2a6); if ((undefined8 *)param_1[0x2a6] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x2a6])(); } if ((param_1[0x2a4] != 0) && (*(longlong *)(param_1[0x2a4] + 8) = *(longlong *)(param_1[0x2a4] + 8) + -1, *(longlong *)(param_1[0x2a4] + 8) == 0)) { plVar1 = (longlong *)param_1[0x2a4]; puVar2 = (undefined8 *)*plVar1; if (puVar2 != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (**(code **)*puVar2)(); } FUN_14006cc60(plVar1); } FUN_140076720(param_1 + 0x161,plVar4,pppuVar5,param_4); FUN_140078360(param_1 + 0x15b); FUN_1400ae510(param_1 + 0xdc); if ((undefined8 *)param_1[0xdc] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0xdc])(); } FUN_1400b5b80((char *)(param_1 + 0xbc)); FUN_1400a25f0(param_1 + 0xbb,plVar4,pppuVar5,param_4); if ((param_1[0xba] != 0) && (*(longlong *)(param_1[0xba] + 8) = *(longlong *)(param_1[0xba] + 8) + -1, *(longlong *)(param_1[0xba] + 8) == 0)) { puVar2 = (undefined8 *)param_1[0xba]; plVar1 = (longlong *)*puVar2; if (plVar1 != (longlong *)0x0) { FUN_1400e14e0(plVar1,plVar4,(ulonglong)pppuVar5,param_4); operator_delete(plVar1); } FUN_14006cc60(puVar2); } FUN_14006b400((undefined4 *)(param_1 + 0xa3),plVar4,pppuVar5,param_4); if ((undefined8 *)param_1[0x9c] != (undefined8 *)0x0) { plVar4 = (longlong *)0x1; (*(code *)**(undefined8 **)param_1[0x9c])(); } FUN_140078360(param_1 + 0x95); param_1[0x13] = (longlong)Proud::IVizAgentDg::vftable; if ((longlong *)param_1[0x16] != (longlong *)0x0) { plVar4 = param_1; FUN_1400a0600((longlong *)param_1[0x16],(longlong)param_1,pppuVar5,param_4); } param_1[0x12] = (longlong)Proud::IUdpPacketFragBoardDg::vftable; param_1[0x11] = (longlong)Proud::IUdpPacketDefragBoardDg::vftable; param_1[0xf] = (longlong)Proud::IFastSocketDelegate::vftable; param_1[0xe] = (longlong)Proud::IRmiHost::vftable; param_1[0xd] = (longlong)Proud::IP2PGroupMember::vftable; param_1[0xc] = (longlong)Proud::ISendDest_C::vftable; FUN_1400beba0(param_1,plVar4,pppuVar5,param_4); return; }