diff options
author | Yurii Postolov <32772773+Ypostolov@users.noreply.github.com> | 2020-01-22 16:34:54 +0200 |
---|---|---|
committer | Collin <iCollin@users.noreply.github.com> | 2020-01-22 09:34:54 -0500 |
commit | 001e7fcf5c4352a91374030913083f1704a04492 (patch) | |
tree | 0c3171d6095cdb7cae50ed1ef7cc1fe7452425c5 | |
parent | 8988054cb8408aa4b62bd5968cec3c823f61de62 (diff) | |
download | sdl_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>
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) { |