summaryrefslogtreecommitdiff
path: root/src/components/connection_handler/include/connection_handler/connection_handler_impl.h
diff options
context:
space:
mode:
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.h294
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