|
|
@ -199,7 +199,7 @@ public: |
|
|
~HLERequestContext(); |
|
|
~HLERequestContext(); |
|
|
|
|
|
|
|
|
/// Returns a pointer to the IPC command buffer for this request. |
|
|
/// Returns a pointer to the IPC command buffer for this request. |
|
|
u32* CommandBuffer() { |
|
|
|
|
|
|
|
|
[[nodiscard]] u32* CommandBuffer() { |
|
|
return cmd_buf.data(); |
|
|
return cmd_buf.data(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -207,7 +207,7 @@ public: |
|
|
* Returns the session through which this request was made. This can be used as a map key to |
|
|
* Returns the session through which this request was made. This can be used as a map key to |
|
|
* access per-client data on services. |
|
|
* access per-client data on services. |
|
|
*/ |
|
|
*/ |
|
|
Kernel::KServerSession* Session() { |
|
|
|
|
|
|
|
|
[[nodiscard]] Kernel::KServerSession* Session() { |
|
|
return server_session; |
|
|
return server_session; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -217,61 +217,61 @@ public: |
|
|
/// Writes data from this context back to the requesting process/thread. |
|
|
/// Writes data from this context back to the requesting process/thread. |
|
|
Result WriteToOutgoingCommandBuffer(KThread& requesting_thread); |
|
|
Result WriteToOutgoingCommandBuffer(KThread& requesting_thread); |
|
|
|
|
|
|
|
|
u32_le GetHipcCommand() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] u32_le GetHipcCommand() const { |
|
|
return command; |
|
|
return command; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
u32_le GetTipcCommand() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] u32_le GetTipcCommand() const { |
|
|
return static_cast<u32_le>(command_header->type.Value()) - |
|
|
return static_cast<u32_le>(command_header->type.Value()) - |
|
|
static_cast<u32_le>(IPC::CommandType::TIPC_CommandRegion); |
|
|
static_cast<u32_le>(IPC::CommandType::TIPC_CommandRegion); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
u32_le GetCommand() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] u32_le GetCommand() const { |
|
|
return command_header->IsTipc() ? GetTipcCommand() : GetHipcCommand(); |
|
|
return command_header->IsTipc() ? GetTipcCommand() : GetHipcCommand(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool IsTipc() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] bool IsTipc() const { |
|
|
return command_header->IsTipc(); |
|
|
return command_header->IsTipc(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
IPC::CommandType GetCommandType() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] IPC::CommandType GetCommandType() const { |
|
|
return command_header->type; |
|
|
return command_header->type; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
u64 GetPID() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] u64 GetPID() const { |
|
|
return pid; |
|
|
return pid; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
u32 GetDataPayloadOffset() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] u32 GetDataPayloadOffset() const { |
|
|
return data_payload_offset; |
|
|
return data_payload_offset; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const std::vector<IPC::BufferDescriptorX>& BufferDescriptorX() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] const std::vector<IPC::BufferDescriptorX>& BufferDescriptorX() const { |
|
|
return buffer_x_desciptors; |
|
|
return buffer_x_desciptors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const std::vector<IPC::BufferDescriptorABW>& BufferDescriptorA() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] const std::vector<IPC::BufferDescriptorABW>& BufferDescriptorA() const { |
|
|
return buffer_a_desciptors; |
|
|
return buffer_a_desciptors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const std::vector<IPC::BufferDescriptorABW>& BufferDescriptorB() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] const std::vector<IPC::BufferDescriptorABW>& BufferDescriptorB() const { |
|
|
return buffer_b_desciptors; |
|
|
return buffer_b_desciptors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const std::vector<IPC::BufferDescriptorC>& BufferDescriptorC() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] const std::vector<IPC::BufferDescriptorC>& BufferDescriptorC() const { |
|
|
return buffer_c_desciptors; |
|
|
return buffer_c_desciptors; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
const IPC::DomainMessageHeader& GetDomainMessageHeader() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] const IPC::DomainMessageHeader& GetDomainMessageHeader() const { |
|
|
return domain_message_header.value(); |
|
|
return domain_message_header.value(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
bool HasDomainMessageHeader() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] bool HasDomainMessageHeader() const { |
|
|
return domain_message_header.has_value(); |
|
|
return domain_message_header.has_value(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// Helper function to read a buffer using the appropriate buffer descriptor |
|
|
/// Helper function to read a buffer using the appropriate buffer descriptor |
|
|
std::vector<u8> ReadBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
[[nodiscard]] std::vector<u8> ReadBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
/// Helper function to write a buffer using the appropriate buffer descriptor |
|
|
/// Helper function to write a buffer using the appropriate buffer descriptor |
|
|
std::size_t WriteBuffer(const void* buffer, std::size_t size, |
|
|
std::size_t WriteBuffer(const void* buffer, std::size_t size, |
|
|
@ -308,22 +308,22 @@ public: |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
/// Helper function to get the size of the input buffer |
|
|
/// Helper function to get the size of the input buffer |
|
|
std::size_t GetReadBufferSize(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
[[nodiscard]] std::size_t GetReadBufferSize(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
/// Helper function to get the size of the output buffer |
|
|
/// Helper function to get the size of the output buffer |
|
|
std::size_t GetWriteBufferSize(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
[[nodiscard]] std::size_t GetWriteBufferSize(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
/// Helper function to test whether the input buffer at buffer_index can be read |
|
|
/// Helper function to test whether the input buffer at buffer_index can be read |
|
|
bool CanReadBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
[[nodiscard]] bool CanReadBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
/// Helper function to test whether the output buffer at buffer_index can be written |
|
|
/// Helper function to test whether the output buffer at buffer_index can be written |
|
|
bool CanWriteBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
[[nodiscard]] bool CanWriteBuffer(std::size_t buffer_index = 0) const; |
|
|
|
|
|
|
|
|
Handle GetCopyHandle(std::size_t index) const { |
|
|
|
|
|
|
|
|
[[nodiscard]] Handle GetCopyHandle(std::size_t index) const { |
|
|
return incoming_copy_handles.at(index); |
|
|
return incoming_copy_handles.at(index); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
Handle GetMoveHandle(std::size_t index) const { |
|
|
|
|
|
|
|
|
[[nodiscard]] Handle GetMoveHandle(std::size_t index) const { |
|
|
return incoming_move_handles.at(index); |
|
|
return incoming_move_handles.at(index); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
@ -348,13 +348,13 @@ public: |
|
|
manager = manager_; |
|
|
manager = manager_; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::string Description() const; |
|
|
|
|
|
|
|
|
[[nodiscard]] std::string Description() const; |
|
|
|
|
|
|
|
|
KThread& GetThread() { |
|
|
|
|
|
|
|
|
[[nodiscard]] KThread& GetThread() { |
|
|
return *thread; |
|
|
return *thread; |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
std::shared_ptr<SessionRequestManager> GetManager() const { |
|
|
|
|
|
|
|
|
[[nodiscard]] std::shared_ptr<SessionRequestManager> GetManager() const { |
|
|
return manager.lock(); |
|
|
return manager.lock(); |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|