summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYurii Postolov <32772773+Ypostolov@users.noreply.github.com>2020-01-22 16:34:54 +0200
committerCollin <iCollin@users.noreply.github.com>2020-01-22 09:34:54 -0500
commit001e7fcf5c4352a91374030913083f1704a04492 (patch)
tree0c3171d6095cdb7cae50ed1ef7cc1fe7452425c5
parent8988054cb8408aa4b62bd5968cec3c823f61de62 (diff)
downloadsdl_core-001e7fcf5c4352a91374030913083f1704a04492.tar.gz
Fix UpdateDeviceList content (#2249)
* fix UpdateDeviceList content fixed UpdateDeviceList contetnt for case, when device connected ower tcp protocol was unexpectedly disconnected and device has only one connection. * answering review * Fix redundant UpdateDeviceList issue Co-authored-by: Mykola Korniichuk (GitHub) <42380041+mkorniichuk@users.noreply.github.com>
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc22
-rw-r--r--src/components/application_manager/test/application_manager_impl_mock_hmi_test.cc5
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc4
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc4
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc40
5 files changed, 27 insertions, 48 deletions
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index c02bedc80c..9389b0bcab 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -1600,28 +1600,6 @@ void ApplicationManagerImpl::OnDeviceSwitchingStart(
policy_handler_->OnDeviceSwitching(device_from.mac_address(),
device_to.mac_address());
-
- connection_handler::DeviceMap device_list;
- device_list.insert(std::make_pair(device_to.device_handle(), device_to));
-
- smart_objects::SmartObjectSPtr msg_params =
- MessageHelper::CreateDeviceListSO(device_list, GetPolicyHandler(), *this);
- if (!msg_params) {
- LOG4CXX_ERROR(logger_, "Can't create UpdateDeviceList notification");
- return;
- }
-
- auto update_list = std::make_shared<smart_objects::SmartObject>();
- smart_objects::SmartObject& so_to_send = *update_list;
- so_to_send[jhs::S_PARAMS][jhs::S_FUNCTION_ID] =
- hmi_apis::FunctionID::BasicCommunication_UpdateDeviceList;
- so_to_send[jhs::S_PARAMS][jhs::S_MESSAGE_TYPE] =
- hmi_apis::messageType::request;
- so_to_send[jhs::S_PARAMS][jhs::S_PROTOCOL_VERSION] = 2;
- so_to_send[jhs::S_PARAMS][jhs::S_PROTOCOL_TYPE] = 1;
- so_to_send[jhs::S_PARAMS][jhs::S_CORRELATION_ID] = GetNextHMICorrelationID();
- so_to_send[jhs::S_MSG_PARAMS] = *msg_params;
- rpc_service_->ManageHMICommand(update_list);
}
void ApplicationManagerImpl::OnDeviceSwitchingFinish(
diff --git a/src/components/application_manager/test/application_manager_impl_mock_hmi_test.cc b/src/components/application_manager/test/application_manager_impl_mock_hmi_test.cc
index 939ef98620..f8dddcfe27 100644
--- a/src/components/application_manager/test/application_manager_impl_mock_hmi_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_mock_hmi_test.cc
@@ -191,11 +191,6 @@ TEST_F(ApplicationManagerImplMockHmiTest,
MockCommandFactory mock_command_factory;
- // // Skip sending notification on device switching as it is not the goal
- // here
- EXPECT_CALL(mock_command_factory, CreateCommand(_, _))
- .WillOnce(Return(std::shared_ptr<commands::Command>()));
-
plugin_manager::MockRPCPlugin mock_rpc_plugin;
utils::Optional<plugin_manager::RPCPlugin> mock_rpc_plugin_opt =
mock_rpc_plugin;
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 a70015c9ed..82ae42e88a 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -1054,8 +1054,6 @@ TEST_F(ApplicationManagerImplTest,
nonswitching_device_id,
"USB");
- EXPECT_CALL(*mock_message_helper_, CreateDeviceListSO(_, _, _))
- .WillOnce(Return(smart_objects::SmartObjectSPtr()));
app_manager_impl_->OnDeviceSwitchingStart(switching_device,
non_switching_device);
EXPECT_TRUE(
@@ -1125,8 +1123,6 @@ TEST_F(ApplicationManagerImplTest,
nonswitching_device_id,
"USB");
- EXPECT_CALL(*mock_message_helper_, CreateDeviceListSO(_, _, _))
- .WillOnce(Return(smart_objects::SmartObjectSPtr()));
app_manager_impl_->OnDeviceSwitchingStart(switching_device,
non_switching_device);
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index 1bb1ecbde3..4a51d00558 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -169,7 +169,6 @@ void ConnectionHandlerImpl::OnDeviceRemoved(
// Device has been removed. Perform all needed actions.
// 1. Delete all the connections and sessions of this device
// 2. Delete device from a list
- // 3. Let observer know that device has been deleted.
std::vector<ConnectionHandle> connections_to_remove;
{
@@ -190,11 +189,10 @@ void ConnectionHandlerImpl::OnDeviceRemoved(
}
sync_primitives::AutoReadLock read_lock(connection_handler_observer_lock_);
+ device_list_.erase(device_info.device_handle());
if (connection_handler_observer_) {
connection_handler_observer_->RemoveDevice(device_info.device_handle());
- connection_handler_observer_->OnDeviceListUpdated(device_list_);
}
- device_list_.erase(device_info.device_handle());
}
void ConnectionHandlerImpl::OnDeviceSwitchingFinish(
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 f0bfabf2e4..c35520ff7b 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
@@ -948,23 +948,35 @@ void TransportAdapterImpl::RemoveFinalizedConnection(
const DeviceUID& device_handle, const ApplicationHandle& app_handle) {
const DeviceUID device_uid = device_handle;
LOG4CXX_AUTO_TRACE(logger_);
- sync_primitives::AutoWriteLock lock(connections_lock_);
- ConnectionMap::iterator it_conn =
- connections_.find(std::make_pair(device_uid, app_handle));
- if (it_conn == connections_.end()) {
- LOG4CXX_WARN(logger_,
- "Device_id: " << &device_uid << ", app_handle: " << &app_handle
- << " connection not found");
- return;
+ {
+ sync_primitives::AutoWriteLock lock(connections_lock_);
+ auto it_conn = connections_.find(std::make_pair(device_uid, app_handle));
+ if (connections_.end() == it_conn) {
+ LOG4CXX_WARN(logger_,
+ "Device_id: " << &device_uid << ", app_handle: "
+ << &app_handle << " connection not found");
+ return;
+ }
+ const ConnectionInfo& info = it_conn->second;
+ if (ConnectionInfo::FINALISING != info.state) {
+ LOG4CXX_WARN(logger_,
+ "Device_id: " << &device_uid << ", app_handle: "
+ << &app_handle << " connection not finalized");
+ return;
+ }
+ connections_.erase(it_conn);
}
- const ConnectionInfo& info = it_conn->second;
- if (info.state != ConnectionInfo::FINALISING) {
- LOG4CXX_WARN(logger_,
- "Device_id: " << &device_uid << ", app_handle: " << &app_handle
- << " connection not finalized");
+
+ DeviceSptr device = FindDevice(device_handle);
+ if (!device) {
+ LOG4CXX_WARN(logger_, "Device: uid " << &device_uid << " not found");
return;
}
- connections_.erase(it_conn);
+
+ if (ToBeAutoDisconnected(device) &&
+ IsSingleApplication(device_handle, app_handle)) {
+ RemoveDevice(device_uid);
+ }
}
void TransportAdapterImpl::AddListener(TransportAdapterListener* listener) {