/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400c7360 FUN_1400c7360 * Pseudocode, not original source. */ void FUN_1400c7360(longlong param_1,wchar_t *param_2,longlong param_3,undefined8 param_4) { undefined *puVar1; int *piVar2; undefined *puVar3; int *piVar4; longlong *plVar5; int *piVar6; undefined ***pppuVar7; wchar_t *pwVar8; longlong lVar9; undefined8 uVar10; undefined **ppuVar11; undefined *local_res8; int *local_70; undefined1 local_68; int *local_60; undefined1 local_58; undefined **local_50; undefined8 local_48; undefined8 local_40; undefined8 local_38; undefined8 local_30; if (*(longlong *)(param_1 + 0x148) != 0) { pwVar8 = param_2; lVar9 = param_3; uVar10 = param_4; piVar4 = (int *)(**(code **)(**(longlong **)(param_1 + 0x148) + 0x58))(); local_60 = piVar4; FUN_14006b350(piVar4); local_58 = 1; plVar5 = *(longlong **)(param_1 + 0x148); if (DAT_1401b42cf != '\0') { lVar9 = *plVar5; pwVar8 = L"Proud::CNetThreads_S::ShowThreadExceptionAndPurgeClient"; (**(code **)(lVar9 + 200))(); } if (param_2 == (wchar_t *)0x0) { if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0) { FUN_14006cb70(plVar5,pwVar8,lVar9,uVar10); local_res8 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_res8, L"%s에서 %s 오류가 발생했으나 클라이언트를 식별 불가.", param_3,param_4); local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; ppuVar11 = &local_res8; plVar5 = FUN_140078c10((longlong *)&local_70,1,0,(longlong *)ppuVar11,(longlong)&local_50); lVar9 = **(longlong **)(param_1 + 0x148); (**(code **)(lVar9 + 0x80))(); pppuVar7 = &local_50; FUN_140078360(pppuVar7); puVar3 = local_res8; if (((local_res8 != (undefined *)0x0) && (local_res8 != PTR_DAT_1401ac010)) && (puVar1 = local_res8 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(pppuVar7,plVar5,lVar9,ppuVar11); local_70 = piVar6; FUN_14006b350(piVar6); local_68 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(puVar1); } FUN_14006b3e0((longlong)piVar6); } } } else { if (*(longlong *)(*(longlong *)(param_1 + 0x148) + 0x758) != 0) { FUN_14006cb70(plVar5,pwVar8,lVar9,uVar10); local_res8 = PTR_DAT_1401ac010; FUN_140053d20((longlong *)&local_res8, L"%s에서 %s 이유로 클라이언트 %d를 추방합니다.",param_3, param_4); local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; ppuVar11 = &local_res8; plVar5 = FUN_140078c10((longlong *)&local_70,1,(ulonglong)*(uint *)(param_2 + 0x37c), (longlong *)ppuVar11,(longlong)&local_50); lVar9 = **(longlong **)(param_1 + 0x148); (**(code **)(lVar9 + 0x80))(); pppuVar7 = &local_50; FUN_140078360(pppuVar7); puVar3 = local_res8; if (((local_res8 != (undefined *)0x0) && (local_res8 != PTR_DAT_1401ac010)) && (puVar1 = local_res8 + -8, puVar1 != (undefined *)0x0)) { piVar6 = (int *)FUN_14006cb70(pppuVar7,plVar5,lVar9,ppuVar11); local_70 = piVar6; FUN_14006b350(piVar6); local_68 = 1; piVar2 = (int *)(puVar3 + -4); *piVar2 = *piVar2 + -1; if (*piVar2 == 0) { FUN_14006cc60(puVar1); } FUN_14006b3e0((longlong)piVar6); } } local_48 = 0; local_40 = 0; local_38 = 0; local_30 = 0; local_50 = Proud::ByteArray::vftable; FUN_14009dbc0(*(SIZE_T **)(param_1 + 0x148),(uint *)param_2,1,3,(longlong)&local_50, L"Proud::CNetThreads_S::ShowThreadExceptionAndPurgeClient",0); FUN_140078360(&local_50); } FUN_14006b3e0((longlong)piVar4); } return; }