diff options
author | Andriy Byzhynar <abyzhynar@luxoft.com> | 2020-02-20 16:58:53 +0200 |
---|---|---|
committer | Andriy Byzhynar (GitHub) <AByzhynar@luxoft.com> | 2020-02-25 23:00:17 +0200 |
commit | dbe6e8c06ed4d22c5a761cfa85a868a9b3c460de (patch) | |
tree | 3cfed3ff98176d476d8e6196c2ce390fa79f56cb | |
parent | 2cb1ce0d705d2bc7f2ccf18342559651b5712d40 (diff) | |
download | sdl_core-feature/new_webengine_device_id_generation_V2_rebased.tar.gz |
Rework WebEngine device ID generationfeature/new_webengine_device_id_generation_V2_rebased
17 files changed, 115 insertions, 59 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 fe5e6cc08a..b3d881c1bc 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( @@ -3222,7 +3227,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_, @@ -4384,11 +4388,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/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_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_server_transport_adapter.h b/src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h index 28e4436605..b519707f23 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,24 @@ 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; + + /** + * @brief Get stored device ID + * @return stored unique device id, or empty string if no stored device id + * present in last saved state + */ + std::string GetStoredDeviceID() const; + protected: /** * @brief Return type of device. @@ -107,6 +126,7 @@ class WebSocketServerTransportAdapter : public TransportAdapterImpl { */ TransportConfig transport_config_; DeviceSptr webengine_device_; + std::string webengine_device_id_; }; } // namespace transport_adapter 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..612b9f1f39 100644 --- a/src/components/transport_manager/src/transport_manager_impl.cc +++ b/src/components/transport_manager/src/transport_manager_impl.cc @@ -56,6 +56,7 @@ #include "transport_manager/transport_manager_listener_empty.h" #ifdef WEBSOCKET_SERVER_TRANSPORT_SUPPORT #include "transport_manager/websocket_server/websocket_device.h" +#include "transport_manager/websocket_server/websocket_server_transport_adapter.h" #endif #include "utils/timer_task_impl.h" @@ -652,12 +653,12 @@ 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 LOG4CXX_AUTO_TRACE(logger_); - auto web_socket_ta = std::find_if( + auto web_socket_ta_iterator = std::find_if( transport_adapters_.begin(), transport_adapters_.end(), [](const TransportAdapter* ta) { @@ -665,19 +666,33 @@ void TransportManagerImpl::CreateWebEngineDevice(const std::string& vin_code) { ta->GetDeviceType(); }); - if (transport_adapters_.end() == web_socket_ta) { + if (transport_adapters_.end() == web_socket_ta_iterator) { LOG4CXX_WARN(logger_, - "WebSocketTransportAdapter not found." - "Not able to create WebEngineDevice"); + "WebSocketServerTransportAdapter not found." + "Impossible to create WebEngineDevice"); return; } + auto web_socket_ta = + dynamic_cast<transport_adapter::WebSocketServerTransportAdapter*>( + *web_socket_ta_iterator); + + if (!web_socket_ta) { + LOG4CXX_ERROR(logger_, + "Unable to cast from Transport Adapter to " + "WebSocketServerTransportAdapter." + "Impossible to create WebEngineDevice"); + return; + } + + std::string unique_device_id = web_socket_ta->GetStoredDeviceID(); + 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); @@ -688,10 +703,9 @@ void TransportManagerImpl::CreateWebEngineDevice(const std::string& vin_code) { RaiseEvent(&TransportManagerListener::OnDeviceAdded, web_engine_device_info_); device_list_.push_back( - std::make_pair(*web_socket_ta, web_engine_device_info_)); - (*web_socket_ta)->AddDevice(ws_device); - -#endif + std::make_pair(web_socket_ta, web_engine_device_info_)); + web_socket_ta->AddDevice(ws_device); +#endif // WEBSOCKET_SERVER_TRANSPORT_SUPPORT } const DeviceInfo& TransportManagerImpl::GetWebEngineDeviceInfo() const { @@ -900,9 +914,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 2272803786..fa26a07d46 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 @@ -41,6 +41,7 @@ #include <sstream> #include "transport_manager/websocket_server/websocket_listener.h" +#include "utils/gen_hash.h" #include "utils/logger.h" #include "utils/threads/thread_delegate.h" @@ -83,6 +84,7 @@ DeviceType WebSocketServerTransportAdapter::GetDeviceType() const { DeviceSptr WebSocketServerTransportAdapter::AddDevice(DeviceSptr device) { LOG4CXX_AUTO_TRACE(logger_); webengine_device_ = device; + Store(); return TransportAdapterImpl::AddDevice(webengine_device_); } @@ -94,5 +96,45 @@ 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_); + const Json::Value& dictionary = last_state().get_dictionary(); + const Json::Value ws_adapter_dictionary = + dictionary["TransportManager"]["WebsocketServerAdapter"]; + webengine_device_id_ = + ws_adapter_dictionary["device"]["unique_id"].asString(); + if (webengine_device_id_.empty()) { + srand(time(0)); + const size_t device_id_length = 64u; + webengine_device_id_ = utils::gen_hash(device_id_length); + } + return true; +} + +std::string WebSocketServerTransportAdapter::GetStoredDeviceID() const { + LOG4CXX_AUTO_TRACE(logger_); + return webengine_device_id_; +} + } // namespace transport_adapter } // namespace transport_manager |