|
|
|
@ -46,6 +46,14 @@ public: |
|
|
|
return HANDLE_TYPE; |
|
|
|
} |
|
|
|
|
|
|
|
Session* GetParent() { |
|
|
|
return parent.get(); |
|
|
|
} |
|
|
|
|
|
|
|
const Session* GetParent() const { |
|
|
|
return parent.get(); |
|
|
|
} |
|
|
|
|
|
|
|
using SessionPair = std::tuple<SharedPtr<ServerSession>, SharedPtr<ClientSession>>; |
|
|
|
|
|
|
|
/** |
|
|
|
@ -78,23 +86,16 @@ public: |
|
|
|
|
|
|
|
void Acquire(Thread* thread) override; |
|
|
|
|
|
|
|
std::string name; ///< The name of this session (optional) |
|
|
|
std::shared_ptr<Session> parent; ///< The parent session, which links to the client endpoint. |
|
|
|
std::shared_ptr<SessionRequestHandler> |
|
|
|
hle_handler; ///< This session's HLE request handler (applicable when not a domain) |
|
|
|
/// Called when a client disconnection occurs. |
|
|
|
void ClientDisconnected(); |
|
|
|
|
|
|
|
/// This is the list of domain request handlers (after conversion to a domain) |
|
|
|
std::vector<std::shared_ptr<SessionRequestHandler>> domain_request_handlers; |
|
|
|
|
|
|
|
/// List of threads that are pending a response after a sync request. This list is processed in |
|
|
|
/// a LIFO manner, thus, the last request will be dispatched first. |
|
|
|
/// TODO(Subv): Verify if this is indeed processed in LIFO using a hardware test. |
|
|
|
std::vector<SharedPtr<Thread>> pending_requesting_threads; |
|
|
|
/// Adds a new domain request handler to the collection of request handlers within |
|
|
|
/// this ServerSession instance. |
|
|
|
void AppendDomainRequestHandler(std::shared_ptr<SessionRequestHandler> handler); |
|
|
|
|
|
|
|
/// Thread whose request is currently being handled. A request is considered "handled" when a |
|
|
|
/// response is sent via svcReplyAndReceive. |
|
|
|
/// TODO(Subv): Find a better name for this. |
|
|
|
SharedPtr<Thread> currently_handling; |
|
|
|
/// Retrieves the total number of domain request handlers that have been |
|
|
|
/// appended to this ServerSession instance. |
|
|
|
std::size_t NumDomainRequestHandlers() const; |
|
|
|
|
|
|
|
/// Returns true if the session has been converted to a domain, otherwise False |
|
|
|
bool IsDomain() const { |
|
|
|
@ -129,8 +130,30 @@ private: |
|
|
|
/// object handle. |
|
|
|
ResultCode HandleDomainSyncRequest(Kernel::HLERequestContext& context); |
|
|
|
|
|
|
|
/// The parent session, which links to the client endpoint. |
|
|
|
std::shared_ptr<Session> parent; |
|
|
|
|
|
|
|
/// This session's HLE request handler (applicable when not a domain) |
|
|
|
std::shared_ptr<SessionRequestHandler> hle_handler; |
|
|
|
|
|
|
|
/// This is the list of domain request handlers (after conversion to a domain) |
|
|
|
std::vector<std::shared_ptr<SessionRequestHandler>> domain_request_handlers; |
|
|
|
|
|
|
|
/// List of threads that are pending a response after a sync request. This list is processed in |
|
|
|
/// a LIFO manner, thus, the last request will be dispatched first. |
|
|
|
/// TODO(Subv): Verify if this is indeed processed in LIFO using a hardware test. |
|
|
|
std::vector<SharedPtr<Thread>> pending_requesting_threads; |
|
|
|
|
|
|
|
/// Thread whose request is currently being handled. A request is considered "handled" when a |
|
|
|
/// response is sent via svcReplyAndReceive. |
|
|
|
/// TODO(Subv): Find a better name for this. |
|
|
|
SharedPtr<Thread> currently_handling; |
|
|
|
|
|
|
|
/// When set to True, converts the session to a domain at the end of the command |
|
|
|
bool convert_to_domain{}; |
|
|
|
|
|
|
|
/// The name of this session (optional) |
|
|
|
std::string name; |
|
|
|
}; |
|
|
|
|
|
|
|
} // namespace Kernel |