|
|
@@ -92,41 +92,42 @@ std::size_t ServerSession::NumDomainRequestHandlers() const {
|
|
|
}
|
|
|
|
|
|
ResultCode ServerSession::HandleDomainSyncRequest(Kernel::HLERequestContext& context) {
|
|
|
- auto* const domain_message_header = context.GetDomainMessageHeader();
|
|
|
- if (domain_message_header) {
|
|
|
- // Set domain handlers in HLE context, used for domain objects (IPC interfaces) as inputs
|
|
|
- context.SetDomainRequestHandlers(domain_request_handlers);
|
|
|
-
|
|
|
- // If there is a DomainMessageHeader, then this is CommandType "Request"
|
|
|
- const u32 object_id{context.GetDomainMessageHeader()->object_id};
|
|
|
- switch (domain_message_header->command) {
|
|
|
- case IPC::DomainMessageHeader::CommandType::SendMessage:
|
|
|
- if (object_id > domain_request_handlers.size()) {
|
|
|
- LOG_CRITICAL(IPC,
|
|
|
- "object_id {} is too big! This probably means a recent service call "
|
|
|
- "to {} needed to return a new interface!",
|
|
|
- object_id, name);
|
|
|
- UNREACHABLE();
|
|
|
- return RESULT_SUCCESS; // Ignore error if asserts are off
|
|
|
- }
|
|
|
- return domain_request_handlers[object_id - 1]->HandleSyncRequest(context);
|
|
|
-
|
|
|
- case IPC::DomainMessageHeader::CommandType::CloseVirtualHandle: {
|
|
|
- LOG_DEBUG(IPC, "CloseVirtualHandle, object_id=0x{:08X}", object_id);
|
|
|
-
|
|
|
- domain_request_handlers[object_id - 1] = nullptr;
|
|
|
-
|
|
|
- IPC::ResponseBuilder rb{context, 2};
|
|
|
- rb.Push(RESULT_SUCCESS);
|
|
|
- return RESULT_SUCCESS;
|
|
|
- }
|
|
|
+ if (!context.HasDomainMessageHeader()) {
|
|
|
+ return RESULT_SUCCESS;
|
|
|
+ }
|
|
|
+
|
|
|
+ // Set domain handlers in HLE context, used for domain objects (IPC interfaces) as inputs
|
|
|
+ context.SetDomainRequestHandlers(domain_request_handlers);
|
|
|
+
|
|
|
+ // If there is a DomainMessageHeader, then this is CommandType "Request"
|
|
|
+ const auto& domain_message_header = context.GetDomainMessageHeader();
|
|
|
+ const u32 object_id{domain_message_header.object_id};
|
|
|
+ switch (domain_message_header.command) {
|
|
|
+ case IPC::DomainMessageHeader::CommandType::SendMessage:
|
|
|
+ if (object_id > domain_request_handlers.size()) {
|
|
|
+ LOG_CRITICAL(IPC,
|
|
|
+ "object_id {} is too big! This probably means a recent service call "
|
|
|
+ "to {} needed to return a new interface!",
|
|
|
+ object_id, name);
|
|
|
+ UNREACHABLE();
|
|
|
+ return RESULT_SUCCESS; // Ignore error if asserts are off
|
|
|
}
|
|
|
+ return domain_request_handlers[object_id - 1]->HandleSyncRequest(context);
|
|
|
|
|
|
- LOG_CRITICAL(IPC, "Unknown domain command={}",
|
|
|
- static_cast<int>(domain_message_header->command.Value()));
|
|
|
- ASSERT(false);
|
|
|
+ case IPC::DomainMessageHeader::CommandType::CloseVirtualHandle: {
|
|
|
+ LOG_DEBUG(IPC, "CloseVirtualHandle, object_id=0x{:08X}", object_id);
|
|
|
+
|
|
|
+ domain_request_handlers[object_id - 1] = nullptr;
|
|
|
+
|
|
|
+ IPC::ResponseBuilder rb{context, 2};
|
|
|
+ rb.Push(RESULT_SUCCESS);
|
|
|
+ return RESULT_SUCCESS;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
+ LOG_CRITICAL(IPC, "Unknown domain command={}",
|
|
|
+ static_cast<int>(domain_message_header.command.Value()));
|
|
|
+ ASSERT(false);
|
|
|
return RESULT_SUCCESS;
|
|
|
}
|
|
|
|