|
|
@@ -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
|