Update IAccountService and IManagerForApplication (#454)

* Update IAccountService and IManagerForApplication

`IAccountService`:
- Add symbols.
- Fix some mistake.
- Add `IsUserRegistrationRequestPermitted` and `TrySelectUserWithoutInteraction`.

`IManagerForApplication`:
- Add symbols.
- Add Uuid args.
- Little improvement of `GetAccountId`
This commit is contained in:
Ac_K 2018-10-13 23:16:02 +00:00 committed by Thomas Guillemard
parent 824d4b74d0
commit 3561062bc6
2 changed files with 58 additions and 7 deletions

View file

@ -24,11 +24,14 @@ namespace Ryujinx.HLE.HOS.Services.Acc
{ 3, ListOpenUsers }, { 3, ListOpenUsers },
{ 4, GetLastOpenedUser }, { 4, GetLastOpenedUser },
{ 5, GetProfile }, { 5, GetProfile },
{ 50, IsUserRegistrationRequestPermitted },
{ 51, TrySelectUserWithoutInteraction },
{ 100, InitializeApplicationInfo }, { 100, InitializeApplicationInfo },
{ 101, GetBaasAccountManagerForApplication } { 101, GetBaasAccountManagerForApplication }
}; };
} }
// GetUserCount() -> i32
public long GetUserCount(ServiceCtx Context) public long GetUserCount(ServiceCtx Context)
{ {
Context.ResponseData.Write(Context.Device.System.State.GetUserCount()); Context.ResponseData.Write(Context.Device.System.State.GetUserCount());
@ -36,22 +39,25 @@ namespace Ryujinx.HLE.HOS.Services.Acc
return 0; return 0;
} }
// GetUserExistence(nn::account::Uid) -> bool
public long GetUserExistence(ServiceCtx Context) public long GetUserExistence(ServiceCtx Context)
{ {
UInt128 Uuid = new UInt128( UInt128 Uuid = new UInt128(
Context.RequestData.ReadInt64(), Context.RequestData.ReadInt64(),
Context.RequestData.ReadInt64()); Context.RequestData.ReadInt64());
Context.ResponseData.Write(Context.Device.System.State.TryGetUser(Uuid, out _) ? 1 : 0); Context.ResponseData.Write(Context.Device.System.State.TryGetUser(Uuid, out _));
return 0; return 0;
} }
// ListAllUsers() -> array<nn::account::Uid, 0xa>
public long ListAllUsers(ServiceCtx Context) public long ListAllUsers(ServiceCtx Context)
{ {
return WriteUserList(Context, Context.Device.System.State.GetAllUsers()); return WriteUserList(Context, Context.Device.System.State.GetAllUsers());
} }
// ListOpenUsers() -> array<nn::account::Uid, 0xa>
public long ListOpenUsers(ServiceCtx Context) public long ListOpenUsers(ServiceCtx Context)
{ {
return WriteUserList(Context, Context.Device.System.State.GetOpenUsers()); return WriteUserList(Context, Context.Device.System.State.GetOpenUsers());
@ -78,6 +84,7 @@ namespace Ryujinx.HLE.HOS.Services.Acc
return 0; return 0;
} }
// GetLastOpenedUser() -> nn::account::Uid
public long GetLastOpenedUser(ServiceCtx Context) public long GetLastOpenedUser(ServiceCtx Context)
{ {
UserProfile LastOpened = Context.Device.System.State.LastOpenUser; UserProfile LastOpened = Context.Device.System.State.LastOpenUser;
@ -87,6 +94,7 @@ namespace Ryujinx.HLE.HOS.Services.Acc
return 0; return 0;
} }
// GetProfile(nn::account::Uid) -> object<nn::account::profile::IProfile>
public long GetProfile(ServiceCtx Context) public long GetProfile(ServiceCtx Context)
{ {
UInt128 Uuid = new UInt128( UInt128 Uuid = new UInt128(
@ -105,16 +113,50 @@ namespace Ryujinx.HLE.HOS.Services.Acc
return 0; return 0;
} }
// IsUserRegistrationRequestPermitted(u64, pid) -> bool
public long IsUserRegistrationRequestPermitted(ServiceCtx Context)
{
long Unknown = Context.RequestData.ReadInt64();
Context.Device.Log.PrintStub(LogClass.ServiceAcc, $"Stubbed. Unknown: {Unknown}");
Context.ResponseData.Write(false);
return 0;
}
// TrySelectUserWithoutInteraction(bool) -> nn::account::Uid
public long TrySelectUserWithoutInteraction(ServiceCtx Context)
{
bool Unknown = Context.RequestData.ReadBoolean();
Context.Device.Log.PrintStub(LogClass.ServiceAcc, $"Stubbed. Unknown: {Unknown}");
UserProfile Profile = Context.Device.System.State.LastOpenUser;
Profile.Uuid.Write(Context.ResponseData);
return 0;
}
// InitializeApplicationInfo(u64, pid)
public long InitializeApplicationInfo(ServiceCtx Context) public long InitializeApplicationInfo(ServiceCtx Context)
{ {
Context.Device.Log.PrintStub(LogClass.ServiceAcc, "Stubbed."); long Unknown = Context.RequestData.ReadInt64();
Context.Device.Log.PrintStub(LogClass.ServiceAcc, $"Stubbed. Unknown: {Unknown}");
return 0; return 0;
} }
// GetBaasAccountManagerForApplication(nn::account::Uid) -> object<nn::account::baas::IManagerForApplication>
public long GetBaasAccountManagerForApplication(ServiceCtx Context) public long GetBaasAccountManagerForApplication(ServiceCtx Context)
{ {
MakeObject(Context, new IManagerForApplication()); UInt128 Uuid = new UInt128(
Context.RequestData.ReadInt64(),
Context.RequestData.ReadInt64());
MakeObject(Context, new IManagerForApplication(Uuid));
return 0; return 0;
} }

View file

@ -1,24 +1,30 @@
using Ryujinx.HLE.HOS.Ipc; using Ryujinx.HLE.HOS.Ipc;
using Ryujinx.HLE.Logging; using Ryujinx.HLE.Logging;
using Ryujinx.HLE.Utilities;
using System.Collections.Generic; using System.Collections.Generic;
namespace Ryujinx.HLE.HOS.Services.Acc namespace Ryujinx.HLE.HOS.Services.Acc
{ {
class IManagerForApplication : IpcService class IManagerForApplication : IpcService
{ {
private UInt128 Uuid;
private Dictionary<int, ServiceProcessRequest> m_Commands; private Dictionary<int, ServiceProcessRequest> m_Commands;
public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands; public override IReadOnlyDictionary<int, ServiceProcessRequest> Commands => m_Commands;
public IManagerForApplication() public IManagerForApplication(UInt128 Uuid)
{ {
m_Commands = new Dictionary<int, ServiceProcessRequest>() m_Commands = new Dictionary<int, ServiceProcessRequest>()
{ {
{ 0, CheckAvailability }, { 0, CheckAvailability },
{ 1, GetAccountId } { 1, GetAccountId }
}; };
this.Uuid = Uuid;
} }
// CheckAvailability()
public long CheckAvailability(ServiceCtx Context) public long CheckAvailability(ServiceCtx Context)
{ {
Context.Device.Log.PrintStub(LogClass.ServiceAcc, "Stubbed."); Context.Device.Log.PrintStub(LogClass.ServiceAcc, "Stubbed.");
@ -26,11 +32,14 @@ namespace Ryujinx.HLE.HOS.Services.Acc
return 0; return 0;
} }
// GetAccountId() -> nn::account::NetworkServiceAccountId
public long GetAccountId(ServiceCtx Context) public long GetAccountId(ServiceCtx Context)
{ {
Context.Device.Log.PrintStub(LogClass.ServiceAcc, "Stubbed."); long NetworkServiceAccountId = 0xcafe;
Context.ResponseData.Write(0xcafeL); Context.Device.Log.PrintStub(LogClass.ServiceAcc, $"Stubbed. NetworkServiceAccountId: {NetworkServiceAccountId}");
Context.ResponseData.Write(NetworkServiceAccountId);
return 0; return 0;
} }