From 99f400a8bfe9ae6643f7aa62a6a93ac1f176b412 Mon Sep 17 00:00:00 2001 From: Dima Date: Thu, 20 Apr 2023 16:17:28 +0300 Subject: [PATCH] Stub ntc --- ...IEnsureNetworkClockAvailabilityService.cpp | 17 +++++++++++ .../IEnsureNetworkClockAvailabilityService.h | 29 +++++++++++++++++++ .../main/cpp/skyline/services/serviceman.cpp | 3 ++ 3 files changed, 49 insertions(+) create mode 100644 app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.cpp create mode 100644 app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.h diff --git a/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.cpp b/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.cpp new file mode 100644 index 00000000..6b131e10 --- /dev/null +++ b/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.cpp @@ -0,0 +1,17 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#include "IEnsureNetworkClockAvailabilityService.h" +#include + +namespace skyline::service::ntc { + IEnsureNetworkClockAvailabilityService::IEnsureNetworkClockAvailabilityService(const DeviceState &state, ServiceManager &manager) : BaseService(state, manager), + finishNotificationEvent(std::make_shared(state, false)) {} + + Result IEnsureNetworkClockAvailabilityService::StartTask(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response) { + if (!(*state.settings->isInternetEnabled)) + return result::NetworkTimeNotAvailable; + finishNotificationEvent->Signal(); + return {}; + } +} diff --git a/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.h b/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.h new file mode 100644 index 00000000..3dbf12dd --- /dev/null +++ b/app/src/main/cpp/skyline/services/ntc/IEnsureNetworkClockAvailabilityService.h @@ -0,0 +1,29 @@ +// SPDX-License-Identifier: MPL-2.0 +// Copyright © 2023 Skyline Team and Contributors (https://github.com/skyline-emu/) + +#pragma once + +#include + +namespace skyline::service::ntc { + namespace result { + constexpr Result NetworkTimeNotAvailable{116, 1000}; + } + + /** + * @url https://switchbrew.org/wiki/NIM_services#IEnsureNetworkClockAvailabilityService + */ + class IEnsureNetworkClockAvailabilityService : public BaseService { + private: + std::shared_ptr finishNotificationEvent; + + public: + IEnsureNetworkClockAvailabilityService(const DeviceState &state, ServiceManager &manager); + + Result StartTask(type::KSession &session, ipc::IpcRequest &request, ipc::IpcResponse &response); + + SERVICE_DECL( + SFUNC(0x0, IEnsureNetworkClockAvailabilityService, StartTask) + ) + }; +} diff --git a/app/src/main/cpp/skyline/services/serviceman.cpp b/app/src/main/cpp/skyline/services/serviceman.cpp index 3381f64d..4976e4fc 100644 --- a/app/src/main/cpp/skyline/services/serviceman.cpp +++ b/app/src/main/cpp/skyline/services/serviceman.cpp @@ -57,6 +57,7 @@ #include "ro/IRoInterface.h" #include "mii/IStaticService.h" #include "olsc/IOlscServiceForApplication.h" +#include "ntc/IEnsureNetworkClockAvailabilityService.h" #include "serviceman.h" #define SERVICE_CASE(class, name, ...) \ @@ -124,6 +125,7 @@ namespace skyline::service { SERVICE_CASE(nfp::IUserManager, "nfp:user") SERVICE_CASE(nifm::IStaticService, "nifm:u") SERVICE_CASE(socket::IClient, "bsd:u") + SERVICE_CASE(socket::IClient, "bsd:s") SERVICE_CASE(socket::IManager, "nsd:u") SERVICE_CASE(socket::IManager, "nsd:a") SERVICE_CASE(socket::IResolver, "sfdnsres") @@ -144,6 +146,7 @@ namespace skyline::service { SERVICE_CASE(mii::IStaticService, "mii:e") SERVICE_CASE(mii::IStaticService, "mii:u") SERVICE_CASE(olsc::IOlscServiceForApplication, "olsc:u") + SERVICE_CASE(ntc::IEnsureNetworkClockAvailabilityService, "ntc") default: std::string_view nameString(span(reinterpret_cast(&name), sizeof(name)).as_string(true)); throw std::out_of_range(fmt::format("CreateService called with an unknown service name: {}", nameString));