|
|
@@ -85,9 +85,14 @@ 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>());
|
|
|
+ } else {
|
|
|
+ if (Session()->IsDomain())
|
|
|
+ LOG_WARNING(IPC, "Domain request has no DomainMessageHeader!");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
data_payload_header =
|
|
|
@@ -196,7 +201,7 @@ ResultCode HLERequestContext::WriteToOutgoingCommandBuffer(u32_le* dst_cmdbuf, P
|
|
|
|
|
|
// TODO(Subv): Translate the X/A/B/W buffers.
|
|
|
|
|
|
- if (Session()->IsDomain()) {
|
|
|
+ if (Session()->IsDomain() && domain_message_header) {
|
|
|
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.
|