/* * Copyright (c) 2018-2019 Atmosphère-NX * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, * version 2, as published by the Free Software Foundation. * * This program is distributed in the hope it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for * more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ #pragma once #include #include #include "../utils.hpp" #include "nsmitm_service_common.hpp" #include "ns_shim.h" class NsDocumentService : public IServiceObject { private: u64 title_id; std::unique_ptr srv; public: NsDocumentService(u64 t, NsDocumentInterface *s) : title_id(t), srv(s) { /* ... */ } NsDocumentService(u64 t, std::unique_ptr s) : title_id(t), srv(std::move(s)) { /* ... */ } NsDocumentService(u64 t, NsDocumentInterface s) : title_id(t) { srv = std::make_unique(s); } virtual ~NsDocumentService() { serviceClose(&srv->s); } private: /* Actual command API. */ Result GetApplicationContentPath(OutBuffer out_path, u64 app_id, u8 storage_type); Result ResolveApplicationContentPath(u64 title_id, u8 storage_type); Result GetRunningApplicationProgramId(Out out_tid, u64 app_id); public: DEFINE_SERVICE_DISPATCH_TABLE { MakeServiceCommandMeta(), MakeServiceCommandMeta(), MakeServiceCommandMeta(), }; }; class NsWebMitmService : public IMitmServiceObject { public: NsWebMitmService(std::shared_ptr s, u64 pid) : IMitmServiceObject(s, pid) { /* ... */ } static bool ShouldMitm(u64 pid, u64 tid) { /* We will mitm: * - web applets, to facilitate hbl web browser launching. */ return Utils::IsWebAppletTid(tid); } static void PostProcess(IMitmServiceObject *obj, IpcResponseContext *ctx); protected: /* Overridden commands. */ Result GetDocumentInterface(Out> out_intf); public: DEFINE_SERVICE_DISPATCH_TABLE { MakeServiceCommandMeta(), }; };