summaryrefslogtreecommitdiff
path: root/src/components/connection_handler/include
diff options
context:
space:
mode:
Diffstat (limited to 'src/components/connection_handler/include')
-rw-r--r--src/components/connection_handler/include/connection_handler/connection.h77
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler.h87
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h294
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_observer.h26
-rw-r--r--src/components/connection_handler/include/connection_handler/device.h6
-rw-r--r--src/components/connection_handler/include/connection_handler/devices_discovery_starter.h5
-rw-r--r--src/components/connection_handler/include/connection_handler/heartbeat_monitor.h55
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_