aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs')
-rw-r--r--Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs259
1 files changed, 0 insertions, 259 deletions
diff --git a/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs b/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs
deleted file mode 100644
index 594ee4e0..00000000
--- a/Ryujinx.HLE/HOS/Services/Pctl/ParentalControlServiceFactory/IParentalControlService.cs
+++ /dev/null
@@ -1,259 +0,0 @@
-using Ryujinx.Common.Logging;
-using Ryujinx.HLE.HOS.Services.Arp;
-using System;
-
-using static LibHac.Ns.ApplicationControlProperty;
-
-namespace Ryujinx.HLE.HOS.Services.Pctl.ParentalControlServiceFactory
-{
- class IParentalControlService : IpcService
- {
- private ulong _pid;
- private int _permissionFlag;
- private ulong _titleId;
- private ParentalControlFlagValue _parentalControlFlag;
- private int[] _ratingAge;
-
-#pragma warning disable CS0414
- // TODO: Find where they are set.
- private bool _restrictionEnabled = false;
- private bool _featuresRestriction = false;
- private bool _freeCommunicationEnabled = false;
- private bool _stereoVisionRestrictionConfigurable = true;
- private bool _stereoVisionRestriction = false;
-#pragma warning restore CS0414
-
- public IParentalControlService(ServiceCtx context, ulong pid, bool withInitialize, int permissionFlag)
- {
- _pid = pid;
- _permissionFlag = permissionFlag;
-
- if (withInitialize)
- {
- Initialize(context);
- }
- }
-
- [CommandCmif(1)] // 4.0.0+
- // Initialize()
- public ResultCode Initialize(ServiceCtx context)
- {
- if ((_permissionFlag & 0x8001) == 0)
- {
- return ResultCode.PermissionDenied;
- }
-
- ResultCode resultCode = ResultCode.InvalidPid;
-
- if (_pid != 0)
- {
- if ((_permissionFlag & 0x40) == 0)
- {
- ulong titleId = ApplicationLaunchProperty.GetByPid(context).TitleId;
-
- if (titleId != 0)
- {
- _titleId = titleId;
-
- // TODO: Call nn::arp::GetApplicationControlProperty here when implemented, if it return ResultCode.Success we assign fields.
- _ratingAge = Array.ConvertAll(context.Device.Processes.ActiveApplication.ApplicationControlProperties.RatingAge.ItemsRo.ToArray(), Convert.ToInt32);
- _parentalControlFlag = context.Device.Processes.ActiveApplication.ApplicationControlProperties.ParentalControlFlag;
- }
- }
-
- if (_titleId != 0)
- {
- // TODO: Service store some private fields in another static object.
-
- if ((_permissionFlag & 0x8040) == 0)
- {
- // TODO: Service store TitleId and FreeCommunicationEnabled in another static object.
- // When it's done it signal an event in this static object.
- Logger.Stub?.PrintStub(LogClass.ServicePctl);
- }
- }
-
- resultCode = ResultCode.Success;
- }
-
- return resultCode;
- }
-
- [CommandCmif(1001)]
- // CheckFreeCommunicationPermission()
- public ResultCode CheckFreeCommunicationPermission(ServiceCtx context)
- {
- if (_parentalControlFlag == ParentalControlFlagValue.FreeCommunication && _restrictionEnabled)
- {
- // TODO: It seems to checks if an entry exists in the FreeCommunicationApplicationList using the TitleId.
- // Then it returns FreeCommunicationDisabled if the entry doesn't exist.
-
- return ResultCode.FreeCommunicationDisabled;
- }
-
- _freeCommunicationEnabled = true;
-
- Logger.Stub?.PrintStub(LogClass.ServicePctl);
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1017)] // 10.0.0+
- // EndFreeCommunication()
- public ResultCode EndFreeCommunication(ServiceCtx context)
- {
- _freeCommunicationEnabled = false;
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1013)] // 4.0.0+
- // ConfirmStereoVisionPermission()
- public ResultCode ConfirmStereoVisionPermission(ServiceCtx context)
- {
- return IsStereoVisionPermittedImpl();
- }
-
- [CommandCmif(1018)]
- // IsFreeCommunicationAvailable()
- public ResultCode IsFreeCommunicationAvailable(ServiceCtx context)
- {
- if (_parentalControlFlag == ParentalControlFlagValue.FreeCommunication && _restrictionEnabled)
- {
- // TODO: It seems to checks if an entry exists in the FreeCommunicationApplicationList using the TitleId.
- // Then it returns FreeCommunicationDisabled if the entry doesn't exist.
-
- return ResultCode.FreeCommunicationDisabled;
- }
-
- Logger.Stub?.PrintStub(LogClass.ServicePctl);
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1031)]
- // IsRestrictionEnabled() -> b8
- public ResultCode IsRestrictionEnabled(ServiceCtx context)
- {
- if ((_permissionFlag & 0x140) == 0)
- {
- return ResultCode.PermissionDenied;
- }
-
- context.ResponseData.Write(_restrictionEnabled);
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1061)] // 4.0.0+
- // ConfirmStereoVisionRestrictionConfigurable()
- public ResultCode ConfirmStereoVisionRestrictionConfigurable(ServiceCtx context)
- {
- if ((_permissionFlag & 2) == 0)
- {
- return ResultCode.PermissionDenied;
- }
-
- if (_stereoVisionRestrictionConfigurable)
- {
- return ResultCode.Success;
- }
- else
- {
- return ResultCode.StereoVisionRestrictionConfigurableDisabled;
- }
- }
-
- [CommandCmif(1062)] // 4.0.0+
- // GetStereoVisionRestriction() -> bool
- public ResultCode GetStereoVisionRestriction(ServiceCtx context)
- {
- if ((_permissionFlag & 0x200) == 0)
- {
- return ResultCode.PermissionDenied;
- }
-
- bool stereoVisionRestriction = false;
-
- if (_stereoVisionRestrictionConfigurable)
- {
- stereoVisionRestriction = _stereoVisionRestriction;
- }
-
- context.ResponseData.Write(stereoVisionRestriction);
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1063)] // 4.0.0+
- // SetStereoVisionRestriction(bool)
- public ResultCode SetStereoVisionRestriction(ServiceCtx context)
- {
- if ((_permissionFlag & 0x200) == 0)
- {
- return ResultCode.PermissionDenied;
- }
-
- bool stereoVisionRestriction = context.RequestData.ReadBoolean();
-
- if (!_featuresRestriction)
- {
- if (_stereoVisionRestrictionConfigurable)
- {
- _stereoVisionRestriction = stereoVisionRestriction;
-
- // TODO: It signals an internal event of service. We have to determine where this event is used.
- }
- }
-
- return ResultCode.Success;
- }
-
- [CommandCmif(1064)] // 5.0.0+
- // ResetConfirmedStereoVisionPermission()
- public ResultCode ResetConfirmedStereoVisionPermission(ServiceCtx context)
- {
- return ResultCode.Success;
- }
-
- [CommandCmif(1065)] // 5.0.0+
- // IsStereoVisionPermitted() -> bool
- public ResultCode IsStereoVisionPermitted(ServiceCtx context)
- {
- bool isStereoVisionPermitted = false;
-
- ResultCode resultCode = IsStereoVisionPermittedImpl();
-
- if (resultCode == ResultCode.Success)
- {
- isStereoVisionPermitted = true;
- }
-
- context.ResponseData.Write(isStereoVisionPermitted);
-
- return resultCode;
- }
-
- private ResultCode IsStereoVisionPermittedImpl()
- {
- /*
- // TODO: Application Exemptions are read from file "appExemptions.dat" in the service savedata.
- // Since we don't support the pctl savedata for now, this can be implemented later.
-
- if (appExemption)
- {
- return ResultCode.Success;
- }
- */
-
- if (_stereoVisionRestrictionConfigurable && _stereoVisionRestriction)
- {
- return ResultCode.StereoVisionDenied;
- }
- else
- {
- return ResultCode.Success;
- }
- }
- }
-} \ No newline at end of file