diff options
author | Andriy Byzhynar <abyzhynar@luxoft.com> | 2020-02-20 16:58:53 +0200 |
---|---|---|
committer | Andriy Byzhynar <abyzhynar@luxoft.com> | 2020-02-24 18:24:33 +0200 |
commit | 2c784da15f120869d25267bd5b778d983504440a (patch) | |
tree | 98e7696a485365127d7fca9d6070e9f85a319904 | |
parent | 3af95076c6c05d68e46c9d08a5800b9cdb8536df (diff) | |
download | sdl_core-2c784da15f120869d25267bd5b778d983504440a.tar.gz |
Rework WebEngine device ID generation
22 files changed, 127 insertions, 57 deletions
diff --git a/src/components/application_manager/include/application_manager/application_manager_impl.h b/src/components/application_manager/include/application_manager/application_manager_impl.h index e4cab833e4..51e46bc082 100644 --- a/src/components/application_manager/include/application_manager/application_manager_impl.h +++ b/src/components/application_manager/include/application_manager/application_manager_impl.h @@ -1161,8 +1161,6 @@ class ApplicationManagerImpl void ApplyFunctorForEachPlugin( std::function<void(plugin_manager::RPCPlugin&)> functor) OVERRIDE; - void SetVINCode(const std::string& vin_code) OVERRIDE; - private: /** * @brief Adds application to registered applications list and marks it as diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/hmi/vi_get_vehicle_data_response.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/hmi/vi_get_vehicle_data_response.cc index 75da07bc22..6a60cc968e 100644 --- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/hmi/vi_get_vehicle_data_response.cc +++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/hmi/vi_get_vehicle_data_response.cc @@ -79,12 +79,6 @@ void VIGetVehicleDataResponse::Run() { } else { event.set_smart_object(*message_); policy_handler_.OnVehicleDataUpdated(*message_); - if ((*message_).keyExists(strings::msg_params) && - (*message_)[strings::msg_params].keyExists(strings::vin)) { - const std::string vin = - (*message_)[strings::msg_params][strings::vin].asString(); - application_manager_.SetVINCode(vin); - } } event.raise(application_manager_.event_dispatcher()); diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 99024924a1..35cc8541f6 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -843,6 +843,11 @@ void ApplicationManagerImpl::ConnectToDevice(const std::string& device_mac) { void ApplicationManagerImpl::OnHMIStartedCooperation() { LOG4CXX_AUTO_TRACE(logger_); hmi_cooperating_ = true; + +#ifdef WEBSOCKET_SERVER_TRANSPORT_SUPPORT + connection_handler_->CreateWebEngineDevice(); +#endif // WEBSOCKET_SERVER_TRANSPORT_SUPPORT + MessageHelper::SendGetSystemInfoRequest(*this); std::shared_ptr<smart_objects::SmartObject> is_vr_ready( @@ -3216,7 +3221,6 @@ void ApplicationManagerImpl::UnregisterApplication( RemoveAppsWaitingForRegistration(handle); } } - const auto enabled_local_apps = policy_handler_->GetEnabledLocalApps(); if (helpers::in_range(enabled_local_apps, app_to_remove->policy_app_id())) { LOG4CXX_DEBUG(logger_, @@ -4378,11 +4382,6 @@ void ApplicationManagerImpl::ApplyFunctorForEachPlugin( plugin_manager_->ForEachPlugin(functor); } -void ApplicationManagerImpl::SetVINCode(const std::string& vin_code) { - LOG4CXX_AUTO_TRACE(logger_); - connection_handler_->CreateWebEngineDevice(vin_code); -} - event_engine::EventDispatcher& ApplicationManagerImpl::event_dispatcher() { return event_dispatcher_; } diff --git a/src/components/application_manager/test/application_manager_impl_test.cc b/src/components/application_manager/test/application_manager_impl_test.cc index b9bf3aaa99..f32f070f6f 100644 --- a/src/components/application_manager/test/application_manager_impl_test.cc +++ b/src/components/application_manager/test/application_manager_impl_test.cc @@ -2024,12 +2024,6 @@ TEST_F(ApplicationManagerImplTest, AddAndRemoveQueryAppDevice_SUCCESS) { EXPECT_FALSE(app_manager_impl_->IsAppsQueriedFrom(device_handle)); } -TEST_F(ApplicationManagerImplTest, SetVINCode_SUCCESS) { - const std::string vin_code = "VIN CODE"; - EXPECT_CALL(mock_connection_handler_, CreateWebEngineDevice(vin_code)); - app_manager_impl_->SetVINCode(vin_code); -} - } // namespace application_manager_test } // namespace components } // namespace test 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 bffd1188f8..858edbf093 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 @@ -606,10 +606,10 @@ class ConnectionHandlerImpl const transport_manager::ConnectionUID secondary_connection_handle) OVERRIDE; - void CreateWebEngineDevice(const std::string& vin_code) OVERRIDE; - const transport_manager::DeviceInfo& GetWebEngineDeviceInfo() const OVERRIDE; + void CreateWebEngineDevice() OVERRIDE; + private: /** * \brief Disconnect application. diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc index 4b50e189e6..ca62d085cc 100644 --- a/src/components/connection_handler/src/connection_handler_impl.cc +++ b/src/components/connection_handler/src/connection_handler_impl.cc @@ -866,15 +866,15 @@ void ConnectionHandlerImpl::OnSecondaryTransportEnded( } } -void ConnectionHandlerImpl::CreateWebEngineDevice(const std::string& vin_code) { - transport_manager_.CreateWebEngineDevice(vin_code); -} - const transport_manager::DeviceInfo& ConnectionHandlerImpl::GetWebEngineDeviceInfo() const { return transport_manager_.GetWebEngineDeviceInfo(); } +void ConnectionHandlerImpl::CreateWebEngineDevice() { + transport_manager_.CreateWebEngineDevice(); +} + const std::string ConnectionHandlerImpl::TransportTypeProfileStringFromConnHandle( transport_manager::ConnectionUID connection_handle) const { diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h index 6527cb960c..4e3905eb92 100644 --- a/src/components/include/application_manager/application_manager.h +++ b/src/components/include/application_manager/application_manager.h @@ -712,8 +712,6 @@ class ApplicationManager { virtual void ApplyFunctorForEachPlugin( std::function<void(plugin_manager::RPCPlugin&)> functor) = 0; - virtual void SetVINCode(const std::string& vin_code) = 0; - /* * @brief Converts connection string transport type representation * to HMI Common_TransportType diff --git a/src/components/include/connection_handler/connection_handler.h b/src/components/include/connection_handler/connection_handler.h index 4c3aa69ea7..e98a78f377 100644 --- a/src/components/include/connection_handler/connection_handler.h +++ b/src/components/include/connection_handler/connection_handler.h @@ -313,20 +313,18 @@ class ConnectionHandler { const transport_manager::ConnectionUID secondary_connection_handle) = 0; /** - * @brief Called when VIN code is received, creates - * WebSocketDevice for WebEngine and add it to the device list - * @param vin_code VIN code received from HMI - */ - virtual void CreateWebEngineDevice(const std::string& vin_code) = 0; - - /** * @brief GetWebEngineDeviceInfo * @return device info for WebEngine device */ - virtual const transport_manager::DeviceInfo& GetWebEngineDeviceInfo() const = 0; + /** + * @brief Called when HMI cooperation is started, + * creates WebSocketDevice for WebEngine + */ + virtual void CreateWebEngineDevice() = 0; + protected: /** * \brief Destructor diff --git a/src/components/include/test/connection_handler/mock_connection_handler.h b/src/components/include/test/connection_handler/mock_connection_handler.h index 9642621147..6acffea0ed 100644 --- a/src/components/include/test/connection_handler/mock_connection_handler.h +++ b/src/components/include/test/connection_handler/mock_connection_handler.h @@ -133,8 +133,7 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler { OnSecondaryTransportEnded, void(const transport_manager::ConnectionUID primary_connection_handle, const transport_manager::ConnectionUID secondary_connection_handle)); - - MOCK_METHOD1(CreateWebEngineDevice, void(const std::string& vin_code)); + MOCK_METHOD0(CreateWebEngineDevice, void()); MOCK_CONST_METHOD0(GetWebEngineDeviceInfo, transport_manager::DeviceInfo&()); }; diff --git a/src/components/include/test/transport_manager/mock_transport_manager.h b/src/components/include/test/transport_manager/mock_transport_manager.h index 5681bba875..470ffb096c 100644 --- a/src/components/include/test/transport_manager/mock_transport_manager.h +++ b/src/components/include/test/transport_manager/mock_transport_manager.h @@ -86,7 +86,7 @@ class MockTransportManager : public ::transport_manager::TransportManager, MOCK_METHOD1(SetTelemetryObserver, void(transport_manager::TMTelemetryObserver* observer)); - MOCK_METHOD1(CreateWebEngineDevice, void(const std::string& vin_code)); + MOCK_METHOD0(CreateWebEngineDevice, void()); MOCK_CONST_METHOD0(GetWebEngineDeviceInfo, transport_manager::DeviceInfo&()); }; diff --git a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h index d4ce0a39c8..f91f8ac0cd 100644 --- a/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h +++ b/src/components/include/test/transport_manager/transport_adapter/mock_transport_adapter.h @@ -112,6 +112,9 @@ class MockTransportAdapter transport_manager::transport_adapter::DeviceSptr( transport_manager::transport_adapter::DeviceSptr device)); + MOCK_CONST_METHOD1(GetStoredDeviceID, + std::string(const std::string& device_name)); + #ifdef TELEMETRY_MONITOR MOCK_METHOD0(GetTelemetryObserver, ::transport_manager::TMTelemetryObserver*()); diff --git a/src/components/include/transport_manager/transport_adapter/transport_adapter.h b/src/components/include/transport_manager/transport_adapter/transport_adapter.h index e9494b4ced..a6ee90d8ff 100644 --- a/src/components/include/transport_manager/transport_adapter/transport_adapter.h +++ b/src/components/include/transport_manager/transport_adapter/transport_adapter.h @@ -236,6 +236,15 @@ class TransportAdapter { virtual DeviceSptr AddDevice(DeviceSptr device) = 0; /** + * @brief Get stored device ID from last state + * @param device_name - name of the device, which id is required + * @return stored unique device id, or empty string if no stored device id + * present in last saved state + */ + virtual std::string GetStoredDeviceID( + const std::string& device_name) const = 0; + + /** * @brief RunAppOnDevice allows to run specific application on the certain *device. * diff --git a/src/components/include/transport_manager/transport_manager.h b/src/components/include/transport_manager/transport_manager.h index e5f79edfc5..4c3da6a523 100644 --- a/src/components/include/transport_manager/transport_manager.h +++ b/src/components/include/transport_manager/transport_manager.h @@ -217,11 +217,10 @@ class TransportManager { const TransportAction required_action) const = 0; /** - * @brief Called when VIN code is received, creates - * WebSocketDevice for WebEngine and add it to the device list - * @param vin_code VIN code received from HMI + * @brief Called when websocket server transport adapter is available. + * Creates WebSocketDevice for WebEngine and add it to the device list */ - virtual void CreateWebEngineDevice(const std::string& vin_code) = 0; + virtual void CreateWebEngineDevice() = 0; /** * @brief GetWebEngineDeviceInfo diff --git a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h index 99077b69f4..7281f06394 100644 --- a/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_adapter/transport_adapter_impl.h @@ -523,6 +523,14 @@ class TransportAdapterImpl : public TransportAdapter, virtual bool Restore(); /** + * @brief Get stored device ID form last state + * @param device_name - name of the device, which id is required + * @return stored unique device id, or empty string if no stored device id + * present in last saved state + */ + virtual std::string GetStoredDeviceID(const std::string& device_name) const; + + /** * @brief Returns true if \a device is to be connected automatically */ virtual bool ToBeAutoConnected(DeviceSptr device) const; diff --git a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h index 3cfe7c5dfe..3cc64511a1 100644 --- a/src/components/transport_manager/include/transport_manager/transport_manager_impl.h +++ b/src/components/transport_manager/include/transport_manager/transport_manager_impl.h @@ -259,7 +259,7 @@ class TransportManagerImpl int PerformActionOnClients( const TransportAction required_action) const OVERRIDE; - void CreateWebEngineDevice(const std::string& vin_code) OVERRIDE; + void CreateWebEngineDevice() OVERRIDE; const DeviceInfo& GetWebEngineDeviceInfo() const OVERRIDE; diff --git a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_secure_session.h b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_secure_session.h index 72c16ff85b..a3ead8e5a5 100644 --- a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_secure_session.h +++ b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_secure_session.h @@ -31,8 +31,8 @@ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_WEBSOCKET_SERVER_WEBSOCKET_SECURE_SESSION_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_WEBSOCKET_SERVER_WEBSOCKET_SECURE_SESSION_H_ -#include "transport_manager/websocket_server/websocket_session.h" #include <memory> +#include "transport_manager/websocket_server/websocket_session.h" namespace transport_manager { namespace transport_adapter { diff --git a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h index 28e4436605..ce2844fa45 100644 --- a/src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h +++ b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h @@ -36,6 +36,7 @@ #ifndef SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_WEBSOCKET_SERVER_WEBSOCKET_SERVER_TRANSPORT_ADAPTER_H_ #define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_WEBSOCKET_SERVER_WEBSOCKET_SERVER_TRANSPORT_ADAPTER_H_ +#include <string> #include "transport_manager/transport_adapter/transport_adapter_impl.h" namespace transport_manager { @@ -86,6 +87,19 @@ class WebSocketServerTransportAdapter : public TransportAdapterImpl { */ virtual TransportConfig GetTransportConfiguration() const OVERRIDE; + /** + * @brief Store adapter state in last state + */ + void Store() const OVERRIDE; + + /** + * @brief Restore adapter state from last state + * @return True on success false otherwise + */ + bool Restore() OVERRIDE; + + std::string GetStoredDeviceID(const std::string& device_name) const OVERRIDE; + protected: /** * @brief Return type of device. diff --git a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc index 56d809a05f..1fa5dd5f29 100644 --- a/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc +++ b/src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc @@ -1160,6 +1160,13 @@ bool TransportAdapterImpl::Restore() { return true; } +std::string TransportAdapterImpl::GetStoredDeviceID( + const std::string& device_name) const { + LOG4CXX_AUTO_TRACE(logger_); + UNUSED(device_name); + return std::string(); +} + bool TransportAdapterImpl::ToBeAutoConnected(DeviceSptr device) const { return false; } diff --git a/src/components/transport_manager/src/transport_manager_default.cc b/src/components/transport_manager/src/transport_manager_default.cc index 0a8289253f..517ec2a611 100644 --- a/src/components/transport_manager/src/transport_manager_default.cc +++ b/src/components/transport_manager/src/transport_manager_default.cc @@ -146,6 +146,7 @@ int TransportManagerDefault::Init(resumption::LastState& last_state) { #ifdef WEBSOCKET_SERVER_TRANSPORT_SUPPORT auto ta_websocket = new transport_adapter::WebSocketServerTransportAdapter( last_state, get_settings()); + #ifdef TELEMETRY_MONITOR if (metric_observer_) { ta_websocket->SetTelemetryObserver(metric_observer_); diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc index 66a892a322..1dde5f476a 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -42,6 +42,7 @@ #include <set> #include <sstream> +#include "utils/gen_hash.h" #include "utils/logger.h" #include "utils/macro.h" @@ -652,7 +653,7 @@ int TransportManagerImpl::PerformActionOnClients( return E_SUCCESS; } -void TransportManagerImpl::CreateWebEngineDevice(const std::string& vin_code) { +void TransportManagerImpl::CreateWebEngineDevice() { #ifndef WEBSOCKET_SERVER_TRANSPORT_SUPPORT LOG4CXX_TRACE(logger_, "Web engine support is disabled. Exiting function"); #else @@ -667,17 +668,27 @@ void TransportManagerImpl::CreateWebEngineDevice(const std::string& vin_code) { if (transport_adapters_.end() == web_socket_ta) { LOG4CXX_WARN(logger_, - "WebSocketTransportAdapter not found." - "Not able to create WebEngineDevice"); + "WebSocketServerTransportAdapter not found." + "Impossible to create WebEngineDevice"); return; } + std::string unique_device_id = + (*web_socket_ta) + ->GetStoredDeviceID(webengine_constants::kWebEngineDeviceName); + + if (unique_device_id.empty()) { + srand(time(0)); + const size_t device_id_length = 64u; + unique_device_id = utils::gen_hash(device_id_length); + } + DeviceHandle device_handle = converter_.UidToHandle( - vin_code, webengine_constants::kWebEngineConnectionType); + unique_device_id, webengine_constants::kWebEngineConnectionType); web_engine_device_info_ = DeviceInfo(device_handle, - vin_code, + unique_device_id, webengine_constants::kWebEngineDeviceName, webengine_constants::kWebEngineConnectionType); @@ -690,8 +701,7 @@ void TransportManagerImpl::CreateWebEngineDevice(const std::string& vin_code) { device_list_.push_back( std::make_pair(*web_socket_ta, web_engine_device_info_)); (*web_socket_ta)->AddDevice(ws_device); - -#endif +#endif // WEBSOCKET_SERVER_TRANSPORT_SUPPORT } const DeviceInfo& TransportManagerImpl::GetWebEngineDeviceInfo() const { @@ -900,9 +910,9 @@ void TransportManagerImpl::TryDeviceSwitch( IOSBTAdapterFinder()); if (transport_adapters_.end() == ios_bt_adapter) { - LOG4CXX_WARN( - logger_, - "There is no iAP2 Bluetooth adapter found. Switching is not possible."); + LOG4CXX_WARN(logger_, + "There is no iAP2 Bluetooth adapter found. Switching is not " + "possible."); return; } diff --git a/src/components/transport_manager/src/websocket_server/websocket_device.cc b/src/components/transport_manager/src/websocket_server/websocket_device.cc index 1a5db29d36..502daf349b 100644 --- a/src/components/transport_manager/src/websocket_server/websocket_device.cc +++ b/src/components/transport_manager/src/websocket_server/websocket_device.cc @@ -71,7 +71,7 @@ bool WebSocketDevice::IsSameAs(const Device* other) const { } ApplicationList WebSocketDevice::GetApplicationList() const { - return ApplicationList{0}; + return app_list_; } const std::string& WebSocketDevice::GetHost() const { diff --git a/src/components/transport_manager/src/websocket_server/websocket_server_transport_adapter.cc b/src/components/transport_manager/src/websocket_server/websocket_server_transport_adapter.cc index 2983d1db9a..d74cf008a3 100644 --- a/src/components/transport_manager/src/websocket_server/websocket_server_transport_adapter.cc +++ b/src/components/transport_manager/src/websocket_server/websocket_server_transport_adapter.cc @@ -70,7 +70,8 @@ void WebSocketServerTransportAdapter::TransportConfigUpdated( TransportAdapterImpl::TransportConfigUpdated(new_config); } -TransportConfig WebSocketServerTransportAdapter::GetTransportConfiguration() const { +TransportConfig WebSocketServerTransportAdapter::GetTransportConfiguration() + const { LOG4CXX_AUTO_TRACE(logger_); return transport_config_; } @@ -82,6 +83,7 @@ DeviceType WebSocketServerTransportAdapter::GetDeviceType() const { DeviceSptr WebSocketServerTransportAdapter::AddDevice(DeviceSptr device) { LOG4CXX_AUTO_TRACE(logger_); webengine_device_ = device; + Store(); return TransportAdapterImpl::AddDevice(webengine_device_); } @@ -93,5 +95,42 @@ TransportAdapter::Error WebSocketServerTransportAdapter::Init() { return TransportAdapterImpl::Init(); } +void WebSocketServerTransportAdapter::Store() const { + LOG4CXX_AUTO_TRACE(logger_); + if (webengine_device_) { + Json::Value& dictionary = last_state().get_dictionary(); + if (dictionary["TransportManager"].isMember("WebsocketServerAdapter")) { + LOG4CXX_DEBUG( + logger_, "WebsocketServerAdapter already exists. Storing is skipped"); + return; + } + + Json::Value device_dictionary; + device_dictionary["unique_id"] = webengine_device_->unique_device_id(); + + Json::Value ws_adapter_dictionary; + ws_adapter_dictionary["device"] = device_dictionary; + dictionary["TransportManager"]["WebsocketServerAdapter"] = + ws_adapter_dictionary; + } +} + +bool WebSocketServerTransportAdapter::Restore() { + LOG4CXX_AUTO_TRACE(logger_); + return true; +} + +std::string WebSocketServerTransportAdapter::GetStoredDeviceID( + const std::string& device_name) const { + LOG4CXX_AUTO_TRACE(logger_); + if (webengine_constants::kWebEngineDeviceName == device_name) { + const Json::Value& dictionary = last_state().get_dictionary(); + const Json::Value ws_adapter_dictionary = + dictionary["TransportManager"]["WebsocketServerAdapter"]; + return ws_adapter_dictionary["device"]["unique_id"].asString(); + } + return std::string(); +} + } // namespace transport_adapter } // namespace transport_manager |