Browse Source

IPC: add domain header to response if only it exists in request

nce_cpp
mailwl 8 years ago
parent
commit
e05f10cae8
  1. 2
      src/core/hle/ipc_helpers.h
  2. 10
      src/core/hle/kernel/hle_ipc.cpp
  3. 2
      src/core/hle/kernel/server_session.cpp

2
src/core/hle/ipc_helpers.h

@ -118,7 +118,7 @@ public:
AlignWithPadding();
if (context.Session()->IsDomain()) {
if (context.Session()->IsDomain() && context.GetDomainMessageHeader()) {
IPC::DomainMessageHeader domain_header{};
domain_header.num_objects = num_domain_objects;
PushRaw(domain_header);

10
src/core/hle/kernel/hle_ipc.cpp

@ -85,9 +85,11 @@ void HLERequestContext::ParseCommandBuffer(u32_le* src_cmdbuf, bool incoming) {
if (Session()->IsDomain() && (command_header->type == IPC::CommandType::Request || !incoming)) {
// If this is an incoming message, only CommandType "Request" has a domain header
// All outgoing domain messages have the domain header
domain_message_header =
std::make_unique<IPC::DomainMessageHeader>(rp.PopRaw<IPC::DomainMessageHeader>());
// All outgoing domain messages have the domain header, if only incoming has it
if (incoming || domain_message_header) {
domain_message_header =
std::make_unique<IPC::DomainMessageHeader>(rp.PopRaw<IPC::DomainMessageHeader>());
}
}
data_payload_header =
@ -196,7 +198,7 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(u32_le* dst_cmdbuf, P
// TODO(Subv): Translate the X/A/B/W buffers.
if (Session()->IsDomain()) {
if (domain_message_header && Session()->IsDomain()) {
ASSERT(domain_message_header->num_objects == domain_objects.size());
// Write the domain objects to the command buffer, these go after the raw untranslated data.
// TODO(Subv): This completely ignores C buffers.

2
src/core/hle/kernel/server_session.cpp

@ -96,7 +96,7 @@ ResultCode ServerSession::HandleSyncRequest(SharedPtr<Thread> thread) {
ResultCode result = RESULT_SUCCESS;
// If the session has been converted to a domain, handle the domain request
if (IsDomain()) {
if (context.GetDomainMessageHeader() && IsDomain()) {
result = HandleDomainSyncRequest(context);
// If there is no domain header, the regular session handler is used
} else if (hle_handler != nullptr) {

Loading…
Cancel
Save