From 61a2fe8c3bcd5e6dc7e97945b923d1a5bd8099ec Mon Sep 17 00:00:00 2001 From: Subv Date: Mon, 5 Dec 2016 13:44:41 -0500 Subject: [PATCH] HLE: Use a member variable instead of a virtual function to retrieve the max number of sessions that can be connected to an HLE service at the same time. --- src/core/hle/service/apt/apt.h | 2 ++ src/core/hle/service/apt/apt_a.cpp | 2 +- src/core/hle/service/apt/apt_s.cpp | 2 +- src/core/hle/service/apt/apt_u.cpp | 2 +- src/core/hle/service/service.h | 18 +++++++++++++----- 5 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/core/hle/service/apt/apt.h b/src/core/hle/service/apt/apt.h index 44dbd8757..9bc6327ed 100644 --- a/src/core/hle/service/apt/apt.h +++ b/src/core/hle/service/apt/apt.h @@ -14,6 +14,8 @@ class Interface; namespace APT { +static const u32 MaxAPTSessions = 2; ///< Each APT service can only have up to 2 sessions connected at the same time. + /// Holds information about the parameters used in Send/Glance/ReceiveParameter struct MessageParameter { u32 sender_id = 0; diff --git a/src/core/hle/service/apt/apt_a.cpp b/src/core/hle/service/apt/apt_a.cpp index a7a0c8a41..7f37a7f54 100644 --- a/src/core/hle/service/apt/apt_a.cpp +++ b/src/core/hle/service/apt/apt_a.cpp @@ -39,7 +39,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x01020000, CheckNew3DS, "CheckNew3DS"}, }; -APT_A_Interface::APT_A_Interface() { +APT_A_Interface::APT_A_Interface() : Interface(MaxAPTSessions) { Register(FunctionTable); } diff --git a/src/core/hle/service/apt/apt_s.cpp b/src/core/hle/service/apt/apt_s.cpp index c4556a5de..933f26e60 100644 --- a/src/core/hle/service/apt/apt_s.cpp +++ b/src/core/hle/service/apt/apt_s.cpp @@ -99,7 +99,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x01020000, CheckNew3DS, "CheckNew3DS"}, }; -APT_S_Interface::APT_S_Interface() { +APT_S_Interface::APT_S_Interface() : Interface(MaxAPTSessions) { Register(FunctionTable); } diff --git a/src/core/hle/service/apt/apt_u.cpp b/src/core/hle/service/apt/apt_u.cpp index a731c39f6..e06084a1e 100644 --- a/src/core/hle/service/apt/apt_u.cpp +++ b/src/core/hle/service/apt/apt_u.cpp @@ -99,7 +99,7 @@ const Interface::FunctionInfo FunctionTable[] = { {0x01020000, CheckNew3DS, "CheckNew3DS"}, }; -APT_U_Interface::APT_U_Interface() { +APT_U_Interface::APT_U_Interface() : Interface(MaxAPTSessions) { Register(FunctionTable); } diff --git a/src/core/hle/service/service.h b/src/core/hle/service/service.h index 7b7db8499..2274e50ca 100644 --- a/src/core/hle/service/service.h +++ b/src/core/hle/service/service.h @@ -174,7 +174,7 @@ inline DescriptorType GetDescriptorType(u32 descriptor) { namespace Service { static const int kMaxPortSize = 8; ///< Maximum size of a port name (8 characters) -static const u32 DefaultMaxSessions = 10; ///< Arbitrary default number of maximum connections to an HLE port +static const u32 DefaultMaxSessions = 10; ///< Arbitrary default number of maximum connections to an HLE service /** * Interface implemented by HLE Session handlers. @@ -215,6 +215,15 @@ private: */ class Interface : public SessionRequestHandler { public: + /** + * Creates an HLE interface with the specified max sessions. + * @param max_sessions Maximum number of sessions that can be + * connected to this service at the same time. + */ + Interface(u32 max_sessions = DefaultMaxSessions) : max_sessions(max_sessions) { } + + virtual ~Interface() = default; + std::string GetName() const { return GetPortName(); } @@ -222,14 +231,12 @@ public: virtual void SetVersion(u32 raw_version) { version.raw = raw_version; } - virtual ~Interface() {} /** - * Gets the maximum allowed number of sessions that can be connected to this port at the same time. - * It should be overwritten by each service implementation for more fine-grained control. + * Gets the maximum allowed number of sessions that can be connected to this service at the same time. * @returns The maximum number of connections allowed. */ - virtual u32 GetMaxSessions() const { return DefaultMaxSessions; } + u32 GetMaxSessions() const { return max_sessions; } typedef void (*Function)(Interface*); @@ -269,6 +276,7 @@ protected: } version = {}; private: + u32 max_sessions; ///< Maximum number of concurrent sessions that this service can handle. boost::container::flat_map m_functions; };