diff options
Diffstat (limited to 'src/components/connection_handler/include')
7 files changed, 301 insertions, 249 deletions
diff --git a/src/components/connection_handler/include/connection_handler/connection.h b/src/components/connection_handler/include/connection_handler/connection.h index d20ddc1c00..aafc562505 100644 --- a/src/components/connection_handler/include/connection_handler/connection.h +++ b/src/components/connection_handler/include/connection_handler/connection.h @@ -73,13 +73,10 @@ struct Service { protocol_handler::ServiceType service_type; bool is_protected_; Service() - : service_type(protocol_handler::kInvalidServiceType), - is_protected_(false) { - } + : service_type(protocol_handler::kInvalidServiceType) + , is_protected_(false) {} explicit Service(protocol_handler::ServiceType service_type) - : service_type(service_type), - is_protected_(false) { - } + : service_type(service_type), is_protected_(false) {} bool operator==(const protocol_handler::ServiceType service_type) const { return this->service_type == service_type; } @@ -94,23 +91,26 @@ struct Session { ServiceList service_list; uint8_t protocol_version; #ifdef ENABLE_SECURITY - security_manager::SSLContext *ssl_context; + security_manager::SSLContext* ssl_context; #endif // ENABLE_SECURITY Session() - : service_list() + : service_list() #ifdef ENABLE_SECURITY - , ssl_context(NULL) + , ssl_context(NULL) #endif // ENABLE_SECURITY - {} - explicit Session(const ServiceList &services, uint8_t protocol_version) - : service_list(services), - protocol_version(protocol_version) + { + } + explicit Session(const ServiceList& services, uint8_t protocol_version) + : service_list(services) + , protocol_version(protocol_version) #ifdef ENABLE_SECURITY , ssl_context(NULL) #endif // ENABLE_SECURITY - {} - Service *FindService(const protocol_handler::ServiceType &service_type); - const Service *FindService(const protocol_handler::ServiceType &service_type) const; + { + } + Service* FindService(const protocol_handler::ServiceType& service_type); + const Service* FindService( + const protocol_handler::ServiceType& service_type) const; }; /** @@ -128,8 +128,8 @@ class Connection { */ Connection(ConnectionHandle connection_handle, DeviceHandle connection_device_handle, - ConnectionHandler *connection_handler, - int32_t heartbeat_timeout); + ConnectionHandler* connection_handler, + uint32_t heartbeat_timeout); /** * @brief Destructor @@ -146,7 +146,7 @@ class Connection { * @brief Returns connection device handle * @return ConnectionDeviceHandle */ - DeviceHandle connection_device_handle(); + DeviceHandle connection_device_handle() const; /** * @brief Adds session to connection @@ -187,8 +187,7 @@ class Connection { * @param context SSL for connection * @return \c true in case of service is protected or \c false otherwise */ - int SetSSLContext(uint8_t session_id, - security_manager::SSLContext *context); + int SetSSLContext(uint8_t session_id, security_manager::SSLContext* context); /** * @brief Gets crypto context of session, use service_type to get NULL * SSLContext for not protected services or ControlService (0x0) @@ -197,23 +196,22 @@ class Connection { * @param service_type Type of service * @return \ref SSLContext of connection */ - security_manager::SSLContext *GetSSLContext( - const uint8_t session_id, - const protocol_handler::ServiceType &service_type) const; + security_manager::SSLContext* GetSSLContext( + const uint8_t session_id, + const protocol_handler::ServiceType& service_type) const; /** * @brief Set protection flag to service in session by key * to get current SSLContext of connection * @param session_id Identifier of the session * @param service_type Type of service */ - void SetProtectionFlag( - const uint8_t session_id, - const protocol_handler::ServiceType &service_type); + void SetProtectionFlag(const uint8_t session_id, + const protocol_handler::ServiceType& service_type); #endif // ENABLE_SECURITY - /** - * @brief Returns map of sessions which have been opened in - * current connection. - */ + /** + * @brief Returns map of sessions which have been opened in + * current connection. + */ const SessionMap session_map() const; /** @@ -242,16 +240,17 @@ class Connection { /** * @brief Sets heart beat timeout - * @param timeout in seconds + * @param timeout in milliseconds */ - void SetHeartBeatTimeout(int32_t timeout, uint8_t session_id); + void SetHeartBeatTimeout(uint32_t timeout, uint8_t session_id); /** * @brief changes protocol version in session * @param session_id session id * @param protocol_version protocol version registered application */ - void UpdateProtocolVersionSession(uint8_t session_id, uint8_t protocol_version); + void UpdateProtocolVersionSession(uint8_t session_id, + uint8_t protocol_version); /** * @brief checks if session supports heartbeat @@ -267,14 +266,13 @@ class Connection { * @return TRUE if session exists otherwise * return FALSE */ - bool ProtocolVersion(uint8_t session_id, uint8_t& protocol_version); - + bool ProtocolVersion(uint8_t session_id, uint8_t& protocol_version); private: /** * @brief Current connection handler. */ - ConnectionHandler *connection_handler_; + ConnectionHandler* connection_handler_; /** * @brief Current connection handle. @@ -289,7 +287,7 @@ class Connection { /** * @brief session/services map */ - SessionMap session_map_; + SessionMap session_map_; mutable sync_primitives::Lock session_map_lock_; @@ -297,7 +295,8 @@ class Connection { * @brief monitor that closes connection if there is no traffic over it */ HeartBeatMonitor* heartbeat_monitor_; - threads::Thread *heart_beat_monitor_thread_; + uint32_t heartbeat_timeout_; + threads::Thread* heart_beat_monitor_thread_; DISALLOW_COPY_AND_ASSIGN(Connection); }; diff --git a/src/components/connection_handler/include/connection_handler/connection_handler.h b/src/components/connection_handler/include/connection_handler/connection_handler.h index 4a79658878..cb22b87bbb 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler.h @@ -33,6 +33,7 @@ #ifndef SRC_COMPONENTS_CONNECTION_HANDLER_INCLUDE_CONNECTION_HANDLER_CONNECTION_HANDLER_H_ #define SRC_COMPONENTS_CONNECTION_HANDLER_INCLUDE_CONNECTION_HANDLER_CONNECTION_HANDLER_H_ +#include "connection_handler/connection_handler_settings.h" #include "transport_manager/transport_manager_listener.h" #include "protocol_handler/session_observer.h" #include "connection_handler/device.h" @@ -45,14 +46,9 @@ */ namespace connection_handler { - enum CloseSessionReason { - kCommon = 0, - kFlood, - kMalformed, - kUnauthorizedApp - }; +enum CloseSessionReason { kCommon = 0, kFlood, kMalformed, kUnauthorizedApp }; - class ConnectionHandlerObserver; +class ConnectionHandlerObserver; /** * \class ConnectionHandler @@ -65,14 +61,7 @@ class ConnectionHandler { * \param observer Pointer to observer object. **/ virtual void set_connection_handler_observer( - ConnectionHandlerObserver *observer) = 0; - - /** - * \brief Sets pointer to TransportManager. - * \param transportManager Pointer to TransportManager object. - **/ - virtual void set_transport_manager( - transport_manager::TransportManager *transport_manager) = 0; + ConnectionHandlerObserver* observer) = 0; virtual void StartTransportManager() = 0; @@ -88,7 +77,8 @@ class ConnectionHandler { virtual void CloseRevokedConnection(uint32_t connection_key) = 0; /** - * \brief Close all associated sessions and close the connection pointed by handle + * \brief Close all associated sessions and close the connection pointed by + * handle */ virtual void CloseConnection(ConnectionHandle connection_handle) = 0; @@ -103,8 +93,8 @@ class ConnectionHandler { * @param mac_address * @return true if successfully */ - virtual bool GetDeviceID(const std::string &mac_address, - DeviceHandle *device_handle) = 0; + virtual bool GetDeviceID(const std::string& mac_address, + DeviceHandle* device_handle) = 0; /** * Close session associated with the key @@ -118,13 +108,13 @@ class ConnectionHandler { uint8_t session_id, CloseSessionReason close_reason) = 0; - /** - * @brief SendEndService allows to end up specific service. - * - * @param key application identifier whose service should be closed. - * - * @param service_type the service that should be closed. - */ + /** + * @brief SendEndService allows to end up specific service. + * + * @param key application identifier whose service should be closed. + * + * @param service_type the service that should be closed. + */ virtual void SendEndService(uint32_t key, uint8_t service_type) = 0; /** @@ -138,15 +128,22 @@ class ConnectionHandler { * \brief Send heartbeat to mobile app */ virtual void SendHeartBeat(ConnectionHandle connection_handle, - uint8_t session_id) = 0; + uint8_t session_id) = 0; /** * 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) = 0; + uint32_t timeout) = 0; + + /** + * \brief Keep connection associated with the key from being closed by + * heartbeat monitor + */ + virtual void KeepConnectionAlive(uint32_t connection_key, + uint8_t session_id) = 0; /** * \brief binds protocol version with session @@ -158,12 +155,42 @@ class ConnectionHandler { virtual void BindProtocolVersionWithSession(uint32_t connection_key, uint8_t protocol_version) = 0; + /** + * \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, + std::list<int32_t>* sessions_list, + uint32_t* device_id) const = 0; + /** + * @brief GetConnectedDevicesMAC allows to obtain MAC adresses for all + * currently connected devices. + * + * @param device_macs collection of MAC adresses for connected devices. + */ + virtual void GetConnectedDevicesMAC( + std::vector<std::string>& device_macs) const = 0; + + /** + * \brief Connection handler settings getter + * \return pointer to connection handler settings class + */ + virtual const ConnectionHandlerSettings& get_settings() const = 0; + + virtual const protocol_handler::SessionObserver& get_session_observer() = 0; + + virtual DevicesDiscoveryStarter& get_device_discovery_starter() = 0; + protected: /** * \brief Destructor */ - virtual ~ConnectionHandler() { - } + virtual ~ConnectionHandler() {} }; } // namespace connection_handler 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 diff --git a/src/components/connection_handler/include/connection_handler/connection_handler_observer.h b/src/components/connection_handler/include/connection_handler/connection_handler_observer.h index 556a2dc4e2..54b8d3a92e 100644 --- a/src/components/connection_handler/include/connection_handler/connection_handler_observer.h +++ b/src/components/connection_handler/include/connection_handler/connection_handler_observer.h @@ -38,6 +38,10 @@ #include "connection_handler/connection_handler.h" #include "protocol/service_type.h" +#ifdef ENABLE_SECURITY +#include "security_manager/ssl_context.h" +#endif // ENABLE_SECURITY + /** * \namespace connection_handler * \brief SmartDeviceLink connection_handler namespace. @@ -49,7 +53,7 @@ namespace connection_handler { * \brief ConnectionHandlerObserver class */ class ConnectionHandlerObserver { - public: + public: /** * \brief Available devices list updated. * @@ -59,7 +63,7 @@ class ConnectionHandlerObserver { * \param DeviceList New list of available devices. **/ virtual void OnDeviceListUpdated( - const connection_handler::DeviceMap &device_list) = 0; + const connection_handler::DeviceMap& device_list) = 0; /** * @brief Reaction to "Find new applications" request @@ -74,19 +78,20 @@ class ConnectionHandlerObserver { * \param DeviceHandle Handle of removed device. **/ virtual void RemoveDevice( - const connection_handler::DeviceHandle &device_handle) = 0; + const connection_handler::DeviceHandle& device_handle) = 0; /** * \brief Callback function used by connection_handler * when Mobile Application initiates start of new service. - * \param deviceHandle Device identifier within which session has to be started. + * \param deviceHandle Device identifier within which session has to be + * started. * \param sessionKey Key of started session. * \param type Established service type */ virtual bool OnServiceStartedCallback( - const connection_handler::DeviceHandle &device_handle, - const int32_t &session_key, - const protocol_handler::ServiceType &type) = 0; + const connection_handler::DeviceHandle& device_handle, + const int32_t& session_key, + const protocol_handler::ServiceType& type) = 0; /** * \brief Callback function used by connection_handler @@ -100,12 +105,15 @@ class ConnectionHandlerObserver { const protocol_handler::ServiceType& type, const connection_handler::CloseSessionReason& close_reason) = 0; +#ifdef ENABLE_SECURITY + virtual security_manager::SSLContext::HandshakeContext GetHandshakeContext( + uint32_t key) const = 0; +#endif // ENABLE_SECURITY protected: /** * \brief Destructor */ - virtual ~ConnectionHandlerObserver() { - } + virtual ~ConnectionHandlerObserver() {} }; } // namespace connection_handler diff --git a/src/components/connection_handler/include/connection_handler/device.h b/src/components/connection_handler/include/connection_handler/device.h index c37c4cc62c..cee0bf8875 100644 --- a/src/components/connection_handler/include/connection_handler/device.h +++ b/src/components/connection_handler/include/connection_handler/device.h @@ -58,8 +58,10 @@ class Device { /** * \brief Class constructor */ - Device(DeviceHandle device_handle, const std::string &user_friendly_name, - const std::string &mac_address = "", const std::string& connection_type = ""); + Device(DeviceHandle device_handle, + const std::string& user_friendly_name, + const std::string& mac_address = "", + const std::string& connection_type = ""); /** * \brief Returns device handle diff --git a/src/components/connection_handler/include/connection_handler/devices_discovery_starter.h b/src/components/connection_handler/include/connection_handler/devices_discovery_starter.h index bd5885a273..0bb3da0772 100644 --- a/src/components/connection_handler/include/connection_handler/devices_discovery_starter.h +++ b/src/components/connection_handler/include/connection_handler/devices_discovery_starter.h @@ -49,7 +49,7 @@ class DevicesDiscoveryStarter { /** * \brief Method which should start devices discoveryng */ - virtual void StartDevicesDiscovery()=0; + virtual void StartDevicesDiscovery() = 0; /** * \brief Connects to all services of device @@ -64,8 +64,7 @@ class DevicesDiscoveryStarter { /** * \brief Destructor */ - virtual ~DevicesDiscoveryStarter() { - } + virtual ~DevicesDiscoveryStarter() {} }; } // namespace connection_handler diff --git a/src/components/connection_handler/include/connection_handler/heartbeat_monitor.h b/src/components/connection_handler/include/connection_handler/heartbeat_monitor.h index 0233e269dd..f6ef9a9829 100644 --- a/src/components/connection_handler/include/connection_handler/heartbeat_monitor.h +++ b/src/components/connection_handler/include/connection_handler/heartbeat_monitor.h @@ -48,10 +48,9 @@ class Connection; /* * Starts hearbeat timer for session and when it elapses closes it */ -class HeartBeatMonitor: public threads::ThreadDelegate { +class HeartBeatMonitor : public threads::ThreadDelegate { public: - HeartBeatMonitor(int32_t heartbeat_timeout_seconds, - Connection *connection); + HeartBeatMonitor(uint32_t heartbeat_timeout_mseconds, Connection* connection); /** * Thread procedure. @@ -73,34 +72,38 @@ class HeartBeatMonitor: public threads::ThreadDelegate { * \brief Thread exit procedure. */ virtual void exitThreadMain(); - - void set_heartbeat_timeout_seconds(int32_t timeout, uint8_t session_id); + /** + * @brief Update heart beat timeout for session + * @param timeout contains timeout for updating + * @param session_id contain id session for which update timeout + * timeout + **/ + void set_heartbeat_timeout_milliseconds(uint32_t timeout, uint8_t session_id); private: - - // \brief Heartbeat timeout, should be read from profile - int32_t default_heartbeat_timeout_; + // \brief Heartbeat timeout + uint32_t default_heartbeat_timeout_; // \brief Connection that must be closed when timeout elapsed - Connection *connection_; + Connection* connection_; - //Default HeartBeat cycle timeout (in miliseconds) + // Default HeartBeat cycle timeout (in miliseconds) static const int32_t kDefaultCycleTimeout = 100; class SessionState { - public: - explicit SessionState(int32_t heartbeat_timeout_seconds = 0); - void UpdateTimeout(int32_t heartbeat_timeout_seconds); - void PrepareToClose(); - bool IsReadyToClose() const; - void KeepAlive(); - bool HasTimeoutElapsed(); - private: - void RefreshExpiration(); - - int32_t heartbeat_timeout_seconds_; - TimevalStruct heartbeat_expiration; - bool is_heartbeat_sent; - + public: + explicit SessionState(uint32_t heartbeat_timeout_mseconds = 0); + void UpdateTimeout(uint32_t heartbeat_timeout_mseconds); + void PrepareToClose(); + bool IsReadyToClose() const; + void KeepAlive(); + bool HasTimeoutElapsed(); + + private: + void RefreshExpiration(); + + uint32_t heartbeat_timeout_mseconds_; + TimevalStruct heartbeat_expiration_; + bool is_heartbeat_sent_; }; // \brief monitored sessions collection @@ -108,7 +111,7 @@ class HeartBeatMonitor: public threads::ThreadDelegate { typedef std::map<uint8_t, SessionState> SessionMap; SessionMap sessions_; - sync_primitives::Lock sessions_list_lock_; // recurcive + sync_primitives::Lock sessions_list_lock_; // recurcive sync_primitives::Lock main_thread_lock_; mutable sync_primitives::Lock heartbeat_timeout_seconds_lock_; sync_primitives::ConditionalVariable heartbeat_monitor_; @@ -120,6 +123,6 @@ class HeartBeatMonitor: public threads::ThreadDelegate { DISALLOW_COPY_AND_ASSIGN(HeartBeatMonitor); }; -} // namespace connection_handler +} // namespace connection_handler #endif // SRC_COMPONENTS_CONNECTION_HANDLER_INCLUDE_HEARTBEAT_MONITOR_H_ |