diff options
Diffstat (limited to 'src/components/connection_handler/include/connection_handler/connection_handler_impl.h')
-rw-r--r-- | src/components/connection_handler/include/connection_handler/connection_handler_impl.h | 148 |
1 files changed, 99 insertions, 49 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 66b2d7cf16..1ab70ce702 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 @@ -54,11 +54,14 @@ #include "utils/stl_utils.h" #include "utils/rwlock.h" +const transport_manager::ConnectionUID kDisabledSecondary = 0xFFFFFFFF; + /** * \namespace connection_handler * \brief SmartDeviceLink connection_handler namespace. */ namespace connection_handler { + /** * \class ConnectionHandlerImpl * \brief SmartDeviceLink connection_handler main class @@ -193,25 +196,6 @@ class ConnectionHandlerImpl /** * \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 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. - * \deprecated - */ - 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 start of new session. * Result must be notified through NotifySessionStartedContext(). * \param connection_handle Connection identifier within which session * has to be started. @@ -227,22 +211,7 @@ class ConnectionHandlerImpl const protocol_handler::ServiceType& service_type, const bool is_protected, const BsonObject* params); - /** - * \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. - * If not equal to hash assigned to session on start then operation fails. - * \return uint32_t 0 if operation fails, session key otherwise - * \deprecated - */ - 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 initiates session ending. @@ -274,6 +243,24 @@ class ConnectionHandlerImpl void OnMalformedMessageCallback(const uint32_t& connection_key) OVERRIDE; /** + * @brief Converts connection handle to transport type string used in + * smartDeviceLink.ini file, e.g. "TCP_WIFI" + * @param connection_handle A connection identifier + * @return string representation of the transport of the device + */ + const std::string TransportTypeProfileStringFromConnHandle( + transport_manager::ConnectionUID connection_handle) const; + + /** + * @brief Converts device handle to transport type string used in + * smartDeviceLink.ini file, e.g. "TCP_WIFI" + * @param device_handle A device handle + * @return string representation of the transport of the device + */ + const std::string TransportTypeProfileStringFromDeviceHandle( + DeviceHandle device_handle) const; + + /** * \brief Creates unique identifier of session (can be used as hash) * from given connection identifier * within which session exists and session number. @@ -503,26 +490,49 @@ class ConnectionHandlerImpl std::list<int32_t>* sessions_list, connection_handler::DeviceHandle* device_id) const OVERRIDE; - /** - * DEPRECATED - * \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 - */ - 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(); /** + * \brief Add a session. This is meant to be called from Connection class. + * \param primary_transport_id the primary connection ID to associate with the + * newly created session + * \return new session id, or 0 if failed + **/ + uint32_t AddSession( + const transport_manager::ConnectionUID primary_transport_id) OVERRIDE; + + /** + * \brief Remove a session. This is meant to be called from Connection class. + * \param session_id ID of the session to remove + * \return true if successful, false otherwise + **/ + bool RemoveSession(uint8_t session_id) OVERRIDE; + + DataAccessor<SessionConnectionMap> session_connection_map() OVERRIDE; + + /** + * \brief Associate a secondary transport ID with a session + * \param session_id the session ID + * \param connection_id the new secondary connection ID to associate with the + * session + * \return the SessionTransports (newly) associated with the session + **/ + SessionTransports SetSecondaryTransportID( + uint8_t session_id, + transport_manager::ConnectionUID secondary_transport_id) OVERRIDE; + + /** + * \brief Retrieve the session transports associated with a session + * \param session_id the session ID + * \return the SessionTransports associated with the session + **/ + const SessionTransports GetSessionTransports( + uint8_t session_id) const OVERRIDE; + + /** * \brief Invoked when observer's OnServiceStartedCallback is completed * \param session_key the key of started session passed to * OnServiceStartedCallback(). @@ -538,6 +548,28 @@ class ConnectionHandlerImpl bool result, std::vector<std::string>& rejected_params); + /** + * \brief Called when secondary transport with given session ID is established + * \param primary_connection_handle Set to identifier of primary connection + * \param secondary_connection_handle Identifier of secondary connection + * \param sessionid session ID taken from Register Secondary Transport frame + **/ + bool OnSecondaryTransportStarted( + transport_manager::ConnectionUID& primary_connection_handle, + const transport_manager::ConnectionUID secondary_connection_handle, + const uint8_t session_id) OVERRIDE; + + /** + * \brief Called when secondary transport shuts down + * \param primary_connection_handle Identifier of primary connection + * \param secondary_connection_handle Identifier of secondary connection + * transport + **/ + void OnSecondaryTransportEnded( + const transport_manager::ConnectionUID primary_connection_handle, + const transport_manager::ConnectionUID secondary_connection_handle) + OVERRIDE; + private: /** * \brief Disconnect application. @@ -549,6 +581,9 @@ class ConnectionHandlerImpl void OnConnectionEnded(const transport_manager::ConnectionUID connection_id); + const uint8_t GetSessionIdFromSecondaryTransport( + transport_manager::ConnectionUID secondary_transport_id) const; + const ConnectionHandlerSettings& settings_; /** * \brief Pointer to observer @@ -568,6 +603,13 @@ class ConnectionHandlerImpl DeviceMap device_list_; /** + * @brief session/connection map + */ + SessionConnectionMap session_connection_map_; + mutable std::shared_ptr<sync_primitives::RecursiveLock> + session_connection_map_lock_ptr_; + + /** * \brief List of connections */ ConnectionList connection_list_; @@ -587,6 +629,11 @@ class ConnectionHandlerImpl std::map<uint32_t, protocol_handler::SessionContext> start_service_context_map_; + /** + * @brief connection object as it's being closed + */ + Connection* ending_connection_; + #ifdef BUILD_TESTS // Methods for test usage public: @@ -595,6 +642,9 @@ class ConnectionHandlerImpl void addDeviceConnection( const transport_manager::DeviceInfo& device_info, const transport_manager::ConnectionUID connection_id); + SessionConnectionMap& getSessionConnectionMap() { + return session_connection_map_; + } #endif private: DISALLOW_COPY_AND_ASSIGN(ConnectionHandlerImpl); |