diff options
Diffstat (limited to 'src/components/connection_handler/include/connection_handler/connection_handler_impl.h')
-rw-r--r-- | src/components/connection_handler/include/connection_handler/connection_handler_impl.h | 294 |
1 files changed, 154 insertions, 140 deletions
diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h index 4ead673663..d061e55491 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler_impl.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler_impl.h @@ -46,11 +46,11 @@ #include "connection_handler/connection.h" #include "connection_handler/devices_discovery_starter.h" #include "connection_handler/connection_handler.h" + #include "utils/logger.h" #include "utils/macro.h" #include "utils/lock.h" #include "utils/stl_utils.h" -#include "utils/singleton.h" #include "utils/rwlock.h" /** @@ -65,53 +65,51 @@ namespace connection_handler { * stores information regarding connections * and sessions and provides it to AppManager. */ -class ConnectionHandlerImpl : public ConnectionHandler, - public transport_manager::TransportManagerListenerEmpty, - public protocol_handler::SessionObserver, - public DevicesDiscoveryStarter, - public utils::Singleton<ConnectionHandlerImpl> { +class ConnectionHandlerImpl + : public ConnectionHandler, + public transport_manager::TransportManagerListenerEmpty, + public protocol_handler::SessionObserver, + public DevicesDiscoveryStarter { public: /** + * @brief ConnectionHandlerImpl + */ + ConnectionHandlerImpl(const ConnectionHandlerSettings& settings, + transport_manager::TransportManager& tm); + /** * \brief Destructor */ - virtual ~ConnectionHandlerImpl(); + ~ConnectionHandlerImpl(); - void Stop(); + void Stop(); /** * \brief Sets observer pointer for connection_handler. * \param observer Pointer to observer object. */ - virtual void set_connection_handler_observer( - ConnectionHandlerObserver *observer); - - /** - * \brief Sets pointer to TransportManager. - * \param transport_mngr Pointer to TransportManager object. - **/ - virtual void set_transport_manager( - transport_manager::TransportManager *transport_mngr); + void set_connection_handler_observer( + ConnectionHandlerObserver* observer) OVERRIDE; /** * \brief Sets pointer to ProtocolHandler. * \param protocol_handler Pointer to ProtocolHandler object. **/ void set_protocol_handler( - protocol_handler::ProtocolHandler *protocol_handler); + protocol_handler::ProtocolHandler* protocol_handler); /** * \brief Connects to all services of device * \param deviceHandle Handle of device to connect to */ - virtual void ConnectToDevice(connection_handler::DeviceHandle device_handle); + void ConnectToDevice(connection_handler::DeviceHandle device_handle) OVERRIDE; - virtual void ConnectToAllDevices(); + void ConnectToAllDevices() OVERRIDE; - virtual void StartTransportManager(); + void StartTransportManager() OVERRIDE; - virtual void OnDeviceListUpdated( - const std::vector<transport_manager::DeviceInfo> &); + void OnDeviceListUpdated( + const std::vector<transport_manager::DeviceInfo>&) OVERRIDE; - virtual void OnFindNewApplicationsRequest(); + void OnFindNewApplicationsRequest() OVERRIDE; /** * \brief Available devices list updated. @@ -121,87 +119,93 @@ class ConnectionHandlerImpl : public ConnectionHandler, * * \param DeviceList New list of available devices. **/ - virtual void OnDeviceFound(const transport_manager::DeviceInfo &device_info); - virtual void OnDeviceAdded(const transport_manager::DeviceInfo &device_info); - virtual void OnDeviceRemoved(const transport_manager::DeviceInfo &device_info); + void OnDeviceFound(const transport_manager::DeviceInfo& device_info) OVERRIDE; + void OnDeviceAdded(const transport_manager::DeviceInfo& device_info) OVERRIDE; + void OnDeviceRemoved( + const transport_manager::DeviceInfo& device_info) OVERRIDE; - virtual void OnScanDevicesFinished(); - virtual void OnScanDevicesFailed( - const transport_manager::SearchDeviceError &error); + void OnScanDevicesFinished() OVERRIDE; + void OnScanDevicesFailed( + const transport_manager::SearchDeviceError& error) OVERRIDE; /** * \brief Notifies about established connection. * * \param connection_id ID of new connection. **/ - virtual void OnConnectionEstablished( - const transport_manager::DeviceInfo &device_info, - const transport_manager::ConnectionUID &connection_id); - virtual void OnConnectionFailed( - const transport_manager::DeviceInfo &device_info, - const transport_manager::ConnectError &error); - virtual void OnConnectionClosed( - transport_manager::ConnectionUID connection_id); - virtual void OnConnectionClosedFailure( - transport_manager::ConnectionUID connection_id, - const transport_manager::DisconnectError &error); - virtual void OnUnexpectedDisconnect( - transport_manager::ConnectionUID connection_id, - const transport_manager::CommunicationError &error); - virtual void OnDeviceConnectionLost( - const connection_handler::DeviceHandle &device, - const transport_manager::DisconnectDeviceError &error); + void OnConnectionEstablished( + const transport_manager::DeviceInfo& device_info, + const transport_manager::ConnectionUID connection_id) OVERRIDE; + void OnConnectionFailed( + const transport_manager::DeviceInfo& device_info, + const transport_manager::ConnectError& error) OVERRIDE; + void OnConnectionClosed( + transport_manager::ConnectionUID connection_id) OVERRIDE; + void OnConnectionClosedFailure( + transport_manager::ConnectionUID connection_id, + const transport_manager::DisconnectError& error) OVERRIDE; + void OnUnexpectedDisconnect( + transport_manager::ConnectionUID connection_id, + const transport_manager::CommunicationError& error) OVERRIDE; + void OnDeviceConnectionLost( + const connection_handler::DeviceHandle& device, + const transport_manager::DisconnectDeviceError& error) OVERRIDE; /** * \brief Informs about failure during DisconnectDevice procedure of TM * \param device Information about disconnected device * \param error Information about possible reason of loosing connection */ - virtual void OnDisconnectFailed( - const connection_handler::DeviceHandle &device, - const transport_manager::DisconnectDeviceError &error); + void OnDisconnectFailed( + const connection_handler::DeviceHandle& device, + const transport_manager::DisconnectDeviceError& error) OVERRIDE; /** * \brief Callback function used by ProtocolHandler * when Mobile Application initiates start of new session. - * \param connection_handle Connection identifier within which session has to be started. + * \param connection_handle Connection identifier within which session has to + * be started. * \param session_id Identifier of the session to be started * \param service_type Type of service * \param is_protected would be service protected * \param hash_id pointer for session hash identifier * \return uint32_t Id (number) of new session if successful, otherwise 0. */ - virtual uint32_t OnSessionStartedCallback(const transport_manager::ConnectionUID &connection_handle, - const uint8_t session_id, - const protocol_handler::ServiceType &service_type, - const bool is_protected, uint32_t* hash_id); + virtual uint32_t OnSessionStartedCallback( + const transport_manager::ConnectionUID connection_handle, + const uint8_t session_id, + const protocol_handler::ServiceType& service_type, + const bool is_protected, + uint32_t* hash_id); /** * \brief Callback function used by ProtocolHandler * when Mobile Application initiates session ending. * \param connection_handle Connection identifier within which session exists * \param sessionId Identifier of the session to be ended - * \param hashCode Hash used only in second version of SmartDeviceLink protocol. + * \param hashCode Hash used only in second version of SmartDeviceLink + * protocol. * If not equal to hash assigned to session on start then operation fails. * \return uint32_t 0 if operation fails, session key otherwise */ - virtual uint32_t OnSessionEndedCallback( - const transport_manager::ConnectionUID &connection_handle, - const uint8_t session_id, const uint32_t &hashCode, - const protocol_handler::ServiceType &service_type); + uint32_t OnSessionEndedCallback( + const transport_manager::ConnectionUID connection_handle, + const uint8_t session_id, + const uint32_t& hashCode, + const protocol_handler::ServiceType& service_type) OVERRIDE; /** * \brief Callback function used by ProtocolHandler * when Mobile Application start message flood * \param connection_key used by other components as application identifier */ - void OnApplicationFloodCallBack(const uint32_t &connection_key) OVERRIDE; + void OnApplicationFloodCallBack(const uint32_t& connection_key) OVERRIDE; /** * \brief Callback function used by ProtocolHandler * when Mobile Application sends malformed message * \param connection_key used by other components as application identifier */ - void OnMalformedMessageCallback(const uint32_t &connection_key) OVERRIDE; + void OnMalformedMessageCallback(const uint32_t& connection_key) OVERRIDE; /** * \brief Creates unique identifier of session (can be used as hash) @@ -211,31 +215,20 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param sessionId Identifier of the session * \return int32_t Unique key for session */ - virtual uint32_t KeyFromPair( - transport_manager::ConnectionUID connection_handle, - uint8_t session_id); + uint32_t KeyFromPair(transport_manager::ConnectionUID connection_handle, + uint8_t session_id) const OVERRIDE; /** - * \brief Returns connection identifier and session number from given session key + * \brief Returns connection identifier and session number from given session + * key * \param key Unique key used by other components as session identifier - * \param connection_handle Returned: Connection identifier within which session exists + * \param connection_handle Returned: Connection identifier within which + * session exists * \param sessionId Returned: Number of session */ - virtual void PairFromKey(uint32_t key, - transport_manager::ConnectionUID *connection_handle, - uint8_t *session_id); - - /** - * \brief information about given Connection Key. - * \param key Unique key used by other components as session identifier - * \param app_id Returned: ApplicationID - * \param sessions_list Returned: List of session keys - * \param device_id Returned: DeviceID - * \return int32_t -1 in case of error or 0 in case of success - */ - virtual int32_t GetDataOnSessionKey(uint32_t key, uint32_t *app_id = 0, - std::list<int32_t> *sessions_list = NULL, - uint32_t *device_id = 0); + void PairFromKey(uint32_t key, + transport_manager::ConnectionUID* connection_handle, + uint8_t* session_id) const OVERRIDE; /** * \brief information about device @@ -246,11 +239,21 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param connection_type Returned: type of connection (USB, BT, etc.) * \return int32_t -1 in case of error or 0 in case of success */ - virtual int32_t GetDataOnDeviceID(connection_handler::DeviceHandle device_handle, - std::string *device_name = NULL, - std::list<uint32_t> *applications_list = NULL, - std::string *mac_address = NULL, - std::string* connection_type = NULL); + int32_t GetDataOnDeviceID(connection_handler::DeviceHandle device_handle, + std::string* device_name = NULL, + std::list<uint32_t>* applications_list = NULL, + std::string* mac_address = NULL, + std::string* connection_type = NULL) const OVERRIDE; + + /** + * @brief GetConnectedDevicesMAC allows to obtain MAC adresses for all + * currently connected devices. + * + * @param device_macs collection of MAC adresses for connected devices. + */ + void GetConnectedDevicesMAC( + std::vector<std::string>& device_macs) const OVERRIDE; + #ifdef ENABLE_SECURITY /** * \brief Sets crypto context of connection @@ -258,9 +261,8 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param context SSLContext to be set * \return \c SecurityQuery::ProtectSessionResult value */ - int SetSSLContext( - const uint32_t &key, - security_manager::SSLContext *context) OVERRIDE; + int SetSSLContext(const uint32_t& key, + security_manager::SSLContext* context) OVERRIDE; /** * \brief Gets crypto context of connection, use service_type to get NULL @@ -270,17 +272,20 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param service_type Type of service * \return \ref SSLContext of connection */ - security_manager::SSLContext *GetSSLContext( - const uint32_t &key, - const protocol_handler::ServiceType &service_type) OVERRIDE; + security_manager::SSLContext* GetSSLContext( + const uint32_t& key, + const protocol_handler::ServiceType& service_type) OVERRIDE; /** * \brief Set protection flag to service in session by key * \param key Unique key used by other components as session identifier * \param service_type Type of service */ void SetProtectionFlag( - const uint32_t &key, - const protocol_handler::ServiceType &service_type) OVERRIDE; + const uint32_t& key, + const protocol_handler::ServiceType& service_type) OVERRIDE; + + security_manager::SSLContext::HandshakeContext GetHandshakeContext( + uint32_t key) const OVERRIDE; #endif // ENABLE_SECURITY /** @@ -289,40 +294,40 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param device_handle * \return true on sucess otherwise false. */ - virtual bool GetDeviceID(const std::string &mac_address, - DeviceHandle *device_handle); + bool GetDeviceID(const std::string& mac_address, + DeviceHandle* device_handle) OVERRIDE; /** * \brief Method which should start devices discovering */ - virtual void StartDevicesDiscovery(); + void StartDevicesDiscovery() OVERRIDE; /** * @brief Close the connection revoked by Policy * @param connection_key pair of connection and session id */ - virtual void CloseRevokedConnection(uint32_t connection_key); + void CloseRevokedConnection(uint32_t connection_key) OVERRIDE; /** * @brief Close the connection pointed by handle * @param connection_handle Connection unique id */ - virtual void CloseConnection(ConnectionHandle connection_handle) OVERRIDE; + void CloseConnection(ConnectionHandle connection_handle) OVERRIDE; /** * \brief Close session associated with the key * \param key Unique key used by other components as session identifier */ - virtual void CloseSession(uint32_t key, CloseSessionReason close_reason); + void CloseSession(uint32_t key, CloseSessionReason close_reason) OVERRIDE; /** * \brief Function used by HearbeatMonitior to close session on HB timeout * \param connection_handle Connection handler within which session exists * \param session_id Identifier of the session to be ended */ - virtual void CloseSession(ConnectionHandle connection_handle, - uint8_t session_id, - CloseSessionReason close_reason); + void CloseSession(ConnectionHandle connection_handle, + uint8_t session_id, + CloseSessionReason close_reason) OVERRIDE; /** * \brief Function used by OnApplicationFloodCallback and @@ -331,20 +336,20 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param connection_handle Connection identifier within which session exists * \param close_reason The reason of connection closing */ - virtual void CloseConnectionSessions( - ConnectionHandle connection_handle, CloseSessionReason close_reason); + virtual void CloseConnectionSessions(ConnectionHandle connection_handle, + CloseSessionReason close_reason); /** * \brief Return count of session for specified connection * \param connection_key pair of connection handle and session id */ - virtual uint32_t GetConnectionSessionsCount(uint32_t connection_key); + uint32_t GetConnectionSessionsCount(uint32_t connection_key) OVERRIDE; /** * \brief Send heartbeat message to mobile app */ - virtual void SendHeartBeat(ConnectionHandle connection_handle, - uint8_t session_id); + void SendHeartBeat(ConnectionHandle connection_handle, + uint8_t session_id) OVERRIDE; /** * @brief SendEndService allows to end up specific service. @@ -353,25 +358,25 @@ class ConnectionHandlerImpl : public ConnectionHandler, * * @param service_type the service that should be closed. */ - virtual void SendEndService(uint32_t key, - uint8_t service_type); + void SendEndService(uint32_t key, uint8_t service_type) OVERRIDE; /** * \brief Start heartbeat for specified session * * \param connection_key pair of connection and session id */ - virtual void StartSessionHeartBeat(uint32_t connection_key); + void StartSessionHeartBeat(uint32_t connection_key) OVERRIDE; /** * Sets heart beat timeout for specified session * @param connection_key pair of connection and session id - * @param timeout in seconds + * @param timeout in milliseconds */ - virtual void SetHeartBeatTimeout(uint32_t connection_key, int32_t timeout); + void SetHeartBeatTimeout(uint32_t connection_key, uint32_t timeout) OVERRIDE; /** - * \brief Keep connection associated with the key from being closed by heartbeat monitor + * \brief Keep connection associated with the key from being closed by + * heartbeat monitor */ void KeepConnectionAlive(uint32_t connection_key, uint8_t session_id); @@ -382,18 +387,20 @@ class ConnectionHandlerImpl : public ConnectionHandler, * \param protocol_version contains protocol version of * \registered application. */ - virtual void BindProtocolVersionWithSession(uint32_t connection_key, - uint8_t protocol_version); + void BindProtocolVersionWithSession(uint32_t connection_key, + uint8_t protocol_version) OVERRIDE; /** - * \brief returns TRUE if session supports sending HEART BEAT ACK to mobile side - * \param connection_handle Connection identifier whithin which session exists + * \brief returns TRUE if session supports sending HEART BEAT ACK to mobile + * side + * \param connection_handle Connection identifier whithin which session + * exists * \param sessionId Identifier of the session - * \return TRUE if session has protocol version which supports heartbeat otherwise returns FALSE + * \return TRUE if session has protocol version which supports heartbeat + * otherwise returns FALSE */ - virtual bool IsHeartBeatSupported( - transport_manager::ConnectionUID connection_handle, - uint8_t session_id); + bool IsHeartBeatSupported(transport_manager::ConnectionUID connection_handle, + uint8_t session_id) const OVERRIDE; /** * @brief returns protocol version which application supports @@ -402,14 +409,21 @@ class ConnectionHandlerImpl : public ConnectionHandler, * @param method writes value protocol version to protocol_version * @return TRUE if session and connection exist otherwise returns FALSE */ - virtual bool ProtocolVersionUsed(uint32_t connection_id, - uint8_t session_id, uint8_t& protocol_version); - private: - /** - * \brief Default class constructor - */ - ConnectionHandlerImpl(); + bool ProtocolVersionUsed(uint32_t connection_id, + uint8_t session_id, + uint8_t& protocol_version) const OVERRIDE; + + int32_t GetDataOnSessionKey(uint32_t key, + uint32_t* app_id, + std::list<int32_t>* sessions_list, + uint32_t* device_id) const OVERRIDE; + + const ConnectionHandlerSettings& get_settings() const OVERRIDE; + const protocol_handler::SessionObserver& get_session_observer(); + DevicesDiscoveryStarter& get_device_discovery_starter(); + + private: /** * \brief Disconnect application. * @@ -418,20 +432,20 @@ class ConnectionHandlerImpl : public ConnectionHandler, **/ void RemoveConnection(const ConnectionHandle connection_handle); - void OnConnectionEnded( - const transport_manager::ConnectionUID &connection_id); + void OnConnectionEnded(const transport_manager::ConnectionUID connection_id); + const ConnectionHandlerSettings& settings_; /** * \brief Pointer to observer */ - ConnectionHandlerObserver *connection_handler_observer_; + ConnectionHandlerObserver* connection_handler_observer_; /** * \brief Pointer to TransportManager */ - transport_manager::TransportManager *transport_manager_; + transport_manager::TransportManager& transport_manager_; - protocol_handler::ProtocolHandler *protocol_handler_; + protocol_handler::ProtocolHandler* protocol_handler_; /** * \brief List of devices @@ -446,7 +460,7 @@ class ConnectionHandlerImpl : public ConnectionHandler, /** * \brief Lock for applications list */ - mutable sync_primitives::Lock connection_list_lock_; + mutable sync_primitives::RWLock connection_list_lock_; mutable sync_primitives::RWLock connection_handler_observer_lock_; /** @@ -457,13 +471,13 @@ class ConnectionHandlerImpl : public ConnectionHandler, #ifdef BUILD_TESTS // Methods for test usage public: - ConnectionList &getConnectionList(); + const DeviceMap& getDeviceList(); + ConnectionList& getConnectionList(); void addDeviceConnection( - const transport_manager::DeviceInfo &device_info, - const transport_manager::ConnectionUID &connection_id); + const transport_manager::DeviceInfo& device_info, + const transport_manager::ConnectionUID connection_id); #endif private: - FRIEND_BASE_SINGLETON_CLASS(ConnectionHandlerImpl); DISALLOW_COPY_AND_ASSIGN(ConnectionHandlerImpl); }; } // namespace connection_handler |