summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndriy Byzhynar <abyzhynar@luxoft.com>2020-02-20 16:58:53 +0200
committerAndriy Byzhynar (GitHub) <AByzhynar@luxoft.com>2020-02-25 23:00:17 +0200
commitdbe6e8c06ed4d22c5a761cfa85a868a9b3c460de (patch)
tree3cfed3ff98176d476d8e6196c2ce390fa79f56cb
parent2cb1ce0d705d2bc7f2ccf18342559651b5712d40 (diff)
downloadsdl_core-feature/new_webengine_device_id_generation_V2_rebased.tar.gz
Rework WebEngine device ID generationfeature/new_webengine_device_id_generation_V2_rebased
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h2
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/hmi/vi_get_vehicle_data_response.cc6
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc11
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc6
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h4
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc8
-rw-r--r--src/components/include/application_manager/application_manager.h2
-rw-r--r--src/components/include/connection_handler/connection_handler.h14
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler.h3
-rw-r--r--src/components/include/test/transport_manager/mock_transport_manager.h2
-rw-r--r--src/components/include/transport_manager/transport_manager.h7
-rw-r--r--src/components/transport_manager/include/transport_manager/transport_manager_impl.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/websocket_server/websocket_server_transport_adapter.h20
-rw-r--r--src/components/transport_manager/src/transport_manager_default.cc1
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc42
-rw-r--r--src/components/transport_manager/src/websocket_server/websocket_device.cc2
-rw-r--r--src/components/transport_manager/src/websocket_server/websocket_server_transport_adapter.cc42
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