sm: completely rewrite module
This commit is contained in:
@@ -19,46 +19,52 @@
|
||||
#include <stratosphere.hpp>
|
||||
#include "sm_types.hpp"
|
||||
|
||||
enum UserServiceCmd {
|
||||
User_Cmd_Initialize = 0,
|
||||
User_Cmd_GetService = 1,
|
||||
User_Cmd_RegisterService = 2,
|
||||
User_Cmd_UnregisterService = 3,
|
||||
namespace sts { namespace sm {
|
||||
|
||||
User_Cmd_AtmosphereInstallMitm = 65000,
|
||||
User_Cmd_AtmosphereUninstallMitm = 65001,
|
||||
User_Cmd_AtmosphereAssociatePidTidForMitm = 65002,
|
||||
User_Cmd_AtmosphereAcknowledgeMitmSession = 65003,
|
||||
};
|
||||
/* Command IDs. */
|
||||
enum UserServiceCmd {
|
||||
User_Cmd_Initialize = 0,
|
||||
User_Cmd_GetService = 1,
|
||||
User_Cmd_RegisterService = 2,
|
||||
User_Cmd_UnregisterService = 3,
|
||||
|
||||
class UserService final : public IServiceObject {
|
||||
private:
|
||||
u64 pid = U64_MAX;
|
||||
bool has_initialized = false;
|
||||
User_Cmd_AtmosphereInstallMitm = 65000,
|
||||
User_Cmd_AtmosphereUninstallMitm = 65001,
|
||||
User_Cmd_AtmosphereAssociatePidTidForMitm = 65002,
|
||||
User_Cmd_AtmosphereAcknowledgeMitmSession = 65003,
|
||||
};
|
||||
|
||||
/* Actual commands. */
|
||||
virtual Result Initialize(PidDescriptor pid);
|
||||
virtual Result GetService(Out<MovedHandle> out_h, SmServiceName service);
|
||||
virtual Result RegisterService(Out<MovedHandle> out_h, SmServiceName service, u32 max_sessions, bool is_light);
|
||||
virtual Result UnregisterService(SmServiceName service);
|
||||
/* Service definition. */
|
||||
class UserService final : public IServiceObject {
|
||||
private:
|
||||
u64 pid = InvalidProcessId;
|
||||
bool has_initialized = false;
|
||||
private:
|
||||
Result EnsureInitialized();
|
||||
public:
|
||||
/* Official commands. */
|
||||
virtual Result Initialize(PidDescriptor pid);
|
||||
virtual Result GetService(Out<MovedHandle> out_h, ServiceName service);
|
||||
virtual Result RegisterService(Out<MovedHandle> out_h, ServiceName service, u32 max_sessions, bool is_light);
|
||||
virtual Result UnregisterService(ServiceName service);
|
||||
|
||||
/* Atmosphere commands. */
|
||||
virtual Result AtmosphereInstallMitm(Out<MovedHandle> srv_h, Out<MovedHandle> qry_h, SmServiceName service);
|
||||
virtual Result AtmosphereUninstallMitm(SmServiceName service);
|
||||
virtual Result AtmosphereAssociatePidTidForMitm(u64 pid, u64 tid);
|
||||
virtual Result AtmosphereAcknowledgeMitmSession(Out<u64> client_pid, Out<MovedHandle> fwd_h, SmServiceName service);
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MakeServiceCommandMeta<User_Cmd_Initialize, &UserService::Initialize>(),
|
||||
MakeServiceCommandMeta<User_Cmd_GetService, &UserService::GetService>(),
|
||||
MakeServiceCommandMeta<User_Cmd_RegisterService, &UserService::RegisterService>(),
|
||||
MakeServiceCommandMeta<User_Cmd_UnregisterService, &UserService::UnregisterService>(),
|
||||
/* Atmosphere commands. */
|
||||
virtual Result AtmosphereInstallMitm(Out<MovedHandle> srv_h, Out<MovedHandle> qry_h, ServiceName service);
|
||||
virtual Result AtmosphereUninstallMitm(ServiceName service);
|
||||
virtual Result AtmosphereAssociatePidTidForMitm(u64 pid, u64 tid);
|
||||
virtual Result AtmosphereAcknowledgeMitmSession(Out<u64> client_pid, Out<MovedHandle> fwd_h, ServiceName service);
|
||||
public:
|
||||
DEFINE_SERVICE_DISPATCH_TABLE {
|
||||
MakeServiceCommandMeta<User_Cmd_Initialize, &UserService::Initialize>(),
|
||||
MakeServiceCommandMeta<User_Cmd_GetService, &UserService::GetService>(),
|
||||
MakeServiceCommandMeta<User_Cmd_RegisterService, &UserService::RegisterService>(),
|
||||
MakeServiceCommandMeta<User_Cmd_UnregisterService, &UserService::UnregisterService>(),
|
||||
|
||||
#ifdef SM_ENABLE_MITM
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereInstallMitm, &UserService::AtmosphereInstallMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereUninstallMitm, &UserService::AtmosphereUninstallMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereAssociatePidTidForMitm, &UserService::AtmosphereAssociatePidTidForMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereAcknowledgeMitmSession, &UserService::AtmosphereAcknowledgeMitmSession>(),
|
||||
#endif
|
||||
};
|
||||
};
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereInstallMitm, &UserService::AtmosphereInstallMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereUninstallMitm, &UserService::AtmosphereUninstallMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereAssociatePidTidForMitm, &UserService::AtmosphereAssociatePidTidForMitm>(),
|
||||
MakeServiceCommandMeta<User_Cmd_AtmosphereAcknowledgeMitmSession, &UserService::AtmosphereAcknowledgeMitmSession>(),
|
||||
};
|
||||
};
|
||||
|
||||
}}
|
||||
|
||||
Reference in New Issue
Block a user