Просмотр исходного кода

service: Add CreatePort function (that does not register/install).

bunnei 8 лет назад
Родитель
Сommit
03bf0739a4
2 измененных файлов с 12 добавлено и 0 удалено
  1. 10 0
      src/core/hle/service/service.cpp
  2. 2 0
      src/core/hle/service/service.h

+ 10 - 0
src/core/hle/service/service.cpp

@@ -74,6 +74,16 @@ void ServiceFrameworkBase::InstallAsNamedPort() {
     AddNamedPort(service_name, std::move(client_port));
 }
 
+Kernel::SharedPtr<Kernel::ClientPort> ServiceFrameworkBase::CreatePort() {
+    ASSERT(port == nullptr);
+    Kernel::SharedPtr<Kernel::ServerPort> server_port;
+    Kernel::SharedPtr<Kernel::ClientPort> client_port;
+    std::tie(server_port, client_port) = Kernel::ServerPort::CreatePortPair(max_sessions, service_name);
+    port = MakeResult<Kernel::SharedPtr<Kernel::ServerPort>>(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) {

+ 2 - 0
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<Kernel::ClientPort> CreatePort();
 
     void InvokeRequest(Kernel::HLERequestContext& ctx);