libstratosphere/fs.mitm: Push WIP support for Domains. Not yet fully working.

This commit is contained in:
Michael Scire
2018-06-12 16:00:09 -06:00
parent d8c9399cff
commit 237ff0d1e7
47 changed files with 1053 additions and 882 deletions

View File

@@ -1,4 +1,5 @@
#include <switch.h>
#include <stratosphere.hpp>
#include "sm_manager_service.hpp"
#include "sm_registration.hpp"

View File

@@ -7,11 +7,15 @@ enum ManagerServiceCmd {
Manager_Cmd_UnregisterProcess = 1
};
class ManagerService final : IServiceObject {
class ManagerService final : public IServiceObject {
public:
Result dispatch(IpcParsedCommand &r, IpcCommand &out_c, u64 cmd_id, u8 *pointer_buffer, size_t pointer_buffer_size) override;
Result handle_deferred() override;
ManagerService *clone() override {
return new ManagerService();
}
private:
/* Actual commands. */
std::tuple<Result> register_process(u64 pid, InBuffer<u8> acid_sac, InBuffer<u8> aci0_sac);

View File

@@ -4,7 +4,7 @@
#include "sm_registration.hpp"
Result UserService::dispatch(IpcParsedCommand &r, IpcCommand &out_c, u64 cmd_id, u8 *pointer_buffer, size_t pointer_buffer_size) {
Result rc = 0xF601;
Result rc = 0xF601;
switch ((UserServiceCmd)cmd_id) {
case User_Cmd_Initialize:
rc = WrapIpcCommandImpl<&UserService::initialize>(this, r, out_c, pointer_buffer, pointer_buffer_size);

View File

@@ -12,7 +12,7 @@ enum UserServiceCmd {
User_Cmd_AtmosphereUninstallMitm = 65001
};
class UserService final : IServiceObject {
class UserService final : public IServiceObject {
u64 pid;
bool has_initialized;
u64 deferred_service;
@@ -22,6 +22,14 @@ class UserService final : IServiceObject {
Result dispatch(IpcParsedCommand &r, IpcCommand &out_c, u64 cmd_id, u8 *pointer_buffer, size_t pointer_buffer_size) override;
Result handle_deferred() override;
UserService *clone() override {
auto new_srv = new UserService();
new_srv->pid = pid;
new_srv->has_initialized = has_initialized;
new_srv->deferred_service = deferred_service;
return new_srv;
}
private:
/* Actual commands. */
std::tuple<Result> initialize(PidDescriptor pid);