diff --git a/src/core/hle/service/service.cpp b/src/core/hle/service/service.cpp index 93a6d2618..826a775d1 100644 --- a/src/core/hle/service/service.cpp +++ b/src/core/hle/service/service.cpp @@ -74,6 +74,16 @@ void ServiceFrameworkBase::InstallAsNamedPort() { AddNamedPort(service_name, std::move(client_port)); } +Kernel::SharedPtr ServiceFrameworkBase::CreatePort() { + ASSERT(port == nullptr); + Kernel::SharedPtr server_port; + Kernel::SharedPtr client_port; + std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, service_name); + port = MakeResult>(std::move(server_port)).Unwrap(); + port->SetHleHandler(shared_from_this()); + return client_port; +} + void ServiceFrameworkBase::RegisterHandlersBase(const FunctionInfoBase* functions, size_t n) { handlers.reserve(handlers.size() + n); for (size_t i = 0; i < n; ++i) { diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 07bc8589a..ff76dd2de 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -58,6 +58,8 @@ public: void InstallAsService(SM::ServiceManager& service_manager); /// Creates a port pair and registers it on the kernel's global port registry. void InstallAsNamedPort(); + /// Creates and returns an unregistered port for the service. + Kernel::SharedPtr CreatePort(); void InvokeRequest(Kernel::HLERequestContext& ctx);