summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJackLivio <jack@livio.io>2020-11-05 11:59:29 -0500
committerJackLivio <jack@livio.io>2020-11-05 11:59:29 -0500
commit7af66962b29992166de8b2162a82db6aa3ebce80 (patch)
tree2a939d5f8f58a4ec7928c9314a16c9ddce5e74ca
parent9f61819139ad4944b73257893936d1328eed15b0 (diff)
parentf270af493ab11d2491da67390f1614ba4e24ea4e (diff)
downloadsdl_core-7af66962b29992166de8b2162a82db6aa3ebce80.tar.gz
Merge remote-tracking branch 'origin/master' into develop
-rw-r--r--README.md2
-rw-r--r--cppcheck.xml0
-rwxr-xr-xsrc/appMain/hmi_capabilities.json4
-rw-r--r--src/appMain/sdl_preloaded_pt.json19
-rw-r--r--src/appMain/smartDeviceLink.ini3
-rw-r--r--src/components/application_manager/include/application_manager/application.h8
-rw-r--r--src/components/application_manager/include/application_manager/application_impl.h3
-rw-r--r--src/components/application_manager/include/application_manager/application_manager_impl.h52
-rw-r--r--src/components/application_manager/include/application_manager/hmi_capabilities_impl.h2
-rw-r--r--src/components/application_manager/include/application_manager/message_helper.h114
-rw-r--r--src/components/application_manager/include/application_manager/policies/policy_handler.h26
-rw-r--r--src/components/application_manager/include/application_manager/postponed_activation_controller.h78
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl.h5
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h6
-rw-r--r--src/components/application_manager/include/application_manager/resumption/resumption_data_processor_impl.h45
-rw-r--r--src/components/application_manager/include/application_manager/state_controller_impl.h3
-rw-r--r--src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc11
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc9
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/release_interior_vehicle_data_module_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc9
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_command_factory.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc35
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc13
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc69
-rw-r--r--src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/release_interior_vehicle_data_module_request_test.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_audio_start_stream_request.h2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_start_stream_request.h2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_pending_resumption_handler.h63
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/get_system_info_response.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc63
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_set_video_config_request.cc26
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc63
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_app_permission_consent_notification.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_exit_application_notification.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_info_changed_notification.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc48
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_get_user_friendly_message_request.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc20
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/alert_request.cc9
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc15
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_command_request.cc13
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_way_points_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc56
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/put_file_request.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc84
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/send_location_request.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_global_properties_request.cc24
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_media_clock_timer_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_app_menu_request.cc10
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/slider_request.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subtle_alert_request.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc188
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unregister_app_interface_request.cc5
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_request.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_pending_resumption_handler.cc204
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/get_system_info_response_test.cc17
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc58
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_set_video_config_request_test.cc27
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc4
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc30
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_get_user_friendly_message_request_test.cc10
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc25
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc2
-rw-r--r--src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/unregister_app_interface_request_test.cc11
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h4
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc3
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc14
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_data_item_schema.cc30
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_hmi_command_factory.cc8
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_mobile_command_factory.cc7
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc14
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc38
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_data_item_schema_test.cc1
-rw-r--r--src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_info_pending_resumption_test.cc66
-rw-r--r--src/components/application_manager/src/app_launch/app_launch_data_db.cc3
-rw-r--r--src/components/application_manager/src/app_launch/apps_launcher.cc3
-rw-r--r--src/components/application_manager/src/app_launch/device_apps_launcher.cc9
-rw-r--r--src/components/application_manager/src/app_service_manager.cc8
-rw-r--r--src/components/application_manager/src/application_impl.cc57
-rw-r--r--src/components/application_manager/src/application_manager_impl.cc320
-rw-r--r--src/components/application_manager/src/application_state.cc6
-rw-r--r--src/components/application_manager/src/commands/command_request_impl.cc3
-rw-r--r--src/components/application_manager/src/event_engine/event_dispatcher_impl.cc2
-rw-r--r--src/components/application_manager/src/hmi_capabilities_impl.cc620
-rw-r--r--src/components/application_manager/src/hmi_state.cc18
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc163
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc758
-rw-r--r--src/components/application_manager/src/postponed_activation_controller.cc66
-rw-r--r--src/components/application_manager/src/request_controller.cc2
-rw-r--r--src/components/application_manager/src/request_info.cc2
-rw-r--r--src/components/application_manager/src/request_tracker.cc3
-rw-r--r--src/components/application_manager/src/resumption/resume_ctrl_impl.cc35
-rw-r--r--src/components/application_manager/src/resumption/resumption_data.cc2
-rw-r--r--src/components/application_manager/src/resumption/resumption_data_db.cc6
-rw-r--r--src/components/application_manager/src/resumption/resumption_data_processor_impl.cc149
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc20
-rw-r--r--src/components/application_manager/src/rpc_service_impl.cc4
-rw-r--r--src/components/application_manager/src/state_controller_impl.cc45
-rw-r--r--src/components/application_manager/test/application_impl_test.cc26
-rw-r--r--src/components/application_manager/test/application_manager_impl_test.cc89
-rw-r--r--src/components/application_manager/test/hmi_capabilities_old_apt.json2
-rw-r--r--src/components/application_manager/test/hmi_capabilities_test.cc167
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_application.h5
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_message_helper.h20
-rw-r--r--src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h4
-rw-r--r--src/components/application_manager/test/message_helper/message_helper_test.cc90
-rw-r--r--src/components/application_manager/test/mock_message_helper.cc57
-rw-r--r--src/components/application_manager/test/policy_handler_test.cc76
-rw-r--r--src/components/application_manager/test/resumption/resume_ctrl_test.cc22
-rw-r--r--src/components/application_manager/test/resumption/resumption_data_test.cc16
-rw-r--r--src/components/application_manager/test/state_controller/state_controller_test.cc6
-rw-r--r--src/components/config_profile/src/ini_file.cc14
-rw-r--r--src/components/config_profile/src/profile.cc13
-rw-r--r--src/components/connection_handler/include/connection_handler/connection.h12
-rw-r--r--src/components/connection_handler/include/connection_handler/connection_handler_impl.h15
-rw-r--r--src/components/connection_handler/src/connection.cc16
-rw-r--r--src/components/connection_handler/src/connection_handler_impl.cc101
-rw-r--r--src/components/connection_handler/src/device.cc5
-rw-r--r--src/components/connection_handler/src/heartbeat_monitor.cc5
-rw-r--r--src/components/connection_handler/test/connection_handler_impl_test.cc75
-rw-r--r--src/components/formatters/src/CFormatterJsonBase.cc2
-rw-r--r--src/components/formatters/test/include/formatters/SmartFactoryTestHelper.h4
-rw-r--r--src/components/formatters/test/src/SmartFactoryTestHelper.cc27
-rw-r--r--src/components/formatters/test/src/create_smartSchema.cc13
-rw-r--r--src/components/formatters/test/src/meta_formatter_test_helper.cc2
-rw-r--r--src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h33
-rw-r--r--src/components/hmi_message_handler/src/mb_controller.cc253
-rw-r--r--src/components/hmi_message_handler/src/messagebroker_adapter.cc4
-rw-r--r--src/components/hmi_message_handler/src/websocket_session.cc8
-rw-r--r--src/components/include/application_manager/application_manager.h41
-rw-r--r--src/components/include/application_manager/state_controller.h5
-rw-r--r--src/components/include/connection_handler/connection_handler.h11
-rw-r--r--src/components/include/media_manager/media_manager.h8
-rw-r--r--src/components/include/protocol/rpc_type.h1
-rw-r--r--src/components/include/protocol/service_type.h1
-rw-r--r--src/components/include/protocol_handler/protocol_handler.h2
-rw-r--r--src/components/include/protocol_handler/session_observer.h7
-rw-r--r--src/components/include/test/application_manager/mock_application_manager.h22
-rw-r--r--src/components/include/test/application_manager/mock_state_controller.h2
-rw-r--r--src/components/include/test/connection_handler/mock_connection_handler.h5
-rw-r--r--src/components/include/test/media_manager/mock_media_manager.h1
-rw-r--r--src/components/include/test/protocol_handler/mock_protocol_handler.h3
-rw-r--r--src/components/include/test/protocol_handler/mock_session_observer.h1
-rw-r--r--src/components/media_manager/include/media_manager/media_manager_impl.h10
-rw-r--r--src/components/media_manager/include/media_manager/streamer_adapter.h2
-rw-r--r--src/components/media_manager/src/audio/a2dp_source_player_adapter.cc5
-rw-r--r--src/components/media_manager/src/media_manager_impl.cc56
-rw-r--r--src/components/media_manager/src/pipe_streamer_adapter.cc5
-rw-r--r--src/components/media_manager/src/streamer_adapter.cc2
-rw-r--r--src/components/media_manager/test/media_manager_impl_test.cc8
-rw-r--r--src/components/policy/policy_external/include/policy/policy_helper.h16
-rw-r--r--src/components/policy/policy_external/include/policy/policy_table/types.h7
-rw-r--r--src/components/policy/policy_external/src/cache_manager.cc33
-rw-r--r--src/components/policy/policy_external/src/policy_helper.cc50
-rw-r--r--src/components/policy/policy_external/src/policy_manager_impl.cc46
-rw-r--r--src/components/policy/policy_external/src/policy_table/types.cc74
-rw-r--r--src/components/policy/policy_external/src/policy_table/validation.cc6
-rw-r--r--src/components/policy/policy_external/src/sql_pt_ext_representation.cc1
-rw-r--r--src/components/policy/policy_external/src/sql_pt_queries.cc4
-rw-r--r--src/components/policy/policy_external/src/sql_pt_representation.cc62
-rw-r--r--src/components/policy/policy_external/test/sql_pt_representation_test.cc1
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_helper.h16
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_manager_impl.h2
-rw-r--r--src/components/policy/policy_regular/include/policy/policy_table/types.h7
-rw-r--r--src/components/policy/policy_regular/src/cache_manager.cc20
-rw-r--r--src/components/policy/policy_regular/src/policy_helper.cc53
-rw-r--r--src/components/policy/policy_regular/src/policy_manager_impl.cc11
-rw-r--r--src/components/policy/policy_regular/src/policy_table/types.cc73
-rw-r--r--src/components/policy/policy_regular/src/policy_table/validation.cc5
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_queries.cc4
-rw-r--r--src/components/policy/policy_regular/src/sql_pt_representation.cc62
-rw-r--r--src/components/policy/policy_regular/test/sql_pt_representation_test.cc1
-rw-r--r--src/components/policy/policy_regular/test/vehicle_data_item_type_test.cc13
-rw-r--r--src/components/protocol/src/rpc_type.cc5
-rw-r--r--src/components/protocol/src/service_type.cc5
-rw-r--r--src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h4
-rw-r--r--src/components/protocol_handler/src/incoming_data_handler.cc2
-rw-r--r--src/components/protocol_handler/src/protocol_handler_impl.cc60
-rw-r--r--src/components/protocol_handler/src/protocol_packet.cc11
-rw-r--r--src/components/protocol_handler/src/protocol_payload.cc3
-rw-r--r--src/components/protocol_handler/test/protocol_handler_tm_test.cc52
-rw-r--r--src/components/resumption/src/last_state_impl.cc5
-rw-r--r--src/components/rpc_base/include/rpc_base/rpc_base_json_inl.h2
-rw-r--r--src/components/security_manager/include/security_manager/crypto_manager_settings_impl.h1
-rw-r--r--src/components/security_manager/src/crypto_manager_impl.cc22
-rw-r--r--src/components/security_manager/src/security_manager_impl.cc5
-rw-r--r--src/components/security_manager/test/security_query_matcher.cc14
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc2
-rw-r--r--src/components/smart_objects/test/SmartObjectConvertionTime_test.cc590
-rw-r--r--src/components/telemetry_monitor/src/protocol_handler_observer.cc1
-rw-r--r--src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h7
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h2
-rw-r--r--src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h8
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_device.cc1
-rw-r--r--src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc6
-rw-r--r--src/components/transport_manager/src/cloud/cloud_websocket_connection_factory.cc1
-rw-r--r--src/components/transport_manager/src/cloud/websocket_client_connection.cc12
-rw-r--r--src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc10
-rw-r--r--src/components/transport_manager/src/tcp/tcp_client_listener.cc20
-rw-r--r--src/components/transport_manager/src/tcp/tcp_connection_factory.cc5
-rw-r--r--src/components/transport_manager/src/tcp/tcp_device.cc6
-rw-r--r--src/components/transport_manager/src/transport_adapter/transport_adapter_impl.cc48
-rw-r--r--src/components/transport_manager/src/transport_manager_impl.cc19
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_connection.cc5
-rw-r--r--src/components/transport_manager/src/usb/libusb/usb_handler.cc37
-rw-r--r--src/components/transport_manager/src/usb/qnx/usb_handler.cc5
-rw-r--r--src/components/transport_manager/src/usb/usb_device_scanner.cc2
-rw-r--r--src/components/transport_manager/test/include/transport_manager/raw_message_matcher.h3
-rw-r--r--src/components/transport_manager/test/network_interface_listener_test.cc14
-rw-r--r--src/components/transport_manager/test/raw_message_matcher.cc1
-rw-r--r--src/components/transport_manager/test/websocket_client_connection_test.cc2
-rw-r--r--src/components/transport_manager/test/websocket_sample_client/websocket_sample_client.cc4
-rw-r--r--src/components/utils/src/date_time.cc13
-rw-r--r--src/components/utils/src/file_system.cc29
-rw-r--r--src/components/utils/src/threads/thread_validator.cc11
m---------tools/rpc_spec0
225 files changed, 3302 insertions, 3896 deletions
diff --git a/README.md b/README.md
index a7e64aa783..0046a0f679 100644
--- a/README.md
+++ b/README.md
@@ -13,7 +13,7 @@ SmartDeviceLink (SDL) is a standard set of protocols and messages that connect a
## SDL Core
-The Core component of SDL runs on a vehicle's computing system (head unit). Core’s primary responsibility is to route messages between connected smartphone applications and the vehicle HMI. It can connect a smartphone to a vehicle's head unit via a variety of transport protocols such as Bluetooth, USB, Android AOA, and TCP. Once a connection is established, Core discovers compatible applications and displays them to the driver for interaction via voice or display. The Core component is configured to follow a set of policies defined in its local policy database and updated by a [policy server](https://www.github.com/smartdevicelink/sdl_server). The messaging between a connected application and SDL Core is defined by the [Mobile API](https://github.com/smartdevicelink/sdl_core/blob/master/src/components/interfaces/MOBILE_API.xml) and the messaging between SDL Core and the vehicle is defined by the [HMI API](https://github.com/smartdevicelink/sdl_core/blob/master/src/components/interfaces/HMI_API.xml).
+The Core component of SDL runs on a vehicle's computing system (head unit). Core’s primary responsibility is to route messages between connected smartphone applications and the vehicle HMI. It can connect a smartphone to a vehicle's head unit via a variety of transport protocols such as Bluetooth, USB, Android AOA, and TCP. Once a connection is established, Core discovers compatible applications and displays them to the driver for interaction via voice or display. The Core component is configured to follow a set of policies defined in its local policy database and updated by a [policy server](https://www.github.com/smartdevicelink/sdl_server). The messaging between a connected application and SDL Core is defined by the [Mobile API](https://github.com/smartdevicelink/rpc_spec/blob/master/MOBILE_API.xml) and the messaging between SDL Core and the vehicle is defined by the [HMI API](https://github.com/smartdevicelink/sdl_core/blob/master/src/components/interfaces/HMI_API.xml).
Pull Requests Welcome!
diff --git a/cppcheck.xml b/cppcheck.xml
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/cppcheck.xml
diff --git a/src/appMain/hmi_capabilities.json b/src/appMain/hmi_capabilities.json
index 99a2e4c0cc..1e1c5aea79 100755
--- a/src/appMain/hmi_capabilities.json
+++ b/src/appMain/hmi_capabilities.json
@@ -287,12 +287,12 @@
},
"audioPassThruCapabilities": [{
"samplingRate": "44KHZ",
- "bitsPerSample": "RATE_8_BIT",
+ "bitsPerSample": "8_BIT",
"audioType": "PCM"
}],
"pcmStreamCapabilities": {
"samplingRate": "16KHZ",
- "bitsPerSample": "RATE_16_BIT",
+ "bitsPerSample": "16_BIT",
"audioType": "PCM"
},
"hmiZoneCapabilities": "FRONT",
diff --git a/src/appMain/sdl_preloaded_pt.json b/src/appMain/sdl_preloaded_pt.json
index 9f1b0490f3..eff433fd1e 100644
--- a/src/appMain/sdl_preloaded_pt.json
+++ b/src/appMain/sdl_preloaded_pt.json
@@ -1675,6 +1675,17 @@
]
}
}
+ },
+ "DialNumber": {
+ "rpcs": {
+ "DialNumber": {
+ "hmi_levels": [
+ "BACKGROUND",
+ "FULL",
+ "LIMITED"
+ ]
+ }
+ }
}
},
"consumer_friendly_messages": {
@@ -4080,7 +4091,7 @@
"key": "OEM_REF_WND_LOC_LVL",
"type": "Integer",
"mandatory": false,
- "defvalue" : 0,
+ "defvalue" : "0",
"minvalue": -1,
"maxvalue": 100
},
@@ -4089,7 +4100,7 @@
"key": "OEM_REF_WND_LOC_COLSPN",
"type": "Integer",
"mandatory": false,
- "defvalue" : 1,
+ "defvalue" : "1",
"minvalue": 1,
"maxvalue": 100
},
@@ -4098,7 +4109,7 @@
"key": "OEM_REF_WND_LOC_ROWSPN",
"type": "Integer",
"mandatory": false,
- "defvalue" : 1,
+ "defvalue" : "1",
"minvalue": 1,
"maxvalue": 100
},
@@ -4107,7 +4118,7 @@
"key": "OEM_REF_WND_LOC_LVLSPN",
"type": "Integer",
"mandatory": false,
- "defvalue" : 1,
+ "defvalue" : "1",
"minvalue": 1,
"maxvalue": 100
}
diff --git a/src/appMain/smartDeviceLink.ini b/src/appMain/smartDeviceLink.ini
index bd23e5b90c..0b27e6263a 100644
--- a/src/appMain/smartDeviceLink.ini
+++ b/src/appMain/smartDeviceLink.ini
@@ -316,7 +316,8 @@ OpenAttemptTimeoutMsResumptionDB = 500
; Social, BackgroundProcess, Testing, System, Projection, RemoteControl,
; EmptyApp
; Possible transport types: TCP_WIFI, IAP_CARPLAY, IAP_USB_HOST_MODE, IAP_USB_DEVICE_MODE,
-; IAP_USB, AOA_USB, IAP_BLUETOOTH, SPP_BLUETOOTH
+; IAP_USB, AOA_USB, IAP_BLUETOOTH, SPP_BLUETOOTH, WEBSOCKET,
+; WEBENGINE
;
; The default behavior is to always enable resumption. If an AppHMIType is not listed in this
; section, resumption is enabled for an app with the AppHMIType.
diff --git a/src/components/application_manager/include/application_manager/application.h b/src/components/application_manager/include/application_manager/application.h
index 59c9d35320..c08bb37082 100644
--- a/src/components/application_manager/include/application_manager/application.h
+++ b/src/components/application_manager/include/application_manager/application.h
@@ -520,6 +520,10 @@ class DynamicApplicationData {
class Application : public virtual InitialApplicationData,
public virtual DynamicApplicationData {
public:
+ /**
+ * @brief The StreamingState enum defines current streaming state
+ */
+ enum class StreamingState { kStopped, kStarted, kSuspended };
enum ApplicationRegisterState { kRegistered = 0, kWaitingForRegistration };
Application() : is_greyed_out_(false) {}
@@ -660,10 +664,8 @@ class Application : public virtual InitialApplicationData,
/**
* @brief Wakes up streaming process for application
* @param service_type Type of streaming service
- * @param timer_len The amount of time in ms the timer will wait
*/
- virtual void WakeUpStreaming(protocol_handler::ServiceType service_type,
- uint32_t timer_len = 0) = 0;
+ virtual void WakeUpStreaming(protocol_handler::ServiceType service_type) = 0;
virtual bool is_voice_communication_supported() const = 0;
virtual void set_voice_communication_supported(
diff --git a/src/components/application_manager/include/application_manager/application_impl.h b/src/components/application_manager/include/application_manager/application_impl.h
index 6c1a897054..88668a2505 100644
--- a/src/components/application_manager/include/application_manager/application_impl.h
+++ b/src/components/application_manager/include/application_manager/application_impl.h
@@ -142,8 +142,7 @@ class ApplicationImpl : public virtual Application,
void StopStreamingForce(protocol_handler::ServiceType service_type);
void StopStreaming(protocol_handler::ServiceType service_type);
void SuspendStreaming(protocol_handler::ServiceType service_type);
- void WakeUpStreaming(protocol_handler::ServiceType service_type,
- uint32_t timer_len = 0);
+ void WakeUpStreaming(protocol_handler::ServiceType service_type);
virtual bool is_voice_communication_supported() const;
virtual void set_voice_communication_supported(bool option);
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 4ec26b014e..bda1e5f49e 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
@@ -35,6 +35,7 @@
#include <stdint.h>
#include <algorithm>
+#include <atomic>
#include <deque>
#include <map>
#include <memory>
@@ -369,6 +370,9 @@ class ApplicationManagerImpl
ApplicationSharedPtr RegisterApplication(
const std::shared_ptr<smart_objects::SmartObject>&
request_for_registration) OVERRIDE;
+
+ void FinalizeAppRegistration(ApplicationSharedPtr application,
+ const uint32_t connection_key) OVERRIDE;
/*
* @brief Closes application by id
*
@@ -411,6 +415,7 @@ class ApplicationManagerImpl
* @brief Closes all registered applications
*/
void UnregisterAllApplications();
+
bool ActivateApplication(ApplicationSharedPtr app) OVERRIDE;
/**
@@ -866,29 +871,16 @@ class ApplicationManagerImpl
void ForbidStreaming(uint32_t app_id,
protocol_handler::ServiceType service_type) OVERRIDE;
- /**
- * @brief Called when application completes streaming configuration
- * @param app_id Streaming application id
- * @param service_type Streaming service type
- * @param result true if configuration is successful, false otherwise
- * @param rejected_params list of rejected parameters' name. Valid
- * only when result is false.
- */
- void OnStreamingConfigured(
- uint32_t app_id,
- protocol_handler::ServiceType service_type,
- bool result,
- std::vector<std::string>& rejected_params) OVERRIDE;
+ void OnStreamingConfigurationSuccessful(
+ uint32_t app_id, protocol_handler::ServiceType service_type) OVERRIDE;
+
+ void OnStreamingConfigurationFailed(uint32_t app_id,
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) OVERRIDE;
- /**
- * @brief Callback calls when application starts/stops data streaming
- * @param app_id Streaming application id
- * @param service_type Streaming service type
- * @param state Shows if streaming started or stopped
- */
void OnAppStreaming(uint32_t app_id,
protocol_handler::ServiceType service_type,
- bool state) OVERRIDE;
+ const Application::StreamingState new_state) OVERRIDE;
mobile_api::HMILevel::eType GetDefaultHmiLevel(
ApplicationConstSharedPtr application) const;
@@ -1229,21 +1221,6 @@ class ApplicationManagerImpl
smart_objects::SmartObject& vrSynonym);
/**
- * @brief Method transforms string to AppHMIType
- * @param str contains string AppHMIType
- * @return enum AppHMIType
- */
- mobile_apis::AppHMIType::eType StringToAppHMIType(std::string str);
-
- /**
- * @brief Returns a string representation of AppHMIType
- * @param type an enum value of AppHMIType
- * @return string representation of the enum value
- */
- const std::string AppHMITypeToString(
- mobile_apis::AppHMIType::eType type) const;
-
- /**
* @brief Method compares arrays of app HMI type
* @param from_policy contains app HMI type from policy
* @param from_application contains app HMI type from application
@@ -1260,7 +1237,7 @@ class ApplicationManagerImpl
const bool allow_unknown_parameters = false);
template <typename ApplicationList>
- void PrepareApplicationListSO(ApplicationList app_list,
+ void PrepareApplicationListSO(ApplicationList& app_list,
smart_objects::SmartObject& applications,
ApplicationManager& app_mngr) {
smart_objects::SmartArray* app_array = applications.asArray();
@@ -1666,7 +1643,6 @@ class ApplicationManagerImpl
sync_primitives::Lock close_app_timer_pool_lock_;
sync_primitives::Lock end_stream_timer_pool_lock_;
- mutable sync_primitives::RecursiveLock stopping_application_mng_lock_;
StateControllerImpl state_ctrl_;
std::unique_ptr<app_launch::AppLaunchData> app_launch_dto_;
std::unique_ptr<app_launch::AppLaunchCtrl> app_launch_ctrl_;
@@ -1700,7 +1676,7 @@ class ApplicationManagerImpl
std::atomic<bool> registered_during_timer_execution_;
- volatile bool is_stopping_;
+ std::atomic<bool> is_stopping_;
std::unique_ptr<CommandHolder> commands_holder_;
diff --git a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
index 1e75499a07..0bc98827c8 100644
--- a/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
+++ b/src/components/application_manager/include/application_manager/hmi_capabilities_impl.h
@@ -39,6 +39,7 @@
#include "interfaces/MOBILE_API.h"
#include "json/json.h"
#include "utils/macro.h"
+#include "utils/rwlock.h"
namespace application_manager {
class ApplicationManager;
@@ -485,6 +486,7 @@ class HMICapabilitiesImpl : public HMICapabilities {
ApplicationManager& app_mngr_;
HMILanguageHandler hmi_language_handler_;
+ mutable sync_primitives::RWLock hmi_capabilities_lock_;
std::set<hmi_apis::FunctionID::eType> requests_required_for_capabilities_;
DISALLOW_COPY_AND_ASSIGN(HMICapabilitiesImpl);
diff --git a/src/components/application_manager/include/application_manager/message_helper.h b/src/components/application_manager/include/application_manager/message_helper.h
index 380b14af1e..7af9bacf27 100644
--- a/src/components/application_manager/include/application_manager/message_helper.h
+++ b/src/components/application_manager/include/application_manager/message_helper.h
@@ -49,6 +49,7 @@
#include "interfaces/MOBILE_API.h"
#include "policy/policy_types.h"
#include "protocol_handler/session_observer.h"
+#include "smart_objects/enum_schema_item.h"
#include "smart_objects/smart_object.h"
#include "transport_manager/common.h"
#include "utils/macro.h"
@@ -103,6 +104,35 @@ struct ResetGlobalPropertiesResult {
typedef std::map<std::string, mobile_apis::VehicleDataType::eType> VehicleData;
/**
+ * @brief Converts stringified value to enum value
+ * @param str stringified value
+ * @return Enum value if succedeed, otherwise -
+ * INVALID_ENUM
+ */
+template <typename T>
+T StringToEnum(const std::string& str) {
+ using namespace ns_smart_device_link::ns_smart_objects;
+ T enum_value;
+ EnumConversionHelper<T>::StringToEnum(str, &enum_value);
+ return enum_value;
+}
+
+/**
+ * @brief Converts enum value to string
+ * @param enum_value enum value
+ * @return stringified value for enum if succedeed, otherwise - empty string
+ */
+template <typename T>
+std::string EnumToString(T enum_value) {
+ using namespace ns_smart_device_link::ns_smart_objects;
+ const char* str = 0;
+ if (EnumConversionHelper<T>::EnumToCString(enum_value, &str)) {
+ return str;
+ }
+ return std::string();
+}
+
+/**
* @brief MessageHelper class
**/
class MessageHelper {
@@ -184,42 +214,9 @@ class MessageHelper {
*/
static const VehicleData& vehicle_data();
- /**
- * @brief Converts HMI Result enum value to string
- * @param hmi_result HMI Result enum value
- * @return stringified value for enum if succedeed, otherwise - empty string
- */
- static std::string HMIResultToString(
- hmi_apis::Common_Result::eType hmi_result);
-
- /**
- * @brief Converts string to HMI Result enum value
- * @param hmi_result stringified value
- * @return HMI Result enum value if succedeed, otherwise - INVALID_ENUM
- * value
- */
- static hmi_apis::Common_Result::eType HMIResultFromString(
- const std::string& hmi_result);
-
- /**
- * @brief Converts mobile Result enum value to string
- * @param mobile_result mobile Result enum value
- * @return stringified value for enum if succedeed, otherwise - empty string
- */
- static std::string MobileResultToString(
- mobile_apis::Result::eType mobile_result);
-
static std::string GetDeviceMacAddressForHandle(
const transport_manager::DeviceHandle device_handle,
const ApplicationManager& app_mngr);
- /**
- * @brief Converts string to mobile Result enum value
- * @param mobile_result stringified value
- * @return mobile Result enum value if succedeed, otherwise - INVALID_ENUM
- * value
- */
- static mobile_api::Result::eType MobileResultFromString(
- const std::string& mobile_result);
/**
* @brief Converts HMI Result enum value to mobile Result enum value
@@ -239,23 +236,6 @@ class MessageHelper {
const mobile_api::Result::eType mobile_result);
/**
- * @brief Convert string to HMI level, if possible
- * @param hmi_level Stringified HMI level
- * @return Appropriate enum from HMI level, or INVALID_ENUM, if conversiion
- * is not possible
- */
- static mobile_api::HMILevel::eType StringToHMILevel(
- const std::string& hmi_level);
-
- /**
- * @brief Used to obtain string representation of app's
- * HMI Level.
- * @param hmi_level Desired HMI Level
- */
- static std::string StringifiedHMILevel(
- const mobile_apis::HMILevel::eType hmi_level);
-
- /**
* @brief Used to obtain function name by its id
* @param function_id Function ID
*/
@@ -888,29 +868,6 @@ class MessageHelper {
}
static const uint32_t GetPriorityCode(const std::string& priority);
- /**
- * @brief Convert common language to string representation
- * @param language Common language
- * @return Common language string representation
- */
- static std::string CommonLanguageToString(
- hmi_apis::Common_Language::eType language);
-
- /**
- * @brief Converts mobile language to string representation
- * @param language Mobile UI language
- * @return Mobile language string representation
- */
- static std::string MobileLanguageToString(
- mobile_apis::Language::eType language);
-
- /**
- * @brief Converts string to mobile language enum value
- * @param language language as string
- * @return Mobile language enum value
- */
- static mobile_apis::Language::eType MobileLanguageFromString(
- const std::string& language);
/**
* @brief Converts mobile language enum to HMI language enum
@@ -963,17 +920,6 @@ class MessageHelper {
const std::string& icon_path,
ApplicationManager& application_manager);
- static hmi_apis::Common_Language::eType CommonLanguageFromString(
- const std::string& language);
-
- /**
- * @brief CommonLightNameFromString convert string to LightName enum value
- * @param lightName string to convert
- * @return value LightName enum value
- */
- static hmi_apis::Common_LightName::eType CommonLightNameFromString(
- const std::string& lightName);
-
static smart_objects::SmartObjectSPtr
GetOnAppInterfaceUnregisteredNotificationToMobile(
int32_t connection_key,
diff --git a/src/components/application_manager/include/application_manager/policies/policy_handler.h b/src/components/application_manager/include/application_manager/policies/policy_handler.h
index 9206b1d155..c123bcc764 100644
--- a/src/components/application_manager/include/application_manager/policies/policy_handler.h
+++ b/src/components/application_manager/include/application_manager/policies/policy_handler.h
@@ -703,7 +703,7 @@ class PolicyHandler : public PolicyHandlerInterface,
#ifdef BUILD_TESTS
void SetPolicyManager(std::shared_ptr<PolicyManager> pm) {
- policy_manager_ = pm;
+ ExchangePolicyManager(pm);
}
#endif // BUILD_TESTS
@@ -901,8 +901,28 @@ class PolicyHandler : public PolicyHandlerInterface,
*/
void GetRegisteredLinks(std::map<std::string, std::string>& out_links) const;
+ /**
+ * @brief Load policy manager
+ * This method is thread safe
+ * @return Pointer to the policy manager instance or null if not inited
+ */
+ std::shared_ptr<PolicyManager> LoadPolicyManager() const;
+
+ /**
+ * @brief Exchange a policy manager
+ * This method is thread safe
+ * @param policy_manager - new policy manager
+ */
+ void ExchangePolicyManager(std::shared_ptr<PolicyManager> policy_manager);
+
mutable sync_primitives::RWLock policy_manager_lock_;
- std::shared_ptr<PolicyManager> policy_manager_;
+
+ /**
+ * @brief Policy manager
+ * @note Use atomic_policy_manager_ only with
+ * LoadPolicyManager and ExchangePolicyManager methods!
+ */
+ std::shared_ptr<PolicyManager> atomic_policy_manager_;
std::shared_ptr<PolicyEventObserver> event_observer_;
uint32_t last_activated_app_id_;
@@ -918,8 +938,6 @@ class PolicyHandler : public PolicyHandlerInterface,
*/
DeviceHandles pending_device_handles_;
- inline bool CreateManager();
-
typedef std::list<PolicyHandlerObserver*> HandlersCollection;
HandlersCollection listeners_;
mutable sync_primitives::Lock listeners_lock_;
diff --git a/src/components/application_manager/include/application_manager/postponed_activation_controller.h b/src/components/application_manager/include/application_manager/postponed_activation_controller.h
new file mode 100644
index 0000000000..e096800a25
--- /dev/null
+++ b/src/components/application_manager/include/application_manager/postponed_activation_controller.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright (c) 2020, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#ifndef SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POSTPONED_ACTIVATION_CONTROLLER_H_
+#define SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POSTPONED_ACTIVATION_CONTROLLER_H_
+
+#include "application.h"
+
+namespace application_manager {
+
+/**
+ * @brief AppToActivateSet is a map of application ids expected to be
+ * activated after the registration is completed (default hmi level is assigned)
+ * and correlation_ids of the SDLActivateApp requests
+ */
+typedef std::map<uint32_t, uint32_t> AppToActivate;
+
+class PostponedActivationController {
+ public:
+ PostponedActivationController();
+
+ /**
+ * @brief AddAppToActivate adds app_id to app_to_activate_ map
+ * @param app_id id of the app that should be activated
+ * @param corr_id correlation_id of the SDLActivateApp request
+ */
+ void AddAppToActivate(uint32_t app_id, uint32_t corr_id);
+
+ /**
+ * @brief GetPendingActivationCorrId gets the pending
+ * activation correlation id
+ * @param app_id application id
+ * @return correlation id of the SDLActivateApp requests
+ */
+ uint32_t GetPendingActivationCorrId(uint32_t app_id) const;
+
+ /**
+ * @brief RemoveAppToActivate removes app_id from app_to_activate_ map
+ * @param app_id application id
+ */
+ void RemoveAppToActivate(uint32_t app_id);
+
+ private:
+ AppToActivate app_to_activate_;
+ mutable std::shared_ptr<sync_primitives::Lock> activate_app_list_lock_ptr_;
+};
+} // namespace application_manager
+
+#endif // SRC_COMPONENTS_APPLICATION_MANAGER_INCLUDE_APPLICATION_MANAGER_POSTPONED_ACTIVATION_CONTROLLER_H_
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
index d945df6154..456eccd29c 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl.h
@@ -84,9 +84,8 @@ class ResumeCtrl {
/**
* @brief Set application HMI Level and ausio_state as saved
* @param application is application witch HMI Level is need to restore
- * @return true if success, otherwise return false
*/
- virtual bool RestoreAppHMIState(
+ virtual void RestoreAppHMIState(
application_manager::ApplicationSharedPtr application) = 0;
/**
@@ -255,7 +254,7 @@ class ResumeCtrl {
* @param application - application to restore hmi level
* and audio streaming state
*/
- virtual bool StartAppHmiStateResumption(
+ virtual void StartAppHmiStateResumption(
application_manager::ApplicationSharedPtr application) = 0;
/**
diff --git a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
index 379b25d8d4..9c529b5f9a 100644
--- a/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resume_ctrl_impl.h
@@ -83,9 +83,8 @@ class ResumeCtrlImpl : public ResumeCtrl {
/**
* @brief Set application HMI Level and ausio_state as saved
* @param application is application witch HMI Level is need to restore
- * @return true if success, otherwise return false
*/
- bool RestoreAppHMIState(app_mngr::ApplicationSharedPtr application) OVERRIDE;
+ void RestoreAppHMIState(app_mngr::ApplicationSharedPtr application) OVERRIDE;
/**
* @brief Set application HMI Level as stored in policy
@@ -234,9 +233,8 @@ class ResumeCtrlImpl : public ResumeCtrl {
* @brief Resume HMI Level and audio streaming state if needed
* @param application - application to restore hmi level
* and audio streaming state
- * @return true if success otherwise false
*/
- bool StartAppHmiStateResumption(
+ void StartAppHmiStateResumption(
app_mngr::ApplicationSharedPtr application) OVERRIDE;
/**
diff --git a/src/components/application_manager/include/application_manager/resumption/resumption_data_processor_impl.h b/src/components/application_manager/include/application_manager/resumption/resumption_data_processor_impl.h
index 12d25e2ac5..c2040852ca 100644
--- a/src/components/application_manager/include/application_manager/resumption/resumption_data_processor_impl.h
+++ b/src/components/application_manager/include/application_manager/resumption/resumption_data_processor_impl.h
@@ -125,14 +125,22 @@ class ResumptionDataProcessorImpl
const ResumptionRequest& found_request);
/**
- * @brief IsResumptionFinished checks whether some responses are still waiting
+ * @brief EraseProcessedRequest erases processed request from list of pending
+ * requests
* @param app_id ID of application, related to event
* @param found_request reference to found request
+ */
+ void EraseProcessedRequest(const uint32_t app_id,
+ const ResumptionRequest& found_request);
+
+ /**
+ * @brief IsResumptionFinished checks whether some responses are still
+ * waiting
+ * @param app_id ID of application, related to event
* @return true, if resumption for this application is finished, or false, if
- * some requests aren't processed yet
+ * some requests aren't processed yet
*/
- bool IsResumptionFinished(const uint32_t app_id,
- const ResumptionRequest& found_request);
+ bool IsResumptionFinished(const uint32_t app_id) const;
/**
* @brief IsResumptionSuccessful checks whether overall resumption status
@@ -156,12 +164,8 @@ class ResumptionDataProcessorImpl
* @brief EraseAppResumptionData erases data, needed for resumption, for
* given application
* @param app_id ID of application, related to event
- * @param function_id Function ID
- * @param corr_id Correlation ID
*/
- void EraseAppResumptionData(const uint32_t app_id,
- const hmi_apis::FunctionID::eType function_id,
- const int32_t corr_id);
+ void EraseAppResumptionData(const uint32_t app_id);
/**
* @brief Processes response message from HMI
@@ -174,6 +178,14 @@ class ResumptionDataProcessorImpl
const int32_t corr_id);
/**
+ * @brief Checks whether resumption is successful and finalizes resumption
+ * corresponding to result of this check
+ * @param callback Function to be called when data resumption will be finished
+ * @param app_id ID of application, related to event
+ */
+ void FinalizeResumption(const ResumeCtrl::ResumptionCallBack& callback,
+ const uint32_t app_id);
+ /**
* @brief Revert the data to the state before Resumption
* @param shared ptr to application
*/
@@ -355,34 +367,25 @@ class ResumptionDataProcessorImpl
const smart_objects::SmartObject& request,
const smart_objects::SmartObject& response) const;
- /**
- * @brief Determines whether application has saved data, including
- * submenus, commands, choice sets, global properties, subscriptions to
- * restore.
- * @param saved_app smart object containing saved app data
- * @return bool value stating whether app has mentioned data to restore
- */
- bool HasDataToRestore(const smart_objects::SmartObject& saved_app) const;
-
app_mngr::ApplicationManager& application_manager_;
/**
* @brief A map of the IDs and Application Resumption Status for these ID
**/
std::map<std::int32_t, ApplicationResumptionStatus> resumption_status_;
- sync_primitives::RWLock resumption_status_lock_;
+ mutable sync_primitives::RWLock resumption_status_lock_;
/**
* @brief A map of callbacks used when resumption is finished
*/
std::map<std::int32_t, ResumeCtrl::ResumptionCallBack> register_callbacks_;
- sync_primitives::RWLock register_callbacks_lock_;
+ mutable sync_primitives::RWLock register_callbacks_lock_;
/**
* @brief A map of sent requests and corresponding app_id
*/
std::map<ResumptionRequestID, std::uint32_t> request_app_ids_;
- sync_primitives::RWLock request_app_ids_lock_;
+ mutable sync_primitives::RWLock request_app_ids_lock_;
};
} // namespace resumption
diff --git a/src/components/application_manager/include/application_manager/state_controller_impl.h b/src/components/application_manager/include/application_manager/state_controller_impl.h
index 210ddf9720..4dc4c1ad7d 100644
--- a/src/components/application_manager/include/application_manager/state_controller_impl.h
+++ b/src/components/application_manager/include/application_manager/state_controller_impl.h
@@ -133,6 +133,8 @@ class StateControllerImpl : public event_engine::EventObserver,
void DropPostponedWindows(const uint32_t app_id) OVERRIDE;
+ PostponedActivationController& GetPostponedActivationController() OVERRIDE;
+
private:
int64_t RequestHMIStateChange(ApplicationConstSharedPtr app,
hmi_apis::Common_HMILevel::eType level,
@@ -434,6 +436,7 @@ class StateControllerImpl : public event_engine::EventObserver,
std::unordered_set<uint32_t> apps_with_pending_hmistatus_notification_;
mutable sync_primitives::Lock apps_with_pending_hmistatus_notification_lock_;
ApplicationManager& app_mngr_;
+ PostponedActivationController postponed_activation_controller_;
};
} // namespace application_manager
diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
index fd7b03fabc..e03973614d 100644
--- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/app_service_rpc_plugin.cc
@@ -107,14 +107,15 @@ void AppServiceRpcPlugin::DeleteSubscriptions(
} // namespace app_service_rpc_plugin
-extern "C" __attribute__((visibility("default")))
-application_manager::plugin_manager::RPCPlugin*
-Create(logger::Logger* logger_instance) {
+using RPCPlugin = application_manager::plugin_manager::RPCPlugin;
+// cppcheck-suppress unusedFunction
+extern "C" __attribute__((visibility("default"))) RPCPlugin* Create(
+ logger::Logger* logger_instance) {
logger::Logger::instance(logger_instance);
return new app_service_rpc_plugin::AppServiceRpcPlugin();
}
-extern "C" __attribute__((visibility("default"))) void Delete(
- application_manager::plugin_manager::RPCPlugin* data) {
+// cppcheck-suppress unusedFunction
+extern "C" __attribute__((visibility("default"))) void Delete(RPCPlugin* data) {
delete data;
}
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
index b7a343a907..217258b086 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/hmi/rc_on_remote_control_settings_notification.cc
@@ -65,15 +65,6 @@ RCOnRemoteControlSettingsNotification::RCOnRemoteControlSettingsNotification(
RCOnRemoteControlSettingsNotification::
~RCOnRemoteControlSettingsNotification() {}
-hmi_apis::Common_RCAccessMode::eType AccessModeFromString(
- const std::string& access_mode) {
- std::map<std::string, hmi_apis::Common_RCAccessMode::eType>::const_iterator
- mode = access_modes.find(access_mode);
- return access_modes.end() != mode
- ? mode->second
- : hmi_apis::Common_RCAccessMode::INVALID_ENUM;
-}
-
std::string AccessModeToString(
const hmi_apis::Common_RCAccessMode::eType access_mode) {
std::map<std::string, hmi_apis::Common_RCAccessMode::eType>::const_iterator
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
index 2b801f7406..8d3a3d796e 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/get_interior_vehicle_data_request.cc
@@ -245,7 +245,10 @@ void GetInteriorVehicleDataRequest::on_event(
helpers::Compare<mobile_apis::Result::eType, helpers::EQ, helpers::ONE>(
result_code,
mobile_apis::Result::SUCCESS,
- mobile_apis::Result::WARNINGS);
+ mobile_apis::Result::WARNINGS,
+ mobile_apis::Result::WRONG_LANGUAGE,
+ mobile_apis::Result::RETRY,
+ mobile_apis::Result::SAVED);
if (mobile_apis::Result::READ_ONLY == result_code) {
result = false;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/release_interior_vehicle_data_module_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/release_interior_vehicle_data_module_request.cc
index e7532636b2..47430c2487 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/release_interior_vehicle_data_module_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/release_interior_vehicle_data_module_request.cc
@@ -55,9 +55,9 @@ struct ResponseParams {
void PrepareResponseResult(
ResponseParams& response_params_out,
- rc_rpc_plugin::ResourceReleasedState::eType& released_result) {
+ const rc_rpc_plugin::ResourceReleasedState::eType& released_result) {
std::stringstream ss;
- auto info_inserter = [&ss, response_params_out](std::string info) {
+ auto info_inserter = [&ss, response_params_out](const std::string& info) {
ss << "Module [" << response_params_out.module_type << ":"
<< response_params_out.module_id << "] " << info;
};
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
index 8dd4eab306..dea660b780 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/mobile/set_interior_vehicle_data_request.cc
@@ -105,8 +105,9 @@ mobile_apis::Result::eType PrepareResultCodeAndInfo(
} else {
info = "Accessing not supported module data.";
}
- return result_code;
+
SDL_LOG_WARN(info);
+ return result_code;
}
void SetInteriorVehicleDataRequest::Execute() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
index 53222e0d04..12608d64c1 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/commands/rc_command_request.cc
@@ -247,8 +247,8 @@ void RCCommandRequest::ProcessAccessResponse(
mobile_apis::Result::SUCCESS,
mobile_apis::Result::WARNINGS);
- bool is_allowed = false;
if (result) {
+ bool is_allowed = false;
if (message[app_mngr::strings::msg_params].keyExists(
message_params::kAllowed)) {
is_allowed =
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
index 1db25265e7..c295ad4f11 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/interior_data_manager_impl.cc
@@ -197,9 +197,12 @@ InteriorDataManagerImpl::AppsSubscribedModuleTypes() {
auto app_subscriptions = rc_extension->InteriorVehicleDataSubscriptions();
std::vector<std::string> app_module_types;
- for (auto& app_subscription : app_subscriptions) {
- app_module_types.push_back(app_subscription.first);
- }
+ std::transform(app_subscriptions.begin(),
+ app_subscriptions.end(),
+ std::back_inserter(app_module_types),
+ [](const ModuleUid& app_subscription) {
+ return app_subscription.first;
+ });
std::sort(app_module_types.begin(), app_module_types.end());
result[app_ptr] = app_module_types;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_command_factory.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_command_factory.cc
index e2b67effee..c1743c8540 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_command_factory.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_command_factory.cc
@@ -71,7 +71,7 @@ using rc_rpc_plugin::ResourceAllocationManager;
template <typename RCCommandType>
class RCCommandCreator : public CommandCreator {
public:
- RCCommandCreator(const RCCommandParams& params) : params_(params) {}
+ explicit RCCommandCreator(const RCCommandParams& params) : params_(params) {}
private:
bool CanBeCreated() const override {
@@ -92,7 +92,8 @@ struct RCInvalidCommand {};
template <>
class RCCommandCreator<RCInvalidCommand> : public CommandCreator {
public:
- RCCommandCreator(const RCCommandParams& params) {
+ // cppcheck-suppress unusedFunction //Used in RCCommandCreatorFactory
+ explicit RCCommandCreator(const RCCommandParams& params) {
UNUSED(params);
}
@@ -109,7 +110,8 @@ class RCCommandCreator<RCInvalidCommand> : public CommandCreator {
};
struct RCCommandCreatorFactory {
- RCCommandCreatorFactory(const RCCommandParams& params) : params_(params) {}
+ explicit RCCommandCreatorFactory(const RCCommandParams& params)
+ : params_(params) {}
template <typename RCCommandType>
CommandCreator& GetCreator() {
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc
index 61524546a8..b2d1f1513b 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_helpers.cc
@@ -111,18 +111,28 @@ rc_rpc_types::ModuleIdConsentVector RCHelpers::FillModuleConsents(
std::vector<std::string> RCHelpers::RetrieveModuleIds(
const ns_smart_device_link::ns_smart_objects::SmartObject& moduleIds) {
std::vector<std::string> module_ids;
- for (const auto& module_id : (*moduleIds.asArray())) {
- module_ids.push_back(module_id.asString());
- }
+
+ std::transform((*moduleIds.asArray()).begin(),
+ (*moduleIds.asArray()).end(),
+ std::back_inserter(module_ids),
+ [](const smart_objects::SmartObject& module_id) {
+ return module_id.asString();
+ });
+
return module_ids;
}
std::vector<bool> RCHelpers::RetrieveModuleConsents(
const ns_smart_device_link::ns_smart_objects::SmartObject& consents) {
std::vector<bool> module_consents;
- for (const auto& allowed_item : (*consents.asArray())) {
- module_consents.push_back(allowed_item.asBool());
- }
+
+ std::transform((*consents.asArray()).begin(),
+ (*consents.asArray()).end(),
+ std::back_inserter(module_consents),
+ [](const smart_objects::SmartObject& allowed_item) {
+ return allowed_item.asBool();
+ });
+
return module_consents;
}
@@ -333,11 +343,14 @@ smart_objects::SmartObject RCHelpers::MergeArray(
}
auto& data2_array = *data2.asArray();
- for (const auto& data_item : data2_array) {
- if (data_item.getType() != smart_objects::SmartType_Map ||
- !data_item.keyExists(application_manager::strings::id)) {
- return data2;
- }
+
+ auto compare = [](const smart_objects::SmartObject& data_item) {
+ return (data_item.getType() != smart_objects::SmartType_Map ||
+ !data_item.keyExists(application_manager::strings::id));
+ };
+
+ if (std::any_of(data2_array.begin(), data2_array.end(), compare)) {
+ return data2;
}
smart_objects::SmartObject result = data1;
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
index 4345aa044a..87090405e7 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/src/rc_rpc_plugin.cc
@@ -212,11 +212,14 @@ RCRPCPlugin::Apps RCRPCPlugin::GetRCApplications(
ApplicationSet accessor = app_mngr.applications().GetData();
std::vector<ApplicationSharedPtr> result;
- for (const auto& it : accessor) {
- if (it->is_remote_control_supported()) {
- result.push_back(it);
- }
- }
+
+ std::copy_if(accessor.begin(),
+ accessor.end(),
+ std::back_inserter(result),
+ [](const ApplicationSharedPtr& app) {
+ return app->is_remote_control_supported();
+ });
+
return result;
}
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
index 956a53994d..20f9c27912 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/get_interior_vehicle_data_request_test.cc
@@ -31,11 +31,17 @@
*/
#include "rc_rpc_plugin/commands/mobile/get_interior_vehicle_data_request.h"
+
+#include "gtest/gtest.h"
+
+#include <stdint.h>
+#include <chrono>
+#include <thread>
+
#include "application_manager/commands/command_request_test.h"
#include "application_manager/event_engine/event_dispatcher.h"
#include "application_manager/message_helper.h"
#include "application_manager/mock_application.h"
-#include "gtest/gtest.h"
#include "rc_rpc_plugin/mock/mock_interior_data_cache.h"
#include "rc_rpc_plugin/mock/mock_interior_data_manager.h"
#include "rc_rpc_plugin/mock/mock_rc_capabilities_manager.h"
@@ -46,10 +52,6 @@
#include "rc_rpc_plugin/rc_module_constants.h"
#include "rc_rpc_plugin/rc_rpc_plugin.h"
-#include <stdint.h>
-#include <chrono>
-#include <thread>
-
using application_manager::ApplicationSet;
using ::application_manager::ApplicationSharedPtr;
using ::application_manager::Message;
@@ -824,4 +826,61 @@ TEST_F(GetInteriorVehicleDataRequestTest,
EXPECT_TRUE(climate_enable_available);
}
+TEST_F(GetInteriorVehicleDataRequestTest, ProcessingSuccessResultCodes) {
+ using rc_rpc_plugin::commands::GetInteriorVehicleDataRequest;
+ namespace hmi_response = application_manager::hmi_response;
+ namespace strings = application_manager::strings;
+
+ std::set<hmi_apis::Common_Result::eType> success_result_codes{
+ hmi_apis::Common_Result::SUCCESS,
+ hmi_apis::Common_Result::WARNINGS,
+ hmi_apis::Common_Result::WRONG_LANGUAGE,
+ hmi_apis::Common_Result::RETRY,
+ hmi_apis::Common_Result::SAVED};
+
+ ON_CALL(mock_interior_data_cache_, Contains(_)).WillByDefault(Return(false));
+ ON_CALL(mock_interior_data_manager_, CheckRequestsToHMIFrequency(_))
+ .WillByDefault(Return(true));
+
+ MessageSharedPtr hmi_response_message = CreateBasicMessage();
+ auto& hmi_response_params =
+ (*hmi_response_message)[application_manager::strings::msg_params];
+ hmi_response_params[strings::connection_key] = kAppId;
+ auto climate_control_data =
+ smart_objects::SmartObject(smart_objects::SmartType_Boolean);
+ climate_control_data = true;
+
+ auto& msg_params = (*hmi_response_message)[strings::msg_params];
+ msg_params[message_params::kModuleData][message_params::kClimateControlData]
+ [message_params::kClimateEnableAvailable] = climate_control_data;
+ msg_params[message_params::kModuleData][message_params::kModuleId] =
+ "00bd6d93-e093-4bf0-9784-281febe41bed";
+
+ MessageSharedPtr mobile_message = CreateBasicMessage();
+ auto message_to_mob = CreateBasicMessage();
+
+ for (const auto& result_code : success_result_codes) {
+ hmi_response_params[hmi_response::code] = result_code;
+
+ EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _))
+ .WillOnce(Return(true));
+ EXPECT_CALL(mock_rpc_service_, ManageMobileCommand(_, _))
+ .WillOnce(DoAll(SaveArg<0>(&message_to_mob), Return(true)));
+
+ auto command =
+ CreateRCCommand<GetInteriorVehicleDataRequest>(mobile_message);
+ ASSERT_TRUE(command->Init());
+ command->Run();
+
+ application_manager::event_engine::Event event(
+ hmi_apis::FunctionID::RC_GetInteriorVehicleData);
+ event.set_smart_object(*hmi_response_message);
+ command->on_event(event);
+
+ const bool success =
+ (*message_to_mob)[strings::msg_params][strings::success].asBool();
+ EXPECT_TRUE(success);
+ }
+}
+
} // namespace rc_rpc_plugin_test
diff --git a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/release_interior_vehicle_data_module_request_test.cc b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/release_interior_vehicle_data_module_request_test.cc
index 81e0fa87af..e521d81ef6 100644
--- a/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/release_interior_vehicle_data_module_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/rc_rpc_plugin/test/commands/release_interior_vehicle_data_module_request_test.cc
@@ -167,6 +167,8 @@ TEST_F(ReleaseInteriorVehicleDataModuleRequestTest,
ON_CALL(mock_allocation_manager_,
ReleaseResource(kModuleType, kModuleID, kAppID))
.WillByDefault(Return(ResourceReleasedState::eType::NOT_ALLOCATED));
+ ON_CALL(mock_hmi_capabilities_, rc_capability())
+ .WillByDefault(Return(smart_objects::SmartObjectSPtr()));
MessageSharedPtr message_to_mobile = CreateMessage();
@@ -197,7 +199,8 @@ TEST_F(ReleaseInteriorVehicleDataModuleRequestTest,
ReleaseResource(kModuleType, kModuleID, kAppID))
.WillByDefault(Return(ResourceReleasedState::eType::IS_ALLOCATED));
MessageSharedPtr message_to_mobile = CreateMessage();
-
+ ON_CALL(mock_hmi_capabilities_, rc_capability())
+ .WillByDefault(Return(smart_objects::SmartObjectSPtr()));
EXPECT_CALL(
mock_rpc_service_,
ManageMobileCommand(
@@ -224,6 +227,8 @@ TEST_F(ReleaseInteriorVehicleDataModuleRequestTest,
ON_CALL(mock_allocation_manager_,
ReleaseResource(kModuleType, kModuleID, kAppID))
.WillByDefault(Return(ResourceReleasedState::eType::IS_RELEASED));
+ ON_CALL(mock_hmi_capabilities_, rc_capability())
+ .WillByDefault(Return(smart_objects::SmartObjectSPtr()));
MessageSharedPtr message_to_mobile = CreateMessage();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_audio_start_stream_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_audio_start_stream_request.h
index fa9eee485e..ac6f1474e6 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_audio_start_stream_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_audio_start_stream_request.h
@@ -77,13 +77,13 @@ class AudioStartStreamRequest : public app_mngr::commands::RequestToHMI,
**/
virtual void on_event(const app_mngr::event_engine::Event& event);
+ private:
/**
* @brief RetryStartSession resend HMI startSession request if needed.
* If limit expired, set audio_stream_retry_number counter to 0
*/
void RetryStartSession();
- private:
uint32_t retry_number_;
DISALLOW_COPY_AND_ASSIGN(AudioStartStreamRequest);
};
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_start_stream_request.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_start_stream_request.h
index afad744eb3..76413cd55d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_start_stream_request.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/commands/hmi/navi_start_stream_request.h
@@ -77,13 +77,13 @@ class NaviStartStreamRequest : public app_mngr::commands::RequestToHMI,
*/
virtual void onTimeOut();
+ private:
/**
* @brief RetryStartSession resend HMI startSession request if needed.
* If limit expired, set video_stream_retry_number counter to 0
*/
void RetryStartSession();
- private:
uint32_t retry_number_;
DISALLOW_COPY_AND_ASSIGN(NaviStartStreamRequest);
};
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_pending_resumption_handler.h b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_pending_resumption_handler.h
index 5dad6d07ac..871359bc9a 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_pending_resumption_handler.h
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/include/sdl_rpc_plugin/waypoints_pending_resumption_handler.h
@@ -58,35 +58,50 @@ class WayPointsPendingResumptionHandler
private:
/**
* @brief RaiseFakeSuccessfulResponse raise event for the subscriber that
- * contains emulated successful response from HMI To avoid double subscription
- * WayPointsPendingResumptionHandler freezes sending requests to HMI. But
- * resumption_data_processor().SubscribeOnResponse() need to be called to
- * provide information that some data need to be resumed. So if pending
- * request exists, SDL creates preliminary requests to HMI, subscribe the
- * subscriber to this request but do not send it to HMI. It freezes this
- * requests to precess the one by one when a response to the current request
- * will be received When SDL receives a response from HMI it may satisfy some
- * frozen requests. If it does SDL will create faked HMI response(based on the
- * real one with corr_id replacement) and raise event. So that
- * subscriber::on_event will be called with an appropriate response to the
- * request that SDL was not sent to HMI.
- * @param response message that will be raised with corr_id replacement
- * @param corr_id correlation id that will be replaced in response to notify
- * the subscriber
+ * contains emulated successful response from HMI. To avoid double
+ * subscription WayPointsPendingResumptionHandler freezes sending requests to
+ * HMI. But resumption_data_processor().SubscribeOnResponse() need to be
+ * called to provide information that some data need to be resumed. So if
+ * pending request exists, SDL creates preliminary requests to HMI, subscribe
+ * the subscriber to this request but do not send it to HMI. It freezes this
+ * requests to process the one by one when a response to the current request
+ * will be received. When SDL receives a response from HMI it may satisfy some
+ * frozen requests. If it does SDL will create fake successful HMI
+ * response and raise event. So that subscriber::on_event will be called with
+ * an appropriate response to the request that SDL was not sent to HMI.
+ * @param corr_id correlation id of next pending request
*/
- void RaiseFakeSuccessfulResponse(smart_objects::SmartObject response,
- const int32_t corr_id);
+ void RaiseFakeSuccessfulResponse(const int32_t corr_id);
smart_objects::SmartObjectSPtr CreateSubscriptionRequest();
- struct ResumptionAwaitingHandling {
- const uint32_t app_id;
- WayPointsAppExtension& ext;
- resumption::ResumptionRequest request_to_send_;
+ /**
+ * @brief ProcessNextPendingResumption is responsible for processing of next
+ * pending request. If any application is already subscribed to waypoints,
+ * this method ensures that current application will be subscribed to
+ * waypoints too or send request to HMI otherwise
+ */
+ void ProcessNextPendingResumption();
+
+ struct PendingRequest {
+ explicit PendingRequest(const uint32_t app_id, const uint32_t corr_id)
+ : app_id_(app_id)
+ , corr_id_(corr_id)
+ , waiting_for_hmi_response_(false) {}
+ uint32_t app_id_;
+ uint32_t corr_id_;
+ bool waiting_for_hmi_response_;
};
- std::vector<ResumptionAwaitingHandling> frozen_resumptions_;
- std::map<uint32_t, smart_objects::SmartObject> pending_requests_;
- std::queue<uint32_t> app_ids_;
+ /**
+ * @brief SendPendingHMIRequest is responsible for creating and sending of
+ * next pending request to HMI. Also here this request is marked as waiting
+ * for response.
+ * @param pending_request Next pending request
+ */
+ void SendPendingHMIRequest(PendingRequest& pending_request);
+
+ std::deque<PendingRequest> pending_requests_;
+ sync_primitives::RecursiveLock pending_resumption_lock_;
};
} // namespace sdl_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/get_system_info_response.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/get_system_info_response.cc
index 77605b31c3..8229e1978c 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/get_system_info_response.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/get_system_info_response.cc
@@ -84,9 +84,10 @@ const SystemInfo GetSystemInfoResponse::GetSystemInfo() const {
info.wers_country_code =
(*message_)[strings::msg_params]["wersCountryCode"].asString();
- const auto lang_code = static_cast<hmi_apis::Common_Language::eType>(
- (*message_)[strings::msg_params]["language"].asUInt());
- info.language = MessageHelper::CommonLanguageToString(lang_code);
+ const uint32_t lang_code =
+ (*message_)[strings::msg_params]["language"].asUInt();
+ info.language = application_manager::EnumToString(
+ static_cast<hmi_apis::Common_Language::eType>(lang_code));
return info;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
index b9860bcd02..21d6282436 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_audio_start_stream_request.cc
@@ -144,41 +144,46 @@ void AudioStartStreamRequest::onTimeOut() {
void AudioStartStreamRequest::RetryStartSession() {
SDL_LOG_AUTO_TRACE();
- application_manager_.TerminateRequest(
- connection_key(), correlation_id(), function_id());
+ auto retry_start_session = [this](const uint32_t hmi_app_id) {
+ ApplicationSharedPtr app =
+ application_manager_.application_by_hmi_app(hmi_app_id);
- ApplicationSharedPtr app =
- application_manager_.application_by_hmi_app(application_id());
- if (!app) {
- SDL_LOG_ERROR("StartAudioStreamRequest aborted. Application not found");
- return;
- }
+ if (!app) {
+ SDL_LOG_ERROR("StartAudioStreamRequest aborted. Application not found");
+ return;
+ }
- if (!app->audio_streaming_allowed()) {
- SDL_LOG_WARN("Audio streaming not allowed");
- return;
- }
+ if (!app->audio_streaming_allowed()) {
+ SDL_LOG_WARN("Audio streaming not allowed");
+ return;
+ }
- if (app->audio_streaming_approved()) {
- SDL_LOG_INFO("AudioStartStream retry sequence stopped. "
- << "SUCCESS received");
- app->set_audio_stream_retry_number(0);
- return;
- }
+ if (app->audio_streaming_approved()) {
+ SDL_LOG_INFO("AudioStartStream retry sequence stopped. "
+ << "SUCCESS received");
+ app->set_audio_stream_retry_number(0);
+ return;
+ }
- uint32_t curr_retry_number = app->audio_stream_retry_number();
+ uint32_t curr_retry_number = app->audio_stream_retry_number() + 1;
- if (curr_retry_number <= retry_number_) {
- SDL_LOG_DEBUG("Retry number " << curr_retry_number << " of "
- << retry_number_);
- MessageHelper::SendAudioStartStream(app->app_id(), application_manager_);
- app->set_audio_stream_retry_number(++curr_retry_number);
- } else {
- SDL_LOG_DEBUG("Audio start stream retry sequence stopped. "
- << "Attempts expired.");
+ if (curr_retry_number <= retry_number_) {
+ SDL_LOG_DEBUG("Retry number " << curr_retry_number << " of "
+ << retry_number_);
+ MessageHelper::SendAudioStartStream(app->app_id(), application_manager_);
+ app->set_audio_stream_retry_number(curr_retry_number);
+ } else {
+ SDL_LOG_DEBUG("Audio start stream retry sequence stopped. "
+ << "Attempts expired.");
- application_manager_.EndNaviServices(app->app_id());
- }
+ application_manager_.EndNaviServices(app->app_id());
+ }
+ };
+
+ retry_start_session(application_id());
+
+ application_manager_.TerminateRequest(
+ connection_key(), correlation_id(), function_id());
}
} // namespace commands
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_set_video_config_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_set_video_config_request.cc
index e4fbdaa0d6..ff9d861def 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_set_video_config_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_set_video_config_request.cc
@@ -93,16 +93,15 @@ void NaviSetVideoConfigRequest::on_event(const event_engine::Event& event) {
const hmi_apis::Common_Result::eType code =
static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
- bool result = false;
- std::vector<std::string> rejected_params;
if (code == hmi_apis::Common_Result::SUCCESS) {
SDL_LOG_DEBUG("Received SetVideoConfig success response");
- result = true;
+ application_manager_.OnStreamingConfigurationSuccessful(
+ app->app_id(), protocol_handler::ServiceType::kMobileNav);
} else {
SDL_LOG_DEBUG("Received SetVideoConfig failure response (" << event.id()
<< ")");
- result = false;
+ std::vector<std::string> rejected_params;
if (message[strings::msg_params].keyExists(strings::rejected_params)) {
const smart_objects::SmartArray* list =
message[strings::msg_params][strings::rejected_params].asArray();
@@ -118,13 +117,14 @@ void NaviSetVideoConfigRequest::on_event(const event_engine::Event& event) {
}
}
}
+
+ application_manager_.OnStreamingConfigurationFailed(
+ app->app_id(),
+ rejected_params,
+ "Received SetVideoConfig failure response");
+
+ break;
}
- application_manager_.OnStreamingConfigured(
- app->app_id(),
- protocol_handler::ServiceType::kMobileNav,
- result,
- rejected_params);
- break;
}
default:
SDL_LOG_ERROR("Received unknown event " << event.id());
@@ -143,8 +143,10 @@ void NaviSetVideoConfigRequest::onTimeOut() {
}
std::vector<std::string> empty;
- application_manager_.OnStreamingConfigured(
- app->app_id(), protocol_handler::ServiceType::kMobileNav, false, empty);
+ application_manager_.OnStreamingConfigurationFailed(
+ app->app_id(),
+ empty,
+ "Timed out while waiting for SetVideoConfig response");
application_manager_.TerminateRequest(
connection_key(), correlation_id(), function_id());
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
index d0f95ee385..973c323ebe 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/navi_start_stream_request.cc
@@ -146,41 +146,46 @@ void NaviStartStreamRequest::onTimeOut() {
void NaviStartStreamRequest::RetryStartSession() {
SDL_LOG_AUTO_TRACE();
- application_manager_.TerminateRequest(
- connection_key(), correlation_id(), function_id());
+ auto retry_start_session = [this](const uint32_t hmi_app_id) {
+ ApplicationSharedPtr app =
+ application_manager_.application_by_hmi_app(hmi_app_id);
- ApplicationSharedPtr app =
- application_manager_.application_by_hmi_app(application_id());
- if (!app) {
- SDL_LOG_ERROR("NaviStartStreamRequest aborted. Application not found");
- return;
- }
+ if (!app) {
+ SDL_LOG_ERROR("NaviStartStreamRequest aborted. Application not found");
+ return;
+ }
- if (!app->video_streaming_allowed()) {
- SDL_LOG_WARN("Video streaming not allowed");
- return;
- }
+ if (!app->video_streaming_allowed()) {
+ SDL_LOG_WARN("Video streaming not allowed");
+ return;
+ }
- if (app->video_streaming_approved()) {
- SDL_LOG_INFO("NaviStartStream retry sequence stopped. "
- << "SUCCESS received");
- app->set_video_stream_retry_number(0);
- return;
- }
+ if (app->video_streaming_approved()) {
+ SDL_LOG_INFO("NaviStartStream retry sequence stopped. "
+ << "SUCCESS received");
+ app->set_video_stream_retry_number(0);
+ return;
+ }
- uint32_t curr_retry_number = app->video_stream_retry_number();
+ uint32_t curr_retry_number = app->video_stream_retry_number() + 1;
- if (curr_retry_number <= retry_number_) {
- SDL_LOG_DEBUG("Retry number " << curr_retry_number << " of "
- << retry_number_);
- MessageHelper::SendNaviStartStream(app->app_id(), application_manager_);
- app->set_video_stream_retry_number(++curr_retry_number);
- } else {
- SDL_LOG_DEBUG("NaviStartStream retry sequence stopped. "
- << "Attempts expired");
+ if (curr_retry_number <= retry_number_) {
+ SDL_LOG_DEBUG("Retry number " << curr_retry_number << " of "
+ << retry_number_);
+ MessageHelper::SendNaviStartStream(app->app_id(), application_manager_);
+ app->set_video_stream_retry_number(curr_retry_number);
+ } else {
+ SDL_LOG_DEBUG("NaviStartStream retry sequence stopped. "
+ << "Attempts expired");
- application_manager_.EndNaviServices(app->app_id());
- }
+ application_manager_.EndNaviServices(app->app_id());
+ }
+ };
+
+ retry_start_session(application_id());
+
+ application_manager_.TerminateRequest(
+ connection_key(), correlation_id(), function_id());
}
} // namespace commands
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_app_permission_consent_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_app_permission_consent_notification.cc
index 37552e003a..e9e0c65424 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_app_permission_consent_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_app_permission_consent_notification.cc
@@ -50,7 +50,7 @@ namespace {
struct PermissionsAppender
: public std::unary_function<void,
const smart_objects::SmartArray::value_type&> {
- PermissionsAppender(policy::PermissionConsent& consents)
+ explicit PermissionsAppender(policy::PermissionConsent& consents)
: allowed_key_(application_manager::hmi_response::allowed)
, consents_(consents) {}
void operator()(const smart_objects::SmartArray::value_type& item) const {
@@ -82,7 +82,7 @@ struct PermissionsAppender
*/
struct ExternalConsentStatusAppender
: std::unary_function<void, const smart_objects::SmartArray::value_type&> {
- ExternalConsentStatusAppender(
+ explicit ExternalConsentStatusAppender(
policy::ExternalConsentStatus& external_consent_status)
: external_consent_status_(external_consent_status) {}
void operator()(const smart_objects::SmartArray::value_type& item) const {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
index f701713d96..167176aa0f 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_driver_distraction_notification.cc
@@ -78,8 +78,7 @@ struct OnDriverDistractionProcessor {
if (is_lock_screen_dismissal_exists &&
msg_params[mobile_notification::lock_screen_dismissal_enabled]
.asBool()) {
- const auto language =
- MessageHelper::MobileLanguageToString(application->ui_language());
+ const auto language = EnumToString(application->ui_language());
const auto warning_message =
application_manager_.GetPolicyHandler()
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_exit_application_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_exit_application_notification.cc
index 2b95d2e3e8..4a6a3df3b4 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_exit_application_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_exit_application_notification.cc
@@ -119,7 +119,6 @@ void OnExitApplicationNotification::Run() {
MessageHelper::GetOnAppInterfaceUnregisteredNotificationToMobile(
app_id, AppInterfaceUnregisteredReason::RESOURCE_CONSTRAINT);
SendNotificationToMobile(message);
- application_manager_.UnregisterApplication(app_id, Result::SUCCESS);
return;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_info_changed_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_info_changed_notification.cc
index 6a3b814d05..48071cc1b2 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_info_changed_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/on_system_info_changed_notification.cc
@@ -60,9 +60,8 @@ void OnSystemInfoChangedNotification::Run() {
SDL_LOG_AUTO_TRACE();
uint32_t lang_code =
(*message_)[strings::msg_params][strings::language].asUInt();
- const std::string language =
- application_manager::MessageHelper::CommonLanguageToString(
- static_cast<hmi_apis::Common_Language::eType>(lang_code));
+ const std::string language = application_manager::EnumToString(
+ static_cast<hmi_apis::Common_Language::eType>(lang_code));
policy_handler_.OnSystemInfoChanged(language);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
index 527cf911b9..66ac9c458b 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_activate_app_request.cc
@@ -43,7 +43,7 @@ namespace commands {
namespace {
struct ProtoV4AppsOnDevice : std::unary_function<ApplicationSharedPtr, bool> {
connection_handler::DeviceHandle handle_;
- ProtoV4AppsOnDevice(const connection_handler::DeviceHandle handle)
+ explicit ProtoV4AppsOnDevice(const connection_handler::DeviceHandle handle)
: handle_(handle) {}
bool operator()(const ApplicationSharedPtr app) const {
return app ? handle_ == app->device() &&
@@ -118,6 +118,15 @@ void SDLActivateAppRequest::Run() {
ApplicationConstSharedPtr app =
application_manager_.WaitingApplicationByID(app_id());
+
+ if (!app) {
+ app = application_manager_.application(app_id());
+ if (!app) {
+ SDL_LOG_WARN("Can't find application within waiting apps: " << app_id());
+ return;
+ }
+ }
+
if (application_manager_.state_controller().IsStateActive(
HmiState::STATE_ID_DEACTIVATE_HMI)) {
SDL_LOG_DEBUG(
@@ -139,6 +148,18 @@ void SDLActivateAppRequest::Run() {
application_manager_.connection_handler().ConnectToDevice(app->device());
} else {
const uint32_t application_id = app_id();
+ auto main_state =
+ app->CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
+ if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
+ SDL_LOG_DEBUG(
+ "Application registration is not completed, HMI level hasn't set "
+ "yet, postpone activation");
+ auto& postponed_activation_ctrl = application_manager_.state_controller()
+ .GetPostponedActivationController();
+ postponed_activation_ctrl.AddAppToActivate(application_id,
+ correlation_id());
+ return;
+ }
policy_handler_.OnActivateApp(application_id, correlation_id());
}
}
@@ -186,6 +207,18 @@ void SDLActivateAppRequest::Run() {
if (app_to_activate->IsRegistered()) {
SDL_LOG_DEBUG("Application is registered. Activating.");
+ auto main_state = app_to_activate->CurrentHmiState(
+ mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
+ if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
+ SDL_LOG_DEBUG(
+ "Application registration is not completed, HMI level hasn't set "
+ "yet, postpone activation");
+ auto& postponed_activation_ctrl = application_manager_.state_controller()
+ .GetPostponedActivationController();
+ postponed_activation_ctrl.AddAppToActivate(application_id,
+ correlation_id());
+ return;
+ }
policy_handler_.OnActivateApp(application_id, correlation_id());
return;
} else if (app_to_activate->is_cloud_app()) {
@@ -269,6 +302,19 @@ void SDLActivateAppRequest::on_event(const event_engine::Event& event) {
"Application not found by HMI app id: " << hmi_application_id);
return;
}
+
+ auto main_state =
+ app->CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
+ if (mobile_apis::HMILevel::INVALID_ENUM == main_state->hmi_level()) {
+ SDL_LOG_DEBUG(
+ "Application registration is not completed, HMI level hasn't set "
+ "yet, postpone activation");
+ auto& postponed_activation_ctrl = application_manager_.state_controller()
+ .GetPostponedActivationController();
+ postponed_activation_ctrl.AddAppToActivate(app->app_id(), correlation_id());
+ return;
+ }
+
policy_handler_.OnActivateApp(app->app_id(), correlation_id());
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_get_user_friendly_message_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_get_user_friendly_message_request.cc
index e58961e581..57831bbc4a 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_get_user_friendly_message_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/hmi/sdl_get_user_friendly_message_request.cc
@@ -86,15 +86,13 @@ void SDLGetUserFriendlyMessageRequest::Run() {
if ((*message_)[strings::msg_params].keyExists(strings::language)) {
uint32_t lang_code =
(*message_)[strings::msg_params][strings::language].asUInt();
- required_language =
- application_manager::MessageHelper::CommonLanguageToString(
- static_cast<hmi_apis::Common_Language::eType>(lang_code));
+ required_language = application_manager::EnumToString(
+ static_cast<hmi_apis::Common_Language::eType>(lang_code));
} else {
hmi_apis::Common_Language::eType ui_language =
hmi_capabilities_.active_ui_language();
- required_language =
- application_manager::MessageHelper::CommonLanguageToString(ui_language);
+ required_language = application_manager::EnumToString(ui_language);
}
policy_handler_.OnGetUserFriendlyMessage(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
index 288cafb94e..e2a37f17bd 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/add_sub_menu_request.cc
@@ -96,14 +96,24 @@ void AddSubMenuRequest::Run() {
return;
}
- const std::string& menu_name =
- received_msg_params[strings::menu_name].asString();
-
const uint32_t parent_id =
received_msg_params.keyExists(strings::parent_id)
? received_msg_params[strings::parent_id].asUInt()
: 0;
+ if (0 != parent_id) {
+ smart_objects::SmartObject parent = app->FindSubMenu(parent_id);
+ if (smart_objects::SmartType_Null == parent.getType()) {
+ SDL_LOG_ERROR("Parent ID " << parent_id << " doesn't exist");
+ SendResponse(
+ false, mobile_apis::Result::INVALID_ID, "Parent ID doesn't exist");
+ return;
+ }
+ }
+
+ const std::string& menu_name =
+ received_msg_params[strings::menu_name].asString();
+
if (app->IsSubMenuNameAlreadyExist(menu_name, parent_id)) {
SDL_LOG_ERROR("Menu name " << menu_name << " is duplicated.");
SendResponse(false, mobile_apis::Result::DUPLICATE_NAME);
@@ -209,9 +219,9 @@ bool AddSubMenuRequest::Init() {
bool AddSubMenuRequest::CheckSubMenuName() {
SDL_LOG_AUTO_TRACE();
- const char* str = NULL;
- str = (*message_)[strings::msg_params][strings::menu_name].asCharArray();
+ const char* str =
+ (*message_)[strings::msg_params][strings::menu_name].asCharArray();
if (!CheckSyntax(str)) {
SDL_LOG_INFO("Invalid subMenu name.");
return false;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/alert_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/alert_request.cc
index 55783be4cd..cfd3106f4d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/alert_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/alert_request.cc
@@ -111,10 +111,11 @@ void AlertRequest::Run() {
(*message_)[strings::msg_params][strings::tts_chunks].length();
}
- if ((tts_chunks_exists && length_tts_chunks) ||
- ((*message_)[strings::msg_params].keyExists(strings::play_tone) &&
- (*message_)[strings::msg_params][strings::play_tone].asBool())) {
+ if (tts_chunks_exists && length_tts_chunks) {
awaiting_tts_speak_response_ = true;
+ } else if ((*message_)[strings::msg_params].keyExists(strings::play_tone) &&
+ (*message_)[strings::msg_params][strings::play_tone].asBool()) {
+ set_warning_info("playTone ignored since TTS Chunks were not provided");
}
SendAlertRequest(app_id);
@@ -409,8 +410,6 @@ void AlertRequest::SendSpeakRequest(int32_t app_id,
SmartObject msg_params = smart_objects::SmartObject(SmartType_Map);
if (tts_chunks_exists && length_tts_chunks) {
msg_params[hmi_request::tts_chunks] =
- smart_objects::SmartObject(SmartType_Array);
- msg_params[hmi_request::tts_chunks] =
(*message_)[strings::msg_params][strings::tts_chunks];
}
if ((*message_)[strings::msg_params].keyExists(strings::play_tone) &&
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
index 8e13110515..13a57cf9a8 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/change_registration_request.cc
@@ -44,7 +44,8 @@
namespace {
namespace custom_str = utils::custom_string;
struct IsSameNickname {
- IsSameNickname(const custom_str::CustomString& app_id) : app_id_(app_id) {}
+ explicit IsSameNickname(const custom_str::CustomString& app_id)
+ : app_id_(app_id) {}
bool operator()(const policy::StringArray::value_type& nickname) const {
return app_id_.CompareIgnoreCase(nickname.c_str());
}
@@ -512,7 +513,6 @@ bool ChangeRegistrationRequest::IsLanguageSupportedByTTS(
for (size_t i = 0; i < tts_languages->length(); ++i) {
if (hmi_display_lang == tts_languages->getElement(i).asInt()) {
return true;
- break;
}
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
index d43e8e0710..0d1d876497 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/create_interaction_choice_set_request.cc
@@ -221,9 +221,8 @@ bool CreateInteractionChoiceSetRequest::compareSynonyms(
CreateInteractionChoiceSetRequest::compareStr);
if (it != vr_cmds_1->end()) {
- SDL_LOG_INFO(
-
- "Incoming choice set has duplicated VR synonyms " << it->asString());
+ SDL_LOG_INFO("Incoming choice set has duplicated VR synonyms "
+ << it->asString());
return true;
}
@@ -239,9 +238,8 @@ bool CreateInteractionChoiceSetRequest::compareStr(
bool CreateInteractionChoiceSetRequest::IsWhiteSpaceExist(
const smart_objects::SmartObject& choice_set) {
SDL_LOG_AUTO_TRACE();
- const char* str = NULL;
- str = choice_set[strings::menu_name].asCharArray();
+ const char* str = choice_set[strings::menu_name].asCharArray();
if (!CheckSyntax(str)) {
SDL_LOG_ERROR("Invalid menu_name syntax check failed");
return true;
@@ -322,8 +320,6 @@ void CreateInteractionChoiceSetRequest::SendVRAddCommandRequests(
msg_params[strings::cmd_id] =
choice_set[strings::choice_set][chs_num][strings::choice_id];
msg_params[strings::vr_commands] =
- smart_objects::SmartObject(smart_objects::SmartType_Array);
- msg_params[strings::vr_commands] =
choice_set[strings::choice_set][chs_num][strings::vr_commands];
sync_primitives::AutoLock commands_lock(vr_commands_lock_);
@@ -334,9 +330,8 @@ void CreateInteractionChoiceSetRequest::SendVRAddCommandRequests(
VRCommandInfo vr_command(vr_cmd_id);
sent_commands_map_[vr_corr_id] = vr_command;
- SDL_LOG_DEBUG(
-
- "VR_command sent corr_id " << vr_corr_id << " cmd_id " << vr_corr_id);
+ SDL_LOG_DEBUG("VR_command sent corr_id " << vr_corr_id << " cmd_id "
+ << vr_corr_id);
}
expected_chs_count_ = chs_num;
SDL_LOG_DEBUG("expected_chs_count_ = " << expected_chs_count_);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_command_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_command_request.cc
index 0c731a027b..358a002606 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_command_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_command_request.cc
@@ -96,15 +96,6 @@ void DeleteCommandRequest::Run() {
(*message_)[strings::msg_params][strings::cmd_id];
msg_params[strings::app_id] = application->app_id();
- // we should specify amount of required responses in the 1st request
- uint32_t chaining_counter = 0;
- if (command.keyExists(strings::menu_params)) {
- ++chaining_counter;
- }
-
- if (command.keyExists(strings::vr_commands)) {
- ++chaining_counter;
- }
/* Need to set all flags before sending request to HMI
* for correct processing this flags in method on_event */
if (command.keyExists(strings::menu_params)) {
@@ -164,7 +155,7 @@ void DeleteCommandRequest::on_event(const event_engine::Event& event) {
ui_result_ = static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
SDL_LOG_DEBUG("Received UI_DeleteCommand event with result "
- << MessageHelper::HMIResultToString(ui_result_));
+ << EnumToString(ui_result_));
GetInfo(message, ui_info_);
break;
}
@@ -174,7 +165,7 @@ void DeleteCommandRequest::on_event(const event_engine::Event& event) {
vr_result_ = static_cast<hmi_apis::Common_Result::eType>(
message[strings::params][hmi_response::code].asInt());
SDL_LOG_DEBUG("Received VR_DeleteCommand event with result "
- << MessageHelper::HMIResultToString(vr_result_));
+ << EnumToString(vr_result_));
GetInfo(message, vr_info_);
break;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
index d8b74eb770..3ff95a6f41 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/delete_interaction_choice_set_request.cc
@@ -65,9 +65,8 @@ void DeleteInteractionChoiceSetRequest::Run() {
ApplicationSharedPtr app = application_manager_.application(connection_key());
if (!app) {
- SDL_LOG_ERROR(
-
- "No application associated with connection key " << connection_key());
+ SDL_LOG_ERROR("No application associated with connection key "
+ << connection_key());
SendResponse(false, mobile_apis::Result::APPLICATION_NOT_REGISTERED);
return;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_way_points_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_way_points_request.cc
index 33d3479941..54b542d245 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_way_points_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/get_way_points_request.cc
@@ -68,10 +68,8 @@ void GetWayPointsRequest::Run() {
SendResponse(false, mobile_apis::Result::APPLICATION_NOT_REGISTERED);
return;
}
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params = (*message_)[strings::msg_params];
+ smart_objects::SmartObject msg_params = (*message_)[strings::msg_params];
msg_params[strings::app_id] = app->app_id();
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_Navigation);
SendHMIRequest(hmi_apis::FunctionID::Navigation_GetWayPoints,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
index 90ed038b89..4a97d5b970 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/on_system_request_notification.cc
@@ -173,7 +173,7 @@ void OnSystemRequestNotification::AddHeader(BinaryMessage& message) const {
}
char timeout_str[24];
- if (0 > sprintf(timeout_str, "%d", timeout)) {
+ if (0 > sprintf(timeout_str, "%u", timeout)) {
memset(timeout_str, 0, sizeof(timeout_str));
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
index 9c218e0e99..a3269847a1 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/perform_interaction_request.cc
@@ -34,12 +34,12 @@
#include "sdl_rpc_plugin/commands/mobile/perform_interaction_request.h"
#include <string.h>
+
#include <numeric>
#include <string>
#include "application_manager/application_impl.h"
#include "application_manager/message_helper.h"
-
#include "interfaces/HMI_API.h"
#include "interfaces/MOBILE_API.h"
#include "utils/custom_string.h"
@@ -598,9 +598,8 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest(
MessageHelper::VerifyTtsFiles(help_prompt, app, application_manager_);
if (mobile_apis::Result::FILE_NOT_FOUND == verification_result) {
- SDL_LOG_WARN(
-
- "MessageHelper::VerifyTtsFiles return " << verification_result);
+ SDL_LOG_WARN("MessageHelper::VerifyTtsFiles return "
+ << verification_result);
invalid_params.push_back("help_prompt");
} else {
msg_params[strings::help_prompt] = help_prompt;
@@ -646,9 +645,8 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest(
timeout_prompt, app, application_manager_);
if (mobile_apis::Result::FILE_NOT_FOUND == verification_result) {
- SDL_LOG_WARN(
-
- "MessageHelper::VerifyTtsFiles return " << verification_result);
+ SDL_LOG_WARN("MessageHelper::VerifyTtsFiles return "
+ << verification_result);
invalid_params.push_back("timeout_prompt");
} else {
msg_params[strings::timeout_prompt] = timeout_prompt;
@@ -667,9 +665,8 @@ void PerformInteractionRequest::SendVRPerformInteractionRequest(
initial_prompt, app, application_manager_);
if (mobile_apis::Result::FILE_NOT_FOUND == verification_result) {
- SDL_LOG_WARN(
-
- "MessageHelper::VerifyTtsFiles return " << verification_result);
+ SDL_LOG_WARN("MessageHelper::VerifyTtsFiles return "
+ << verification_result);
invalid_params.push_back("initial_prompt");
} else {
msg_params[strings::initial_prompt] = initial_prompt;
@@ -871,9 +868,9 @@ void PerformInteractionRequest::DisablePerformInteraction() {
bool PerformInteractionRequest::IsWhiteSpaceExist() {
SDL_LOG_AUTO_TRACE();
- const char* str = NULL;
- str = (*message_)[strings::msg_params][strings::initial_text].asCharArray();
+ const char* str =
+ (*message_)[strings::msg_params][strings::initial_text].asCharArray();
if (!CheckSyntax(str)) {
SDL_LOG_ERROR("Invalid initial_text syntax check failed");
return true;
@@ -1008,7 +1005,6 @@ bool PerformInteractionRequest::CheckChoiceSetListVRCommands(
// this should never ever happen since this was already checked
if (smart_objects::SmartType_Null == choice_set.getType()) {
SDL_LOG_ERROR(
-
"Couldn't find choiceset_id = " << choice_set_id_list[i].asInt());
SendResponse(false, mobile_apis::Result::INVALID_ID);
return false;
@@ -1038,7 +1034,6 @@ bool PerformInteractionRequest::CheckChoiceIDFromRequest(
const smart_objects::SmartObject& choice_set_id_list) const {
SDL_LOG_AUTO_TRACE();
- size_t choice_list_length = 0;
std::set<uint32_t> choice_id_set;
std::pair<std::set<uint32_t>::iterator, bool> ins_res;
@@ -1046,12 +1041,11 @@ bool PerformInteractionRequest::CheckChoiceIDFromRequest(
auto choice_set = app->FindChoiceSet(choice_set_id_list[i].asInt());
if (smart_objects::SmartType_Null == choice_set.getType()) {
SDL_LOG_ERROR(
-
"Couldn't find choiceset_id = " << choice_set_id_list[i].asInt());
return false;
}
- choice_list_length = choice_set[strings::choice_set].length();
+ size_t choice_list_length = choice_set[strings::choice_set].length();
const smart_objects::SmartObject& choices_list =
choice_set[strings::choice_set];
for (size_t k = 0; k < choice_list_length; ++k) {
@@ -1076,15 +1070,14 @@ const bool PerformInteractionRequest::HasHMIResponsesToWait() const {
void PerformInteractionRequest::SendBothModeResponse(
const smart_objects::SmartObject& msg_param) {
SDL_LOG_AUTO_TRACE();
- mobile_apis::Result::eType perform_interaction_result_code =
- mobile_apis::Result::INVALID_ENUM;
+
app_mngr::commands::ResponseInfo ui_perform_info(
ui_result_code_, HmiInterfaces::HMI_INTERFACE_UI, application_manager_);
app_mngr::commands::ResponseInfo vr_perform_info(
vr_result_code_, HmiInterfaces::HMI_INTERFACE_VR, application_manager_);
const bool result =
PrepareResultForMobileResponse(ui_perform_info, vr_perform_info);
- perform_interaction_result_code =
+ mobile_apis::Result::eType perform_interaction_result_code =
PrepareResultCodeForResponse(ui_perform_info, vr_perform_info);
const smart_objects::SmartObject* response_params =
msg_param.empty() ? NULL : &msg_param;
@@ -1164,18 +1157,23 @@ bool PerformInteractionRequest::SetChoiceIdToResponseMsgParams(
return false;
}
- if (mobile_apis::InteractionMode::eType::MANUAL_ONLY == interaction_mode_) {
- msg_param[strings::choice_id] = ui_choice_id_received_;
- return true;
- }
-
- if (mobile_apis::InteractionMode::eType::VR_ONLY == interaction_mode_) {
- msg_param[strings::choice_id] = vr_choice_id_received_;
- return true;
+ switch (interaction_mode_) {
+ case mobile_apis::InteractionMode::eType::MANUAL_ONLY:
+ if (ui_choice_id_valid) {
+ msg_param[strings::choice_id] = ui_choice_id_received_;
+ }
+ case mobile_apis::InteractionMode::eType::VR_ONLY:
+ if (vr_choice_id_valid) {
+ msg_param[strings::choice_id] = vr_choice_id_received_;
+ }
+ default:
+ if (ui_choice_id_valid) {
+ msg_param[strings::choice_id] = ui_choice_id_received_;
+ } else if (vr_choice_id_valid) {
+ msg_param[strings::choice_id] = vr_choice_id_received_;
+ }
}
- msg_param[strings::choice_id] =
- ui_choice_id_valid ? ui_choice_id_received_ : vr_choice_id_received_;
return true;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/put_file_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/put_file_request.cc
index 50ff392e33..5263991716 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/put_file_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/put_file_request.cc
@@ -165,7 +165,6 @@ void PutFileRequest::Run() {
is_persistent_file_ = false;
bool is_system_file = false;
length_ = binary_data.size();
- bool is_download_complete = true;
bool offset_exist =
(*message_)[strings::msg_params].keyExists(strings::offset);
@@ -252,6 +251,7 @@ void PutFileRequest::Run() {
case mobile_apis::Result::SUCCESS: {
SDL_LOG_INFO("PutFile is successful");
if (!is_system_file) {
+ bool is_download_complete = true;
AppFile file(sync_file_name_,
is_persistent_file_,
is_download_complete,
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
index c30f83bc00..6ac830c378 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/register_app_interface_request.cc
@@ -56,66 +56,14 @@
namespace {
namespace custom_str = utils::custom_string;
-mobile_apis::AppHMIType::eType StringToAppHMIType(const std::string& str) {
- if ("DEFAULT" == str) {
- return mobile_apis::AppHMIType::DEFAULT;
- } else if ("COMMUNICATION" == str) {
- return mobile_apis::AppHMIType::COMMUNICATION;
- } else if ("MEDIA" == str) {
- return mobile_apis::AppHMIType::MEDIA;
- } else if ("MESSAGING" == str) {
- return mobile_apis::AppHMIType::MESSAGING;
- } else if ("NAVIGATION" == str) {
- return mobile_apis::AppHMIType::NAVIGATION;
- } else if ("INFORMATION" == str) {
- return mobile_apis::AppHMIType::INFORMATION;
- } else if ("SOCIAL" == str) {
- return mobile_apis::AppHMIType::SOCIAL;
- } else if ("BACKGROUND_PROCESS" == str) {
- return mobile_apis::AppHMIType::BACKGROUND_PROCESS;
- } else if ("TESTING" == str) {
- return mobile_apis::AppHMIType::TESTING;
- } else if ("SYSTEM" == str) {
- return mobile_apis::AppHMIType::SYSTEM;
- } else if ("PROJECTION" == str) {
- return mobile_apis::AppHMIType::PROJECTION;
- } else if ("REMOTE_CONTROL" == str) {
- return mobile_apis::AppHMIType::REMOTE_CONTROL;
- } else if ("WEB_VIEW" == str) {
- return mobile_apis::AppHMIType::WEB_VIEW;
- } else {
- return mobile_apis::AppHMIType::INVALID_ENUM;
- }
-}
-
-std::string AppHMITypeToString(mobile_apis::AppHMIType::eType type) {
- const std::map<mobile_apis::AppHMIType::eType, std::string> app_hmi_type_map =
- {{mobile_apis::AppHMIType::DEFAULT, "DEFAULT"},
- {mobile_apis::AppHMIType::REMOTE_CONTROL, "REMOTE_CONTROL"},
- {mobile_apis::AppHMIType::COMMUNICATION, "COMMUNICATION"},
- {mobile_apis::AppHMIType::MEDIA, "MEDIA"},
- {mobile_apis::AppHMIType::MESSAGING, "MESSAGING"},
- {mobile_apis::AppHMIType::NAVIGATION, "NAVIGATION"},
- {mobile_apis::AppHMIType::INFORMATION, "INFORMATION"},
- {mobile_apis::AppHMIType::SOCIAL, "SOCIAL"},
- {mobile_apis::AppHMIType::BACKGROUND_PROCESS, "BACKGROUND_PROCESS"},
- {mobile_apis::AppHMIType::TESTING, "TESTING"},
- {mobile_apis::AppHMIType::SYSTEM, "SYSTEM"},
- {mobile_apis::AppHMIType::PROJECTION, "PROJECTION"},
- {mobile_apis::AppHMIType::WEB_VIEW, "WEB_VIEW"}};
-
- std::map<mobile_apis::AppHMIType::eType, std::string>::const_iterator iter =
- app_hmi_type_map.find(type);
-
- return app_hmi_type_map.end() != iter ? iter->second : std::string("");
-}
-
struct AppHMITypeInserter {
- AppHMITypeInserter(smart_objects::SmartObject& so_array)
+ explicit AppHMITypeInserter(smart_objects::SmartObject& so_array)
: index_(0), so_array_(so_array) {}
bool operator()(const std::string& app_hmi_type) {
- so_array_[index_] = StringToAppHMIType(app_hmi_type);
+ so_array_[index_] =
+ application_manager::StringToEnum<mobile_apis::AppHMIType::eType>(
+ app_hmi_type);
++index_;
return true;
}
@@ -131,7 +79,7 @@ struct CheckMissedTypes {
: policy_app_types_(policy_app_types), log_(log) {}
bool operator()(const smart_objects::SmartArray::value_type& value) {
- std::string app_type_str = AppHMITypeToString(
+ std::string app_type_str = application_manager::EnumToString(
static_cast<mobile_apis::AppHMIType::eType>(value.asInt()));
if (!app_type_str.empty()) {
policy::StringArray::const_iterator it = policy_app_types_.begin();
@@ -162,7 +110,7 @@ class SmartArrayValueExtractor {
};
struct IsSameNickname {
- IsSameNickname(const custom_str::CustomString app_name)
+ explicit IsSameNickname(const custom_str::CustomString app_name)
: app_name_(app_name) {}
bool operator()(const policy::StringArray::value_type& nickname) const {
return app_name_.CompareIgnoreCase(nickname.c_str());
@@ -742,6 +690,16 @@ void RegisterAppInterfaceRequest::Run() {
SetupAppDeviceInfo(application);
auto status_notifier = AddApplicationDataToPolicy(application);
+ auto on_app_registered = [application](plugin_manager::RPCPlugin& plugin) {
+ plugin.OnApplicationEvent(plugin_manager::kApplicationRegistered,
+ application);
+ };
+ // To prevent timing issues, this event is called before an app is accessible
+ // by the applications accessor. This prevents incoming hmi rpcs from
+ // attempting to access an app before it has been fully initialized.
+ application_manager_.ApplyFunctorForEachPlugin(on_app_registered);
+ application_manager_.FinalizeAppRegistration(application, connection_key());
+
std::string add_info;
const auto is_resumption_required = ApplicationDataShouldBeResumed(add_info);
@@ -762,12 +720,6 @@ void RegisterAppInterfaceRequest::Run() {
SendSubscribeCustomButtonNotification();
SendChangeRegistrationOnHMI(application);
- auto on_app_registered = [application](plugin_manager::RPCPlugin& plugin) {
- plugin.OnApplicationEvent(plugin_manager::kApplicationRegistered,
- application);
- };
- application_manager_.ApplyFunctorForEachPlugin(on_app_registered);
-
if (is_resumption_required) {
const auto& msg_params = (*message_)[strings::msg_params];
const auto& hash_id = msg_params[strings::hash_id].asString();
@@ -1369,9 +1321,9 @@ bool RegisterAppInterfaceRequest::IsApplicationWithSameAppIdRegistered() {
bool RegisterAppInterfaceRequest::IsWhiteSpaceExist() {
SDL_LOG_AUTO_TRACE();
- const char* str = NULL;
- str = (*message_)[strings::msg_params][strings::app_name].asCharArray();
+ const char* str =
+ (*message_)[strings::msg_params][strings::app_name].asCharArray();
if (!CheckSyntax(str)) {
SDL_LOG_ERROR("Invalid app_name syntax check failed");
return true;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/send_location_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/send_location_request.cc
index 37d43a354b..fcc898b348 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/send_location_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/send_location_request.cc
@@ -119,9 +119,7 @@ void SendLocationRequest::Run() {
}
if (msg_params.keyExists(strings::location_image)) {
- mobile_apis::Result::eType verification_result =
- mobile_apis::Result::SUCCESS;
- verification_result = MessageHelper::VerifyImage(
+ mobile_apis::Result::eType verification_result = MessageHelper::VerifyImage(
(*message_)[strings::msg_params][strings::location_image],
app,
application_manager_);
@@ -132,8 +130,7 @@ void SendLocationRequest::Run() {
}
}
- SmartObject request_msg_params = SmartObject(smart_objects::SmartType_Map);
- request_msg_params = msg_params;
+ SmartObject request_msg_params = msg_params;
request_msg_params[strings::app_id] = app->hmi_app_id();
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_Navigation);
SendHMIRequest(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_global_properties_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_global_properties_request.cc
index 922a45ebdb..396763ff98 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_global_properties_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_global_properties_request.cc
@@ -111,10 +111,8 @@ void SetGlobalPropertiesRequest::Run() {
return;
}
- mobile_apis::Result::eType verification_result = mobile_apis::Result::SUCCESS;
-
if (msg_params.keyExists(strings::menu_icon)) {
- verification_result = MessageHelper::VerifyImage(
+ mobile_apis::Result::eType verification_result = MessageHelper::VerifyImage(
msg_params[strings::menu_icon], app, application_manager_);
if (mobile_apis::Result::INVALID_DATA == verification_result) {
SDL_LOG_ERROR("MessageHelper::VerifyImage return "
@@ -241,11 +239,11 @@ void SetGlobalPropertiesRequest::Run() {
application_manager_.GetPluginManager().ForEachPlugin(
on_global_properties_updated);
- smart_objects::SmartObject params =
+ smart_objects::SmartObject rc_request_params =
smart_objects::SmartObject(smart_objects::SmartType_Map);
- params[strings::app_id] = app->app_id();
- params[strings::user_location] = user_location;
- SendRCRequest(params, true);
+ rc_request_params[strings::app_id] = app->app_id();
+ rc_request_params[strings::user_location] = user_location;
+ SendRCRequest(rc_request_params, true);
}
// check TTS params
@@ -257,7 +255,7 @@ void SetGlobalPropertiesRequest::Run() {
if (is_help_prompt_present) {
smart_objects::SmartObject& help_prompt =
(*message_)[strings::msg_params][strings::help_prompt];
- verification_result =
+ mobile_apis::Result::eType verification_result =
MessageHelper::VerifyTtsFiles(help_prompt, app, application_manager_);
if (mobile_apis::Result::FILE_NOT_FOUND == verification_result) {
@@ -273,8 +271,9 @@ void SetGlobalPropertiesRequest::Run() {
if (is_timeout_prompt_present) {
smart_objects::SmartObject& timeout_prompt =
(*message_)[strings::msg_params][strings::timeout_prompt];
- verification_result = MessageHelper::VerifyTtsFiles(
- timeout_prompt, app, application_manager_);
+ mobile_apis::Result::eType verification_result =
+ MessageHelper::VerifyTtsFiles(
+ timeout_prompt, app, application_manager_);
if (mobile_apis::Result::FILE_NOT_FOUND == verification_result) {
SDL_LOG_ERROR("MessageHelper::VerifyTtsFiles return "
@@ -291,7 +290,7 @@ void SetGlobalPropertiesRequest::Run() {
std::begin(invalid_params),
std::end(invalid_params),
std::string(""),
- [](std::string& first, std::string& second) {
+ [](std::string& first, const std::string& second) {
return first.empty() ? second : first + ", " + second;
});
const std::string info =
@@ -518,7 +517,6 @@ SetGlobalPropertiesRequest::PrepareResultCodeForResponse(
const app_mngr::commands::ResponseInfo& second,
const app_mngr::commands::ResponseInfo& third) {
SDL_LOG_AUTO_TRACE();
- mobile_apis::Result::eType result_code = mobile_apis::Result::INVALID_ENUM;
if (IsResultCodeUnsupported(first, second, third) ||
IsResultCodeUnsupported(second, third, first) ||
IsResultCodeUnsupported(third, first, second)) {
@@ -547,7 +545,7 @@ SetGlobalPropertiesRequest::PrepareResultCodeForResponse(
hmi_apis::Common_Result::eType intermediate_result =
std::max(first_result, second_result);
- result_code = MessageHelper::HMIToMobileResult(
+ mobile_apis::Result::eType result_code = MessageHelper::HMIToMobileResult(
std::max(intermediate_result, third_result));
return result_code;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_media_clock_timer_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_media_clock_timer_request.cc
index b7b8fc27ad..cf5d80ecc0 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_media_clock_timer_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/set_media_clock_timer_request.cc
@@ -77,10 +77,8 @@ void SetMediaClockRequest::Run() {
}
if (isDataValid()) {
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
// copy entirely msg
- msg_params = (*message_)[strings::msg_params];
+ smart_objects::SmartObject msg_params = (*message_)[strings::msg_params];
msg_params[strings::app_id] = app->app_id();
StartAwaitForInterface(HmiInterfaces::HMI_INTERFACE_UI);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_app_menu_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_app_menu_request.cc
index 7d2751ed0d..fdcf9d2434 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_app_menu_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_app_menu_request.cc
@@ -62,9 +62,8 @@ void ShowAppMenuRequest::Run() {
ApplicationSharedPtr app = application_manager_.application(connection_key());
if (!app) {
- SDL_LOG_ERROR(
-
- "Application with id " << connection_key() << " is not registered.");
+ SDL_LOG_ERROR("Application with id " << connection_key()
+ << " is not registered.");
SendResponse(false, mobile_apis::Result::APPLICATION_NOT_REGISTERED);
return;
}
@@ -77,9 +76,8 @@ void ShowAppMenuRequest::Run() {
app->system_context(mobile_apis::PredefinedWindows::DEFAULT_WINDOW),
mobile_apis::SystemContext::SYSCTXT_MAIN,
mobile_apis::SystemContext::SYSCTXT_MENU)) {
- SDL_LOG_ERROR(
-
- "Application with id " << connection_key() << " is not activated.");
+ SDL_LOG_ERROR("Application with id " << connection_key()
+ << " is not activated.");
SendResponse(false, mobile_apis::Result::REJECTED);
return;
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_request.cc
index 04310bcd58..cfb9d5896e 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/show_constant_tbt_request.cc
@@ -80,9 +80,7 @@ void ShowConstantTBTRequest::Run() {
return;
}
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params = (*message_)[strings::msg_params];
+ smart_objects::SmartObject msg_params = (*message_)[strings::msg_params];
if (IsWhiteSpaceExist()) {
SDL_LOG_ERROR("Incoming show constant TBT has contains \t\n \\t \\n");
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/slider_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/slider_request.cc
index 15ced6d5a1..e46d3fd7f0 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/slider_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/slider_request.cc
@@ -109,9 +109,7 @@ void SliderRequest::Run() {
return;
}
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params = (*message_)[strings::msg_params];
+ smart_objects::SmartObject msg_params = (*message_)[strings::msg_params];
msg_params[strings::app_id] = application->app_id();
if (!(*message_)[strings::msg_params].keyExists(strings::timeout)) {
@@ -183,9 +181,9 @@ void SliderRequest::on_event(const event_engine::Event& event) {
bool SliderRequest::IsWhiteSpaceExist() {
SDL_LOG_AUTO_TRACE();
- const char* str = NULL;
- str = (*message_)[strings::msg_params][strings::slider_header].asCharArray();
+ const char* str =
+ (*message_)[strings::msg_params][strings::slider_header].asCharArray();
if (!CheckSyntax(str)) {
SDL_LOG_ERROR("Invalid slider_header value syntax check failed");
return true;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subtle_alert_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subtle_alert_request.cc
index 502290328a..327315b372 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subtle_alert_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/subtle_alert_request.cc
@@ -349,7 +349,6 @@ void SubtleAlertRequest::SendSubtleAlertRequest(int32_t app_id) {
hmi_apis::Common_TextFieldName::subtleAlertText2;
msg_params[hmi_request::alert_strings][index][hmi_request::field_text] =
(*message_)[strings::msg_params][strings::alert_text2];
- index++;
}
// softButtons
@@ -408,8 +407,6 @@ void SubtleAlertRequest::SendSpeakRequest(int32_t app_id,
SmartObject msg_params = smart_objects::SmartObject(SmartType_Map);
if (tts_chunks_exists && length_tts_chunks) {
msg_params[hmi_request::tts_chunks] =
- smart_objects::SmartObject(SmartType_Array);
- msg_params[hmi_request::tts_chunks] =
(*message_)[strings::msg_params][strings::tts_chunks];
}
msg_params[strings::app_id] = app_id;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
index 17e295304c..cca088ed2d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/system_request.cc
@@ -34,10 +34,12 @@ Copyright (c) 2018, Ford Motor Company
#include "sdl_rpc_plugin/commands/mobile/system_request.h"
#include <stdio.h>
+
#include <algorithm>
#include <sstream>
#include <string>
#include <vector>
+
#include "application_manager/policies/policy_handler_interface.h"
#include "formatters/CFormatterJsonBase.h"
#include "interfaces/MOBILE_API.h"
@@ -70,11 +72,99 @@ const unsigned int kAppIdLengthMax = 40U;
const unsigned int kAppNameLengthMax = 100U;
const unsigned int kLanguageArraySizeMax = 100U;
+typedef std::set<std::string> SynonymsSet;
+typedef std::map<std::string, SynonymsSet> SynonymsMap;
+
+bool ValidateSynonymsAtLanguage(const smart_objects::SmartObject& language,
+ const std::string& language_name,
+ SynonymsMap& synonyms_map) {
+ if (!language[language_name].keyExists(json::vrSynonyms)) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "'languages.vrSynonyms' doesn't exist");
+ return false;
+ }
+ const smart_objects::SmartArray* synonyms_array =
+ language[language_name][json::vrSynonyms].asArray();
+ if (!synonyms_array) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSynonyms is not array.");
+ return false;
+ }
+ const size_t synonyms_array_size = synonyms_array->size();
+ if (synonyms_array_size < kVrArraySizeMin) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSynomyms array has [" << synonyms_array_size
+ << "] size < allowed min size [" << kVrArraySizeMin << "]");
+ return false;
+ }
+ if (synonyms_array_size > kVrArraySizeMax) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSynomyms array size [" << synonyms_array_size
+ << "] exceeds maximum allowed size [" << kVrArraySizeMax
+ << "]");
+ return false;
+ }
+
+ for (std::size_t idx = 0; idx < synonyms_array_size; ++idx) {
+ const smart_objects::SmartObject& synonym = (*synonyms_array)[idx];
+ const std::string vrSynonym = synonym.asString();
+ if (vrSynonym.length() > kVrSynonymLengthMax) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSYnomym item [" << idx << "] exceeds max length ["
+ << vrSynonym.length() << "]>[" << kVrSynonymLengthMax
+ << "]");
+ return false;
+ }
+ if (vrSynonym.length() < kVrSynonymLengthMin) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSYnomym item [" << idx << "] length ["
+ << vrSynonym.length() << "] is less then min length ["
+ << kVrSynonymLengthMin << "] allowed.");
+ return false;
+ }
+ // Verify duplicates
+ SynonymsMap::iterator synonyms_map_iter = synonyms_map.find(language_name);
+ if (synonyms_map_iter != synonyms_map.end()) {
+ if (!(*synonyms_map_iter).second.insert(vrSynonym).second) {
+ SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
+ << "vrSYnomym item already defined [" << vrSynonym.c_str()
+ << "] for language [" << language_name << "]");
+ return false;
+ }
+ }
+ }
+ return true;
+}
+
+bool CheckMandatoryParametersPresent(
+ const smart_objects::SmartObject& app_data) {
+ if (!app_data.keyExists(json::android) && !app_data.keyExists(json::ios)) {
+ return false;
+ }
+
+ if (app_data.keyExists(json::android) &&
+ !app_data[json::android].keyExists(json::packageName)) {
+ return false;
+ }
+
+ if (app_data.keyExists(json::ios) &&
+ !app_data[json::ios].keyExists(json::urlScheme)) {
+ return false;
+ }
+
+ if (!app_data.keyExists(json::appId)) {
+ return false;
+ }
+
+ if (!app_data.keyExists(json::name)) {
+ return false;
+ }
+
+ return true;
+}
+
class QueryAppsDataValidator {
public:
- typedef std::set<std::string> SynonymsSet;
- typedef std::map<std::string, SynonymsSet> SynonymsMap;
-
QueryAppsDataValidator(smart_objects::SmartObject& object,
const ApplicationManager& manager)
: data_(object), manager_(manager) {}
@@ -298,96 +388,6 @@ class QueryAppsDataValidator {
return true;
}
- bool ValidateSynonymsAtLanguage(const smart_objects::SmartObject& language,
- const std::string& language_name,
- SynonymsMap& synonyms_map) const {
- if (!language[language_name].keyExists(json::vrSynonyms)) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "'languages.vrSynonyms' doesn't exist");
- return false;
- }
- const smart_objects::SmartArray* synonyms_array =
- language[language_name][json::vrSynonyms].asArray();
- if (!synonyms_array) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSynonyms is not array.");
- return false;
- }
- const size_t synonyms_array_size = synonyms_array->size();
- if (synonyms_array_size < kVrArraySizeMin) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSynomyms array has [" << synonyms_array_size
- << "] size < allowed min size [" << kVrArraySizeMin << "]");
- return false;
- }
- if (synonyms_array_size > kVrArraySizeMax) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSynomyms array size [" << synonyms_array_size
- << "] exceeds maximum allowed size [" << kVrArraySizeMax
- << "]");
- return false;
- }
-
- for (std::size_t idx = 0; idx < synonyms_array_size; ++idx) {
- const smart_objects::SmartObject& synonym = (*synonyms_array)[idx];
- const std::string vrSynonym = synonym.asString();
- if (vrSynonym.length() > kVrSynonymLengthMax) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSYnomym item [" << idx << "] exceeds max length ["
- << vrSynonym.length() << "]>[" << kVrSynonymLengthMax
- << "]");
- return false;
- }
- if (vrSynonym.length() < kVrSynonymLengthMin) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSYnomym item [" << idx << "] length ["
- << vrSynonym.length() << "] is less then min length ["
- << kVrSynonymLengthMin << "] allowed.");
- return false;
- }
- // Verify duplicates
- SynonymsMap::iterator synonyms_map_iter =
- synonyms_map.find(language_name);
- if (synonyms_map_iter != synonyms_map.end()) {
- if (!(*synonyms_map_iter).second.insert(vrSynonym).second) {
- SDL_LOG_WARN(kQueryAppsValidationFailedPrefix
- << "vrSYnomym item already defined ["
- << vrSynonym.c_str() << "] for language ["
- << language_name << "]");
- return false;
- }
- }
- }
- return true;
- }
-
- bool CheckMandatoryParametersPresent(
- const smart_objects::SmartObject& app_data) const {
- if (!app_data.keyExists(json::android) && !app_data.keyExists(json::ios)) {
- return false;
- }
-
- if (app_data.keyExists(json::android) &&
- !app_data[json::android].keyExists(json::packageName)) {
- return false;
- }
-
- if (app_data.keyExists(json::ios) &&
- !app_data[json::ios].keyExists(json::urlScheme)) {
- return false;
- }
-
- if (!app_data.keyExists(json::appId)) {
- return false;
- }
-
- if (!app_data.keyExists(json::name)) {
- return false;
- }
-
- return true;
- }
-
smart_objects::SmartObject& data_;
std::set<std::string> applications_id_set_;
const ApplicationManager& manager_;
@@ -466,7 +466,7 @@ void SystemRequest::Run() {
SDL_LOG_TRACE("Request subtype: " << request_subtype << " is ALLOWED");
}
- std::string file_name = kSYNC;
+ std::string file_name;
if ((*message_)[strings::msg_params].keyExists(strings::file_name)) {
file_name = (*message_)[strings::msg_params][strings::file_name].asString();
} else {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unregister_app_interface_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unregister_app_interface_request.cc
index 10f808b771..14b316f374 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unregister_app_interface_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/unregister_app_interface_request.cc
@@ -51,11 +51,6 @@ void UnregisterAppInterfaceRequest::Run() {
return;
}
- rpc_service_.ManageMobileCommand(
- MessageHelper::GetOnAppInterfaceUnregisteredNotificationToMobile(
- connection_key(),
- mobile_api::AppInterfaceUnregisteredReason::INVALID_ENUM),
- SOURCE_SDL);
application_manager_.EndNaviServices(connection_key());
application_manager_.UnregisterApplication(connection_key(),
mobile_apis::Result::SUCCESS);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_request.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_request.cc
index 824d1150b3..3da9206184 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_request.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/commands/mobile/update_turn_list_request.cc
@@ -112,9 +112,7 @@ void UpdateTurnListRequest::Run() {
}
}
- smart_objects::SmartObject msg_params =
- smart_objects::SmartObject(smart_objects::SmartType_Map);
- msg_params = (*message_)[strings::msg_params];
+ smart_objects::SmartObject msg_params = (*message_)[strings::msg_params];
if ((*message_)[strings::msg_params].keyExists(strings::turn_list)) {
if (!CheckTurnListArray()) {
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
index e01165269a..4756c8b9a2 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/sdl_rpc_plugin.cc
@@ -115,14 +115,6 @@ void SDLRPCPlugin::ProcessResumptionSubscription(
application_manager::Application& app, WayPointsAppExtension& ext) {
SDL_LOG_AUTO_TRACE();
- if (application_manager_->IsAnyAppSubscribedForWayPoints()) {
- SDL_LOG_DEBUG(
- "Subscription to waypoint already exist, no need to send "
- "request to HMI");
- application_manager_->SubscribeAppForWayPoints(app.app_id());
- return;
- }
-
pending_resumption_handler_->HandleResumptionSubscriptionRequest(ext, app);
}
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_pending_resumption_handler.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_pending_resumption_handler.cc
index 8b5d117f54..7aa6dd5273 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_pending_resumption_handler.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/src/waypoints_pending_resumption_handler.cc
@@ -36,6 +36,8 @@ namespace sdl_rpc_plugin {
SDL_CREATE_LOG_VARIABLE("SdlRPCPlugin")
+using hmi_apis::FunctionID::Navigation_SubscribeWayPoints;
+
WayPointsPendingResumptionHandler::WayPointsPendingResumptionHandler(
application_manager::ApplicationManager& application_manager)
: PendingResumptionHandler(application_manager) {}
@@ -43,9 +45,10 @@ WayPointsPendingResumptionHandler::WayPointsPendingResumptionHandler(
smart_objects::SmartObjectSPtr
WayPointsPendingResumptionHandler::CreateSubscriptionRequest() {
SDL_LOG_AUTO_TRACE();
+
auto subscribe_waypoints_msg =
application_manager::MessageHelper::CreateMessageForHMI(
- hmi_apis::FunctionID::Navigation_SubscribeWayPoints,
+ Navigation_SubscribeWayPoints,
application_manager_.GetNextHMICorrelationID());
(*subscribe_waypoints_msg)[application_manager::strings::params]
[application_manager::strings::message_type] =
@@ -53,40 +56,52 @@ WayPointsPendingResumptionHandler::CreateSubscriptionRequest() {
return subscribe_waypoints_msg;
}
+void WayPointsPendingResumptionHandler::SendPendingHMIRequest(
+ PendingRequest& pending_request) {
+ SDL_LOG_AUTO_TRACE();
+ using namespace application_manager;
+
+ SDL_LOG_DEBUG("Sending request with function id: "
+ << Navigation_SubscribeWayPoints
+ << " and correlation_id: " << pending_request.corr_id_);
+
+ auto request = MessageHelper::CreateMessageForHMI(
+ Navigation_SubscribeWayPoints, pending_request.corr_id_);
+ (*request)[strings::params][strings::message_type] =
+ hmi_apis::messageType::request;
+ subscribe_on_event(Navigation_SubscribeWayPoints, pending_request.corr_id_);
+ application_manager_.GetRPCService().ManageHMICommand(request);
+ pending_request.waiting_for_hmi_response_ = true;
+}
+
void WayPointsPendingResumptionHandler::HandleResumptionSubscriptionRequest(
application_manager::AppExtension& extension,
application_manager::Application& app) {
SDL_LOG_AUTO_TRACE();
- WayPointsAppExtension& ext = dynamic_cast<WayPointsAppExtension&>(extension);
- smart_objects::SmartObjectSPtr request = CreateSubscriptionRequest();
- smart_objects::SmartObject& request_ref = *request;
- const auto function_id = static_cast<hmi_apis::FunctionID::eType>(
- request_ref[application_manager::strings::params]
- [application_manager::strings::function_id]
- .asInt());
- const uint32_t corr_id =
- request_ref[application_manager::strings::params]
- [application_manager::strings::correlation_id]
- .asUInt();
+ using namespace application_manager;
+ sync_primitives::AutoLock lock(pending_resumption_lock_);
+ UNUSED(extension);
+
+ if (application_manager_.IsAnyAppSubscribedForWayPoints()) {
+ SDL_LOG_DEBUG(
+ "Subscription to waypoint already exist, no need to send "
+ "request to HMI");
+ application_manager_.SubscribeAppForWayPoints(app.app_id());
+ return;
+ }
+ const auto request = CreateSubscriptionRequest();
+ const auto corr_id =
+ (*request)[strings::params][strings::correlation_id].asInt();
auto resumption_request =
- MakeResumptionRequest(corr_id, function_id, *request);
- app_ids_.push(app.app_id());
+ MakeResumptionRequest(corr_id, Navigation_SubscribeWayPoints, *request);
- if (pending_requests_.empty()) {
- SDL_LOG_DEBUG("There are no pending requests for app_id: " << app.app_id());
- pending_requests_[corr_id] = request_ref;
- subscribe_on_event(function_id, corr_id);
- SDL_LOG_DEBUG("Sending request with function id: "
- << function_id << " and correlation_id: " << corr_id);
-
- application_manager_.GetRPCService().ManageHMICommand(request);
- } else {
- SDL_LOG_DEBUG("There are pending requests. Frozen resumption for app id "
- << app.app_id() << " corr id = " << corr_id);
- ResumptionAwaitingHandling frozen_res{
- app.app_id(), ext, resumption_request};
- frozen_resumptions_.push_back(frozen_res);
+ PendingRequest pending_request(app.app_id(), corr_id);
+ pending_requests_.push_back(pending_request);
+ SDL_LOG_DEBUG("Add to pending resumptins corr_id = " << corr_id);
+
+ if (pending_requests_.size() == 1) {
+ SendPendingHMIRequest(pending_requests_.front());
}
resumption_data_processor().SubscribeToResponse(app.app_id(),
resumption_request);
@@ -94,42 +109,32 @@ void WayPointsPendingResumptionHandler::HandleResumptionSubscriptionRequest(
void WayPointsPendingResumptionHandler::OnResumptionRevert() {
SDL_LOG_AUTO_TRACE();
- using namespace application_manager;
+ sync_primitives::AutoLock lock(pending_resumption_lock_);
- if (!pending_requests_.empty()) {
- SDL_LOG_DEBUG("Still waiting for some response");
+ if (pending_requests_.empty()) {
+ SDL_LOG_DEBUG("No pending resumptions");
return;
}
- if (!frozen_resumptions_.empty()) {
- ResumptionAwaitingHandling frozen_resumption = frozen_resumptions_.back();
- frozen_resumptions_.pop_back();
-
- auto request = std::make_shared<smart_objects::SmartObject>(
- frozen_resumption.request_to_send_.message);
- const uint32_t cid =
- (*request)[strings::params][strings::correlation_id].asUInt();
- const auto fid = static_cast<hmi_apis::FunctionID::eType>(
- (*request)[strings::params][strings::function_id].asInt());
-
- SDL_LOG_DEBUG("Subscribing for event with function id: "
- << fid << " correlation id: " << cid);
- subscribe_on_event(fid, cid);
- pending_requests_[cid] = *request;
- SDL_LOG_DEBUG("Sending request with fid: " << fid << " and cid: " << cid);
- application_manager_.GetRPCService().ManageHMICommand(request);
+ auto& pending_request = pending_requests_.front();
+ if (pending_request.waiting_for_hmi_response_) {
+ SDL_LOG_DEBUG("Pending resumption for "
+ << pending_request.app_id_
+ << " is already waiting for HMI response");
+ return;
}
+ SendPendingHMIRequest(pending_request);
}
void WayPointsPendingResumptionHandler::RaiseFakeSuccessfulResponse(
- ns_smart_device_link::ns_smart_objects::SmartObject response,
const int32_t corr_id) {
using namespace application_manager;
- response[strings::params][strings::correlation_id] = corr_id;
- auto fid = static_cast<hmi_apis::FunctionID::eType>(
- response[strings::params][strings::function_id].asInt());
- event_engine::Event event(fid);
- event.set_smart_object(response);
+
+ auto response = MessageHelper::CreateResponseMessageFromHmi(
+ Navigation_SubscribeWayPoints, corr_id, hmi_apis::Common_Result::SUCCESS);
+
+ event_engine::Event event(Navigation_SubscribeWayPoints);
+ event.set_smart_object(*response);
SDL_LOG_TRACE("Raise fake response for subscriber. corr_id : " << corr_id);
event.raise(application_manager_.event_dispatcher());
@@ -139,6 +144,14 @@ void WayPointsPendingResumptionHandler::on_event(
const application_manager::event_engine::Event& event) {
using namespace application_manager;
SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(pending_resumption_lock_);
+
+ unsubscribe_from_event(Navigation_SubscribeWayPoints);
+
+ if (pending_requests_.empty()) {
+ SDL_LOG_DEBUG("Not waiting for any response");
+ return;
+ }
const smart_objects::SmartObject& response = event.smart_object();
const uint32_t corr_id = event.smart_object_correlation_id();
@@ -146,64 +159,45 @@ void WayPointsPendingResumptionHandler::on_event(
SDL_LOG_TRACE("Received event with function id: "
<< event.id() << " and correlation id: " << corr_id);
- smart_objects::SmartObject pending_request;
- if (pending_requests_.find(corr_id) == pending_requests_.end()) {
- SDL_LOG_ERROR("corr id " << corr_id << " NOT found");
- return;
- }
- pending_request = pending_requests_[corr_id];
- pending_requests_.erase(corr_id);
- if (app_ids_.empty()) {
- SDL_LOG_ERROR("app_ids is empty");
- return;
- }
- uint32_t app_id = app_ids_.front();
- app_ids_.pop();
- auto app = application_manager_.application(app_id);
+ auto current_pending = pending_requests_.front();
+ pending_requests_.pop_front();
+
+ auto app = application_manager_.application(current_pending.app_id_);
if (!app) {
- SDL_LOG_ERROR("Application not found " << app_id);
+ SDL_LOG_WARN("Application not found " << current_pending.app_id_);
return;
}
if (resumption::IsResponseSuccessful(response)) {
- SDL_LOG_DEBUG("Resumption of subscriptions is successful");
-
+ SDL_LOG_DEBUG("Resumption of waypoints is successful");
application_manager_.SubscribeAppForWayPoints(app);
+ }
+ ProcessNextPendingResumption();
+}
- for (auto& frozen_resumption : frozen_resumptions_) {
- auto corr_id = frozen_resumption.request_to_send_
- .message[strings::params][strings::correlation_id]
- .asInt();
- RaiseFakeSuccessfulResponse(response, corr_id);
- application_manager_.SubscribeAppForWayPoints(frozen_resumption.app_id);
- }
- frozen_resumptions_.clear();
- } else {
- SDL_LOG_DEBUG("Resumption of subscriptions is NOT successful");
-
- if (frozen_resumptions_.empty()) {
- SDL_LOG_DEBUG("frozen resumptions list is empty");
- return;
- }
-
- ResumptionAwaitingHandling frozen_resumption = frozen_resumptions_.back();
- frozen_resumptions_.pop_back();
- auto resumption_req = frozen_resumption.request_to_send_;
- const uint32_t cid =
- resumption_req.message[strings::params][strings::correlation_id]
- .asInt();
- const hmi_apis::FunctionID::eType fid =
- static_cast<hmi_apis::FunctionID::eType>(
- resumption_req.message[strings::params][strings::function_id]
- .asInt());
- subscribe_on_event(fid, cid);
- auto request =
- std::make_shared<smart_objects::SmartObject>(resumption_req.message);
- SDL_LOG_DEBUG("Subscribing for event with function id: "
- << fid << " correlation id: " << cid);
- pending_requests_[cid] = *request;
- SDL_LOG_DEBUG("Sending request with fid: " << fid << " and cid: " << cid);
- application_manager_.GetRPCService().ManageHMICommand(request);
+void WayPointsPendingResumptionHandler::ProcessNextPendingResumption() {
+ SDL_LOG_AUTO_TRACE();
+ if (pending_requests_.empty()) {
+ SDL_LOG_DEBUG("No more pending resumptions");
+ return;
+ }
+ auto& pending = pending_requests_.front();
+ if (pending.waiting_for_hmi_response_) {
+ SDL_LOG_DEBUG("Request was already sent to HMI for " << pending.app_id_);
+ return;
}
+
+ if (!application_manager_.IsAnyAppSubscribedForWayPoints()) {
+ SendPendingHMIRequest(pending);
+ return;
+ }
+
+ auto pending_copy = pending;
+ pending_requests_.pop_front();
+ auto app = application_manager_.application(pending_copy.app_id_);
+ application_manager_.SubscribeAppForWayPoints(app);
+ RaiseFakeSuccessfulResponse(pending_copy.corr_id_);
+ ProcessNextPendingResumption();
}
+
} // namespace sdl_rpc_plugin
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/get_system_info_response_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/get_system_info_response_test.cc
index 30d125ff46..8cdce4fa74 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/get_system_info_response_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/get_system_info_response_test.cc
@@ -69,8 +69,7 @@ namespace {
const uint32_t kConnectionKey = 2u;
const std::string ccpu_version("4.1.3.B_EB355B");
const std::string wers_country_code("WAEGB");
-const uint32_t lang_code = 0u;
-const std::string kLanguage = "";
+const std::string lang_code("EN-US");
} // namespace
class GetSystemInfoResponseTest
@@ -99,15 +98,8 @@ TEST_F(GetSystemInfoResponseTest, GetSystemInfo_SUCCESS) {
ResponseFromHMIPtr command(CreateCommand<GetSystemInfoResponse>(command_msg));
- std::string language;
- EXPECT_CALL(mock_message_helper_,
- CommonLanguageToString(
- static_cast<hmi_apis::Common_Language::eType>(lang_code)))
- .WillOnce(Return(language));
- EXPECT_EQ(kLanguage, language);
-
EXPECT_CALL(mock_policy_handler_,
- OnGetSystemInfo(ccpu_version, wers_country_code, kLanguage));
+ OnGetSystemInfo(ccpu_version, wers_country_code, lang_code));
command->Run();
}
@@ -121,11 +113,6 @@ TEST_F(GetSystemInfoResponseTest, GetSystemInfo_UNSUCCESS) {
ResponseFromHMIPtr command(CreateCommand<GetSystemInfoResponse>(command_msg));
- EXPECT_CALL(mock_message_helper_,
- CommonLanguageToString(
- static_cast<hmi_apis::Common_Language::eType>(lang_code)))
- .Times(0);
-
EXPECT_CALL(mock_hmi_capabilities_, UpdateCachedCapabilities());
EXPECT_CALL(mock_policy_handler_, SetPreloadedPtFlag(false));
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
index 20ca4d3dff..400481f506 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/hmi_notifications_test.cc
@@ -256,8 +256,6 @@ class HMICommandsNotificationsTest
ON_CALL(app_mngr_, application_by_hmi_app(_)).WillByDefault(Return(app_));
ON_CALL(*app_ptr_, app_id()).WillByDefault(Return(kAppId_));
ON_CALL(app_mngr_, application(kConnectionKey)).WillByDefault(Return(app_));
- ON_CALL(mock_message_helper_, MobileLanguageToString(kMobileLanguage))
- .WillByDefault(Return(kDefaultLanguage));
ON_CALL(app_mngr_, connection_handler())
.WillByDefault(ReturnRef(mock_connection_handler_));
}
@@ -786,7 +784,6 @@ TEST_F(HMICommandsNotificationsTest,
std::shared_ptr<Command> command =
CreateCommand<OnSystemInfoChangedNotification>(message);
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(_));
EXPECT_CALL(mock_policy_handler_, OnSystemInfoChanged(_));
command->Run();
}
@@ -1031,14 +1028,12 @@ TEST_F(HMICommandsNotificationsTest,
using ExitReason = hmi_apis::Common_ApplicationExitReason::eType;
std::vector<ExitReason> reason_list = {
ExitReason::UNAUTHORIZED_TRANSPORT_REGISTRATION,
- ExitReason::UNSUPPORTED_HMI_RESOURCE,
- ExitReason::RESOURCE_CONSTRAINT};
+ ExitReason::UNSUPPORTED_HMI_RESOURCE};
using UnregisteredReason = mobile_apis::AppInterfaceUnregisteredReason::eType;
std::vector<UnregisteredReason> mobile_reason_list = {
UnregisteredReason::APP_UNAUTHORIZED,
- UnregisteredReason::UNSUPPORTED_HMI_RESOURCE,
- UnregisteredReason::RESOURCE_CONSTRAINT};
+ UnregisteredReason::UNSUPPORTED_HMI_RESOURCE};
std::vector<mobile_apis::AppInterfaceUnregisteredReason::eType>::iterator
it_mobile_reason = mobile_reason_list.begin();
@@ -1072,6 +1067,47 @@ TEST_F(HMICommandsNotificationsTest,
}
TEST_F(HMICommandsNotificationsTest,
+ OnExitApplicationNotificationResourceConstraintReason) {
+ auto message = CreateMessage();
+ (*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
+ const auto notification = std::make_shared<smart_objects::SmartObject>();
+ (*notification)[am::strings::params][am::strings::function_id] =
+ static_cast<int32_t>(
+ mobile_apis::FunctionID::OnAppInterfaceUnregisteredID);
+ (*notification)[am::strings::params][am::strings::message_type] =
+ static_cast<int32_t>(am::MessageType::kNotification);
+ (*notification)[am::strings::params][am::strings::connection_key] = kAppId_;
+
+ using ExitReason = hmi_apis::Common_ApplicationExitReason::eType;
+ auto hmi_reason = ExitReason::RESOURCE_CONSTRAINT;
+
+ using UnregisteredReason = mobile_apis::AppInterfaceUnregisteredReason::eType;
+ auto mobile_reason = UnregisteredReason::RESOURCE_CONSTRAINT;
+
+ (*message)[am::strings::msg_params][am::strings::reason] = hmi_reason;
+ const auto command = CreateCommand<OnExitApplicationNotification>(message);
+
+ (*notification)[am::strings::msg_params][am::strings::reason] =
+ static_cast<int32_t>(mobile_reason);
+
+ am::plugin_manager::MockRPCPluginManager mock_rpc_plugin_manager_;
+ EXPECT_CALL(app_mngr_, GetPluginManager())
+ .WillRepeatedly(ReturnRef(mock_rpc_plugin_manager_));
+
+ EXPECT_CALL(app_mngr_, application(kAppId_)).WillRepeatedly(Return(app_));
+ EXPECT_CALL(
+ mock_message_helper_,
+ GetOnAppInterfaceUnregisteredNotificationToMobile(kAppId_, mobile_reason))
+ .WillOnce(Return(notification));
+ EXPECT_CALL(mock_rpc_service_,
+ ManageMobileCommand(notification, Command::SOURCE_SDL));
+ EXPECT_CALL(app_mngr_, UnregisterApplication(_, _, _, _)).Times(0);
+
+ ASSERT_TRUE(command->Init());
+ command->Run();
+}
+
+TEST_F(HMICommandsNotificationsTest,
OnExitApplicationNotificationUnhandledReason) {
MessageSharedPtr message = CreateMessage();
(*message)[am::strings::msg_params][am::strings::app_id] = kAppId_;
@@ -1842,7 +1878,7 @@ TEST_F(HMICommandsNotificationsTest, OnDriverDistractionNotificationEmptyData) {
ON_CALL(mock_policy_handler_, LockScreenDismissalEnabledState())
.WillByDefault(Return(OptionalBool(true)));
- std::string required_language = "en-us";
+ std::string required_language = "EN-US";
ON_CALL(mock_policy_handler_,
LockScreenDismissalWarningMessage(required_language))
.WillByDefault(Return(
@@ -1872,7 +1908,7 @@ TEST_F(HMICommandsNotificationsTest,
typedef boost::optional<bool> OptionalBool;
ON_CALL(mock_policy_handler_, LockScreenDismissalEnabledState())
.WillByDefault(Return(OptionalBool(true)));
- std::string required_language = "en-us";
+ std::string required_language = "EN-US";
ON_CALL(mock_policy_handler_,
LockScreenDismissalWarningMessage(required_language))
.WillByDefault(Return(
@@ -1900,7 +1936,9 @@ TEST_F(HMICommandsNotificationsTest, OnDriverDistractionNotificationValidApp) {
typedef boost::optional<bool> OptionalBool;
ON_CALL(mock_policy_handler_, LockScreenDismissalEnabledState())
.WillByDefault(Return(OptionalBool(true)));
- std::string required_language = "en-us";
+ std::string required_language = "EN-US";
+ ON_CALL(*app_ptr_, ui_language()).WillByDefault(ReturnRef(kMobileLanguage));
+
ON_CALL(mock_policy_handler_,
LockScreenDismissalWarningMessage(required_language))
.WillByDefault(Return(
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_set_video_config_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_set_video_config_request_test.cc
index d6ef540bc0..7ce3a353e9 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_set_video_config_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/navi_set_video_config_request_test.cc
@@ -101,11 +101,9 @@ TEST_F(NaviSetVideoConfigRequestTest, OnEventWithSuccessResponse) {
Event event(kEventID);
event.set_smart_object(*event_msg);
- std::vector<std::string> empty;
- EXPECT_CALL(
- app_mngr_,
- OnStreamingConfigured(
- kAppId, protocol_handler::ServiceType::kMobileNav, true, empty))
+ EXPECT_CALL(app_mngr_,
+ OnStreamingConfigurationSuccessful(
+ kAppId, protocol_handler::ServiceType::kMobileNav))
.Times(1);
command->on_event(event);
@@ -151,10 +149,9 @@ TEST_F(NaviSetVideoConfigRequestTest, OnEventWithRejectedResponse) {
event.set_smart_object(*event_msg);
std::vector<std::string> rejected_params;
- EXPECT_CALL(app_mngr_,
- OnStreamingConfigured(
- kAppId, protocol_handler::ServiceType::kMobileNav, false, _))
- .WillOnce(SaveArg<3>(&rejected_params));
+ std::string reason("Received SetVideoConfig failure response");
+ EXPECT_CALL(app_mngr_, OnStreamingConfigurationFailed(kAppId, _, reason))
+ .WillOnce(SaveArg<1>(&rejected_params));
command->on_event(event);
@@ -181,10 +178,8 @@ TEST_F(NaviSetVideoConfigRequestTest,
event.set_smart_object(*event_msg);
std::vector<std::string> empty;
- EXPECT_CALL(
- app_mngr_,
- OnStreamingConfigured(
- kAppId, protocol_handler::ServiceType::kMobileNav, false, empty))
+ std::string reason("Received SetVideoConfig failure response");
+ EXPECT_CALL(app_mngr_, OnStreamingConfigurationFailed(kAppId, empty, reason))
.WillOnce(Return());
command->on_event(event);
@@ -198,10 +193,8 @@ TEST_F(NaviSetVideoConfigRequestTest, OnTimeout) {
CreateCommand<NaviSetVideoConfigRequest>(request_msg);
std::vector<std::string> empty;
- EXPECT_CALL(
- app_mngr_,
- OnStreamingConfigured(
- kAppId, protocol_handler::ServiceType::kMobileNav, false, empty))
+ std::string reason("Timed out while waiting for SetVideoConfig response");
+ EXPECT_CALL(app_mngr_, OnStreamingConfigurationFailed(kAppId, empty, reason))
.WillOnce(Return());
EXPECT_CALL(app_mngr_, TerminateRequest(_, _, _)).Times(1);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc
index fe6ba7c4e3..642b4e651d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/on_driver_distraction_notification_test.cc
@@ -95,8 +95,6 @@ class HMIOnDriverDistractionNotificationTest
.WillByDefault(ReturnRef(kMobileLanguage));
ON_CALL(app_mngr_, application(kConnectionKey))
.WillByDefault(Return(mock_app_));
- ON_CALL(mock_message_helper_, MobileLanguageToString(kMobileLanguage))
- .WillByDefault(Return(kDefaultLanguage));
}
MockAppPtr mock_app_;
@@ -327,8 +325,6 @@ TEST_F(HMIOnDriverDistractionNotificationTest,
mobile_apis::Language::FR_FR;
std::string required_language = "FR-FR";
ON_CALL(*mock_app_, ui_language()).WillByDefault(ReturnRef(mobile_language));
- ON_CALL(mock_message_helper_, MobileLanguageToString(mobile_language))
- .WillByDefault(Return(required_language));
policy::CheckPermissionResult result;
result.hmi_level_permitted = policy::kRpcAllowed;
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
index 93344f1a0d..31285f5b17 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_activate_app_request_test.cc
@@ -40,6 +40,7 @@
#include "application_manager/mock_message_helper.h"
#include "application_manager/mock_state_controller.h"
#include "application_manager/policies/mock_policy_handler_interface.h"
+#include "application_manager/postponed_activation_controller.h"
#include "connection_handler/mock_connection_handler.h"
#include "gtest/gtest.h"
#include "hmi/sdl_activate_app_request.h"
@@ -139,13 +140,20 @@ TEST_F(SDLActivateAppRequestTest, Run_ActivateApp_SUCCESS) {
std::shared_ptr<SDLActivateAppRequest> command(
CreateCommand<SDLActivateAppRequest>(msg));
+ MockAppPtr mock_app(CreateMockApp());
EXPECT_CALL(app_mngr_, WaitingApplicationByID(kAppID))
- .WillOnce(Return(ApplicationSharedPtr()));
- EXPECT_CALL(app_mngr_, state_controller())
- .WillOnce(ReturnRef(mock_state_controller_));
+ .WillOnce(Return(mock_app));
+ ON_CALL(app_mngr_, state_controller())
+ .WillByDefault(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
+ am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
+ state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
+
+ EXPECT_CALL(*mock_app,
+ CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
+ .WillOnce(Return(state));
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
@@ -303,7 +311,7 @@ TEST_F(SDLActivateAppRequestTest, FirstAppActive_SUCCESS) {
command->Run();
}
-TEST_F(SDLActivateAppRequestTest, FirstAppNotActive_SUCCESS) {
+TEST_F(SDLActivateAppRequestTest, FirstAppNotActiveNONE_SUCCESS) {
MessageSharedPtr msg = CreateMessage();
SetCorrelationAndAppID(msg);
@@ -312,12 +320,18 @@ TEST_F(SDLActivateAppRequestTest, FirstAppNotActive_SUCCESS) {
MockAppPtr mock_app(CreateMockApp());
ON_CALL(app_mngr_, application(kAppID)).WillByDefault(Return(mock_app));
- EXPECT_CALL(app_mngr_, state_controller())
- .WillOnce(ReturnRef(mock_state_controller_));
+ ON_CALL(app_mngr_, state_controller())
+ .WillByDefault(ReturnRef(mock_state_controller_));
EXPECT_CALL(mock_state_controller_,
IsStateActive(am::HmiState::StateID::STATE_ID_DEACTIVATE_HMI))
.WillOnce(Return(false));
EXPECT_CALL(*mock_app, IsRegistered()).WillOnce(Return(true));
+ am::HmiStatePtr state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
+ state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
+
+ EXPECT_CALL(*mock_app,
+ CurrentHmiState(mobile_apis::PredefinedWindows::DEFAULT_WINDOW))
+ .WillOnce(Return(state));
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
@@ -542,6 +556,10 @@ TEST_F(SDLActivateAppRequestTest, OnEvent_SUCCESS) {
MockAppPtr mock_app(CreateMockApp());
EXPECT_CALL(app_mngr_, application_by_hmi_app(_)).WillOnce(Return(mock_app));
+
+ auto hmi_state = std::make_shared<am::HmiState>(mock_app, app_mngr_);
+ hmi_state->set_hmi_level(mobile_apis::HMILevel::HMI_NONE);
+ EXPECT_CALL(*mock_app, CurrentHmiState(_)).WillOnce(Return(hmi_state));
EXPECT_CALL(*mock_app, app_id()).WillOnce(Return(kAppID));
EXPECT_CALL(mock_policy_handler_, OnActivateApp(kAppID, kCorrelationID));
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_get_user_friendly_message_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_get_user_friendly_message_request_test.cc
index 0e87acef1f..d457b2a697 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_get_user_friendly_message_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/hmi/sdl_get_user_friendly_message_request_test.cc
@@ -62,8 +62,8 @@ using testing::ReturnRef;
namespace {
const uint32_t kCorrelationID = 1u;
const uint32_t kAppID = 2u;
-const std::string kLanguageDe = "de-de";
-const std::string kLanguageEn = "en-gb";
+const std::string kLanguageDe = "DE-DE";
+const std::string kLanguageEn = "EN-GB";
const std::string kMessageCodes = "messageCodes";
const hmi_apis::Common_Language::eType kLanguage =
hmi_apis::Common_Language::EN_GB;
@@ -102,8 +102,6 @@ TEST_F(SDLGetUserFriendlyMessageRequestTest, Run_LanguageSet_SUCCESS) {
std::shared_ptr<SDLGetUserFriendlyMessageRequest> command(
CreateCommand<SDLGetUserFriendlyMessageRequest>(msg));
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(kLanguage))
- .WillOnce(Return(kLanguageEn));
std::vector<std::string> msg_codes;
msg_codes.push_back(kLanguageDe);
msg_codes.push_back(kLanguageEn);
@@ -129,8 +127,6 @@ TEST_F(SDLGetUserFriendlyMessageRequestTest, Run_LanguageNotSet_SUCCESS) {
EXPECT_CALL(mock_hmi_capabilities_, active_ui_language())
.WillOnce(Return(kLanguage));
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(kLanguage))
- .WillOnce(Return(kLanguageEn));
std::vector<std::string> msg_codes;
msg_codes.push_back(kLanguageDe);
msg_codes.push_back(kLanguageEn);
@@ -149,7 +145,6 @@ TEST_F(SDLGetUserFriendlyMessageRequestTest, Run_NoMsgCodes_Canceled) {
std::shared_ptr<SDLGetUserFriendlyMessageRequest> command(
CreateCommand<SDLGetUserFriendlyMessageRequest>(msg));
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(_)).Times(0);
EXPECT_CALL(mock_policy_handler_, OnGetUserFriendlyMessage(_, _, _)).Times(0);
command->Init();
@@ -181,7 +176,6 @@ TEST_F(
std::shared_ptr<SDLGetUserFriendlyMessageRequest> command(
CreateCommand<SDLGetUserFriendlyMessageRequest>(msg));
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(_)).Times(0);
EXPECT_CALL(mock_policy_handler_, OnGetUserFriendlyMessage(_, _, _)).Times(0);
command->Init();
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
index a88a1ade69..23e4418726 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/add_sub_menu_request_test.cc
@@ -104,6 +104,31 @@ TEST_F(AddSubMenuRequestTest, Run_ImageVerificationFailed_EXPECT_INVALID_DATA) {
request_ptr->Run();
}
+TEST_F(AddSubMenuRequestTest, Run_NonExistentParentID_EXPECT_INVALID_ID) {
+ const uint32_t menu_id = 10;
+ const uint32_t parent_id = 4;
+ MessageSharedPtr msg = CreateMsgParams();
+ SmartObject& msg_params = (*msg)[am::strings::msg_params];
+
+ msg_params[am::strings::menu_id] = menu_id;
+ msg_params[am::strings::menu_name] = "test";
+ msg_params[am::strings::parent_id] = parent_id;
+
+ SmartObject sub_menu(smart_objects::SmartType_Null);
+ EXPECT_CALL(*mock_app, FindSubMenu(menu_id)).WillOnce(Return(sub_menu));
+
+ SmartObject parent(smart_objects::SmartType_Null);
+ EXPECT_CALL(*mock_app, FindSubMenu(parent_id)).WillOnce(Return(parent));
+
+ EXPECT_CALL(mock_rpc_service_,
+ ManageMobileCommand(
+ MobileResultCodeIs(mobile_apis::Result::INVALID_ID), _));
+ std::shared_ptr<AddSubMenuRequest> request_ptr =
+ CreateCommand<AddSubMenuRequest>(msg);
+
+ request_ptr->Run();
+}
+
TEST_F(AddSubMenuRequestTest, OnEvent_UI_UNSUPPORTED_RESOURCE) {
const uint32_t menu_id = 10u;
MessageSharedPtr msg = CreateMessage(smart_objects::SmartType_Map);
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
index 33771f6c3d..fab648fc95 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/register_app_interface_request_test.cc
@@ -217,6 +217,8 @@ class RegisterAppInterfaceRequestTest
.WillByDefault(Return(smart_objects::SmartObjectSPtr()));
ON_CALL(mock_hmi_capabilities_, display_capabilities())
.WillByDefault(Return(smart_objects::SmartObjectSPtr()));
+ ON_CALL(mock_hmi_capabilities_, seat_location_capability())
+ .WillByDefault(Return(smart_objects::SmartObjectSPtr()));
ON_CALL(mock_hmi_capabilities_, audio_pass_thru_capabilities())
.WillByDefault(Return(smart_objects::SmartObjectSPtr()));
ON_CALL(mock_hmi_capabilities_, vehicle_type())
diff --git a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/unregister_app_interface_request_test.cc b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/unregister_app_interface_request_test.cc
index f244acb8d6..d7dcbdfa9d 100644
--- a/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/unregister_app_interface_request_test.cc
+++ b/src/components/application_manager/rpc_plugins/sdl_rpc_plugin/test/commands/mobile/unregister_app_interface_request_test.cc
@@ -85,20 +85,9 @@ TEST_F(UnregisterAppInterfaceRequestTest, Run_SUCCESS) {
MockAppPtr mock_app(CreateMockApp());
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillRepeatedly(Return(mock_app));
-
- const mobile_apis::AppInterfaceUnregisteredReason::eType kUnregisterReason =
- mobile_apis::AppInterfaceUnregisteredReason::INVALID_ENUM;
-
- MessageSharedPtr dummy_msg(CreateMessage());
- EXPECT_CALL(mock_message_helper_,
- GetOnAppInterfaceUnregisteredNotificationToMobile(
- kConnectionKey, kUnregisterReason))
- .WillOnce(Return(dummy_msg));
{
::testing::InSequence sequence;
- EXPECT_CALL(mock_rpc_service_, ManageMobileCommand(dummy_msg, _));
-
EXPECT_CALL(app_mngr_,
UnregisterApplication(
kConnectionKey, mobile_apis::Result::SUCCESS, _, _));
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
index 5b597cfcab..1910a9efdf 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/include/vehicle_info_plugin/vehicle_info_plugin.h
@@ -42,7 +42,8 @@ class VehicleInfoAppExtension;
namespace app_mngr = application_manager;
namespace plugins = application_manager::plugin_manager;
-enum SubscribeStatus { SUBSCRIBE, UNSUBSCRIBE };
+bool IsSubscribedAppExist(const std::string& ivi,
+ const app_mngr::ApplicationManager& app_manager);
class VehicleInfoPlugin : public plugins::RPCPlugin {
public:
@@ -96,7 +97,6 @@ class VehicleInfoPlugin : public plugins::RPCPlugin {
const std::set<std::string>& list_of_subscriptions);
private:
- bool IsSubscribedAppExist(const std::string& ivi);
bool IsAnyPendingSubscriptionExist(const std::string& ivi);
void UnsubscribeFromRemovedVDItems();
smart_objects::SmartObjectSPtr GetUnsubscribeIVIRequest(
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
index d51790ea55..9e35e96ce3 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/commands/mobile/subscribe_vehicle_data_request.cc
@@ -261,7 +261,7 @@ void SubscribeVehicleDataRequest::AddAlreadySubscribedVI(
struct SubscribedToIVIPredicate {
std::string vehicle_info_;
- SubscribedToIVIPredicate(std::string vehicle_info)
+ explicit SubscribedToIVIPredicate(const std::string& vehicle_info)
: vehicle_info_(vehicle_info) {}
bool operator()(const ApplicationSharedPtr app) const {
DCHECK_OR_RETURN(app, false);
@@ -393,6 +393,7 @@ void SubscribeVehicleDataRequest::CheckVISubscriptions(
return;
}
+ // cppcheck-suppress knownConditionTrueFalse
if (0 == subscribed_items && is_interface_available) {
out_result_code = mobile_apis::Result::IGNORED;
out_info = "Already subscribed on provided VehicleData.";
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
index b85fd5aaaf..af9d605ff0 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/custom_vehicle_data_manager_impl.cc
@@ -161,7 +161,7 @@ smart_objects::SmartObject CustomVehicleDataManagerImpl::CreateHMIMessageParams(
const policy_table::VehicleDataItem&)>
ParamsConstructor;
- auto fill_param = [](ParamsConstructor& constructor,
+ auto fill_param = [](const ParamsConstructor& constructor,
const policy_table::VehicleDataItem& param,
smart_objects::SmartObject* out_params) {
DCHECK_OR_RETURN_VOID(out_params)
@@ -354,12 +354,14 @@ void CustomVehicleDataManagerImpl::UpdateVehicleDataItems() {
};
auto get_vehicle_data_history =
- [&vehicle_data_items](std::string name) -> std::vector<VehicleDataItem> {
+ [&vehicle_data_items](
+ const std::string& name) -> std::vector<VehicleDataItem> {
std::vector<VehicleDataItem> result;
- std::copy_if(vehicle_data_items.begin(),
- vehicle_data_items.end(),
- std::back_inserter(result),
- [&name](VehicleDataItem& item) { return item.name == name; });
+ std::copy_if(
+ vehicle_data_items.begin(),
+ vehicle_data_items.end(),
+ std::back_inserter(result),
+ [&name](const VehicleDataItem& item) { return item.name == name; });
std::sort(result.begin(),
result.end(),
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_data_item_schema.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_data_item_schema.cc
index b4ae7aca45..dce0a41183 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_data_item_schema.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_data_item_schema.cc
@@ -117,16 +117,21 @@ smart_objects::ISchemaItemPtr VehicleDataItemSchema::GetPODTypeSchema(
using FloatItemParam = smart_objects::TSchemaItemParameter<double>;
using StringSchemaItem = smart_objects::CStringSchemaItem;
using StringItemParam = smart_objects::TSchemaItemParameter<size_t>;
+ using StringItemValueParam = smart_objects::TSchemaItemParameter<std::string>;
using BoolSchemaItem = smart_objects::CBoolSchemaItem;
using BoolItemParam = smart_objects::TSchemaItemParameter<bool>;
if (policy_item.type == policy_table::VehicleDataItem::kInteger) {
- return IntSchemaItem::create(policy_item.minvalue.is_initialized()
- ? IntItemParam(*policy_item.minvalue)
- : IntItemParam(),
- policy_item.maxvalue.is_initialized()
- ? IntItemParam(*policy_item.maxvalue)
- : IntItemParam());
+ return IntSchemaItem::create(
+ policy_item.minvalue.is_initialized()
+ ? IntItemParam(*policy_item.minvalue)
+ : IntItemParam(),
+ policy_item.maxvalue.is_initialized()
+ ? IntItemParam(*policy_item.maxvalue)
+ : IntItemParam(),
+ policy_item.defvalue.is_initialized()
+ ? IntItemParam(std::stol(*policy_item.defvalue))
+ : IntItemParam());
}
if (policy_item.type == policy_table::VehicleDataItem::kFloat ||
policy_item.type == policy_table::VehicleDataItem::kDouble) {
@@ -136,6 +141,9 @@ smart_objects::ISchemaItemPtr VehicleDataItemSchema::GetPODTypeSchema(
: FloatItemParam(),
policy_item.maxvalue.is_initialized()
? FloatItemParam(double(*policy_item.maxvalue))
+ : FloatItemParam(),
+ policy_item.defvalue.is_initialized()
+ ? FloatItemParam(std::stod(*policy_item.defvalue))
: FloatItemParam());
}
if (policy_item.type == policy_table::VehicleDataItem::kString) {
@@ -145,10 +153,16 @@ smart_objects::ISchemaItemPtr VehicleDataItemSchema::GetPODTypeSchema(
: 0),
policy_item.maxlength.is_initialized()
? StringItemParam(*policy_item.maxlength)
- : StringItemParam());
+ : StringItemParam(),
+ policy_item.defvalue.is_initialized()
+ ? StringItemValueParam(std::string(*policy_item.defvalue))
+ : StringItemValueParam());
}
if (policy_item.type == policy_table::VehicleDataItem::kBoolean) {
- return BoolSchemaItem::create(BoolItemParam(true));
+ return BoolSchemaItem::create(
+ policy_item.defvalue.is_initialized()
+ ? BoolItemParam(*policy_item.defvalue == "true")
+ : BoolItemParam());
}
std::string error_msg = std::string("Invalid POD type provided: ") +
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_hmi_command_factory.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_hmi_command_factory.cc
index 3687245066..131b5304c4 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_hmi_command_factory.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_hmi_command_factory.cc
@@ -60,7 +60,7 @@ namespace strings = app_mngr::strings;
template <typename VehicleInfoCommandType>
class VehicleInfoCommandCreator : public application_manager::CommandCreator {
public:
- VehicleInfoCommandCreator(const VehicleInfoCommandParams& params)
+ explicit VehicleInfoCommandCreator(const VehicleInfoCommandParams& params)
: params_(params) {}
private:
@@ -85,7 +85,8 @@ template <>
class VehicleInfoCommandCreator<VehicleInfoInvalidCommand>
: public application_manager::CommandCreator {
public:
- VehicleInfoCommandCreator(const VehicleInfoCommandParams& params) {
+ // cppcheck-suppress unusedFunction //Used in VehicleInfoCommandCreatorFactory
+ explicit VehicleInfoCommandCreator(const VehicleInfoCommandParams& params) {
UNUSED(params);
}
@@ -103,7 +104,8 @@ class VehicleInfoCommandCreator<VehicleInfoInvalidCommand>
};
struct VehicleInfoCommandCreatorFactory {
- VehicleInfoCommandCreatorFactory(const VehicleInfoCommandParams& params)
+ explicit VehicleInfoCommandCreatorFactory(
+ const VehicleInfoCommandParams& params)
: params_(params) {}
template <typename VehicleInfoCommandType>
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_mobile_command_factory.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_mobile_command_factory.cc
index b2d7df5d28..77cb5e71d7 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_mobile_command_factory.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_mobile_command_factory.cc
@@ -60,7 +60,7 @@ namespace strings = app_mngr::strings;
template <typename VehicleInfoCommandType>
class VehicleInfoCommandCreator : public application_manager::CommandCreator {
public:
- VehicleInfoCommandCreator(const VehicleInfoCommandParams& params)
+ explicit VehicleInfoCommandCreator(const VehicleInfoCommandParams& params)
: params_(params) {}
private:
@@ -85,7 +85,7 @@ template <>
class VehicleInfoCommandCreator<VehicleInfoInvalidCommand>
: public application_manager::CommandCreator {
public:
- VehicleInfoCommandCreator(const VehicleInfoCommandParams& params) {
+ explicit VehicleInfoCommandCreator(const VehicleInfoCommandParams& params) {
UNUSED(params);
}
@@ -103,7 +103,8 @@ class VehicleInfoCommandCreator<VehicleInfoInvalidCommand>
};
struct VehicleInfoCommandCreatorFactory {
- VehicleInfoCommandCreatorFactory(const VehicleInfoCommandParams& params)
+ explicit VehicleInfoCommandCreatorFactory(
+ const VehicleInfoCommandParams& params)
: params_(params) {}
template <typename VehicleInfoCommandType>
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
index bb71ea26b1..6721d93658 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_pending_resumption_handler.cc
@@ -38,6 +38,7 @@
#include "application_manager/resumption/resumption_data_processor.h"
#include "utils/helpers.h"
#include "vehicle_info_plugin/custom_vehicle_data_manager.h"
+#include "vehicle_info_plugin/vehicle_info_plugin.h"
namespace vehicle_info_plugin {
SDL_CREATE_LOG_VARIABLE("VehicleInfoPlugin")
@@ -209,6 +210,7 @@ void VehicleInfoPendingResumptionHandler::on_event(
SDL_LOG_AUTO_TRACE();
sync_primitives::AutoLock lock(pending_resumption_lock_);
using namespace application_manager;
+
if (pending_requests_.empty()) {
SDL_LOG_DEBUG("Not waiting for any response");
return;
@@ -270,7 +272,17 @@ void VehicleInfoPendingResumptionHandler::HandleResumptionSubscriptionRequest(
SDL_LOG_TRACE("app id " << app.app_id());
auto& ext = dynamic_cast<VehicleInfoAppExtension&>(extension);
- const auto subscriptions = ext.PendingSubscriptions().GetData();
+ auto subscriptions = ext.PendingSubscriptions().GetData();
+ for (auto ivi = subscriptions.begin(); ivi != subscriptions.end();) {
+ if (IsSubscribedAppExist(*ivi, application_manager_)) {
+ ext.RemovePendingSubscription(*ivi);
+ ext.subscribeToVehicleInfo(*ivi);
+ subscriptions.erase(ivi++);
+ } else {
+ ++ivi;
+ }
+ }
+
if (subscriptions.empty()) {
SDL_LOG_DEBUG("Subscriptions is empty");
return;
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
index 718814b201..1a357a86ee 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/src/vehicle_info_plugin.cc
@@ -48,6 +48,21 @@ namespace strings = application_manager::strings;
namespace plugins = application_manager::plugin_manager;
namespace commands = application_manager::commands;
+bool IsSubscribedAppExist(
+ const std::string& ivi,
+ const application_manager::ApplicationManager& app_manager) {
+ SDL_LOG_AUTO_TRACE();
+ auto apps_accessor = app_manager.applications();
+
+ for (auto& app : apps_accessor.GetData()) {
+ auto& ext = VehicleInfoAppExtension::ExtractVIExtension(*app);
+ if (ext.isSubscribedToVehicleInfo(ivi)) {
+ return true;
+ }
+ }
+ return false;
+}
+
VehicleInfoPlugin::VehicleInfoPlugin()
: application_manager_(nullptr), pending_resumption_handler_(nullptr) {}
@@ -164,13 +179,6 @@ void VehicleInfoPlugin::ProcessResumptionSubscription(
application_manager::Application& app, VehicleInfoAppExtension& ext) {
SDL_LOG_AUTO_TRACE();
- auto pending = ext.PendingSubscriptions().GetData();
- for (const auto& ivi : pending) {
- if (IsSubscribedAppExist(ivi)) {
- ext.RemovePendingSubscription(ivi);
- ext.subscribeToVehicleInfo(ivi);
- }
- }
pending_resumption_handler_->HandleResumptionSubscriptionRequest(ext, app);
}
@@ -181,10 +189,9 @@ void VehicleInfoPlugin::RevertResumption(
UNUSED(app);
pending_resumption_handler_->OnResumptionRevert();
-
std::set<std::string> subscriptions_to_revert;
for (auto& ivi_data : list_of_subscriptions) {
- if (!IsSubscribedAppExist(ivi_data) &&
+ if (!IsSubscribedAppExist(ivi_data, *application_manager_) &&
!IsAnyPendingSubscriptionExist(ivi_data)) {
subscriptions_to_revert.insert(ivi_data);
}
@@ -230,19 +237,6 @@ smart_objects::SmartObjectSPtr VehicleInfoPlugin::CreateUnsubscriptionRequest(
return request;
}
-bool VehicleInfoPlugin::IsSubscribedAppExist(const std::string& ivi) {
- SDL_LOG_AUTO_TRACE();
- auto apps_accessor = application_manager_->applications();
-
- for (auto& app : apps_accessor.GetData()) {
- auto& ext = VehicleInfoAppExtension::ExtractVIExtension(*app);
- if (ext.isSubscribedToVehicleInfo(ivi)) {
- return true;
- }
- }
- return false;
-}
-
bool VehicleInfoPlugin::IsAnyPendingSubscriptionExist(const std::string& ivi) {
SDL_LOG_AUTO_TRACE();
auto apps_accessor = application_manager_->applications();
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_data_item_schema_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_data_item_schema_test.cc
index 2443310409..262fef39f6 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_data_item_schema_test.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_data_item_schema_test.cc
@@ -85,6 +85,7 @@ class VehicleDataItemSchemaTest : public ::testing::Test {
schema.params->mark_initialized();
schema.mandatory = true;
*schema.array = false;
+ *schema.defvalue = "10";
// default value bounds
*schema.minvalue = 10;
*schema.maxvalue = 100;
diff --git a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_info_pending_resumption_test.cc b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_info_pending_resumption_test.cc
index c2af7236f8..5b2f4d5e25 100644
--- a/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_info_pending_resumption_test.cc
+++ b/src/components/application_manager/rpc_plugins/vehicle_info_plugin/test/vehicle_info_pending_resumption_test.cc
@@ -48,6 +48,7 @@ using namespace vehicle_info_plugin;
using ::testing::_;
using ::testing::DoAll;
+using ::testing::Mock;
using ::testing::NiceMock;
using ::testing::Return;
using ::testing::ReturnRef;
@@ -226,8 +227,10 @@ class VehicleInfoPendingResumptionHandlerTest : public ::testing::Test {
VehicleInfoPendingResumptionHandlerTest()
: mock_message_helper_(
*application_manager::MockMessageHelper::message_helper_mock())
-
- {}
+ , applications_lock_(std::make_shared<sync_primitives::Lock>())
+ , applications_(application_set_, applications_lock_) {
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ }
void SetUp() OVERRIDE {
ON_CALL(app_manager_mock_, event_dispatcher())
@@ -238,6 +241,8 @@ class VehicleInfoPendingResumptionHandlerTest : public ::testing::Test {
.WillByDefault(ReturnRef(resume_ctrl_mock_));
ON_CALL(resume_ctrl_mock_, resumption_data_processor())
.WillByDefault(ReturnRef(resumption_data_processor_mock_));
+ EXPECT_CALL(app_manager_mock_, applications())
+ .WillRepeatedly(Return(applications_));
resumption_handler_.reset(
new vehicle_info_plugin::VehicleInfoPendingResumptionHandler(
@@ -245,6 +250,11 @@ class VehicleInfoPendingResumptionHandlerTest : public ::testing::Test {
MessageHelperResponseCreateExpectation();
}
+ ~VehicleInfoPendingResumptionHandlerTest() {
+ Mock::VerifyAndClearExpectations(&mock_message_helper_);
+ Mock::VerifyAndClearExpectations(&app_manager_mock_);
+ }
+
void MessageHelperResponseCreateExpectation() {
const int default_corr_id = 0;
static auto response = CreateHMIResponseMessage(
@@ -277,12 +287,15 @@ class VehicleInfoPendingResumptionHandlerTest : public ::testing::Test {
MockMessageHelper& mock_message_helper_;
MockApplicationManager app_manager_mock_;
- MockResumeCtrl resume_ctrl_mock_;
+ NiceMock<MockResumeCtrl> resume_ctrl_mock_;
MockResumptionDataProcessor resumption_data_processor_mock_;
MockEventDispatcher event_dispatcher_mock_;
MockRPCService mock_rpc_service_;
NiceMock<MockCustomVehicleDataManager> custom_vehicle_data_manager_mock_;
vehicle_info_plugin::VehicleInfoPlugin plugin_;
+ application_manager::ApplicationSet application_set_;
+ std::shared_ptr<sync_primitives::Lock> applications_lock_;
+ DataAccessor<application_manager::ApplicationSet> applications_;
std::unique_ptr<vehicle_info_plugin::VehicleInfoPendingResumptionHandler>
resumption_handler_;
@@ -300,6 +313,8 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest, NoSubscriptionNoAction) {
TEST_F(VehicleInfoPendingResumptionHandlerTest,
OneAppSeveralVehicleDataSuccess) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto ext = CreateExtension(*mock_app);
ext->AddPendingSubscription("gps");
ext->AddPendingSubscription("speed");
@@ -327,6 +342,8 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest,
OneAppSeveralVehicleDataResponseSuccess) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto ext = CreateExtension(*mock_app);
ext->AddPendingSubscription("gps");
ext->AddPendingSubscription("speed");
@@ -372,6 +389,8 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest,
OneAppSeveralVehicleDataResponseOneFailed) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto ext = CreateExtension(*mock_app);
ext->AddPendingSubscription("gps");
ext->AddPendingSubscription("speed");
@@ -417,6 +436,8 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest,
OneAppSeveralVehicleDataResponseAllFailed) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto ext = CreateExtension(*mock_app);
ext->AddPendingSubscription("gps");
ext->AddPendingSubscription("speed");
@@ -457,6 +478,8 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest,
OneAppSeveralVehicleDataResponseOveralResultFailed) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto ext = CreateExtension(*mock_app);
ext->AddPendingSubscription("gps");
ext->AddPendingSubscription("speed");
@@ -491,7 +514,11 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest, TwoAppsOneSharedDataSuccess) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto mock_app2 = CreateApp(2);
+ application_set_.insert(mock_app2);
+
auto ext = CreateExtension(*mock_app);
auto ext2 = CreateExtension(*mock_app2);
ext->AddPendingSubscription("gps");
@@ -533,7 +560,11 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest, TwoAppsOneSharedDataSuccess) {
TEST_F(VehicleInfoPendingResumptionHandlerTest,
TwoAppsMultipleSharedDataSuccessResumption) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto mock_app2 = CreateApp(2);
+ application_set_.insert(mock_app2);
+
auto ext = CreateExtension(*mock_app);
auto ext2 = CreateExtension(*mock_app2);
ext->AddPendingSubscription("gps");
@@ -580,7 +611,11 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
TEST_F(VehicleInfoPendingResumptionHandlerTest,
TwoAppsOneSharedDataFailRetryforSecondApp) {
auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
auto mock_app2 = CreateApp(2);
+ application_set_.insert(mock_app2);
+
auto ext = CreateExtension(*mock_app);
auto ext2 = CreateExtension(*mock_app2);
ext->AddPendingSubscription("gps");
@@ -633,4 +668,29 @@ TEST_F(VehicleInfoPendingResumptionHandlerTest,
EXPECT_EQ(ext2->PendingSubscriptions().GetData().size(), 0u);
}
+TEST_F(VehicleInfoPendingResumptionHandlerTest,
+ TwoAppsOneSharedDataAlreadySubscribedByFirstAppNoRetryforSecondApp) {
+ auto mock_app = CreateApp(1);
+ application_set_.insert(mock_app);
+
+ auto mock_app2 = CreateApp(2);
+ application_set_.insert(mock_app2);
+
+ auto ext = CreateExtension(*mock_app);
+ auto ext2 = CreateExtension(*mock_app2);
+
+ ext->subscribeToVehicleInfo("gps");
+ ext2->AddPendingSubscription("gps");
+
+ EXPECT_CALL(resumption_data_processor_mock_, SubscribeToResponse(_, _))
+ .Times(0);
+ EXPECT_CALL(event_dispatcher_mock_, raise_event(_)).Times(0);
+ EXPECT_CALL(mock_rpc_service_, ManageHMICommand(_, _)).Times(0);
+
+ resumption_handler_->HandleResumptionSubscriptionRequest(*ext2, *mock_app2);
+
+ EXPECT_TRUE(ext->isSubscribedToVehicleInfo("gps"));
+ EXPECT_TRUE(ext2->isSubscribedToVehicleInfo("gps"));
+ EXPECT_EQ(ext2->PendingSubscriptions().GetData().size(), 0u);
+}
} // namespace vehicle_info_plugin_test
diff --git a/src/components/application_manager/src/app_launch/app_launch_data_db.cc b/src/components/application_manager/src/app_launch/app_launch_data_db.cc
index 7c015b0707..c9357a0ec5 100644
--- a/src/components/application_manager/src/app_launch/app_launch_data_db.cc
+++ b/src/components/application_manager/src/app_launch/app_launch_data_db.cc
@@ -278,10 +278,9 @@ std::vector<ApplicationDataPtr> AppLaunchDataDB::GetAppDataByDevMac(
bool AppLaunchDataDB::Clear() {
SDL_LOG_AUTO_TRACE();
- bool retVal = false;
utils::dbms::SQLQuery query(db());
- retVal = query.Exec(kDropSchema);
+ bool retVal = query.Exec(kDropSchema);
if (retVal) {
SDL_LOG_INFO("App_Launch table had been cleared successfully");
diff --git a/src/components/application_manager/src/app_launch/apps_launcher.cc b/src/components/application_manager/src/app_launch/apps_launcher.cc
index bf1fa2fb5d..1ee7bffb2a 100644
--- a/src/components/application_manager/src/app_launch/apps_launcher.cc
+++ b/src/components/application_manager/src/app_launch/apps_launcher.cc
@@ -56,7 +56,8 @@ void AppsLauncher::StartLaunching(ApplicationDataPtr app_data) {
}
struct AppLauncherFinder {
- AppLauncherFinder(const ApplicationDataPtr& app_data) : app_data_(app_data) {}
+ explicit AppLauncherFinder(const ApplicationDataPtr& app_data)
+ : app_data_(app_data) {}
bool operator()(const AppsLauncher::LauncherPtr& launcher) const {
DCHECK_OR_RETURN(launcher->app_data_ && app_data_, false)
return *launcher->app_data_ == *app_data_;
diff --git a/src/components/application_manager/src/app_launch/device_apps_launcher.cc b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
index 0a1bea3714..5f36e41efb 100644
--- a/src/components/application_manager/src/app_launch/device_apps_launcher.cc
+++ b/src/components/application_manager/src/app_launch/device_apps_launcher.cc
@@ -68,15 +68,6 @@ class Launcher {
LaunchNext();
}
- void OnAppRegistered(const ApplicationDataPtr& app_data) {
- std::vector<ApplicationDataPtr>& apps = apps_on_device_->second;
- std::vector<ApplicationDataPtr>::iterator it =
- std::find(apps.begin(), apps.end(), app_data);
- if (it != apps.end()) {
- apps.erase(it);
- }
- }
-
void Clear() {
gap_between_app_timer_.Stop();
wait_before_launch_timer_.Stop();
diff --git a/src/components/application_manager/src/app_service_manager.cc b/src/components/application_manager/src/app_service_manager.cc
index 6bc970c8a3..9b31d57ca0 100644
--- a/src/components/application_manager/src/app_service_manager.cc
+++ b/src/components/application_manager/src/app_service_manager.cc
@@ -67,7 +67,7 @@ smart_objects::SmartObject AppServiceManager::PublishAppService(
const bool mobile_service,
const uint32_t connection_key) {
SDL_LOG_AUTO_TRACE();
- std::string str_to_hash = "";
+ std::string str_to_hash;
std::string service_id = "";
std::string service_type = manifest[strings::service_type].asString();
@@ -413,10 +413,10 @@ bool AppServiceManager::ActivateAppService(const std::string service_id) {
EnumConversionHelper<mobile_apis::AppServiceType::eType>::EnumToString(
mobile_apis::AppServiceType::NAVIGATION, &navi_service_type);
if (service_type == navi_service_type) {
- smart_objects::SmartObject msg_params;
- msg_params[strings::system_capability][strings::system_capability_type] =
+ smart_objects::SmartObject params;
+ params[strings::system_capability][strings::system_capability_type] =
mobile_apis::SystemCapabilityType::NAVIGATION;
- MessageHelper::BroadcastCapabilityUpdate(msg_params, app_manager_);
+ MessageHelper::BroadcastCapabilityUpdate(params, app_manager_);
}
return true;
}
diff --git a/src/components/application_manager/src/application_impl.cc b/src/components/application_manager/src/application_impl.cc
index 2edf3860d6..6b4500e394 100644
--- a/src/components/application_manager/src/application_impl.cc
+++ b/src/components/application_manager/src/application_impl.cc
@@ -311,8 +311,9 @@ bool ApplicationImpl::webengine_projection_enabled() const {
struct StateIDComparator {
HmiState::StateID state_id_;
- StateIDComparator(HmiState::StateID state_id) : state_id_(state_id) {}
- bool operator()(const HmiStatePtr cur) {
+ explicit StateIDComparator(HmiState::StateID state_id)
+ : state_id_(state_id) {}
+ bool operator()(const HmiStatePtr cur) const {
return cur->state_id() == state_id_;
}
};
@@ -475,10 +476,6 @@ void ApplicationImpl::set_is_media_application(bool option) {
is_media_ = option;
}
-bool IsTTSState(const HmiStatePtr state) {
- return state->state_id() == HmiState::STATE_ID_TTS_SESSION;
-}
-
void ApplicationImpl::set_tts_properties_in_none(bool active) {
tts_properties_in_none_ = active;
}
@@ -616,6 +613,9 @@ void ApplicationImpl::StopStreaming(
void ApplicationImpl::StopNaviStreaming() {
SDL_LOG_AUTO_TRACE();
video_stream_suspend_timer_.Stop();
+ application_manager_.OnAppStreaming(app_id(),
+ protocol_handler::ServiceType::kMobileNav,
+ StreamingState::kStopped);
MessageHelper::SendNaviStopStream(app_id(), application_manager_);
set_video_streaming_approved(false);
set_video_stream_retry_number(0);
@@ -624,6 +624,9 @@ void ApplicationImpl::StopNaviStreaming() {
void ApplicationImpl::StopAudioStreaming() {
SDL_LOG_AUTO_TRACE();
audio_stream_suspend_timer_.Stop();
+ application_manager_.OnAppStreaming(app_id(),
+ protocol_handler::ServiceType::kAudio,
+ StreamingState::kStopped);
MessageHelper::SendAudioStopStream(app_id(), application_manager_);
set_audio_streaming_approved(false);
set_audio_stream_retry_number(0);
@@ -634,14 +637,17 @@ void ApplicationImpl::SuspendStreaming(
using namespace protocol_handler;
SDL_LOG_AUTO_TRACE();
- if (ServiceType::kMobileNav == service_type) {
+ if (ServiceType::kMobileNav == service_type && !video_streaming_suspended_) {
video_stream_suspend_timer_.Stop();
- application_manager_.OnAppStreaming(app_id(), service_type, false);
+ application_manager_.OnAppStreaming(
+ app_id(), service_type, StreamingState::kSuspended);
sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
video_streaming_suspended_ = true;
- } else if (ServiceType::kAudio == service_type) {
+ } else if (ServiceType::kAudio == service_type &&
+ !audio_streaming_suspended_) {
audio_stream_suspend_timer_.Stop();
- application_manager_.OnAppStreaming(app_id(), service_type, false);
+ application_manager_.OnAppStreaming(
+ app_id(), service_type, StreamingState::kSuspended);
sync_primitives::AutoLock lock(audio_streaming_suspended_lock_);
audio_streaming_suspended_ = true;
}
@@ -650,7 +656,7 @@ void ApplicationImpl::SuspendStreaming(
}
void ApplicationImpl::WakeUpStreaming(
- protocol_handler::ServiceType service_type, uint32_t timer_len) {
+ protocol_handler::ServiceType service_type) {
using namespace protocol_handler;
SDL_LOG_AUTO_TRACE();
@@ -660,30 +666,31 @@ void ApplicationImpl::WakeUpStreaming(
if (ServiceType::kMobileNav == service_type) {
{ // reduce the range of video_streaming_suspended_lock_
- sync_primitives::AutoLock lock(video_streaming_suspended_lock_);
+ sync_primitives::AutoLock auto_lock(video_streaming_suspended_lock_);
if (video_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.OnAppStreaming(
+ app_id(), service_type, StreamingState::kStarted);
application_manager_.ProcessOnDataStreamingNotification(
service_type, app_id(), true);
video_streaming_suspended_ = false;
}
}
- video_stream_suspend_timer_.Start(
- timer_len == 0 ? video_stream_suspend_timeout_ : timer_len,
- timer::kPeriodic);
+
+ video_stream_suspend_timer_.Start(video_stream_suspend_timeout_,
+ timer::kPeriodic);
} else if (ServiceType::kAudio == service_type) {
{ // reduce the range of audio_streaming_suspended_lock_
- sync_primitives::AutoLock lock(audio_streaming_suspended_lock_);
+ sync_primitives::AutoLock auto_lock(audio_streaming_suspended_lock_);
if (audio_streaming_suspended_) {
- application_manager_.OnAppStreaming(app_id(), service_type, true);
+ application_manager_.OnAppStreaming(
+ app_id(), service_type, StreamingState::kStarted);
application_manager_.ProcessOnDataStreamingNotification(
service_type, app_id(), true);
audio_streaming_suspended_ = false;
}
}
- audio_stream_suspend_timer_.Start(
- timer_len == 0 ? audio_stream_suspend_timeout_ : timer_len,
- timer::kPeriodic);
+ audio_stream_suspend_timer_.Start(audio_stream_suspend_timeout_,
+ timer::kPeriodic);
}
}
@@ -940,10 +947,7 @@ bool ApplicationImpl::AreCommandLimitsExceeded(
limit.first = current;
limit.second = 1;
-
return false;
-
- break;
}
// In case of policy table values, there is EVEN limitation for number of
// commands per minute, e.g. 10 command per minute i.e. 1 command per 6 sec
@@ -984,7 +988,6 @@ bool ApplicationImpl::AreCommandLimitsExceeded(
cmd_number_to_time_limits_[cmd_id] = {current, dummy_limit};
return false;
- break;
}
default: {
SDL_LOG_WARN("Limit source is not implemented.");
@@ -1163,10 +1166,10 @@ void ApplicationImpl::SubscribeToSoftButtons(
struct FindSoftButtonId {
uint32_t soft_button_id_;
- FindSoftButtonId(const uint32_t soft_button_id)
+ explicit FindSoftButtonId(const uint32_t soft_button_id)
: soft_button_id_(soft_button_id) {}
- bool operator()(const std::pair<uint32_t, WindowID>& element) {
+ bool operator()(const std::pair<uint32_t, WindowID>& element) const {
return soft_button_id_ == element.first;
}
};
diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc
index df58871c80..6b0ea39804 100644
--- a/src/components/application_manager/src/application_manager_impl.cc
+++ b/src/components/application_manager/src/application_manager_impl.cc
@@ -229,7 +229,7 @@ ApplicationManagerImpl::ApplicationManagerImpl(
ApplicationManagerImpl::~ApplicationManagerImpl() {
SDL_LOG_AUTO_TRACE();
- is_stopping_ = true;
+ is_stopping_.store(true);
SendOnSDLClose();
media_manager_ = NULL;
hmi_handler_ = NULL;
@@ -693,9 +693,9 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
bool is_mismatched_cloud_app = false;
if (apps_to_register_.end() == it) {
- DevicePredicate finder(application->device());
+ DevicePredicate device_finder(application->device());
it = std::find_if(
- apps_to_register_.begin(), apps_to_register_.end(), finder);
+ apps_to_register_.begin(), apps_to_register_.end(), device_finder);
bool found = apps_to_register_.end() != it;
is_mismatched_cloud_app = found && (*it)->is_cloud_app() &&
@@ -755,6 +755,11 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
// Timer will be started after hmi level resumption.
resume_controller().OnAppRegistrationStart(policy_app_id, device_mac);
+ return application;
+}
+
+void ApplicationManagerImpl::FinalizeAppRegistration(
+ ApplicationSharedPtr application, const uint32_t connection_key) {
AddAppToRegisteredAppList(application);
// Update cloud app information, in case any pending apps are unable to be
@@ -772,8 +777,6 @@ ApplicationSharedPtr ApplicationManagerImpl::RegisterApplication(
connection_handler::DeviceHandle secondary_device_handle = itr->second;
application->set_secondary_device(secondary_device_handle);
}
-
- return application;
}
bool ApplicationManagerImpl::ActivateApplication(ApplicationSharedPtr app) {
@@ -1218,10 +1221,13 @@ void ApplicationManagerImpl::CreatePendingApplication(
application->set_hybrid_app_preference(hybrid_app_preference_enum);
application->set_cloud_app_certificate(app_properties.certificate);
- sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
- SDL_LOG_DEBUG("apps_to_register_ size before: " << apps_to_register_.size());
- apps_to_register_.insert(application);
- SDL_LOG_DEBUG("apps_to_register_ size after: " << apps_to_register_.size());
+ {
+ sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
+ SDL_LOG_DEBUG(
+ "apps_to_register_ size before: " << apps_to_register_.size());
+ apps_to_register_.insert(application);
+ SDL_LOG_DEBUG("apps_to_register_ size after: " << apps_to_register_.size());
+ }
SendUpdateAppList();
}
@@ -1345,10 +1351,8 @@ void ApplicationManagerImpl::SetPendingApplicationState(
app->app_id(), mobile_apis::Result::INVALID_ENUM, true, true);
app->MarkUnregistered();
- {
- sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
- apps_to_register_.insert(app);
- }
+ sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
+ apps_to_register_.insert(app);
}
void ApplicationManagerImpl::OnConnectionStatusUpdated() {
@@ -1639,11 +1643,14 @@ void ApplicationManagerImpl::SendUpdateAppList() {
(*request)[strings::msg_params][strings::applications] =
SmartObject(SmartType_Array);
- SmartObject& applications =
+ SmartObject& applications_so =
(*request)[strings::msg_params][strings::applications];
- PrepareApplicationListSO(applications_, applications, *this);
- PrepareApplicationListSO(apps_to_register_, applications, *this);
+ const auto applications_list = applications().GetData();
+ PrepareApplicationListSO(applications_list, applications_so, *this);
+
+ const auto pending_apps_list = AppsWaitingForRegistration().GetData();
+ PrepareApplicationListSO(pending_apps_list, applications_so, *this);
rpc_service_->ManageHMICommand(request);
}
@@ -1809,8 +1816,8 @@ bool ApplicationManagerImpl::CheckResumptionRequiredTransportAvailable(
} else {
// check all AppHMITypes that the app has
for (size_t i = 0; i < app_types_array->length(); i++) {
- const std::string app_type_string =
- AppHMITypeToString(static_cast<mobile_apis::AppHMIType::eType>(
+ std::string app_type_string =
+ EnumToString(static_cast<mobile_apis::AppHMIType::eType>(
app_types_array->getElement(i).asUInt()));
bool transport_is_found = false;
@@ -1891,8 +1898,8 @@ bool ApplicationManagerImpl::StartNaviService(
/* Fix: For NaviApp1 Switch to NaviApp2, App1's Endcallback() arrives
later than App2's Startcallback(). Cause streaming issue on HMI.
*/
- sync_primitives::AutoLock lock(applications_list_lock_ptr_);
- for (auto app : applications_) {
+ auto accessor = applications();
+ for (auto app : accessor.GetData()) {
if (!app || (!app->is_navi() && !app->mobile_projection_enabled())) {
SDL_LOG_DEBUG("Continue, Not Navi App Id: " << app->app_id());
continue;
@@ -1919,7 +1926,7 @@ bool ApplicationManagerImpl::StartNaviService(
}
if (!rejected_params.empty()) {
- OnStreamingConfigured(app_id, service_type, false, rejected_params);
+ OnStreamingConfigurationFailed(app_id, rejected_params, std::string());
return false;
} else if (!converted_params.empty()) {
SDL_LOG_INFO("Sending video configuration params");
@@ -1932,78 +1939,82 @@ bool ApplicationManagerImpl::StartNaviService(
}
}
// no configuration is needed, or SetVideoConfig is not sent
- std::vector<std::string> empty;
- OnStreamingConfigured(app_id, service_type, true, empty);
+ OnStreamingConfigurationSuccessful(app_id, service_type);
return true;
-
- } else {
- SDL_LOG_WARN("Refused navi service by HMI level");
}
+ SDL_LOG_WARN("Refused navi service by HMI level");
std::vector<std::string> empty;
- OnStreamingConfigured(app_id, service_type, false, empty);
+ OnStreamingConfigurationFailed(
+ app_id,
+ empty,
+ "Service type: " + std::to_string(service_type) +
+ " disallowed with current HMI level");
return false;
}
-void ApplicationManagerImpl::OnStreamingConfigured(
- uint32_t app_id,
- protocol_handler::ServiceType service_type,
- bool result,
- std::vector<std::string>& rejected_params) {
- using namespace protocol_handler;
+void ApplicationManagerImpl::OnStreamingConfigurationSuccessful(
+ uint32_t app_id, protocol_handler::ServiceType service_type) {
SDL_LOG_AUTO_TRACE();
- SDL_LOG_INFO("OnStreamingConfigured called for service "
- << service_type << ", result=" << result);
-
- if (result) {
- std::vector<std::string> empty;
- {
- sync_primitives::AutoLock lock(navi_service_status_lock_);
+ SDL_LOG_INFO("Streaming configuration successful for service "
+ << service_type);
+ std::vector<std::string> empty;
+ std::string reason;
+ {
+ sync_primitives::AutoLock lock(navi_service_status_lock_);
- NaviServiceStatusMap::iterator it = navi_service_status_.find(app_id);
- if (navi_service_status_.end() == it) {
- SDL_LOG_WARN("Application not found in navi status map");
- connection_handler().NotifyServiceStartedResult(app_id, false, empty);
- return;
- }
+ NaviServiceStatusMap::iterator it = navi_service_status_.find(app_id);
+ if (navi_service_status_.end() == it) {
+ SDL_LOG_WARN("Application not found in navi status map");
+ connection_handler().NotifyServiceStartedResult(
+ app_id, false, empty, reason);
+ return;
+ }
- // Fill NaviServices map. Set true to first value of pair if
- // we've started video service or to second value if we've
- // started audio service
- service_type == ServiceType::kMobileNav ? it->second.first = true
- : it->second.second = true;
+ // Fill NaviServices map. Set true to first value of pair if
+ // we've started video service or to second value if we've
+ // started audio service
+ service_type == protocol_handler::ServiceType::kMobileNav
+ ? it->second.first = true
+ : it->second.second = true;
- {
- sync_primitives::AutoLock lock(navi_app_to_stop_lock_);
- for (size_t i = 0; i < navi_app_to_stop_.size(); ++i) {
- if (app_id == navi_app_to_stop_[i]) {
- sync_primitives::AutoLock lock(close_app_timer_pool_lock_);
- close_app_timer_pool_.erase(close_app_timer_pool_.begin() + i);
- navi_app_to_stop_.erase(navi_app_to_stop_.begin() + i);
- break;
- }
+ {
+ sync_primitives::AutoLock lock(navi_app_to_stop_lock_);
+ for (size_t i = 0; i < navi_app_to_stop_.size(); ++i) {
+ if (app_id == navi_app_to_stop_[i]) {
+ sync_primitives::AutoLock lock(close_app_timer_pool_lock_);
+ close_app_timer_pool_.erase(close_app_timer_pool_.begin() + i);
+ navi_app_to_stop_.erase(navi_app_to_stop_.begin() + i);
+ break;
}
}
}
+ }
- application(app_id)->StartStreaming(service_type);
- connection_handler().NotifyServiceStartedResult(app_id, true, empty);
+ application(app_id)->StartStreaming(service_type);
+ connection_handler().NotifyServiceStartedResult(app_id, true, empty, reason);
- // Fix: For wifi Secondary
- // Should erase appid from deque of ForbidStreaming() push in the last time
- std::deque<uint32_t>::const_iterator iter = std::find(
- navi_app_to_end_stream_.begin(), navi_app_to_end_stream_.end(), app_id);
- if (navi_app_to_end_stream_.end() != iter) {
- navi_app_to_end_stream_.erase(iter);
- }
- } else {
- std::vector<std::string> converted_params =
- ConvertRejectedParamList(rejected_params);
- connection_handler().NotifyServiceStartedResult(
- app_id, false, converted_params);
+ // Fix: For wifi Secondary
+ // Should erase appid from deque of ForbidStreaming() push in the last time
+ std::deque<uint32_t>::const_iterator iter = std::find(
+ navi_app_to_end_stream_.begin(), navi_app_to_end_stream_.end(), app_id);
+ if (navi_app_to_end_stream_.end() != iter) {
+ navi_app_to_end_stream_.erase(iter);
}
}
+void ApplicationManagerImpl::OnStreamingConfigurationFailed(
+ uint32_t app_id,
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) {
+ SDL_LOG_AUTO_TRACE();
+
+ std::vector<std::string> converted_params =
+ ConvertRejectedParamList(rejected_params);
+ connection_handler().NotifyServiceStartedResult(
+ app_id, false, converted_params, reason);
+}
+
void ApplicationManagerImpl::StopNaviService(
uint32_t app_id, protocol_handler::ServiceType service_type) {
using namespace protocol_handler;
@@ -2076,17 +2087,18 @@ void ApplicationManagerImpl::OnServiceStartedCallback(
SDL_LOG_DEBUG("ServiceType = " << type << ". Session = " << std::hex
<< session_key);
std::vector<std::string> empty;
+ std::string reason;
if (kRpc == type) {
SDL_LOG_DEBUG("RPC service is about to be started.");
- connection_handler().NotifyServiceStartedResult(session_key, true, empty);
+ connection_handler().NotifyServiceStartedResult(
+ session_key, true, empty, reason);
return;
}
ApplicationSharedPtr app = application(session_key);
if (!app) {
SDL_LOG_WARN("The application with id:" << session_key
<< " doesn't exists.");
- connection_handler().NotifyServiceStartedResult(session_key, false, empty);
return;
}
@@ -2099,12 +2111,15 @@ void ApplicationManagerImpl::OnServiceStartedCallback(
return;
} else {
SDL_LOG_WARN("Refuse not navi/projection application");
+ reason = "Service type: " + std::to_string(type) +
+ " disallowed with current HMI type";
}
} else {
SDL_LOG_WARN("Refuse unknown service");
}
- connection_handler().NotifyServiceStartedResult(session_key, false, empty);
+ connection_handler().NotifyServiceStartedResult(
+ session_key, false, empty, reason);
}
void ApplicationManagerImpl::OnServiceEndedCallback(
@@ -2166,6 +2181,12 @@ void ApplicationManagerImpl::OnServiceEndedCallback(
is_unexpected_disconnect = false;
break;
}
+ case CloseSessionReason::kFinalMessage: {
+ reason = Result::SUCCESS;
+ is_resuming = false;
+ is_unexpected_disconnect = false;
+ break;
+ }
default: {
reason = Result::INVALID_ENUM;
is_resuming = true;
@@ -2534,9 +2555,7 @@ bool ApplicationManagerImpl::Init(
bool ApplicationManagerImpl::Stop() {
SDL_LOG_AUTO_TRACE();
- stopping_application_mng_lock_.Acquire();
- is_stopping_ = true;
- stopping_application_mng_lock_.Release();
+ is_stopping_.store(true);
application_list_update_timer_.Stop();
try {
if (unregister_reason_ ==
@@ -2701,8 +2720,7 @@ void ApplicationManagerImpl::PullLanguagesInfo(const SmartObject& app_data,
}
const HMICapabilities& hmi_cap = hmi_capabilities();
- std::string cur_vr_lang(
- MessageHelper::CommonLanguageToString(hmi_cap.active_vr_language()));
+ std::string cur_vr_lang(EnumToString(hmi_cap.active_vr_language()));
const SmartObject& languages = app_data[json::languages];
std::transform(
@@ -2862,6 +2880,7 @@ void ApplicationManagerImpl::ProcessQueryApp(
CreateApplications(*obj_array, connection_key);
SendUpdateAppList();
+ sync_primitives::AutoLock lock(apps_to_register_list_lock_ptr_);
AppsWaitRegistrationSet::const_iterator it = apps_to_register_.begin();
for (; it != apps_to_register_.end(); ++it) {
const std::string full_icon_path((*it)->app_icon_path());
@@ -2960,9 +2979,7 @@ void ApplicationManagerImpl::SetUnregisterAllApplicationsReason(
void ApplicationManagerImpl::HeadUnitReset(
mobile_api::AppInterfaceUnregisteredReason::eType reason) {
SDL_LOG_AUTO_TRACE();
- stopping_application_mng_lock_.Acquire();
- is_stopping_ = true;
- stopping_application_mng_lock_.Release();
+ is_stopping_.store(true);
switch (reason) {
case mobile_api::AppInterfaceUnregisteredReason::MASTER_RESET: {
SDL_LOG_TRACE("Performing MASTER_RESET");
@@ -3082,11 +3099,11 @@ void ApplicationManagerImpl::UnregisterAllApplications() {
SDL_LOG_DEBUG("Unregister reason " << unregister_reason_);
SetHMICooperating(false);
- bool is_ignition_off = false;
+
using namespace mobile_api::AppInterfaceUnregisteredReason;
using namespace helpers;
- is_ignition_off =
+ bool is_ignition_off =
Compare<eType, EQ, ONE>(unregister_reason_, IGNITION_OFF, INVALID_ENUM);
bool is_unexpected_disconnect = Compare<eType, NEQ, ALL>(
@@ -3298,7 +3315,8 @@ void ApplicationManagerImpl::UnregisterApplication(
plugin_manager_->ForEachPlugin(on_app_unregistered);
request_ctrl_.terminateAppRequests(app_id);
- if (applications_.empty()) {
+ const bool is_applications_list_empty = applications().GetData().empty();
+ if (is_applications_list_empty) {
policy_handler_->StopRetrySequence();
}
return;
@@ -3346,8 +3364,8 @@ mobile_apis::Result::eType ApplicationManagerImpl::CheckPolicyPermissions(
#ifdef ENABLE_LOG
const std::string log_msg =
"Application: " + app->policy_app_id() + ", RPC: " + function_id +
- ", window_id: " + std::to_string(window_id) + ", HMI status: " +
- MessageHelper::StringifiedHMILevel(app->hmi_level(window_id));
+ ", window_id: " + std::to_string(window_id) +
+ ", HMI status: " + EnumToString(app->hmi_level(window_id));
#endif // ENABLE_LOG
if (result.hmi_level_permitted != policy::kRpcAllowed) {
SDL_LOG_WARN("Request is blocked by policies. " << log_msg);
@@ -3368,7 +3386,6 @@ mobile_apis::Result::eType ApplicationManagerImpl::CheckPolicyPermissions(
}
bool ApplicationManagerImpl::is_stopping() const {
- sync_primitives::AutoLock lock(stopping_application_mng_lock_);
return is_stopping_;
}
@@ -3566,7 +3583,9 @@ void ApplicationManagerImpl::ForbidStreaming(
}
void ApplicationManagerImpl::OnAppStreaming(
- uint32_t app_id, protocol_handler::ServiceType service_type, bool state) {
+ uint32_t app_id,
+ protocol_handler::ServiceType service_type,
+ const Application::StreamingState new_state) {
SDL_LOG_AUTO_TRACE();
ApplicationSharedPtr app = application(app_id);
@@ -3577,12 +3596,31 @@ void ApplicationManagerImpl::OnAppStreaming(
}
DCHECK_OR_RETURN_VOID(media_manager_);
- if (state) {
- state_ctrl_.OnVideoStreamingStarted(app);
- media_manager_->StartStreaming(app_id, service_type);
- } else {
- media_manager_->StopStreaming(app_id, service_type);
- state_ctrl_.OnVideoStreamingStopped(app);
+ SDL_LOG_DEBUG("New state for service " << static_cast<int32_t>(service_type)
+ << " is "
+ << static_cast<int32_t>(new_state));
+ switch (new_state) {
+ case Application::StreamingState::kStopped: {
+ // Stop activity in media_manager_ when service is stopped
+ // State controller has been already notified by kSuspended event
+ // received before
+ media_manager_->StopStreaming(app_id, service_type);
+ break;
+ }
+
+ case Application::StreamingState::kStarted: {
+ // Apply temporary streaming state and start activity in media_manager_
+ state_ctrl_.OnVideoStreamingStarted(app);
+ media_manager_->StartStreaming(app_id, service_type);
+ break;
+ }
+
+ case Application::StreamingState::kSuspended: {
+ // Don't stop activity in media_manager_ in that case
+ // Just cancel the temporary streaming state
+ state_ctrl_.OnVideoStreamingStopped(app);
+ break;
+ }
}
}
@@ -3845,9 +3883,7 @@ bool ApplicationManagerImpl::ResetVrHelpTitleItems(
}
const std::string& vr_help_title = get_settings().vr_help_title();
- smart_objects::SmartObject so_vr_help_title =
- smart_objects::SmartObject(smart_objects::SmartType_String);
- so_vr_help_title = vr_help_title;
+ smart_objects::SmartObject so_vr_help_title(vr_help_title);
app->reset_vr_help_title();
app->reset_vr_help();
@@ -4104,9 +4140,7 @@ void ApplicationManagerImpl::OnApplicationListUpdateTimer() {
const bool is_new_app_registered = registered_during_timer_execution_;
registered_during_timer_execution_ = false;
- apps_to_register_list_lock_ptr_->Acquire();
- const bool trigger_ptu = apps_size_ != applications_.size();
- apps_to_register_list_lock_ptr_->Release();
+ const bool trigger_ptu = apps_size_ != applications().GetData().size();
if (is_new_app_registered) {
SendUpdateAppList();
@@ -4286,69 +4320,6 @@ ApplicationManagerImpl::CreateAllAppGlobalPropsIDList(
return global_properties;
}
-mobile_apis::AppHMIType::eType ApplicationManagerImpl::StringToAppHMIType(
- std::string str) {
- SDL_LOG_AUTO_TRACE();
- if ("DEFAULT" == str) {
- return mobile_apis::AppHMIType::DEFAULT;
- } else if ("COMMUNICATION" == str) {
- return mobile_apis::AppHMIType::COMMUNICATION;
- } else if ("MEDIA" == str) {
- return mobile_apis::AppHMIType::MEDIA;
- } else if ("MESSAGING" == str) {
- return mobile_apis::AppHMIType::MESSAGING;
- } else if ("NAVIGATION" == str) {
- return mobile_apis::AppHMIType::NAVIGATION;
- } else if ("PROJECTION" == str) {
- return mobile_apis::AppHMIType::PROJECTION;
- } else if ("INFORMATION" == str) {
- return mobile_apis::AppHMIType::INFORMATION;
- } else if ("SOCIAL" == str) {
- return mobile_apis::AppHMIType::SOCIAL;
- } else if ("BACKGROUND_PROCESS" == str) {
- return mobile_apis::AppHMIType::BACKGROUND_PROCESS;
- } else if ("TESTING" == str) {
- return mobile_apis::AppHMIType::TESTING;
- } else if ("SYSTEM" == str) {
- return mobile_apis::AppHMIType::SYSTEM;
- } else {
- return mobile_apis::AppHMIType::INVALID_ENUM;
- }
-}
-
-const std::string ApplicationManagerImpl::AppHMITypeToString(
- mobile_apis::AppHMIType::eType type) const {
- SDL_LOG_AUTO_TRACE();
- switch (type) {
- case mobile_apis::AppHMIType::DEFAULT:
- return "DEFAULT";
- case mobile_apis::AppHMIType::COMMUNICATION:
- return "COMMUNICATION";
- case mobile_apis::AppHMIType::MEDIA:
- return "MEDIA";
- case mobile_apis::AppHMIType::MESSAGING:
- return "MESSAGING";
- case mobile_apis::AppHMIType::NAVIGATION:
- return "NAVIGATION";
- case mobile_apis::AppHMIType::INFORMATION:
- return "INFORMATION";
- case mobile_apis::AppHMIType::SOCIAL:
- return "SOCIAL";
- case mobile_apis::AppHMIType::BACKGROUND_PROCESS:
- return "BACKGROUND_PROCESS";
- case mobile_apis::AppHMIType::TESTING:
- return "TESTING";
- case mobile_apis::AppHMIType::SYSTEM:
- return "SYSTEM";
- case mobile_apis::AppHMIType::PROJECTION:
- return "PROJECTION";
- case mobile_apis::AppHMIType::REMOTE_CONTROL:
- return "REMOTE_CONTROL";
- default:
- return "INVALID_ENUM";
- }
-}
-
bool ApplicationManagerImpl::CompareAppHMIType(
const smart_objects::SmartObject& from_policy,
const smart_objects::SmartObject& from_application) {
@@ -4381,7 +4352,7 @@ void ApplicationManagerImpl::OnUpdateHMIAppType(
std::vector<std::string> hmi_types_from_policy;
smart_objects::SmartObject transform_app_hmi_types(
smart_objects::SmartType_Array);
- bool flag_diffirence_app_hmi_type = false;
+ bool flag_diffirence_app_hmi_type;
DataAccessor<ApplicationSet> accessor(applications());
for (ApplicationSetIt it = accessor.GetData().begin();
it != accessor.GetData().end();
@@ -4390,7 +4361,6 @@ void ApplicationManagerImpl::OnUpdateHMIAppType(
if (it_app_hmi_types_from_policy != app_hmi_types.end() &&
((it_app_hmi_types_from_policy->second).size())) {
- flag_diffirence_app_hmi_type = false;
hmi_types_from_policy = (it_app_hmi_types_from_policy->second);
if (transform_app_hmi_types.length()) {
@@ -4400,7 +4370,8 @@ void ApplicationManagerImpl::OnUpdateHMIAppType(
for (uint32_t i = 0; i < hmi_types_from_policy.size(); ++i) {
transform_app_hmi_types[i] =
- StringToAppHMIType(hmi_types_from_policy[i]);
+ StringToEnum<mobile_api::AppHMIType::eType>(
+ hmi_types_from_policy[i]);
}
ApplicationConstSharedPtr app = *it;
@@ -4547,8 +4518,7 @@ void ApplicationManagerImpl::SendDriverDistractionState(
driver_distraction_state()) {
bool dismissal_enabled = *lock_screen_dismissal;
if (dismissal_enabled) {
- const auto language =
- MessageHelper::MobileLanguageToString(application->ui_language());
+ const auto language = EnumToString(application->ui_language());
const auto warning_message =
policy_handler_->LockScreenDismissalWarningMessage(language);
@@ -4612,7 +4582,6 @@ void ApplicationManagerImpl::SendGetIconUrlNotifications(
continue;
}
- std::string endpoint = app_icon_it->second.endpoint;
bool pending_request = app_icon_it->second.pending_request;
if (pending_request) {
@@ -4943,7 +4912,7 @@ void ApplicationManagerImpl::SetMockMediaManager(
#endif // BUILD_TESTS
struct MobileAppIdPredicate {
std::string policy_app_id_;
- MobileAppIdPredicate(const std::string& policy_app_id)
+ explicit MobileAppIdPredicate(const std::string& policy_app_id)
: policy_app_id_(policy_app_id) {}
bool operator()(const ApplicationSharedPtr app) const {
return app ? policy_app_id_ == app->policy_app_id() : false;
@@ -4952,7 +4921,8 @@ struct MobileAppIdPredicate {
struct TakeDeviceHandle {
public:
- TakeDeviceHandle(const ApplicationManager& app_mngr) : app_mngr_(app_mngr) {}
+ explicit TakeDeviceHandle(const ApplicationManager& app_mngr)
+ : app_mngr_(app_mngr) {}
std::string operator()(ApplicationSharedPtr& app) {
DCHECK_OR_RETURN(app, "");
return MessageHelper::GetDeviceMacAddressForHandle(app->device(),
diff --git a/src/components/application_manager/src/application_state.cc b/src/components/application_manager/src/application_state.cc
index 2fb583ab3e..1ec4abaed7 100644
--- a/src/components/application_manager/src/application_state.cc
+++ b/src/components/application_manager/src/application_state.cc
@@ -42,7 +42,7 @@ namespace {
struct StateIDComparator {
application_manager::HmiState::StateID state_id_;
- StateIDComparator(application_manager::HmiState::StateID state_id)
+ explicit StateIDComparator(application_manager::HmiState::StateID state_id)
: state_id_(state_id) {}
bool operator()(const application_manager::HmiStatePtr cur) const {
return cur->state_id() == state_id_;
@@ -209,8 +209,8 @@ void ApplicationState::EraseHMIState(HmiStates& hmi_states,
} else {
HmiStates::iterator next = it;
HmiStates::iterator prev = it;
- next++;
- prev--;
+ ++next;
+ --prev;
if (hmi_states.end() != next) {
HmiStatePtr next_state = *next;
diff --git a/src/components/application_manager/src/commands/command_request_impl.cc b/src/components/application_manager/src/commands/command_request_impl.cc
index 938b7afc99..08bf25de54 100644
--- a/src/components/application_manager/src/commands/command_request_impl.cc
+++ b/src/components/application_manager/src/commands/command_request_impl.cc
@@ -846,7 +846,6 @@ void CommandRequestImpl::GetInfo(
mobile_apis::Result::eType CommandRequestImpl::PrepareResultCodeForResponse(
const ResponseInfo& first, const ResponseInfo& second) {
SDL_LOG_AUTO_TRACE();
- mobile_apis::Result::eType result_code = mobile_apis::Result::INVALID_ENUM;
if (IsResultCodeUnsupported(first, second) ||
IsResultCodeUnsupported(second, first)) {
return mobile_apis::Result::UNSUPPORTED_RESOURCE;
@@ -867,7 +866,7 @@ mobile_apis::Result::eType CommandRequestImpl::PrepareResultCodeForResponse(
if (!second.is_unsupported_resource) {
second_result = second.result_code;
}
- result_code =
+ mobile_apis::Result::eType result_code =
MessageHelper::HMIToMobileResult(std::max(first_result, second_result));
return result_code;
}
diff --git a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
index 3d294f0035..7392731d70 100644
--- a/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
+++ b/src/components/application_manager/src/event_engine/event_dispatcher_impl.cc
@@ -78,7 +78,7 @@ void EventDispatcherImpl::add_observer(const Event::EventID& event_id,
}
struct IdCheckFunctor {
- IdCheckFunctor(const unsigned long id) : target_id(id) {}
+ explicit IdCheckFunctor(const unsigned long id) : target_id(id) {}
bool operator()(const EventObserver* obs) const {
return (obs->id() == target_id);
diff --git a/src/components/application_manager/src/hmi_capabilities_impl.cc b/src/components/application_manager/src/hmi_capabilities_impl.cc
index 924c603792..1390a3ae2c 100644
--- a/src/components/application_manager/src/hmi_capabilities_impl.cc
+++ b/src/components/application_manager/src/hmi_capabilities_impl.cc
@@ -54,410 +54,6 @@ namespace formatters = ns_smart_device_link::ns_json_handler::formatters;
SDL_CREATE_LOG_VARIABLE("HMICapabilities")
namespace {
-std::map<std::string, hmi_apis::Common_VrCapabilities::eType>
- vr_enum_capabilities;
-std::map<std::string, hmi_apis::Common_SpeechCapabilities::eType>
- tts_enum_capabilities;
-std::map<std::string, hmi_apis::Common_PrerecordedSpeech::eType>
- tts_enum_prerecorded_speech;
-std::map<std::string, hmi_apis::Common_ButtonName::eType> button_enum_name;
-std::map<std::string, hmi_apis::Common_TextFieldName::eType>
- text_fields_enum_name;
-std::map<std::string, hmi_apis::Common_MediaClockFormat::eType>
- media_clock_enum_name;
-std::map<std::string, hmi_apis::Common_ImageType::eType> image_type_enum;
-std::map<std::string, hmi_apis::Common_SamplingRate::eType> sampling_rate_enum;
-std::map<std::string, hmi_apis::Common_BitsPerSample::eType>
- bit_per_sample_enum;
-std::map<std::string, hmi_apis::Common_AudioType::eType> audio_type_enum;
-std::map<std::string, hmi_apis::Common_HmiZoneCapabilities::eType>
- hmi_zone_enum;
-std::map<std::string, hmi_apis::Common_ImageFieldName::eType>
- image_field_name_enum;
-std::map<std::string, hmi_apis::Common_FileType::eType> file_type_enum;
-std::map<std::string, hmi_apis::Common_DisplayType::eType> display_type_enum;
-std::map<std::string, hmi_apis::Common_CharacterSet::eType> character_set_enum;
-std::map<std::string, hmi_apis::Common_VideoStreamingProtocol::eType>
- video_streaming_protocol_enum;
-std::map<std::string, hmi_apis::Common_VideoStreamingCodec::eType>
- video_streaming_codec_enum;
-
-void InitCapabilities() {
- vr_enum_capabilities.insert(std::make_pair(
- std::string("TEXT"), hmi_apis::Common_VrCapabilities::VR_TEXT));
-
- tts_enum_capabilities.insert(std::make_pair(
- std::string("TEXT"), hmi_apis::Common_SpeechCapabilities::SC_TEXT));
- tts_enum_capabilities.insert(
- std::make_pair(std::string("SAPI_PHONEMES"),
- hmi_apis::Common_SpeechCapabilities::SAPI_PHONEMES));
- tts_enum_capabilities.insert(
- std::make_pair(std::string("LHPLUS_PHONEMES"),
- hmi_apis::Common_SpeechCapabilities::LHPLUS_PHONEMES));
- tts_enum_capabilities.insert(
- std::make_pair(std::string("SAPI_PHONEMES"),
- hmi_apis::Common_SpeechCapabilities::SAPI_PHONEMES));
- tts_enum_capabilities.insert(
- std::make_pair(std::string("PRE_RECORDED"),
- hmi_apis::Common_SpeechCapabilities::PRE_RECORDED));
- tts_enum_capabilities.insert(std::make_pair(
- std::string("SILENCE"), hmi_apis::Common_SpeechCapabilities::SILENCE));
- tts_enum_capabilities.insert(std::make_pair(
- std::string("FILE"), hmi_apis::Common_SpeechCapabilities::FILE));
-
- tts_enum_prerecorded_speech.insert(
- std::make_pair(std::string("HELP_JINGLE"),
- hmi_apis::Common_PrerecordedSpeech::HELP_JINGLE));
- tts_enum_prerecorded_speech.insert(
- std::make_pair(std::string("INITIAL_JINGLE"),
- hmi_apis::Common_PrerecordedSpeech::INITIAL_JINGLE));
- tts_enum_prerecorded_speech.insert(
- std::make_pair(std::string("LISTEN_JINGLE"),
- hmi_apis::Common_PrerecordedSpeech::LISTEN_JINGLE));
- tts_enum_prerecorded_speech.insert(
- std::make_pair(std::string("POSITIVE_JINGLE"),
- hmi_apis::Common_PrerecordedSpeech::POSITIVE_JINGLE));
- tts_enum_prerecorded_speech.insert(
- std::make_pair(std::string("NEGATIVE_JINGLE"),
- hmi_apis::Common_PrerecordedSpeech::NEGATIVE_JINGLE));
-
- button_enum_name.insert(
- std::make_pair(std::string("OK"), hmi_apis::Common_ButtonName::OK));
- button_enum_name.insert(std::make_pair(
- std::string("PLAY_PAUSE"), hmi_apis::Common_ButtonName::PLAY_PAUSE));
- button_enum_name.insert(std::make_pair(
- std::string("SEEKLEFT"), hmi_apis::Common_ButtonName::SEEKLEFT));
- button_enum_name.insert(std::make_pair(
- std::string("SEEKRIGHT"), hmi_apis::Common_ButtonName::SEEKRIGHT));
- button_enum_name.insert(std::make_pair(std::string("TUNEUP"),
- hmi_apis::Common_ButtonName::TUNEUP));
- button_enum_name.insert(std::make_pair(
- std::string("TUNEDOWN"), hmi_apis::Common_ButtonName::TUNEDOWN));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_0"), hmi_apis::Common_ButtonName::PRESET_0));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_1"), hmi_apis::Common_ButtonName::PRESET_1));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_2"), hmi_apis::Common_ButtonName::PRESET_2));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_3"), hmi_apis::Common_ButtonName::PRESET_3));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_4"), hmi_apis::Common_ButtonName::PRESET_4));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_5"), hmi_apis::Common_ButtonName::PRESET_5));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_6"), hmi_apis::Common_ButtonName::PRESET_6));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_7"), hmi_apis::Common_ButtonName::PRESET_7));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_8"), hmi_apis::Common_ButtonName::PRESET_8));
- button_enum_name.insert(std::make_pair(
- std::string("PRESET_9"), hmi_apis::Common_ButtonName::PRESET_9));
- button_enum_name.insert(
- std::make_pair(std::string("CUSTOM_BUTTON"),
- hmi_apis::Common_ButtonName::CUSTOM_BUTTON));
- button_enum_name.insert(std::make_pair(std::string("SEARCH"),
- hmi_apis::Common_ButtonName::SEARCH));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_CENTER_LOCATION"),
- hmi_apis::Common_ButtonName::NAV_CENTER_LOCATION));
- button_enum_name.insert(std::make_pair(
- std::string("NAV_ZOOM_IN"), hmi_apis::Common_ButtonName::NAV_ZOOM_IN));
- button_enum_name.insert(std::make_pair(
- std::string("NAV_ZOOM_OUT"), hmi_apis::Common_ButtonName::NAV_ZOOM_OUT));
- button_enum_name.insert(std::make_pair(
- std::string("NAV_PAN_UP"), hmi_apis::Common_ButtonName::NAV_PAN_UP));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_PAN_UP_RIGHT"),
- hmi_apis::Common_ButtonName::NAV_PAN_UP_RIGHT));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_PAN_RIGHT"),
- hmi_apis::Common_ButtonName::NAV_PAN_RIGHT));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_PAN_DOWN_RIGHT"),
- hmi_apis::Common_ButtonName::NAV_PAN_DOWN_RIGHT));
- button_enum_name.insert(std::make_pair(
- std::string("NAV_PAN_DOWN"), hmi_apis::Common_ButtonName::NAV_PAN_DOWN));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_PAN_DOWN_LEFT"),
- hmi_apis::Common_ButtonName::NAV_PAN_DOWN_LEFT));
- button_enum_name.insert(std::make_pair(
- std::string("NAV_PAN_LEFT"), hmi_apis::Common_ButtonName::NAV_PAN_LEFT));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_PAN_UP_LEFT"),
- hmi_apis::Common_ButtonName::NAV_PAN_UP_LEFT));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_TILT_TOGGLE"),
- hmi_apis::Common_ButtonName::NAV_TILT_TOGGLE));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_ROTATE_CLOCKWISE"),
- hmi_apis::Common_ButtonName::NAV_ROTATE_CLOCKWISE));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_ROTATE_COUNTERCLOCKWISE"),
- hmi_apis::Common_ButtonName::NAV_ROTATE_COUNTERCLOCKWISE));
- button_enum_name.insert(
- std::make_pair(std::string("NAV_HEADING_TOGGLE"),
- hmi_apis::Common_ButtonName::NAV_HEADING_TOGGLE));
-
- text_fields_enum_name.insert(std::make_pair(
- std::string("mainField1"), hmi_apis::Common_TextFieldName::mainField1));
- text_fields_enum_name.insert(std::make_pair(
- std::string("mainField2"), hmi_apis::Common_TextFieldName::mainField2));
- text_fields_enum_name.insert(std::make_pair(
- std::string("mainField3"), hmi_apis::Common_TextFieldName::mainField3));
- text_fields_enum_name.insert(std::make_pair(
- std::string("mainField4"), hmi_apis::Common_TextFieldName::mainField4));
- text_fields_enum_name.insert(std::make_pair(
- std::string("statusBar"), hmi_apis::Common_TextFieldName::statusBar));
- text_fields_enum_name.insert(std::make_pair(
- std::string("mediaClock"), hmi_apis::Common_TextFieldName::mediaClock));
- text_fields_enum_name.insert(std::make_pair(
- std::string("mediaTrack"), hmi_apis::Common_TextFieldName::mediaTrack));
- text_fields_enum_name.insert(std::make_pair(
- std::string("alertText1"), hmi_apis::Common_TextFieldName::alertText1));
- text_fields_enum_name.insert(std::make_pair(
- std::string("alertText2"), hmi_apis::Common_TextFieldName::alertText2));
- text_fields_enum_name.insert(std::make_pair(
- std::string("alertText3"), hmi_apis::Common_TextFieldName::alertText3));
- text_fields_enum_name.insert(
- std::make_pair(std::string("scrollableMessageBody"),
- hmi_apis::Common_TextFieldName::scrollableMessageBody));
- text_fields_enum_name.insert(
- std::make_pair(std::string("initialInteractionText"),
- hmi_apis::Common_TextFieldName::initialInteractionText));
- text_fields_enum_name.insert(
- std::make_pair(std::string("navigationText1"),
- hmi_apis::Common_TextFieldName::navigationText1));
- text_fields_enum_name.insert(
- std::make_pair(std::string("navigationText2"),
- hmi_apis::Common_TextFieldName::navigationText2));
- text_fields_enum_name.insert(
- std::make_pair(std::string("ETA"), hmi_apis::Common_TextFieldName::ETA));
- text_fields_enum_name.insert(
- std::make_pair(std::string("totalDistance"),
- hmi_apis::Common_TextFieldName::totalDistance));
- text_fields_enum_name.insert(std::make_pair(
- std::string("audioPassThruDisplayText1"),
- hmi_apis::Common_TextFieldName::audioPassThruDisplayText1));
- text_fields_enum_name.insert(std::make_pair(
- std::string("audioPassThruDisplayText2"),
- hmi_apis::Common_TextFieldName::audioPassThruDisplayText2));
- text_fields_enum_name.insert(
- std::make_pair(std::string("sliderHeader"),
- hmi_apis::Common_TextFieldName::sliderHeader));
- text_fields_enum_name.insert(
- std::make_pair(std::string("sliderFooter"),
- hmi_apis::Common_TextFieldName::sliderFooter));
- text_fields_enum_name.insert(
- std::make_pair(std::string("navigationText"),
- hmi_apis::Common_TextFieldName::navigationText));
- text_fields_enum_name.insert(
- std::make_pair(std::string("notificationText"),
- hmi_apis::Common_TextFieldName::notificationText));
- text_fields_enum_name.insert(std::make_pair(
- std::string("menuName"), hmi_apis::Common_TextFieldName::menuName));
- text_fields_enum_name.insert(
- std::make_pair(std::string("secondaryText"),
- hmi_apis::Common_TextFieldName::secondaryText));
- text_fields_enum_name.insert(
- std::make_pair(std::string("tertiaryText"),
- hmi_apis::Common_TextFieldName::tertiaryText));
- text_fields_enum_name.insert(
- std::make_pair(std::string("timeToDestination"),
- hmi_apis::Common_TextFieldName::timeToDestination));
- text_fields_enum_name.insert(
- std::make_pair(std::string("locationName"),
- hmi_apis::Common_TextFieldName::locationName));
- text_fields_enum_name.insert(
- std::make_pair(std::string("locationDescription"),
- hmi_apis::Common_TextFieldName::locationDescription));
- text_fields_enum_name.insert(std::make_pair(
- std::string("turnText"), hmi_apis::Common_TextFieldName::turnText));
- text_fields_enum_name.insert(
- std::make_pair(std::string("addressLines"),
- hmi_apis::Common_TextFieldName::addressLines));
- text_fields_enum_name.insert(std::make_pair(
- std::string("phoneNumber"), hmi_apis::Common_TextFieldName::phoneNumber));
- text_fields_enum_name.insert(
- std::make_pair(std::string("subtleAlertText1"),
- hmi_apis::Common_TextFieldName::subtleAlertText1));
- text_fields_enum_name.insert(
- std::make_pair(std::string("subtleAlertText2"),
- hmi_apis::Common_TextFieldName::subtleAlertText2));
- text_fields_enum_name.insert(std::make_pair(
- std::string("subtleAlertSoftButtonText"),
- hmi_apis::Common_TextFieldName::subtleAlertSoftButtonText));
- text_fields_enum_name.insert(std::make_pair(
- std::string("turnText"), hmi_apis::Common_TextFieldName::turnText));
- text_fields_enum_name.insert(std::make_pair(
- std::string("menuTitle"), hmi_apis::Common_TextFieldName::menuTitle));
-
- media_clock_enum_name.insert(std::make_pair(
- std::string("CLOCK1"), hmi_apis::Common_MediaClockFormat::CLOCK1));
- media_clock_enum_name.insert(std::make_pair(
- std::string("CLOCK2"), hmi_apis::Common_MediaClockFormat::CLOCK2));
- media_clock_enum_name.insert(std::make_pair(
- std::string("CLOCK3"), hmi_apis::Common_MediaClockFormat::CLOCK3));
- media_clock_enum_name.insert(
- std::make_pair(std::string("CLOCKTEXT1"),
- hmi_apis::Common_MediaClockFormat::CLOCKTEXT1));
- media_clock_enum_name.insert(
- std::make_pair(std::string("CLOCKTEXT2"),
- hmi_apis::Common_MediaClockFormat::CLOCKTEXT2));
- media_clock_enum_name.insert(
- std::make_pair(std::string("CLOCKTEXT3"),
- hmi_apis::Common_MediaClockFormat::CLOCKTEXT3));
- media_clock_enum_name.insert(
- std::make_pair(std::string("CLOCKTEXT4"),
- hmi_apis::Common_MediaClockFormat::CLOCKTEXT4));
-
- image_type_enum.insert(std::make_pair(std::string("STATIC"),
- hmi_apis::Common_ImageType::STATIC));
- image_type_enum.insert(std::make_pair(std::string("DYNAMIC"),
- hmi_apis::Common_ImageType::DYNAMIC));
-
- sampling_rate_enum.insert(std::make_pair(
- std::string("8KHZ"), hmi_apis::Common_SamplingRate::RATE_8KHZ));
- sampling_rate_enum.insert(std::make_pair(
- std::string("16KHZ"), hmi_apis::Common_SamplingRate::RATE_16KHZ));
- sampling_rate_enum.insert(std::make_pair(
- std::string("22KHZ"), hmi_apis::Common_SamplingRate::RATE_22KHZ));
- sampling_rate_enum.insert(std::make_pair(
- std::string("44KHZ"), hmi_apis::Common_SamplingRate::RATE_44KHZ));
-
- bit_per_sample_enum.insert(std::make_pair(
- std::string("RATE_8_BIT"), hmi_apis::Common_BitsPerSample::RATE_8_BIT));
- bit_per_sample_enum.insert(std::make_pair(
- std::string("RATE_16_BIT"), hmi_apis::Common_BitsPerSample::RATE_16_BIT));
-
- audio_type_enum.insert(
- std::make_pair(std::string("PCM"), hmi_apis::Common_AudioType::PCM));
-
- hmi_zone_enum.insert(std::make_pair(
- std::string("FRONT"), hmi_apis::Common_HmiZoneCapabilities::FRONT));
- hmi_zone_enum.insert(std::make_pair(
- std::string("BACK"), hmi_apis::Common_HmiZoneCapabilities::BACK));
-
- image_field_name_enum.insert(
- std::make_pair(std::string("softButtonImage"),
- hmi_apis::Common_ImageFieldName::softButtonImage));
- image_field_name_enum.insert(
- std::make_pair(std::string("choiceImage"),
- hmi_apis::Common_ImageFieldName::choiceImage));
- image_field_name_enum.insert(
- std::make_pair(std::string("choiceSecondaryImage"),
- hmi_apis::Common_ImageFieldName::choiceSecondaryImage));
- image_field_name_enum.insert(std::make_pair(
- std::string("vrHelpItem"), hmi_apis::Common_ImageFieldName::vrHelpItem));
- image_field_name_enum.insert(std::make_pair(
- std::string("turnIcon"), hmi_apis::Common_ImageFieldName::turnIcon));
- image_field_name_enum.insert(std::make_pair(
- std::string("menuIcon"), hmi_apis::Common_ImageFieldName::menuIcon));
- image_field_name_enum.insert(std::make_pair(
- std::string("cmdIcon"), hmi_apis::Common_ImageFieldName::cmdIcon));
- image_field_name_enum.insert(std::make_pair(
- std::string("appIcon"), hmi_apis::Common_ImageFieldName::appIcon));
- image_field_name_enum.insert(std::make_pair(
- std::string("graphic"), hmi_apis::Common_ImageFieldName::graphic));
- image_field_name_enum.insert(
- std::make_pair(std::string("secondaryGraphic"),
- hmi_apis::Common_ImageFieldName::secondaryGraphic));
- image_field_name_enum.insert(
- std::make_pair(std::string("showConstantTBTIcon"),
- hmi_apis::Common_ImageFieldName::showConstantTBTIcon));
- image_field_name_enum.insert(std::make_pair(
- std::string("showConstantTBTNextTurnIcon"),
- hmi_apis::Common_ImageFieldName::showConstantTBTNextTurnIcon));
- image_field_name_enum.insert(
- std::make_pair(std::string("locationImage"),
- hmi_apis::Common_ImageFieldName::locationImage));
- image_field_name_enum.insert(std::make_pair(
- std::string("alertIcon"), hmi_apis::Common_ImageFieldName::alertIcon));
- image_field_name_enum.insert(
- std::make_pair(std::string("subtleAlertIcon"),
- hmi_apis::Common_ImageFieldName::subtleAlertIcon));
-
- file_type_enum.insert(std::make_pair(std::string("GRAPHIC_BMP"),
- hmi_apis::Common_FileType::GRAPHIC_BMP));
- file_type_enum.insert(std::make_pair(
- std::string("GRAPHIC_JPEG"), hmi_apis::Common_FileType::GRAPHIC_JPEG));
- file_type_enum.insert(std::make_pair(std::string("GRAPHIC_PNG"),
- hmi_apis::Common_FileType::GRAPHIC_PNG));
- file_type_enum.insert(std::make_pair(std::string("AUDIO_WAVE"),
- hmi_apis::Common_FileType::AUDIO_WAVE));
- file_type_enum.insert(std::make_pair(std::string("AUDIO_MP3"),
- hmi_apis::Common_FileType::AUDIO_MP3));
- file_type_enum.insert(std::make_pair(std::string("AUDIO_AAC"),
- hmi_apis::Common_FileType::AUDIO_AAC));
- file_type_enum.insert(
- std::make_pair(std::string("BINARY"), hmi_apis::Common_FileType::BINARY));
- file_type_enum.insert(
- std::make_pair(std::string("JSON"), hmi_apis::Common_FileType::JSON));
-
- display_type_enum.insert(
- std::make_pair(std::string("CID"), hmi_apis::Common_DisplayType::CID));
- display_type_enum.insert(std::make_pair(std::string("TYPE2"),
- hmi_apis::Common_DisplayType::TYPE2));
- display_type_enum.insert(std::make_pair(std::string("TYPE5"),
- hmi_apis::Common_DisplayType::TYPE5));
- display_type_enum.insert(
- std::make_pair(std::string("NGN"), hmi_apis::Common_DisplayType::NGN));
- display_type_enum.insert(std::make_pair(
- std::string("GEN2_8_DMA"), hmi_apis::Common_DisplayType::GEN2_8_DMA));
- display_type_enum.insert(std::make_pair(
- std::string("GEN2_6_DMA"), hmi_apis::Common_DisplayType::GEN2_6_DMA));
- display_type_enum.insert(
- std::make_pair(std::string("MFD3"), hmi_apis::Common_DisplayType::MFD3));
- display_type_enum.insert(
- std::make_pair(std::string("MFD4"), hmi_apis::Common_DisplayType::MFD4));
- display_type_enum.insert(
- std::make_pair(std::string("MFD5"), hmi_apis::Common_DisplayType::MFD5));
- display_type_enum.insert(std::make_pair(
- std::string("GEN3_8_INCH"), hmi_apis::Common_DisplayType::GEN3_8_INCH));
- display_type_enum.insert(std::make_pair(
- std::string("SDL_GENERIC"), hmi_apis::Common_DisplayType::SDL_GENERIC));
-
- character_set_enum.insert(std::make_pair(
- std::string("TYPE2SET"), hmi_apis::Common_CharacterSet::TYPE2SET));
- character_set_enum.insert(std::make_pair(
- std::string("TYPE5SET"), hmi_apis::Common_CharacterSet::TYPE5SET));
- character_set_enum.insert(std::make_pair(
- std::string("CID1SET"), hmi_apis::Common_CharacterSet::CID1SET));
- character_set_enum.insert(std::make_pair(
- std::string("CID2SET"), hmi_apis::Common_CharacterSet::CID2SET));
- character_set_enum.insert(std::make_pair(
- std::string("ASCII"), hmi_apis::Common_CharacterSet::ASCII));
- character_set_enum.insert(std::make_pair(
- std::string("ISO_8859_1"), hmi_apis::Common_CharacterSet::ISO_8859_1));
- character_set_enum.insert(std::make_pair(
- std::string("UTF_8"), hmi_apis::Common_CharacterSet::UTF_8));
-
- video_streaming_protocol_enum.insert(std::make_pair(
- std::string("RAW"), hmi_apis::Common_VideoStreamingProtocol::RAW));
- video_streaming_protocol_enum.insert(std::make_pair(
- std::string("RTP"), hmi_apis::Common_VideoStreamingProtocol::RTP));
- video_streaming_protocol_enum.insert(std::make_pair(
- std::string("RTSP"), hmi_apis::Common_VideoStreamingProtocol::RTSP));
- video_streaming_protocol_enum.insert(std::make_pair(
- std::string("RTMP"), hmi_apis::Common_VideoStreamingProtocol::RTMP));
- video_streaming_protocol_enum.insert(std::make_pair(
- std::string("WEBM"), hmi_apis::Common_VideoStreamingProtocol::WEBM));
-
- video_streaming_codec_enum.insert(std::make_pair(
- std::string("H264"), hmi_apis::Common_VideoStreamingCodec::H264));
- video_streaming_codec_enum.insert(std::make_pair(
- std::string("H265"), hmi_apis::Common_VideoStreamingCodec::H265));
- video_streaming_codec_enum.insert(std::make_pair(
- std::string("Theora"), hmi_apis::Common_VideoStreamingCodec::Theora));
- video_streaming_codec_enum.insert(std::make_pair(
- std::string("VP8"), hmi_apis::Common_VideoStreamingCodec::VP8));
- video_streaming_codec_enum.insert(std::make_pair(
- std::string("VP9"), hmi_apis::Common_VideoStreamingCodec::VP9));
-}
-
-} // namespace
-
-namespace {
/**
* @brief Saves smart object content into the JSON node
* @param field_name name of the field to save
@@ -522,7 +118,6 @@ HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr)
, seat_location_capability_(NULL)
, app_mngr_(app_mngr)
, hmi_language_handler_(app_mngr) {
- InitCapabilities();
if (false == app_mngr_.get_settings().launch_hmi()) {
is_vr_cooperating_ = true;
is_tts_cooperating_ = true;
@@ -536,6 +131,7 @@ HMICapabilitiesImpl::HMICapabilitiesImpl(ApplicationManager& app_mngr)
HMICapabilitiesImpl::~HMICapabilitiesImpl() {}
bool HMICapabilitiesImpl::VerifyImageType(const int32_t image_type) const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
auto capabilities = display_capabilities();
if (!capabilities) {
return false;
@@ -631,6 +227,7 @@ void HMICapabilitiesImpl::set_ui_supported_languages(
const smart_objects::SmartObject& supported_languages) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(supported_languages);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
ui_supported_languages_.swap(new_value);
}
@@ -638,6 +235,7 @@ void HMICapabilitiesImpl::set_tts_supported_languages(
const smart_objects::SmartObject& supported_languages) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(supported_languages);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
tts_supported_languages_.swap(new_value);
}
@@ -645,6 +243,7 @@ void HMICapabilitiesImpl::set_vr_supported_languages(
const smart_objects::SmartObject& supported_languages) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(supported_languages);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
vr_supported_languages_.swap(new_value);
}
@@ -655,12 +254,14 @@ void HMICapabilitiesImpl::set_display_capabilities(
display_capabilities)) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(display_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
display_capabilities_.swap(new_value);
}
}
void HMICapabilitiesImpl::set_system_display_capabilities(
const smart_objects::SmartObject& display_capabilities) {
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
system_display_capabilities_.reset(
new smart_objects::SmartObject(display_capabilities));
}
@@ -669,6 +270,7 @@ void HMICapabilitiesImpl::set_hmi_zone_capabilities(
const smart_objects::SmartObject& hmi_zone_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(hmi_zone_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
hmi_zone_capabilities_.swap(new_value);
}
@@ -676,6 +278,7 @@ void HMICapabilitiesImpl::set_soft_button_capabilities(
const smart_objects::SmartObject& soft_button_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(soft_button_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
soft_buttons_capabilities_.swap(new_value);
}
@@ -683,6 +286,7 @@ void HMICapabilitiesImpl::set_button_capabilities(
const smart_objects::SmartObject& button_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(button_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
button_capabilities_.swap(new_value);
}
@@ -690,6 +294,7 @@ void HMICapabilitiesImpl::set_vr_capabilities(
const smart_objects::SmartObject& vr_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(vr_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
vr_capabilities_.swap(new_value);
}
@@ -697,6 +302,7 @@ void HMICapabilitiesImpl::set_speech_capabilities(
const smart_objects::SmartObject& speech_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(speech_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
speech_capabilities_.swap(new_value);
}
@@ -704,6 +310,7 @@ void HMICapabilitiesImpl::set_audio_pass_thru_capabilities(
const smart_objects::SmartObject& audio_pass_thru_capabilities) {
auto new_value = std::make_shared<smart_objects::SmartObject>(
audio_pass_thru_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
audio_pass_thru_capabilities_.swap(new_value);
}
@@ -711,6 +318,7 @@ void HMICapabilitiesImpl::set_pcm_stream_capabilities(
const smart_objects::SmartObject& pcm_stream_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(pcm_stream_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
pcm_stream_capabilities_.swap(new_value);
}
@@ -718,12 +326,14 @@ void HMICapabilitiesImpl::set_preset_bank_capabilities(
const smart_objects::SmartObject& preset_bank_capabilities) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(preset_bank_capabilities);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
preset_bank_capabilities_.swap(new_value);
}
void HMICapabilitiesImpl::set_vehicle_type(
const smart_objects::SmartObject& vehicle_type) {
auto new_value = std::make_shared<smart_objects::SmartObject>(vehicle_type);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
vehicle_type_.swap(new_value);
}
@@ -731,6 +341,7 @@ void HMICapabilitiesImpl::set_prerecorded_speech(
const smart_objects::SmartObject& prerecorded_speech) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(prerecorded_speech);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
prerecorded_speech_.swap(new_value);
}
@@ -758,6 +369,7 @@ void HMICapabilitiesImpl::set_navigation_capability(
const smart_objects::SmartObject& navigation_capability) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(navigation_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
navigation_capability_.swap(new_value);
}
@@ -765,6 +377,7 @@ void HMICapabilitiesImpl::set_phone_capability(
const smart_objects::SmartObject& phone_capability) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(phone_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
phone_capability_.swap(new_value);
}
@@ -772,12 +385,14 @@ void HMICapabilitiesImpl::set_video_streaming_capability(
const smart_objects::SmartObject& video_streaming_capability) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(video_streaming_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
video_streaming_capability_.swap(new_value);
}
void HMICapabilitiesImpl::set_rc_capability(
const smart_objects::SmartObject& rc_capability) {
auto new_value = std::make_shared<smart_objects::SmartObject>(rc_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
rc_capability_.swap(new_value);
}
@@ -785,6 +400,7 @@ void HMICapabilitiesImpl::set_driver_distraction_capability(
const smart_objects::SmartObject& driver_distraction_capability) {
auto new_value = std::make_shared<smart_objects::SmartObject>(
driver_distraction_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
driver_distraction_capability_.swap(new_value);
}
@@ -792,6 +408,7 @@ void HMICapabilitiesImpl::set_seat_location_capability(
const smart_objects::SmartObject& seat_location_capability) {
auto new_value =
std::make_shared<smart_objects::SmartObject>(seat_location_capability);
+ sync_primitives::AutoWriteLock lock(hmi_capabilities_lock_);
seat_location_capability_.swap(new_value);
}
@@ -835,79 +452,95 @@ bool HMICapabilitiesImpl::is_rc_cooperating() const {
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::ui_supported_languages() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return ui_supported_languages_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::vr_supported_languages() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return vr_supported_languages_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::tts_supported_languages() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return tts_supported_languages_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::display_capabilities()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return display_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::system_display_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return system_display_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::hmi_zone_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return hmi_zone_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::soft_button_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return soft_buttons_capabilities_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::button_capabilities()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return button_capabilities_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::speech_capabilities()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return speech_capabilities_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::vr_capabilities()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return vr_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::audio_pass_thru_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return audio_pass_thru_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::pcm_stream_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return pcm_stream_capabilities_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::preset_bank_capabilities() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return preset_bank_capabilities_;
}
bool HMICapabilitiesImpl::attenuated_supported() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return attenuated_supported_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::vehicle_type() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return vehicle_type_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::prerecorded_speech()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return prerecorded_speech_;
}
@@ -933,31 +566,37 @@ bool HMICapabilitiesImpl::driver_distraction_supported() const {
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::navigation_capability() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return navigation_capability_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::phone_capability()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return phone_capability_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::video_streaming_capability() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return video_streaming_capability_;
}
const smart_objects::SmartObjectSPtr HMICapabilitiesImpl::rc_capability()
const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return rc_capability_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::driver_distraction_capability() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return driver_distraction_capability_;
}
const smart_objects::SmartObjectSPtr
HMICapabilitiesImpl::seat_location_capability() const {
+ sync_primitives::AutoReadLock lock(hmi_capabilities_lock_);
return seat_location_capability_;
}
@@ -1015,7 +654,7 @@ struct JsonCapabilitiesGetter {
* @param json_cache_node reference to cached JSON capabilities node
*/
JsonCapabilitiesGetter(Json::Value& json_default_node,
- Json::Value& json_cache_node)
+ const Json::Value& json_cache_node)
: json_default_node_(json_default_node)
, json_cache_node_(json_cache_node) {}
@@ -1150,7 +789,6 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
JsonCapabilitiesGetter json_root_getter(root_json, root_json_override);
// UI
-
if (json_root_getter.IsInterfaceJsonMemberExists(hmi_interface::ui)) {
auto json_ui_getter =
GetInterfaceGetter(hmi_interface::ui, json_root_getter);
@@ -1162,7 +800,8 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
if (!ui_language_node.isNull()) {
const std::string lang = ui_language_node.asString();
- set_active_ui_language(MessageHelper::CommonLanguageFromString(lang));
+ set_active_ui_language(
+ StringToEnum<hmi_apis::Common_Language::eType>(lang));
}
auto ui_languages_node = json_ui_getter.GetJsonMember(
@@ -1187,14 +826,12 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
ui_display_capabilities_node, display_capabilities_so);
if (display_capabilities_so.keyExists(hmi_response::display_type)) {
- std::map<std::string,
- hmi_apis::Common_DisplayType::eType>::const_iterator it =
- display_type_enum.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_DisplayType::eType>(
(display_capabilities_so[hmi_response::display_type])
.asString());
- display_capabilities_so.erase(hmi_response::display_type);
- if (display_type_enum.end() != it) {
- display_capabilities_so[hmi_response::display_type] = it->second;
+ if (hmi_apis::Common_DisplayType::INVALID_ENUM != enum_value) {
+ display_capabilities_so[hmi_response::display_type] = enum_value;
}
}
@@ -1205,34 +842,34 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
for (uint32_t i = 0; i < kLen; ++i) {
if ((display_capabilities_so[hmi_response::text_fields][i])
.keyExists(strings::name)) {
- std::map<std::string,
- hmi_apis::Common_TextFieldName::eType>::const_iterator
- it_text_field_name = text_fields_enum_name.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_TextFieldName::eType>(
display_capabilities_so[hmi_response::text_fields][i]
[strings::name]
.asString());
+
display_capabilities_so[hmi_response::text_fields][i].erase(
strings::name);
- if (text_fields_enum_name.end() != it_text_field_name) {
+
+ if (hmi_apis::Common_TextFieldName::INVALID_ENUM != enum_value) {
display_capabilities_so[hmi_response::text_fields][i]
- [strings::name] =
- it_text_field_name->second;
+ [strings::name] = enum_value;
}
}
if ((display_capabilities_so[hmi_response::text_fields][i])
.keyExists(strings::character_set)) {
- std::map<std::string,
- hmi_apis::Common_CharacterSet::eType>::const_iterator
- it_characte_set = character_set_enum.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_CharacterSet::eType>(
display_capabilities_so[hmi_response::text_fields][i]
[strings::character_set]
.asString());
+
display_capabilities_so[hmi_response::text_fields][i].erase(
strings::character_set);
- if (character_set_enum.end() != it_characte_set) {
+
+ if (hmi_apis::Common_CharacterSet::INVALID_ENUM != enum_value) {
display_capabilities_so[hmi_response::text_fields][i]
- [strings::character_set] =
- it_characte_set->second;
+ [strings::character_set] = enum_value;
}
}
}
@@ -1243,13 +880,12 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
display_capabilities_so[hmi_response::image_fields];
for (uint32_t i = 0; i < array_image_fields.length(); ++i) {
if (array_image_fields[i].keyExists(strings::name)) {
- std::map<std::string,
- hmi_apis::Common_ImageFieldName::eType>::const_iterator
- it = image_field_name_enum.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_ImageFieldName::eType>(
(array_image_fields[i][strings::name]).asString());
array_image_fields[i].erase(strings::name);
- if (image_field_name_enum.end() != it) {
- array_image_fields[i][strings::name] = it->second;
+ if (hmi_apis::Common_ImageFieldName::INVALID_ENUM != enum_value) {
+ array_image_fields[i][strings::name] = enum_value;
}
}
if (array_image_fields[i].keyExists(
@@ -1261,12 +897,11 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
for (uint32_t k = 0, j = 0;
k < image_type_supported_array.length();
++k) {
- std::map<std::string,
- hmi_apis::Common_FileType::eType>::const_iterator it =
- file_type_enum.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_FileType::eType>(
(image_type_supported_array[k]).asString());
- if (file_type_enum.end() != it) {
- image_type_supported_enum[j++] = it->second;
+ if (hmi_apis::Common_FileType::INVALID_ENUM != enum_value) {
+ image_type_supported_enum[j++] = enum_value;
}
}
array_image_fields[i].erase(strings::image_type_supported);
@@ -1283,12 +918,11 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
smart_objects::SmartType_Array);
for (uint32_t i = 0, j = 0; i < media_clock_formats_array.length();
++i) {
- std::map<std::string,
- hmi_apis::Common_MediaClockFormat::eType>::const_iterator
- it = media_clock_enum_name.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_MediaClockFormat::eType>(
(media_clock_formats_array[i]).asString());
- if (media_clock_enum_name.end() != it) {
- media_clock_formats_enum[j++] = it->second;
+ if (hmi_apis::Common_MediaClockFormat::INVALID_ENUM != enum_value) {
+ media_clock_formats_enum[j++] = enum_value;
}
}
display_capabilities_so.erase(hmi_response::media_clock_formats);
@@ -1304,11 +938,11 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
smart_objects::SmartType_Array);
for (uint32_t i = 0, j = 0; i < image_capabilities_array.length();
++i) {
- std::map<std::string,
- hmi_apis::Common_ImageType::eType>::const_iterator it =
- image_type_enum.find((image_capabilities_array[i]).asString());
- if (image_type_enum.end() != it) {
- image_capabilities_enum[j++] = it->second;
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_ImageType::eType>(
+ (image_capabilities_array[i]).asString());
+ if (hmi_apis::Common_ImageType::INVALID_ENUM != enum_value) {
+ image_capabilities_enum[j++] = enum_value;
}
}
display_capabilities_so.erase(hmi_response::image_capabilities);
@@ -1351,18 +985,20 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
pcm_capabilities_so);
set_pcm_stream_capabilities(pcm_capabilities_so);
}
-
auto ui_hmi_zone_capabilities_node =
json_ui_getter.GetJsonMember(hmi_response::hmi_zone_capabilities,
hmi_apis::FunctionID::UI_GetCapabilities,
requests_required_for_capabilities_);
if (!ui_hmi_zone_capabilities_node.isNull()) {
- smart_objects::SmartObject hmi_zone_capabilities_so =
- smart_objects::SmartObject(smart_objects::SmartType_Array);
- hmi_zone_capabilities_so =
- hmi_zone_enum.find(ui_hmi_zone_capabilities_node.asString())
- ->second;
- set_hmi_zone_capabilities(hmi_zone_capabilities_so);
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_HmiZoneCapabilities::eType>(
+ ui_hmi_zone_capabilities_node.asString());
+ if (hmi_apis::Common_HmiZoneCapabilities::INVALID_ENUM != enum_value) {
+ smart_objects::SmartObject hmi_zone_capabilities_so(
+ smart_objects::SmartType_Array);
+ hmi_zone_capabilities_so = enum_value;
+ set_hmi_zone_capabilities(hmi_zone_capabilities_so);
+ }
}
auto ui_soft_button_capabilities_node =
@@ -1425,26 +1061,23 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
continue;
}
- std::map<std::string,
- hmi_apis::Common_VideoStreamingProtocol::eType>::
- const_iterator it_protocol =
- video_streaming_protocol_enum.find(
- supported_format_array[i][strings::protocol]
- .asString());
-
- std::map<std::string,
- hmi_apis::Common_VideoStreamingCodec::eType>::
- const_iterator it_codec = video_streaming_codec_enum.find(
- supported_format_array[i][strings::codec].asString());
+ auto enum_value_protocol = ConvertStringToEnum<
+ hmi_apis::Common_VideoStreamingProtocol::eType>(
+ supported_format_array[i][strings::protocol].asString());
+ auto enum_value_codec = ConvertStringToEnum<
+ hmi_apis::Common_VideoStreamingCodec::eType>(
+ supported_format_array[i][strings::codec].asString());
// format is valid only if both protocol and codec are converted
// to enum values successfully
- if (it_protocol != video_streaming_protocol_enum.end() &&
- it_codec != video_streaming_codec_enum.end()) {
+ if (hmi_apis::Common_VideoStreamingProtocol::INVALID_ENUM !=
+ enum_value_protocol &&
+ hmi_apis::Common_VideoStreamingCodec::INVALID_ENUM !=
+ enum_value_codec) {
smart_objects::SmartObject format_so =
smart_objects::SmartObject(smart_objects::SmartType_Map);
- format_so[strings::protocol] = it_protocol->second;
- format_so[strings::codec] = it_codec->second;
+ format_so[strings::protocol] = enum_value_protocol;
+ format_so[strings::codec] = enum_value_codec;
converted_array[j++] = format_so;
}
}
@@ -1456,6 +1089,7 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
set_video_streaming_supported(true);
}
}
+
if (JsonIsMemberSafe(ui_system_capabilities_node,
strings::driver_distraction_capability)) {
Json::Value dd_capability = ui_system_capabilities_node.get(
@@ -1497,7 +1131,7 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
auto it = lights.asArray()->begin();
for (; it != lights.asArray()->end(); ++it) {
smart_objects::SmartObject& light_name_so = (*it)[strings::name];
- auto light_name = MessageHelper::CommonLightNameFromString(
+ auto light_name = StringToEnum<hmi_apis::Common_LightName::eType>(
light_name_so.asString());
light_name_so = light_name;
}
@@ -1540,7 +1174,8 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
requests_required_for_capabilities_);
if (!vr_language_node.isNull()) {
const std::string lang = vr_language_node.asString();
- set_active_vr_language(MessageHelper::CommonLanguageFromString(lang));
+ set_active_vr_language(
+ StringToEnum<hmi_apis::Common_Language::eType>(lang));
}
auto vr_languages_node = json_vr_getter.GetJsonMember(
@@ -1581,7 +1216,8 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
requests_required_for_capabilities_);
if (!tts_language_node.isNull()) {
const std::string lang = tts_language_node.asString();
- set_active_tts_language(MessageHelper::CommonLanguageFromString(lang));
+ set_active_tts_language(
+ StringToEnum<hmi_apis::Common_Language::eType>(lang));
}
auto tts_languages_node = json_tts_getter.GetJsonMember(
@@ -1640,13 +1276,11 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
for (uint32_t i = 0; i < buttons_capabilities_so.length(); ++i) {
if ((buttons_capabilities_so[i]).keyExists(strings::name)) {
- std::map<std::string,
- hmi_apis::Common_ButtonName::eType>::const_iterator it =
- button_enum_name.find(
+ auto enum_value =
+ ConvertStringToEnum<hmi_apis::Common_ButtonName::eType>(
(buttons_capabilities_so[i][strings::name]).asString());
- buttons_capabilities_so[i].erase(strings::name);
- if (button_enum_name.end() != it) {
- buttons_capabilities_so[i][strings::name] = it->second;
+ if (hmi_apis::Common_ButtonName::INVALID_ENUM != enum_value) {
+ buttons_capabilities_so[i][strings::name] = enum_value;
}
}
}
@@ -1690,7 +1324,7 @@ bool HMICapabilitiesImpl::LoadCapabilitiesFromFile() {
return false;
}
return true;
-}
+} // namespace application_manager
hmi_apis::Common_Language::eType
HMICapabilitiesImpl::GetActiveLanguageForInterface(
@@ -1779,8 +1413,8 @@ bool HMICapabilitiesImpl::AllFieldsSaved(
GetActiveLanguageForInterface(interface_name);
const auto json_language = interface_node[hmi_response::language];
- if (active_language !=
- MessageHelper::CommonLanguageFromString(json_language.asString())) {
+ if (active_language != StringToEnum<hmi_apis::Common_Language::eType>(
+ json_language.asString())) {
SDL_LOG_DEBUG("Active " << interface_name
<< " language is not the same as the persisted "
"one. Field should be overwritten");
@@ -1919,8 +1553,7 @@ void HMICapabilitiesImpl::PrepareUiJsonValueForSaving(
}
else if (section_to_update == hmi_response::language) {
- out_node[hmi_response::language] =
- MessageHelper::CommonLanguageToString(active_ui_language());
+ out_node[hmi_response::language] = EnumToString(active_ui_language());
}
else if (section_to_update == hmi_response::languages) {
@@ -1943,8 +1576,7 @@ void HMICapabilitiesImpl::PrepareVrJsonValueForSaving(
for (const auto& section_to_update : sections_to_update) {
if (section_to_update == hmi_response::language) {
- out_node[hmi_response::language] =
- MessageHelper::CommonLanguageToString(active_vr_language());
+ out_node[hmi_response::language] = EnumToString(active_vr_language());
}
if (section_to_update == hmi_response::languages) {
@@ -1967,8 +1599,7 @@ void HMICapabilitiesImpl::PrepareTtsJsonValueForSaving(
for (const auto& section_to_update : sections_to_update) {
if (section_to_update == hmi_response::language) {
- out_node[hmi_response::language] =
- MessageHelper::CommonLanguageToString(active_tts_language());
+ out_node[hmi_response::language] = EnumToString(active_tts_language());
}
if (section_to_update == hmi_response::languages) {
@@ -2233,8 +1864,8 @@ void HMICapabilitiesImpl::convert_json_languages_to_obj(
const Json::Value& json_languages,
smart_objects::SmartObject& languages) const {
for (uint32_t i = 0, j = 0; i < json_languages.size(); ++i) {
- languages[j++] =
- MessageHelper::CommonLanguageFromString(json_languages[i].asString());
+ languages[j++] = StringToEnum<hmi_apis::Common_Language::eType>(
+ json_languages[i].asString());
}
}
@@ -2243,19 +1874,18 @@ void HMICapabilitiesImpl::convert_audio_capability_to_obj(
smart_objects::SmartObject& output_so) const {
if (JsonIsMemberSafe(capability, "samplingRate")) {
output_so[strings::sampling_rate] =
- sampling_rate_enum.find(capability.get("samplingRate", "").asString())
- ->second;
+ ConvertStringToEnum<hmi_apis::Common_SamplingRate::eType>(
+ capability.get("samplingRate", "").asString());
}
if (JsonIsMemberSafe(capability, "bitsPerSample")) {
output_so[strings::bits_per_sample] =
- bit_per_sample_enum
- .find(capability.get("bitsPerSample", "").asString())
- ->second;
+ ConvertStringToEnum<hmi_apis::Common_BitsPerSample::eType>(
+ capability.get("bitsPerSample", "").asString());
}
if (JsonIsMemberSafe(capability, "audioType")) {
output_so[strings::audio_type] =
- audio_type_enum.find(capability.get("audioType", "").asString())
- ->second;
+ ConvertStringToEnum<hmi_apis::Common_AudioType::eType>(
+ capability.get("audioType", "").asString());
}
}
diff --git a/src/components/application_manager/src/hmi_state.cc b/src/components/application_manager/src/hmi_state.cc
index 3dadd8c193..3487116baf 100644
--- a/src/components/application_manager/src/hmi_state.cc
+++ b/src/components/application_manager/src/hmi_state.cc
@@ -242,6 +242,10 @@ PhoneCallHmiState::PhoneCallHmiState(std::shared_ptr<Application> app,
: HmiState(app, app_mngr, STATE_ID_PHONE_CALL) {}
mobile_apis::HMILevel::eType PhoneCallHmiState::hmi_level() const {
+ using namespace mobile_apis;
+ if (HMILevel::INVALID_ENUM == parent_hmi_level()) {
+ return parent_hmi_level();
+ }
return std::max(parent_hmi_level(), max_hmi_level());
}
@@ -272,6 +276,10 @@ DeactivateHMI::DeactivateHMI(std::shared_ptr<Application> app,
: HmiState(app, app_mngr, STATE_ID_DEACTIVATE_HMI) {}
mobile_apis::HMILevel::eType DeactivateHMI::hmi_level() const {
+ using namespace mobile_apis;
+ if (HMILevel::INVALID_ENUM == parent_hmi_level()) {
+ return parent_hmi_level();
+ }
return std::max(parent_hmi_level(), max_hmi_level());
}
@@ -296,6 +304,10 @@ AudioSource::AudioSource(std::shared_ptr<Application> app,
mobile_apis::HMILevel::eType AudioSource::hmi_level() const {
using namespace mobile_apis;
+ if (HMILevel::INVALID_ENUM == parent_hmi_level()) {
+ return parent_hmi_level();
+ }
+
if (WindowType::WIDGET == window_type() || keep_context_) {
return std::max(parent_hmi_level(), max_hmi_level());
}
@@ -368,6 +380,10 @@ mobile_apis::HMILevel::eType EmbeddedNavi::hmi_level() const {
using namespace mobile_apis;
using namespace helpers;
+ if (HMILevel::INVALID_ENUM == parent_hmi_level()) {
+ return parent_hmi_level();
+ }
+
if (WindowType::WIDGET == window_type()) {
return std::max(parent_hmi_level(), max_hmi_level());
}
@@ -426,6 +442,8 @@ const StateID2StrMap kStateID2StrMap =
HmiState::StateID::STATE_ID_EMBEDDED_NAVI, "EMBEDDED_NAVI");
} // anonymous namespace
+// cppcheck-suppress unusedFunction //Used in the next
+// overload of operator<<
std::ostream& operator<<(std::ostream& os, const HmiState::StateID src) {
try {
os << kStateID2StrMap.left.at(src);
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc
index c5cc11bbe5..ba1c726415 100644
--- a/src/components/application_manager/src/message_helper/message_helper.cc
+++ b/src/components/application_manager/src/message_helper/message_helper.cc
@@ -107,7 +107,7 @@ bool ValidateSoftButtons(smart_objects::SmartObject& soft_buttons) {
struct GroupsAppender
: std::unary_function<void, const PermissionsList::value_type&> {
- GroupsAppender(smart_objects::SmartObject& groups)
+ explicit GroupsAppender(smart_objects::SmartObject& groups)
: groups_(groups), index_(0) {}
void operator()(const PermissionsList::value_type& item) {
@@ -135,7 +135,7 @@ struct GroupsAppender
struct ExternalConsentStatusAppender
: std::unary_function<void,
const policy::ExternalConsentStatus::value_type&> {
- ExternalConsentStatusAppender(smart_objects::SmartObject& status)
+ explicit ExternalConsentStatusAppender(smart_objects::SmartObject& status)
: status_(status), index_(0) {}
void operator()(const policy::ExternalConsentStatus::value_type& item) {
@@ -301,28 +301,6 @@ const uint32_t MessageHelper::GetPriorityCode(const std::string& priority) {
return static_cast<uint32_t>(hmi_apis::Common_AppPriority::INVALID_ENUM);
}
-hmi_apis::Common_Language::eType MessageHelper::CommonLanguageFromString(
- const std::string& language) {
- using namespace ns_smart_device_link::ns_smart_objects;
- hmi_apis::Common_Language::eType value;
- if (EnumConversionHelper<hmi_apis::Common_Language::eType>::StringToEnum(
- language, &value)) {
- return value;
- }
- return hmi_apis::Common_Language::INVALID_ENUM;
-}
-
-hmi_apis::Common_LightName::eType MessageHelper::CommonLightNameFromString(
- const std::string& lightName) {
- using namespace ns_smart_device_link::ns_smart_objects;
- hmi_apis::Common_LightName::eType value;
- if (EnumConversionHelper<hmi_apis::Common_LightName::eType>::StringToEnum(
- lightName, &value)) {
- return value;
- }
- return hmi_apis::Common_LightName::INVALID_ENUM;
-}
-
std::string MessageHelper::GetDeviceMacAddressForHandle(
const transport_manager::DeviceHandle device_handle,
const ApplicationManager& app_mngr) {
@@ -333,26 +311,6 @@ std::string MessageHelper::GetDeviceMacAddressForHandle(
return device_mac_address;
}
-std::string MessageHelper::CommonLanguageToString(
- hmi_apis::Common_Language::eType language) {
- using namespace ns_smart_device_link::ns_smart_objects;
- const char* str = 0;
- if (EnumConversionHelper<hmi_apis::Common_Language::eType>::EnumToCString(
- language, &str)) {
- return str ? str : "";
- }
- return std::string();
-}
-
-std::string MessageHelper::MobileLanguageToString(
- mobile_apis::Language::eType language) {
- using namespace ns_smart_device_link::ns_smart_objects;
- const char* str = 0;
- EnumConversionHelper<mobile_apis::Language::eType>::EnumToCString(language,
- &str);
- return str ? str : std::string();
-}
-
smart_objects::SmartObjectSPtr MessageHelper::CreateMessageForHMI(
const hmi_apis::messageType::eType message_type,
const uint32_t correlation_id) {
@@ -710,23 +668,23 @@ void MessageHelper::SendDeleteSubmenuRequest(smart_objects::SmartObject* cmd,
if ((*cmd)[strings::menu_id].asInt() ==
(*it->second)[strings::menu_params][hmi_request::parent_id].asInt()) {
- SmartObject msg_params = SmartObject(smart_objects::SmartType_Map);
- msg_params[strings::cmd_id] = (*it->second)[strings::cmd_id].asInt();
- msg_params[strings::app_id] = application->app_id();
- msg_params[strings::grammar_id] = application->get_grammar_id();
- msg_params[strings::type] = hmi_apis::Common_VRCommandType::Command;
+ SmartObject params = SmartObject(smart_objects::SmartType_Map);
+ params[strings::cmd_id] = (*it->second)[strings::cmd_id].asInt();
+ params[strings::app_id] = application->app_id();
+ params[strings::grammar_id] = application->get_grammar_id();
+ params[strings::type] = hmi_apis::Common_VRCommandType::Command;
- SmartObjectSPtr message = CreateMessageForHMI(
+ SmartObjectSPtr hmi_message = CreateMessageForHMI(
hmi_apis::messageType::request, app_mngr.GetNextHMICorrelationID());
- DCHECK(message);
+ DCHECK(hmi_message);
- SmartObject& object = *message;
- object[strings::params][strings::function_id] =
+ SmartObject& smart_object = *hmi_message;
+ smart_object[strings::params][strings::function_id] =
hmi_apis::FunctionID::VR_DeleteCommand;
- object[strings::msg_params] = msg_params;
+ smart_object[strings::msg_params] = params;
- app_mngr.GetRPCService().ManageHMICommand(message);
+ app_mngr.GetRPCService().ManageHMICommand(hmi_message);
}
}
}
@@ -767,9 +725,7 @@ void MessageHelper::SendResetPropertiesRequest(ApplicationSharedPtr application,
using namespace smart_objects;
{
- SmartObject msg_params = SmartObject(smart_objects::SmartType_Map);
-
- msg_params = *MessageHelper::CreateAppVrHelp(application);
+ SmartObject msg_params = *MessageHelper::CreateAppVrHelp(application);
msg_params[hmi_request::menu_title] = "";
smart_objects::SmartObject keyboard_properties =
@@ -848,66 +804,22 @@ const VehicleData& MessageHelper::vehicle_data() {
return vehicle_data_;
}
-std::string MessageHelper::HMIResultToString(
- hmi_apis::Common_Result::eType hmi_result) {
- using namespace ns_smart_device_link::ns_smart_objects;
- const char* str = 0;
- if (EnumConversionHelper<hmi_apis::Common_Result::eType>::EnumToCString(
- hmi_result, &str)) {
- return str;
- }
- return std::string();
-}
-
-hmi_apis::Common_Result::eType MessageHelper::HMIResultFromString(
- const std::string& hmi_result) {
- using namespace ns_smart_device_link::ns_smart_objects;
- hmi_apis::Common_Result::eType value;
- if (EnumConversionHelper<hmi_apis::Common_Result::eType>::StringToEnum(
- hmi_result, &value)) {
- return value;
- }
- return hmi_apis::Common_Result::INVALID_ENUM;
-}
-
-std::string MessageHelper::MobileResultToString(
- mobile_apis::Result::eType mobile_result) {
- using namespace ns_smart_device_link::ns_smart_objects;
- const char* str = 0;
- if (EnumConversionHelper<mobile_apis::Result::eType>::EnumToCString(
- mobile_result, &str)) {
- return str;
- }
- return std::string();
-}
-
-mobile_apis::Result::eType MessageHelper::MobileResultFromString(
- const std::string& mobile_result) {
- using namespace ns_smart_device_link::ns_smart_objects;
- mobile_apis::Result::eType value;
- if (EnumConversionHelper<mobile_apis::Result::eType>::StringToEnum(
- mobile_result, &value)) {
- return value;
- }
- return mobile_apis::Result::INVALID_ENUM;
-}
-
mobile_apis::Result::eType MessageHelper::HMIToMobileResult(
const hmi_apis::Common_Result::eType hmi_result) {
- const std::string result = HMIResultToString(hmi_result);
+ const std::string result = EnumToString(hmi_result);
if (result.empty()) {
return mobile_api::Result::INVALID_ENUM;
}
- return MobileResultFromString(result);
+ return StringToEnum<mobile_apis::Result::eType>(result);
}
hmi_apis::Common_Result::eType MessageHelper::MobileToHMIResult(
const mobile_apis::Result::eType mobile_result) {
- const std::string result = MobileResultToString(mobile_result);
+ const std::string result = EnumToString(mobile_result);
if (result.empty()) {
return hmi_apis::Common_Result::INVALID_ENUM;
}
- return HMIResultFromString(result);
+ return StringToEnum<hmi_apis::Common_Result::eType>(result);
}
smart_objects::SmartObjectSPtr MessageHelper::CreateHMIStatusNotification(
@@ -1001,28 +913,6 @@ void MessageHelper::SendActivateAppToHMI(
application_manager.GetRPCService().ManageHMICommand(message);
}
-mobile_apis::HMILevel::eType MessageHelper::StringToHMILevel(
- const std::string& hmi_level) {
- using namespace ns_smart_device_link::ns_smart_objects;
- mobile_apis::HMILevel::eType value;
- if (EnumConversionHelper<mobile_apis::HMILevel::eType>::StringToEnum(
- hmi_level, &value)) {
- return value;
- }
- return mobile_apis::HMILevel::INVALID_ENUM;
-}
-
-std::string MessageHelper::StringifiedHMILevel(
- const mobile_apis::HMILevel::eType hmi_level) {
- using namespace ns_smart_device_link::ns_smart_objects;
- const char* str = 0;
- if (EnumConversionHelper<mobile_apis::HMILevel::eType>::EnumToCString(
- hmi_level, &str)) {
- return str;
- }
- return std::string();
-}
-
std::string MessageHelper::StringifiedFunctionID(
mobile_apis::FunctionID::eType function_id) {
SDL_LOG_AUTO_TRACE();
@@ -1060,7 +950,7 @@ void MessageHelper::CreateGetVehicleDataRequest(
smart_objects::SmartObject(smart_objects::SmartType_Map);
for (std::vector<std::string>::const_iterator it = params.begin();
it != params.end();
- it++) {
+ ++it) {
(*request)[strings::msg_params][*it] = true;
}
app_mngr.GetRPCService().ManageHMICommand(request);
@@ -1337,8 +1227,6 @@ MessageHelper::CreateGlobalPropertiesRequestsToHMI(
ApplicationConstSharedPtr app, ApplicationManager& app_mngr) {
SDL_LOG_AUTO_TRACE();
- uint32_t correlation_id = app_mngr.GetNextHMICorrelationID();
-
smart_objects::SmartObjectList requests;
if (app.use_count() == 0) {
SDL_LOG_ERROR("Invalid application");
@@ -1398,7 +1286,7 @@ MessageHelper::CreateGlobalPropertiesRequestsToHMI(
// TTS global properties
if (can_send_vr && (app->help_prompt() || app->timeout_prompt())) {
- correlation_id = app_mngr.GetNextHMICorrelationID();
+ uint32_t correlation_id = app_mngr.GetNextHMICorrelationID();
smart_objects::SmartObjectSPtr tts_global_properties =
CreateMessageForHMI(hmi_apis::messageType::request, correlation_id);
if (!tts_global_properties) {
@@ -1657,8 +1545,6 @@ MessageHelper::CreateAddVRCommandRequestFromChoiceToHMI(
msg_params[strings::cmd_id] =
(*(it->second))[strings::choice_set][j][strings::choice_id];
msg_params[strings::vr_commands] =
- smart_objects::SmartObject(smart_objects::SmartType_Array);
- msg_params[strings::vr_commands] =
(*(it->second))[strings::choice_set][j][strings::vr_commands];
msg_params[strings::type] = hmi_apis::Common_VRCommandType::Choice;
msg_params[strings::grammar_id] = choice_grammar_id;
@@ -2798,9 +2684,9 @@ void MessageHelper::SendSystemRequestNotification(
content[strings::params][strings::connection_key] = connection_key;
PrintSmartObject(content);
- DCHECK(app_mngr.GetRPCService().ManageMobileCommand(
+ app_mngr.GetRPCService().ManageMobileCommand(
std::make_shared<smart_objects::SmartObject>(content),
- commands::Command::SOURCE_SDL));
+ commands::Command::SOURCE_SDL);
}
void MessageHelper::SendLaunchApp(const uint32_t connection_key,
@@ -3460,10 +3346,7 @@ mobile_apis::Result::eType MessageHelper::ProcessSoftButtons(
}
break;
}
- default: {
- continue;
- break;
- }
+ default: { continue; }
}
soft_buttons[j++] = request_soft_buttons[i];
diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc
index 8ec21660a8..b61a75d7de 100644
--- a/src/components/application_manager/src/policies/policy_handler.cc
+++ b/src/components/application_manager/src/policies/policy_handler.cc
@@ -30,12 +30,14 @@
POSSIBILITY OF SUCH DAMAGE.
*/
#include "application_manager/policies/policy_handler.h"
+
#include <dlfcn.h>
#include <unistd.h>
#include <algorithm>
#include <functional>
#include <utility>
#include <vector>
+
#include "application_manager/application_manager.h"
#include "application_manager/message_helper.h"
#include "application_manager/policies/delegates/app_permission_delegate.h"
@@ -137,21 +139,24 @@ struct HMILevelPredicate
mobile_api::HMILevel::eType level_;
};
+constexpr char kLibraryNotLoadedMessage[] =
+ "The shared library of policy is not loaded";
+
} // namespace
-#define POLICY_LIB_CHECK_OR_RETURN(return_value) \
+#define POLICY_LIB_CHECK_OR_RETURN(policy_manager, return_value) \
{ \
sync_primitives::AutoReadLock lock(policy_manager_lock_); \
- if (!policy_manager_) { \
+ if (!policy_manager) { \
SDL_LOG_DEBUG("The shared library of policy is not loaded"); \
return return_value; \
} \
}
-#define POLICY_LIB_CHECK_VOID() \
+#define POLICY_LIB_CHECK_VOID(policy_manager) \
{ \
sync_primitives::AutoReadLock lock(policy_manager_lock_); \
- if (!policy_manager_) { \
+ if (!policy_manager) { \
SDL_LOG_DEBUG("The shared library of policy is not loaded"); \
return; \
} \
@@ -308,7 +313,7 @@ PolicyHandler::~PolicyHandler() {}
PolicyEncryptionFlagGetterInterfaceSPtr
PolicyHandler::PolicyEncryptionFlagGetter() const {
- return policy_manager_;
+ return LoadPolicyManager();
}
bool PolicyHandler::PolicyEnabled() const {
@@ -317,55 +322,71 @@ bool PolicyHandler::PolicyEnabled() const {
bool PolicyHandler::LoadPolicyLibrary() {
SDL_LOG_AUTO_TRACE();
- sync_primitives::AutoWriteLock lock(policy_manager_lock_);
- if (!PolicyEnabled()) {
- SDL_LOG_WARN(
- "System is configured to work without policy "
- "functionality.");
- policy_manager_.reset();
- return false;
- }
- if (CreateManager()) {
- policy_manager_->set_listener(this);
- event_observer_ = std::shared_ptr<PolicyEventObserver>(
- new PolicyEventObserver(this, application_manager_.event_dispatcher()));
- }
+ auto create_policy_manager_instance = [this]() {
+ if (!PolicyEnabled()) {
+ SDL_LOG_WARN(
+ "System is configured to work without policy "
+ "functionality.");
+ return std::shared_ptr<PolicyManager>();
+ }
- return (policy_manager_.use_count() != 0);
-}
+ ExchangePolicyManager(nullptr);
+ sync_primitives::AutoWriteLock lock(policy_manager_lock_);
+ void* const dl_policy_handle = dlopen(kLibrary.c_str(), RTLD_LAZY);
-bool PolicyHandler::CreateManager() {
- void* policy_handle = dlopen(kLibrary.c_str(), RTLD_LAZY);
- const char* error = dlerror();
- if (!policy_handle) {
- SDL_LOG_ERROR((error == NULL
- ? "Unknown error in dlopen while loading policy table"
- : error));
- return false;
- }
+ if (!dl_policy_handle) {
+ SDL_LOG_ERROR("An error occurs while calling dlopen");
+ return std::shared_ptr<PolicyManager>();
+ }
- typedef PolicyManager* (*CreateManager)(logger::Logger*);
- typedef void (*DeleteManager)(PolicyManager*);
- CreateManager create_manager =
- reinterpret_cast<CreateManager>(dlsym(policy_handle, "CreateManager"));
- DeleteManager delete_manager =
- reinterpret_cast<DeleteManager>(dlsym(policy_handle, "DeleteManager"));
- auto policy_destroyer = [delete_manager,
- policy_handle](PolicyManager* policy_manager) {
- SDL_LOG_DEBUG("Delete Policy Manager");
- delete_manager(policy_manager);
- dlclose(policy_handle);
- };
- char* error_string = dlerror();
- if (NULL == error_string) {
- policy_manager_ = std::shared_ptr<PolicyManager>(
+ typedef PolicyManager* (*CreateManager)(logger::Logger*);
+ typedef void (*DeleteManager)(PolicyManager*);
+
+ CreateManager create_manager = reinterpret_cast<CreateManager>(
+ dlsym(dl_policy_handle, "CreateManager"));
+ char* error_string = dlerror();
+ if (NULL != error_string) {
+ SDL_LOG_WARN(error_string);
+ dlclose(dl_policy_handle);
+ return std::shared_ptr<PolicyManager>();
+ }
+
+ DeleteManager delete_manager = reinterpret_cast<DeleteManager>(
+ dlsym(dl_policy_handle, "DeleteManager"));
+
+ error_string = dlerror();
+ if (NULL != error_string) {
+ SDL_LOG_WARN(error_string);
+ dlclose(dl_policy_handle);
+ return std::shared_ptr<PolicyManager>();
+ }
+
+ auto policy_destroyer = [delete_manager,
+ dl_policy_handle](PolicyManager* policy_manager) {
+ SDL_LOG_DEBUG("Delete Policy Manager");
+ delete_manager(policy_manager);
+ dlclose(dl_policy_handle);
+ };
+
+ auto policy_manager = std::shared_ptr<PolicyManager>(
create_manager(&logger::Logger::instance()), policy_destroyer);
- } else {
- SDL_LOG_WARN(error_string);
- dlclose(policy_handle);
+
+ policy_manager->set_listener(this);
+
+ return policy_manager;
+ };
+
+ auto policy_manager = create_policy_manager_instance();
+
+ if (!policy_manager) {
+ return false;
}
- return (policy_manager_.use_count() != 0);
+
+ ExchangePolicyManager(policy_manager);
+ event_observer_ = std::make_shared<PolicyEventObserver>(
+ this, application_manager_.event_dispatcher());
+ return true;
}
const PolicySettings& PolicyHandler::get_settings() const {
@@ -374,11 +395,13 @@ const PolicySettings& PolicyHandler::get_settings() const {
bool PolicyHandler::InitPolicyTable() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
+
std::string preloaded_file = get_settings().preloaded_pt_file();
if (file_system::FileExists(preloaded_file)) {
const bool pt_inited =
- policy_manager_->InitPT(preloaded_file, &get_settings());
+ policy_manager->InitPT(preloaded_file, &get_settings());
OnPTInited();
return pt_inited;
}
@@ -398,20 +421,22 @@ void PolicyHandler::OnPTInited() {
void PolicyHandler::StopRetrySequence() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifndef EXTERNAL_PROPRIETARY_MODE
// Clear cached PTU app
last_ptu_app_id_ = 0;
#endif // EXTERNAL_PROPRIETARY_MODE
- policy_manager_->StopRetrySequence();
+ policy_manager->StopRetrySequence();
}
bool PolicyHandler::ResetPolicyTable() {
SDL_LOG_TRACE("Reset policy table.");
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
std::string preloaded_file = get_settings().preloaded_pt_file();
if (file_system::FileExists(preloaded_file)) {
- return policy_manager_->ResetPT(preloaded_file);
+ return policy_manager->ResetPT(preloaded_file);
}
SDL_LOG_WARN("The file which contains preloaded PT is not exist");
return false;
@@ -419,8 +444,9 @@ bool PolicyHandler::ResetPolicyTable() {
bool PolicyHandler::ClearUserConsent() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->ResetUserConsent();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false)
+ return policy_manager->ResetUserConsent();
}
#ifndef EXTERNAL_PROPRIETARY_MODE
@@ -454,7 +480,6 @@ void PolicyHandler::CacheRetryInfo(const uint32_t app_id,
uint32_t PolicyHandler::GetAppIdForSending() const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(0);
// fix ApplicationSet access crash
const ApplicationSet accessor = application_manager_.applications().GetData();
@@ -494,28 +519,30 @@ uint32_t PolicyHandler::GetAppIdForSending() const {
void PolicyHandler::PushAppIdToPTUQueue(const uint32_t app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
sync_primitives::AutoLock lock(app_id_queue_lock_);
const auto result = applications_ptu_queue_.insert(app_id);
if (result.second) {
- policy_manager_->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
+ policy_manager->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
}
}
void PolicyHandler::PopAppIdFromPTUQueue() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
sync_primitives::AutoLock lock(app_id_queue_lock_);
if (applications_ptu_queue_.size() > 0) {
applications_ptu_queue_.erase(applications_ptu_queue_.begin());
- policy_manager_->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
+ policy_manager->UpdatePTUReadyAppsCount(applications_ptu_queue_.size());
}
}
#ifdef EXTERNAL_PROPRIETARY_MODE
PTURetryHandler& PolicyHandler::ptu_retry_handler() const {
SDL_LOG_AUTO_TRACE();
- return *policy_manager_;
+ return *atomic_policy_manager_;
}
void PolicyHandler::OnAppPermissionConsent(
@@ -538,7 +565,8 @@ void PolicyHandler::OnAppPermissionConsent(
void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id,
const bool is_allowed) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
connection_handler::DeviceHandle device_handle;
if (!application_manager_.connection_handler().GetDeviceID(device_id,
&device_handle)) {
@@ -563,15 +591,15 @@ void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id,
// with negative data consent, there no necessity to change smth and
// send
// notification for such app in case of device consent is not allowed
- if (policy_manager_->IsPredataPolicy(policy_app_id) && !is_allowed) {
+ if (policy_manager->IsPredataPolicy(policy_app_id) && !is_allowed) {
continue;
}
- policy_manager_->ReactOnUserDevConsentForApp(
+ policy_manager->ReactOnUserDevConsentForApp(
device_handle, policy_app_id, is_allowed);
- policy_manager_->SendNotificationOnPermissionsUpdated(device_id,
- policy_app_id);
+ policy_manager->SendNotificationOnPermissionsUpdated(device_id,
+ policy_app_id);
}
}
}
@@ -604,8 +632,9 @@ void PolicyHandler::SendOnAppPropertiesChangeNotification(
void PolicyHandler::OnPTExchangeNeeded() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->ForcePTExchange();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->ForcePTExchange();
}
void PolicyHandler::GetAvailableApps(std::queue<std::string>& apps) {
@@ -630,22 +659,26 @@ StatusNotifier PolicyHandler::AddApplication(
const std::string& device_id,
const std::string& application_id,
const rpc::policy_table_interface_base::AppHmiTypes& hmi_types) {
- POLICY_LIB_CHECK_OR_RETURN(std::make_shared<utils::CallNothing>());
- return policy_manager_->AddApplication(device_id, application_id, hmi_types);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::make_shared<utils::CallNothing>());
+ return policy_manager->AddApplication(device_id, application_id, hmi_types);
}
void PolicyHandler::AddDevice(const std::string& device_id,
const std::string& connection_type) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->AddDevice(device_id, connection_type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->AddDevice(device_id, connection_type);
}
void PolicyHandler::SetDeviceInfo(const std::string& device_id,
const DeviceInfo& device_info) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetDeviceInfo(device_id, device_info);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetDeviceInfo(device_id, device_info);
}
#ifdef EXTERNAL_PROPRIETARY_MODE
@@ -661,7 +694,8 @@ void PolicyHandler::OnAppPermissionConsentInternal(
void PolicyHandler::OnAppPermissionConsentInternal(
const uint32_t connection_key, PermissionConsent& out_permissions) {
#endif
- POLICY_LIB_CHECK_VOID();
+ const std::shared_ptr<PolicyManager> policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
if (connection_key) {
ApplicationSharedPtr app = application_manager_.application(connection_key);
@@ -677,9 +711,9 @@ void PolicyHandler::OnAppPermissionConsentInternal(
if (!out_permissions.policy_app_id.empty()) {
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->SetUserConsentForApp(out_permissions, mode);
+ policy_manager->SetUserConsentForApp(out_permissions, mode);
#else
- policy_manager_->SetUserConsentForApp(out_permissions);
+ policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
} else if (!app_to_device_link_.empty()) {
@@ -716,9 +750,9 @@ void PolicyHandler::OnAppPermissionConsentInternal(
out_permissions.policy_app_id = app->policy_app_id();
out_permissions.device_id = app->mac_address();
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->SetUserConsentForApp(out_permissions, mode);
+ policy_manager->SetUserConsentForApp(out_permissions, mode);
#else
- policy_manager_->SetUserConsentForApp(out_permissions);
+ policy_manager->SetUserConsentForApp(out_permissions);
#endif
}
} else {
@@ -727,14 +761,15 @@ void PolicyHandler::OnAppPermissionConsentInternal(
"setting common permissions.");
}
#ifdef EXTERNAL_PROPRIETARY_MODE
- if (!policy_manager_->SetExternalConsentStatus(external_consent_status)) {
+ if (!policy_manager->SetExternalConsentStatus(external_consent_status)) {
SDL_LOG_WARN("External User Consent Settings status has not been set!");
}
#endif
}
void policy::PolicyHandler::SetDaysAfterEpoch() {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
date_time::TimeDuration current_time = date_time::getCurrentTime();
const int kSecondsInDay = 60 * 60 * 24;
int days_after_epoch = date_time::getSecs(current_time) / kSecondsInDay;
@@ -743,8 +778,9 @@ void policy::PolicyHandler::SetDaysAfterEpoch() {
#ifdef ENABLE_SECURITY
std::string PolicyHandler::RetrieveCertificate() const {
- POLICY_LIB_CHECK_OR_RETURN(std::string(""));
- return policy_manager_->RetrieveCertificate();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->RetrieveCertificate();
}
#endif // ENABLE_SECURITY
@@ -753,18 +789,18 @@ void PolicyHandler::OnGetUserFriendlyMessage(
const std::string& language,
uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef EXTERNAL_PROPRIETARY_MODE
- const std::string active_hmi_language =
- application_manager::MessageHelper::CommonLanguageToString(
- application_manager_.hmi_capabilities().active_ui_language());
+ const std::string active_hmi_language = application_manager::EnumToString(
+ application_manager_.hmi_capabilities().active_ui_language());
const std::vector<UserFriendlyMessage> result =
- policy_manager_->GetUserFriendlyMessages(
+ policy_manager->GetUserFriendlyMessages(
message_codes, language, active_hmi_language);
#else
const std::vector<UserFriendlyMessage> result =
- policy_manager_->GetUserFriendlyMessages(message_codes, language);
+ policy_manager->GetUserFriendlyMessages(message_codes, language);
#endif // EXTERNAL_PROPRIETARY_MODE
// Send response to HMI with gathered data
MessageHelper::SendGetUserFriendlyMessageResponse(
@@ -775,12 +811,16 @@ void PolicyHandler::OnSystemRequestReceived() const {
#ifdef EXTERNAL_PROPRIETARY_MODE
ptu_retry_handler().OnSystemRequestReceived();
#endif
- policy_manager_->ResetTimeout();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->ResetTimeout();
}
void PolicyHandler::TriggerPTUOnStartupIfRequired() {
#ifdef PROPRIETARY_MODE
- policy_manager_->TriggerPTUOnStartupIfRequired();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->TriggerPTUOnStartupIfRequired();
#endif
}
@@ -794,10 +834,23 @@ void PolicyHandler::GetRegisteredLinks(
std::for_each(it_app, it_app_end, linker);
}
+std::shared_ptr<PolicyManager> PolicyHandler::LoadPolicyManager() const {
+ sync_primitives::AutoReadLock lock{policy_manager_lock_};
+ return atomic_policy_manager_;
+}
+
+void PolicyHandler::ExchangePolicyManager(
+ std::shared_ptr<PolicyManager> policy_manager) {
+ sync_primitives::AutoWriteLock lock{policy_manager_lock_};
+ atomic_policy_manager_.swap(policy_manager);
+}
+
std::vector<policy::FunctionalGroupPermission>
PolicyHandler::CollectRegisteredAppsPermissions() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy::FunctionalGroupPermission>());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy::FunctionalGroupPermission>());
// If no specific app was passed, get permissions for all currently registered
// applications
sync_primitives::AutoLock lock(app_to_device_link_lock_);
@@ -809,7 +862,7 @@ PolicyHandler::CollectRegisteredAppsPermissions() {
std::map<std::string, std::string>::const_iterator it =
app_to_device_link_.begin();
for (; it != app_to_device_link_.end(); ++it) {
- policy_manager_->GetUserConsentForApp(
+ policy_manager->GetUserConsentForApp(
it->first, it->second, group_permissions);
consolidator.Consolidate(group_permissions);
}
@@ -819,7 +872,8 @@ PolicyHandler::CollectRegisteredAppsPermissions() {
std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
const uint32_t connection_key) {
std::vector<FunctionalGroupPermission> group_permissions;
- POLICY_LIB_CHECK_OR_RETURN(group_permissions);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, group_permissions);
// Single app only
ApplicationSharedPtr app = application_manager_.application(connection_key);
@@ -842,9 +896,9 @@ std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
return group_permissions;
}
- policy_manager_->GetUserConsentForApp(device_params.device_mac_address,
- app->policy_app_id(),
- group_permissions);
+ policy_manager->GetUserConsentForApp(device_params.device_mac_address,
+ app->policy_app_id(),
+ group_permissions);
return group_permissions;
}
@@ -852,7 +906,8 @@ std::vector<FunctionalGroupPermission> PolicyHandler::CollectAppPermissions(
void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key,
const uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
application_manager::ApplicationSharedPtr app =
application_manager_.application(connection_key);
@@ -872,7 +927,7 @@ void PolicyHandler::OnGetListOfPermissions(const uint32_t connection_key,
MessageHelper::SendGetListOfPermissionsResponse(
permissions,
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->GetExternalConsentStatus(),
+ policy_manager->GetExternalConsentStatus(),
#endif // EXTERNAL_PROPRIETARY_MODE
correlation_id,
application_manager_);
@@ -897,7 +952,8 @@ void PolicyHandler::LinkAppsToDevice() {
bool PolicyHandler::IsAppSuitableForPolicyUpdate(
const Applications::value_type value) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
if (!value->IsRegistered()) {
SDL_LOG_DEBUG("Application " << value->app_id()
@@ -914,7 +970,7 @@ bool PolicyHandler::IsAppSuitableForPolicyUpdate(
application_manager_.connection_handler().get_session_observer());
const bool is_device_allowed =
- (kDeviceAllowed == policy_manager_->GetUserConsentForDevice(
+ (kDeviceAllowed == policy_manager->GetUserConsentForDevice(
device_params.device_mac_address));
SDL_LOG_DEBUG("Is device " << device_params.device_mac_address << " allowed "
@@ -943,8 +999,9 @@ uint32_t PolicyHandler::ChooseRandomAppForPolicyUpdate(
void PolicyHandler::OnDeviceSwitching(const std::string& device_id_from,
const std::string& device_id_to) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnDeviceSwitching(device_id_from, device_id_to);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnDeviceSwitching(device_id_from, device_id_to);
}
void PolicyHandler::OnLockScreenDismissalStateChanged() {
@@ -958,17 +1015,19 @@ void PolicyHandler::OnLockScreenDismissalStateChanged() {
void PolicyHandler::OnGetStatusUpdate(const uint32_t correlation_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
MessageHelper::SendGetStatusUpdateResponse(
- policy_manager_->GetPolicyTableStatus(),
+ policy_manager->GetPolicyTableStatus(),
correlation_id,
application_manager_);
}
void PolicyHandler::OnUpdateStatusChanged(const std::string& status) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SaveUpdateStatusRequired(policy::kUpToDate != status);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SaveUpdateStatusRequired(policy::kUpToDate != status);
MessageHelper::SendOnStatusUpdate(status, application_manager_);
}
@@ -996,26 +1055,32 @@ std::string PolicyHandler::OnCurrentDeviceIdUpdateRequired(
void PolicyHandler::OnSystemInfoChanged(const std::string& language) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetSystemLanguage(language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetSystemLanguage(language);
}
void PolicyHandler::SetPreloadedPtFlag(const bool is_preloaded) {
SDL_LOG_AUTO_TRACE();
- policy_manager_->SetPreloadedPtFlag(is_preloaded);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetPreloadedPtFlag(is_preloaded);
}
void PolicyHandler::OnGetSystemInfo(const std::string& ccpu_version,
const std::string& wers_country_code,
const std::string& language) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SetSystemInfo(ccpu_version, wers_country_code, language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SetSystemInfo(ccpu_version, wers_country_code, language);
}
std::string PolicyHandler::GetCCPUVersionFromPT() const {
SDL_LOG_AUTO_TRACE();
- return policy_manager_->GetCCPUVersionFromPT();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->GetCCPUVersionFromPT();
}
void PolicyHandler::OnVIIsReady() {
@@ -1032,7 +1097,8 @@ void PolicyHandler::OnVIIsReady() {
void PolicyHandler::OnVehicleDataUpdated(
const smart_objects::SmartObject& message) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef EXTERNAL_PROPRIETARY_MODE
if (!message.keyExists(strings::msg_params)) {
SDL_LOG_ERROR("Message does not contains mandatory section "
@@ -1040,7 +1106,7 @@ void PolicyHandler::OnVehicleDataUpdated(
return;
}
if (message[strings::msg_params].keyExists(strings::vin)) {
- policy_manager_->SetVINValue(
+ policy_manager->SetVINValue(
message[strings::msg_params][strings::vin].asString());
}
#else
@@ -1053,7 +1119,8 @@ void PolicyHandler::OnPendingPermissionChange(
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG("PolicyHandler::OnPendingPermissionChange for "
<< policy_app_id);
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
ApplicationSharedPtr app =
application_manager_.application(device_id, policy_app_id);
if (app.use_count() == 0) {
@@ -1062,7 +1129,7 @@ void PolicyHandler::OnPendingPermissionChange(
}
AppPermissions permissions =
- policy_manager_->GetAppPermissionsChanges(device_id, policy_app_id);
+ policy_manager->GetAppPermissionsChanges(device_id, policy_app_id);
const uint32_t app_id = app->app_id();
@@ -1076,7 +1143,7 @@ void PolicyHandler::OnPendingPermissionChange(
mobile_apis::AudioStreamingState::NOT_AUDIBLE,
mobile_apis::VideoStreamingState::NOT_STREAMABLE,
true);
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
return;
}
@@ -1125,7 +1192,7 @@ void PolicyHandler::OnPendingPermissionChange(
app->app_id(), permissions, application_manager_);
}
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
}
bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
@@ -1138,7 +1205,7 @@ bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
const std::string& url,
const uint32_t app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ POLICY_LIB_CHECK_OR_RETURN(atomic_policy_manager_, false);
ApplicationSharedPtr app = application_manager_.application(app_id);
@@ -1172,9 +1239,10 @@ bool PolicyHandler::SendMessageToSDK(const BinaryMessage& pt_string,
bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
const BinaryMessage& pt_string) {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
- const auto load_pt_result = policy_manager_->LoadPT(file, pt_string);
+ const auto load_pt_result = policy_manager->LoadPT(file, pt_string);
SDL_LOG_INFO("Load policy table result code: " << load_pt_result);
@@ -1184,9 +1252,9 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
if (is_ptu_successful) {
SDL_LOG_INFO("PTU was successful.");
- policy_manager_->CleanupUnpairedDevices();
+ policy_manager->CleanupUnpairedDevices();
SetDaysAfterEpoch();
- policy_manager_->OnPTUFinished(load_pt_result);
+ policy_manager->OnPTUFinished(load_pt_result);
#ifndef EXTERNAL_PROPRIETARY_MODE
// Clean up retry information
last_ptu_app_id_ = 0;
@@ -1201,7 +1269,7 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
correlation_id, vehicle_data_args, application_manager_);
} else {
SDL_LOG_WARN("Exchange wasn't successful");
- policy_manager_->OnPTUFinished(load_pt_result);
+ policy_manager->OnPTUFinished(load_pt_result);
}
return is_ptu_successful;
@@ -1209,28 +1277,24 @@ bool PolicyHandler::ReceiveMessageFromSDK(const std::string& file,
bool PolicyHandler::UnloadPolicyLibrary() {
SDL_LOG_AUTO_TRACE();
- SDL_LOG_DEBUG("policy_manager_ = " << policy_manager_);
- bool ret = true;
AsyncRunner::Stop();
- sync_primitives::AutoWriteLock lock(policy_manager_lock_);
- if (policy_manager_) {
- policy_manager_.reset();
- }
- SDL_LOG_TRACE("exit");
- return ret;
+ ExchangePolicyManager(nullptr);
+ return !atomic_policy_manager_;
}
#ifdef EXTERNAL_PROPRIETARY_MODE
struct SDLAlowedNotification {
- SDLAlowedNotification(const connection_handler::DeviceHandle& device_id,
+ SDLAlowedNotification(sync_primitives::RWLock& policy_manager_lock,
+ const connection_handler::DeviceHandle& device_id,
PolicyManager* policy_manager,
StateController& state_controller)
- : device_id_(device_id)
+ : policy_manager_lock_(policy_manager_lock)
+ , device_id_(device_id)
, policy_manager_(policy_manager)
, state_controller_(state_controller) {}
void operator()(const ApplicationSharedPtr& app) {
- DCHECK_OR_RETURN_VOID(policy_manager_);
+ POLICY_LIB_CHECK_VOID(policy_manager_);
if (app->device() == device_id_) {
std::string hmi_level;
mobile_apis::HMILevel::eType default_mobile_hmi;
@@ -1256,6 +1320,7 @@ struct SDLAlowedNotification {
}
private:
+ sync_primitives::RWLock& policy_manager_lock_;
connection_handler::DeviceHandle device_id_;
PolicyManager* policy_manager_;
StateController& state_controller_;
@@ -1265,7 +1330,8 @@ struct SDLAlowedNotification {
void PolicyHandler::OnAllowSDLFunctionalityNotification(
bool is_allowed, const std::string& device_mac) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
using namespace mobile_apis;
const bool device_specific = !device_mac.empty();
// Common devices consents change
@@ -1285,7 +1351,7 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
SDL_LOG_WARN("Device with id " << device_id << " wasn't found.");
continue;
}
- policy_manager_->SetUserConsentForDevice(device_id, is_allowed);
+ policy_manager->SetUserConsentForDevice(device_id, is_allowed);
connection_handler::DeviceHandle device_handle = 0;
if (!connection_handler.GetDeviceID(device_id, &device_handle)) {
SDL_LOG_WARN("Device handle with mac " << device_id
@@ -1310,8 +1376,9 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
std::for_each(
applications.begin(),
applications.end(),
- SDLAlowedNotification(device_handle,
- policy_manager_.get(),
+ SDLAlowedNotification(policy_manager_lock_,
+ device_handle,
+ policy_manager.get(),
application_manager_.state_controller()));
}
#endif // EXTERNAL_PROPRIETARY_MODE
@@ -1321,7 +1388,7 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
// Case, when specific device was changed
connection_handler::DeviceHandle device_handle = 0u;
if (device_specific) {
- policy_manager_->SetUserConsentForDevice(device_mac, is_allowed);
+ policy_manager->SetUserConsentForDevice(device_mac, is_allowed);
if (!connection_handler.GetDeviceID(device_mac, &device_handle)) {
SDL_LOG_WARN("Device hadle with mac " << device_mac << " wasn't found.");
}
@@ -1378,8 +1445,9 @@ void PolicyHandler::OnAllowSDLFunctionalityNotification(
void PolicyHandler::OnIgnitionCycleOver() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->IncrementIgnitionCycles();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->IncrementIgnitionCycles();
}
void PolicyHandler::OnActivateApp(uint32_t connection_key,
@@ -1394,15 +1462,15 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
AppPermissions permissions(policy_app_id);
- sync_primitives::AutoReadLock lock(policy_manager_lock_);
- if (!policy_manager_) {
+ const auto policy_manager = LoadPolicyManager();
+ if (!policy_manager) {
SDL_LOG_DEBUG("The shared library of policy is not loaded");
if (!PolicyEnabled()) {
permissions.isSDLAllowed = true;
}
} else {
- permissions = policy_manager_->GetAppPermissionsChanges(app->mac_address(),
- policy_app_id);
+ permissions = policy_manager->GetAppPermissionsChanges(app->mac_address(),
+ policy_app_id);
#ifdef EXTERNAL_PROPRIETARY_MODE
UsageStatistics& usage = app->usage_report();
@@ -1412,7 +1480,7 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
application_manager_.connection_handler().get_session_observer());
permissions.deviceInfo = device_params;
- DeviceConsent consent = policy_manager_->GetUserConsentForDevice(
+ DeviceConsent consent = policy_manager->GetUserConsentForDevice(
permissions.deviceInfo.device_mac_address);
permissions.isSDLAllowed = kDeviceAllowed == consent;
@@ -1441,13 +1509,12 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
#else // EXTERNAL_PROPRIETARY_MODE
permissions.isSDLAllowed = true;
#endif // EXTERNAL_PROPRIETARY_MODE
- policy_manager_->RemovePendingPermissionChanges(policy_app_id);
+ policy_manager->RemovePendingPermissionChanges(policy_app_id);
}
// If application is revoked it should not be activated
// In this case we need to activate application
if (false == permissions.appRevoked && true == permissions.isSDLAllowed) {
SDL_LOG_INFO("Application will be activated");
- sync_primitives::AutoReadUnlock unlock(policy_manager_lock_);
if (application_manager_.ActivateApplication(app)) {
last_activated_app_id_ = 0;
}
@@ -1461,14 +1528,16 @@ void PolicyHandler::OnActivateApp(uint32_t connection_key,
void PolicyHandler::KmsChanged(int kilometers) {
SDL_LOG_DEBUG("PolicyHandler::KmsChanged " << kilometers << " kilometers");
- POLICY_LIB_CHECK_VOID();
- policy_manager_->KmsChanged(kilometers);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->KmsChanged(kilometers);
}
void PolicyHandler::PTExchangeAtUserRequest(uint32_t correlation_id) {
SDL_LOG_TRACE("PT exchange at user request");
- POLICY_LIB_CHECK_VOID();
- std::string update_status = policy_manager_->ForcePTExchangeAtUserRequest();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ std::string update_status = policy_manager->ForcePTExchangeAtUserRequest();
MessageHelper::SendUpdateSDLResponse(
update_status, correlation_id, application_manager_);
}
@@ -1492,8 +1561,7 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
// level to default
mobile_apis::HMILevel::eType current_hmi_level =
app->hmi_level(mobile_apis::PredefinedWindows::DEFAULT_WINDOW);
- mobile_apis::HMILevel::eType hmi_level =
- MessageHelper::StringToHMILevel(default_hmi);
+ auto hmi_level = StringToEnum<mobile_apis::HMILevel::eType>(default_hmi);
if (mobile_apis::HMILevel::INVALID_ENUM == hmi_level) {
SDL_LOG_WARN("Couldn't convert default hmi level " << default_hmi
@@ -1536,7 +1604,8 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
const std::string& policy_app_id,
const Permissions& permissions) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
ApplicationSharedPtr app =
application_manager_.application(device_id, policy_app_id);
@@ -1547,7 +1616,7 @@ void PolicyHandler::OnPermissionsUpdated(const std::string& device_id,
}
const auto require_encryption =
- policy_manager_->GetAppEncryptionRequired(policy_app_id);
+ policy_manager->GetAppEncryptionRequired(policy_app_id);
MessageHelper::SendOnPermissionsChangeNotification(
app->app_id(), permissions, application_manager_, require_encryption);
@@ -1601,7 +1670,8 @@ void PolicyHandler::OnSnapshotCreated(
void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
const PTUIterationType iteration_type) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
#ifdef PROPRIETARY_MODE
if (PTUIterationType::RetryIteration == iteration_type) {
uint32_t app_id_for_sending = 0;
@@ -1621,7 +1691,7 @@ void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
MessageHelper::SendPolicyUpdate(
policy_snapshot_full_path,
TimeoutExchangeSec(),
- policy_manager_->RetrySequenceDelaysSeconds(),
+ policy_manager->RetrySequenceDelaysSeconds(),
application_manager_);
}
#else // PROPRIETARY_MODE
@@ -1638,7 +1708,8 @@ void PolicyHandler::OnSnapshotCreated(const BinaryMessage& pt_string,
std::string PolicyHandler::GetNextUpdateUrl(
const PTUIterationType iteration_type, uint32_t& app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(std::string());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
app_id = ChoosePTUApplication(iteration_type);
if (0 == app_id) {
@@ -1652,7 +1723,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
}
EndpointUrls endpoint_urls;
- policy_manager_->GetUpdateUrls("0x07", endpoint_urls);
+ policy_manager->GetUpdateUrls("0x07", endpoint_urls);
if (endpoint_urls.empty()) {
SDL_LOG_ERROR("Service URLs are empty!");
@@ -1670,7 +1741,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
return application_manager_.application(app_id);
};
- AppIdURL app_url = policy_manager_->GetNextUpdateUrl(endpoint_urls);
+ AppIdURL app_url = policy_manager->GetNextUpdateUrl(endpoint_urls);
ApplicationSharedPtr app = get_ptu_app(app_url, app_id);
if (!app) {
SDL_LOG_ERROR("No available applications for PTU!");
@@ -1678,7 +1749,7 @@ std::string PolicyHandler::GetNextUpdateUrl(
}
EndpointData& data = endpoint_urls[app_url.first];
while (!IsUrlAppIdValid(app->policy_app_id(), data)) {
- app_url = policy_manager_->GetNextUpdateUrl(endpoint_urls);
+ app_url = policy_manager->GetNextUpdateUrl(endpoint_urls);
app = get_ptu_app(app_url, app_id);
if (!app) {
SDL_LOG_ERROR("No available applications for PTU!");
@@ -1693,8 +1764,9 @@ std::string PolicyHandler::GetNextUpdateUrl(
bool PolicyHandler::GetPriority(const std::string& policy_app_id,
std::string* priority) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetPriority(policy_app_id, priority);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetPriority(policy_app_id, priority);
}
void PolicyHandler::CheckPermissions(
@@ -1703,9 +1775,10 @@ void PolicyHandler::CheckPermissions(
const PTString& rpc,
const RPCParams& rpc_params,
CheckPermissionResult& result) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const std::string hmi_level =
- MessageHelper::StringifiedHMILevel(app->hmi_level(window_id));
+ application_manager::EnumToString(app->hmi_level(window_id));
if (hmi_level.empty()) {
SDL_LOG_WARN("HMI level for " << app->policy_app_id() << " is invalid, rpc "
<< rpc << " is not allowed.");
@@ -1717,61 +1790,69 @@ void PolicyHandler::CheckPermissions(
SDL_LOG_INFO("Checking permissions for " << app->policy_app_id() << " in "
<< hmi_level << " on device "
<< device_id << " rpc " << rpc);
- policy_manager_->CheckPermissions(
+ policy_manager->CheckPermissions(
device_id, app->policy_app_id(), hmi_level, rpc, rpc_params, result);
}
uint32_t PolicyHandler::GetNotificationsNumber(const std::string& priority,
const bool is_subtle) const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->GetNotificationsNumber(priority, is_subtle);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->GetNotificationsNumber(priority, is_subtle);
}
DeviceConsent PolicyHandler::GetUserConsentForDevice(
const std::string& device_id) const {
- POLICY_LIB_CHECK_OR_RETURN(kDeviceDisallowed);
- return policy_manager_->GetUserConsentForDevice(device_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, kDeviceDisallowed);
+ return policy_manager->GetUserConsentForDevice(device_id);
}
Json::Value PolicyHandler::GetPolicyTableData() const {
- POLICY_LIB_CHECK_OR_RETURN(Json::Value());
- return policy_manager_->GetPolicyTableData();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, Json::Value());
+ return policy_manager->GetPolicyTableData();
}
bool PolicyHandler::GetDefaultHmi(const std::string& device_id,
const std::string& policy_app_id,
std::string* default_hmi) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetDefaultHmi(device_id, policy_app_id, default_hmi);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetDefaultHmi(device_id, policy_app_id, default_hmi);
}
bool PolicyHandler::GetInitialAppData(const std::string& application_id,
StringArray* nicknames,
StringArray* app_hmi_types) {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetInitialAppData(
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetInitialAppData(
application_id, nicknames, app_hmi_types);
}
void PolicyHandler::GetUpdateUrls(const std::string& service_type,
EndpointUrls& out_end_points) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetUpdateUrls(service_type, out_end_points);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetUpdateUrls(service_type, out_end_points);
}
void PolicyHandler::GetUpdateUrls(const uint32_t service_type,
EndpointUrls& out_end_points) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetUpdateUrls(service_type, out_end_points);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetUpdateUrls(service_type, out_end_points);
}
std::string PolicyHandler::GetLockScreenIconUrl(
const std::string& policy_app_id) const {
const std::string default_url;
- POLICY_LIB_CHECK_OR_RETURN(default_url);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, default_url);
EndpointUrls endpoints;
- policy_manager_->GetUpdateUrls("lock_screen_icon_url", endpoints);
+ policy_manager->GetUpdateUrls("lock_screen_icon_url", endpoints);
auto it_specific =
std::find_if(endpoints.begin(),
@@ -1800,14 +1881,16 @@ std::string PolicyHandler::GetLockScreenIconUrl(
}
std::string PolicyHandler::GetIconUrl(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::string(""));
- return policy_manager_->GetIconUrl(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::string());
+ return policy_manager->GetIconUrl(policy_app_id);
}
uint32_t PolicyHandler::NextRetryTimeout() {
- POLICY_LIB_CHECK_OR_RETURN(0);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
SDL_LOG_AUTO_TRACE();
- return policy_manager_->NextRetryTimeout();
+ return policy_manager->NextRetryTimeout();
}
uint32_t PolicyHandler::TimeoutExchangeSec() const {
@@ -1815,37 +1898,42 @@ uint32_t PolicyHandler::TimeoutExchangeSec() const {
}
uint32_t PolicyHandler::TimeoutExchangeMSec() const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->TimeoutExchangeMSec();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->TimeoutExchangeMSec();
}
void PolicyHandler::OnExceededTimeout() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
std::for_each(listeners_.begin(),
listeners_.end(),
std::mem_fn(&PolicyHandlerObserver::OnPTUTimeoutExceeded));
- policy_manager_->OnExceededTimeout();
+ policy_manager->OnExceededTimeout();
}
const boost::optional<bool> PolicyHandler::LockScreenDismissalEnabledState()
const {
- POLICY_LIB_CHECK_OR_RETURN(boost::optional<bool>());
- return policy_manager_->LockScreenDismissalEnabledState();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, boost::optional<bool>());
+ return policy_manager->LockScreenDismissalEnabledState();
}
const boost::optional<std::string>
PolicyHandler::LockScreenDismissalWarningMessage(
const std::string& language) const {
- POLICY_LIB_CHECK_OR_RETURN(boost::optional<std::string>());
- return policy_manager_->LockScreenDismissalWarningMessage(language);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, boost::optional<std::string>());
+ return policy_manager->LockScreenDismissalWarningMessage(language);
}
void PolicyHandler::PTUpdatedAt(Counters counter, int value) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->PTUpdatedAt(counter, value);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->PTUpdatedAt(counter, value);
}
void PolicyHandler::add_listener(PolicyHandlerObserver* listener) {
@@ -1870,7 +1958,7 @@ PolicyHandler::GetStatisticManager() const {
}
void PolicyHandler::AddStatisticsInfo(int type) {
- POLICY_LIB_CHECK_VOID();
+ POLICY_LIB_CHECK_VOID(atomic_policy_manager_);
switch (static_cast<hmi_apis::Common_StatisticsType::eType>(type)) {
case hmi_apis::Common_StatisticsType::iAPP_BUFFER_FULL: {
usage_statistics::GlobalCounter count_of_iap_buffer_full(
@@ -1883,7 +1971,7 @@ void PolicyHandler::AddStatisticsInfo(int type) {
}
void PolicyHandler::OnSystemError(int code) {
- POLICY_LIB_CHECK_VOID();
+ POLICY_LIB_CHECK_VOID(atomic_policy_manager_);
switch (static_cast<hmi_apis::Common_SystemError::eType>(code)) {
case hmi_apis::Common_SystemError::SYNC_REBOOTED: {
usage_statistics::GlobalCounter count_of_sync_reboots(
@@ -1962,7 +2050,8 @@ void PolicyHandler::OnEmptyCertificateArrived() const {
void PolicyHandler::OnCertificateDecrypted(bool is_succeeded) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const std::string file_name =
file_system::GetAbsolutePath(get_settings().app_storage_folder()) + +"/" +
@@ -1988,7 +2077,7 @@ void PolicyHandler::OnCertificateDecrypted(bool is_succeeded) {
SDL_LOG_DEBUG("Loaded decrypted certificate data: \"" << certificate_data
<< '"');
- policy_manager_->SetDecryptedCertificate(certificate_data);
+ policy_manager->SetDecryptedCertificate(certificate_data);
sync_primitives::AutoLock lock(listeners_lock_);
std::for_each(
@@ -2051,9 +2140,10 @@ bool PolicyHandler::CanUpdate() {
void PolicyHandler::RemoveDevice(const std::string& device_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
- policy_manager_->MarkUnpairedDevice(device_id);
+ policy_manager->MarkUnpairedDevice(device_id);
#ifdef EXTERNAL_PROPRIETARY_MODE
connection_handler::DeviceHandle device_uid;
if (application_manager_.connection_handler().GetDeviceID(device_id,
@@ -2069,25 +2159,29 @@ void PolicyHandler::RemoveDevice(const std::string& device_id) {
bool PolicyHandler::IsApplicationRevoked(const std::string& app_id) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
- return policy_manager_->IsApplicationRevoked(app_id);
+ return policy_manager->IsApplicationRevoked(app_id);
}
void PolicyHandler::OnUpdateRequestSentToMobile() {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnUpdateStarted();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnUpdateStarted();
}
bool PolicyHandler::CheckKeepContext(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CanAppKeepContext(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CanAppKeepContext(policy_app_id);
}
bool PolicyHandler::CheckStealFocus(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CanAppStealFocus(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CanAppStealFocus(policy_app_id);
}
bool PolicyHandler::CheckSystemAction(
@@ -2110,8 +2204,9 @@ bool PolicyHandler::CheckSystemAction(
}
std::vector<std::string> PolicyHandler::GetApplicationPolicyIDs() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- const auto all_policy_ids = policy_manager_->GetApplicationPolicyIDs();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ const auto all_policy_ids = policy_manager->GetApplicationPolicyIDs();
std::vector<std::string> policy_app_ids;
std::copy_if(
@@ -2128,26 +2223,30 @@ std::vector<std::string> PolicyHandler::GetApplicationPolicyIDs() const {
void PolicyHandler::GetEnabledCloudApps(
std::vector<std::string>& enabled_apps) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetEnabledCloudApps(enabled_apps);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetEnabledCloudApps(enabled_apps);
}
bool PolicyHandler::GetAppProperties(const std::string& policy_app_id,
AppProperties& out_app_properties) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetAppProperties(policy_app_id, out_app_properties);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetAppProperties(policy_app_id, out_app_properties);
}
std::vector<std::string> PolicyHandler::GetEnabledLocalApps() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- return policy_manager_->GetEnabledLocalApps();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ return policy_manager->GetEnabledLocalApps();
}
const bool PolicyHandler::CheckCloudAppEnabled(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
AppProperties out_app_properties;
- policy_manager_->GetAppProperties(policy_app_id, out_app_properties);
+ policy_manager->GetAppProperties(policy_app_id, out_app_properties);
return out_app_properties.enabled;
}
@@ -2155,14 +2254,15 @@ PolicyHandler::AppPropertiesState PolicyHandler::GetAppPropertiesStatus(
const smart_objects::SmartObject& properties,
const std::string& app_id) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(AppPropertiesState::NO_CHANGES);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, AppPropertiesState::NO_CHANGES);
AppProperties app_properties;
- policy_manager_->GetAppProperties(app_id, app_properties);
+ policy_manager->GetAppProperties(app_id, app_properties);
policy::StringArray nicknames;
policy::StringArray app_hmi_types;
- policy_manager_->GetInitialAppData(app_id, &nicknames, &app_hmi_types);
+ policy_manager->GetInitialAppData(app_id, &nicknames, &app_hmi_types);
if (properties.keyExists(strings::enabled) &&
app_properties.enabled != properties[strings::enabled].asBool()) {
@@ -2242,34 +2342,36 @@ PolicyHandler::AppPropertiesState PolicyHandler::GetAppPropertiesStatus(
}
bool PolicyHandler::IsNewApplication(const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->IsNewApplication(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->IsNewApplication(policy_app_id);
}
void PolicyHandler::OnSetAppProperties(
const smart_objects::SmartObject& properties) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
const auto policy_app_id(properties[strings::policy_app_id].asString());
- policy_manager_->InitCloudApp(policy_app_id);
+ policy_manager->InitCloudApp(policy_app_id);
bool auth_token_update = false;
if (properties.keyExists(strings::enabled)) {
const bool enabled = properties[strings::enabled].asBool();
- policy_manager_->SetCloudAppEnabled(policy_app_id, enabled);
+ policy_manager->SetCloudAppEnabled(policy_app_id, enabled);
}
if (properties.keyExists(strings::auth_token)) {
const std::string auth_token = properties[strings::auth_token].asString();
- policy_manager_->SetAppAuthToken(policy_app_id, auth_token);
+ policy_manager->SetAppAuthToken(policy_app_id, auth_token);
auth_token_update = true;
}
if (properties.keyExists(strings::transport_type)) {
- policy_manager_->SetAppCloudTransportType(
+ policy_manager->SetAppCloudTransportType(
policy_app_id, properties[strings::transport_type].asString());
}
if (properties.keyExists(strings::endpoint)) {
- policy_manager_->SetAppEndpoint(policy_app_id,
- properties[strings::endpoint].asString());
+ policy_manager->SetAppEndpoint(policy_app_id,
+ properties[strings::endpoint].asString());
}
if (properties.keyExists(strings::nicknames)) {
StringArray nicknames;
@@ -2278,7 +2380,7 @@ void PolicyHandler::OnSetAppProperties(
for (size_t i = 0; i < nicknames_array.length(); ++i) {
nicknames.push_back(nicknames_array[i].asString());
}
- policy_manager_->SetAppNicknames(policy_app_id, nicknames);
+ policy_manager->SetAppNicknames(policy_app_id, nicknames);
}
if (properties.keyExists(strings::hybrid_app_preference)) {
std::string hybrid_app_preference;
@@ -2288,26 +2390,28 @@ void PolicyHandler::OnSetAppProperties(
smart_objects::EnumConversionHelper<
mobile_apis::HybridAppPreference::eType>::
EnumToString(value, &hybrid_app_preference);
- policy_manager_->SetHybridAppPreference(policy_app_id,
- hybrid_app_preference);
+ policy_manager->SetHybridAppPreference(policy_app_id,
+ hybrid_app_preference);
}
if (auth_token_update) {
AppProperties app_properties;
- if (policy_manager_->GetAppProperties(policy_app_id, app_properties)) {
+ if (policy_manager->GetAppProperties(policy_app_id, app_properties)) {
OnAuthTokenUpdated(policy_app_id, app_properties.auth_token);
}
}
}
void PolicyHandler::OnLocalAppAdded() {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnLocalAppAdded();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnLocalAppAdded();
}
void PolicyHandler::OnSetCloudAppProperties(
const smart_objects::SmartObject& message) {
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
if (!message.keyExists(strings::msg_params)) {
SDL_LOG_ERROR("Message does not contain mandatory section "
<< strings::msg_params);
@@ -2328,21 +2432,21 @@ void PolicyHandler::OnSetCloudAppProperties(
}
std::string policy_app_id(properties[strings::app_id].asString());
- policy_manager_->InitCloudApp(policy_app_id);
+ policy_manager->InitCloudApp(policy_app_id);
bool auth_token_update = false;
if (properties.keyExists(strings::auth_token)) {
std::string auth_token = properties[strings::auth_token].asString();
- policy_manager_->SetAppAuthToken(policy_app_id, auth_token);
+ policy_manager->SetAppAuthToken(policy_app_id, auth_token);
auth_token_update = true;
}
if (properties.keyExists(strings::cloud_transport_type)) {
- policy_manager_->SetAppCloudTransportType(
+ policy_manager->SetAppCloudTransportType(
policy_app_id, properties[strings::cloud_transport_type].asString());
}
if (properties.keyExists(strings::endpoint)) {
- policy_manager_->SetAppEndpoint(policy_app_id,
- properties[strings::endpoint].asString());
+ policy_manager->SetAppEndpoint(policy_app_id,
+ properties[strings::endpoint].asString());
}
if (properties.keyExists(strings::nicknames)) {
StringArray nicknames;
@@ -2351,7 +2455,7 @@ void PolicyHandler::OnSetCloudAppProperties(
for (size_t i = 0; i < nicknames_array.length(); ++i) {
nicknames.push_back(nicknames_array[i].asString());
}
- policy_manager_->SetAppNicknames(policy_app_id, nicknames);
+ policy_manager->SetAppNicknames(policy_app_id, nicknames);
}
if (properties.keyExists(strings::hybrid_app_preference)) {
std::string hybrid_app_preference;
@@ -2361,12 +2465,12 @@ void PolicyHandler::OnSetCloudAppProperties(
smart_objects::EnumConversionHelper<
mobile_apis::HybridAppPreference::eType>::
EnumToString(value, &hybrid_app_preference);
- policy_manager_->SetHybridAppPreference(policy_app_id,
- hybrid_app_preference);
+ policy_manager->SetHybridAppPreference(policy_app_id,
+ hybrid_app_preference);
}
if (properties.keyExists(strings::enabled)) {
bool enabled = properties[strings::enabled].asBool();
- policy_manager_->SetCloudAppEnabled(policy_app_id, enabled);
+ policy_manager->SetCloudAppEnabled(policy_app_id, enabled);
if (!auth_token_update) {
auth_token_update = enabled;
}
@@ -2376,7 +2480,7 @@ void PolicyHandler::OnSetCloudAppProperties(
if (auth_token_update) {
AppProperties app_properties;
- policy_manager_->GetAppProperties(policy_app_id, app_properties);
+ policy_manager->GetAppProperties(policy_app_id, app_properties);
OnAuthTokenUpdated(policy_app_id, app_properties.auth_token);
}
}
@@ -2384,9 +2488,10 @@ void PolicyHandler::OnSetCloudAppProperties(
void PolicyHandler::GetAppServiceParameters(
const std::string& policy_app_id,
policy_table::AppServiceParameters* app_service_parameters) const {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->GetAppServiceParameters(policy_app_id,
- app_service_parameters);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->GetAppServiceParameters(policy_app_id,
+ app_service_parameters);
}
bool PolicyHandler::CheckAppServiceParameters(
@@ -2394,8 +2499,6 @@ bool PolicyHandler::CheckAppServiceParameters(
const std::string& requested_service_name,
const std::string& requested_service_type,
smart_objects::SmartArray* requested_handled_rpcs) const {
- std::string service_name = std::string();
- std::string service_type = std::string();
std::vector<int32_t> handled_rpcs = {};
policy_table::AppServiceParameters app_service_parameters =
@@ -2448,20 +2551,23 @@ bool PolicyHandler::CheckAppServiceParameters(
bool PolicyHandler::UnknownRPCPassthroughAllowed(
const std::string& policy_app_id) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->UnknownRPCPassthroughAllowed(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->UnknownRPCPassthroughAllowed(policy_app_id);
}
uint32_t PolicyHandler::HeartBeatTimeout(const std::string& app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(0);
- return policy_manager_->HeartBeatTimeout(app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, 0);
+ return policy_manager->HeartBeatTimeout(app_id);
}
const std::string PolicyHandler::RemoteAppsUrl() const {
const std::string default_url;
- POLICY_LIB_CHECK_OR_RETURN(default_url);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, default_url);
EndpointUrls endpoints;
- policy_manager_->GetUpdateUrls("queryAppsUrl", endpoints);
+ policy_manager->GetUpdateUrls("queryAppsUrl", endpoints);
if (endpoints.empty() || endpoints[0].url.empty()) {
return default_url;
}
@@ -2470,13 +2576,15 @@ const std::string PolicyHandler::RemoteAppsUrl() const {
}
void PolicyHandler::OnAppsSearchStarted() {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppsSearchStarted();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppsSearchStarted();
}
void PolicyHandler::OnAppsSearchCompleted(const bool trigger_ptu) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppsSearchCompleted(trigger_ptu);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppsSearchCompleted(trigger_ptu);
}
void PolicyHandler::OnAddedNewApplicationToAppList(
@@ -2491,27 +2599,32 @@ void PolicyHandler::OnAddedNewApplicationToAppList(
void PolicyHandler::OnAppRegisteredOnMobile(const std::string& device_id,
const std::string& application_id) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->OnAppRegisteredOnMobile(device_id, application_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->OnAppRegisteredOnMobile(device_id, application_id);
}
RequestType::State PolicyHandler::GetAppRequestTypeState(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(RequestType::State::UNAVAILABLE);
- return policy_manager_->GetAppRequestTypesState(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, RequestType::State::UNAVAILABLE);
+ return policy_manager->GetAppRequestTypesState(policy_app_id);
}
RequestSubType::State PolicyHandler::GetAppRequestSubTypeState(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(RequestSubType::State::UNAVAILABLE);
- return policy_manager_->GetAppRequestSubTypesState(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ RequestSubType::State::UNAVAILABLE);
+ return policy_manager->GetAppRequestSubTypesState(policy_app_id);
}
bool PolicyHandler::IsRequestTypeAllowed(
const transport_manager::DeviceHandle& device_id,
const std::string& policy_app_id,
mobile_apis::RequestType::eType type) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
using namespace mobile_apis;
const std::string stringified_type = RequestTypeToString(type);
@@ -2521,7 +2634,7 @@ bool PolicyHandler::IsRequestTypeAllowed(
}
const RequestType::State request_type_state =
- policy_manager_->GetAppRequestTypesState(policy_app_id);
+ policy_manager->GetAppRequestTypesState(policy_app_id);
switch (request_type_state) {
case RequestType::State::EMPTY: {
@@ -2538,9 +2651,9 @@ bool PolicyHandler::IsRequestTypeAllowed(
// If any of request types is available for current application - get them
const auto request_types =
#ifdef EXTERNAL_PROPRIETARY_MODE
- policy_manager_->GetAppRequestTypes(device_id, policy_app_id);
+ policy_manager->GetAppRequestTypes(device_id, policy_app_id);
#else
- policy_manager_->GetAppRequestTypes(policy_app_id);
+ policy_manager->GetAppRequestTypes(policy_app_id);
#endif
return helpers::in_range(request_types, stringified_type);
}
@@ -2552,7 +2665,8 @@ bool PolicyHandler::IsRequestTypeAllowed(
bool PolicyHandler::IsRequestSubTypeAllowed(
const std::string& policy_app_id,
const std::string& request_subtype) const {
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
using namespace mobile_apis;
if (request_subtype.empty()) {
@@ -2561,7 +2675,7 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
}
const RequestSubType::State request_subtype_state =
- policy_manager_->GetAppRequestSubTypesState(policy_app_id);
+ policy_manager->GetAppRequestSubTypesState(policy_app_id);
switch (request_subtype_state) {
case RequestSubType::State::EMPTY: {
// If empty array of request subtypes is assigned to app - any is allowed
@@ -2577,7 +2691,7 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
// If any of request subtypes is available for current application
// get them all
const auto request_subtypes =
- policy_manager_->GetAppRequestSubTypes(policy_app_id);
+ policy_manager->GetAppRequestSubTypes(policy_app_id);
return helpers::in_range(request_subtypes, request_subtype);
}
default:
@@ -2588,62 +2702,73 @@ bool PolicyHandler::IsRequestSubTypeAllowed(
const std::vector<std::string> PolicyHandler::GetAppRequestTypes(
const transport_manager::DeviceHandle& device_handle,
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
#ifdef EXTERNAL_PROPRIETARY_MODE
- return policy_manager_->GetAppRequestTypes(device_handle, policy_app_id);
+ return policy_manager->GetAppRequestTypes(device_handle, policy_app_id);
#else
- return policy_manager_->GetAppRequestTypes(policy_app_id);
+ return policy_manager->GetAppRequestTypes(policy_app_id);
#endif
}
const std::vector<std::string> PolicyHandler::GetAppRequestSubTypes(
const std::string& policy_app_id) const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<std::string>());
- return policy_manager_->GetAppRequestSubTypes(policy_app_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, std::vector<std::string>());
+ return policy_manager->GetAppRequestSubTypes(policy_app_id);
}
const std::vector<policy_table::VehicleDataItem>
policy::PolicyHandler::GetVehicleDataItems() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy_table::VehicleDataItem>());
- return policy_manager_->GetVehicleDataItems();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy_table::VehicleDataItem>());
+ return policy_manager->GetVehicleDataItems();
}
std::vector<rpc::policy_table_interface_base::VehicleDataItem>
policy::PolicyHandler::GetRemovedVehicleDataItems() const {
- POLICY_LIB_CHECK_OR_RETURN(std::vector<policy_table::VehicleDataItem>());
- return policy_manager_->GetRemovedVehicleDataItems();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager,
+ std::vector<policy_table::VehicleDataItem>());
+ return policy_manager->GetRemovedVehicleDataItems();
}
#ifdef EXTERNAL_PROPRIETARY_MODE
const MetaInfo PolicyHandler::GetMetaInfo() const {
- POLICY_LIB_CHECK_OR_RETURN(MetaInfo());
- return policy_manager_->GetMetaInfo();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, MetaInfo());
+ return policy_manager->GetMetaInfo();
}
#endif // EXTERNAL_PROPRIETARY_MODE
void PolicyHandler::Increment(usage_statistics::GlobalCounterId type) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Increment(type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Increment(type);
}
void PolicyHandler::Increment(const std::string& app_id,
usage_statistics::AppCounterId type) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Increment(app_id, type);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Increment(app_id, type);
}
void PolicyHandler::Set(const std::string& app_id,
usage_statistics::AppInfoId type,
const std::string& value) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Set(app_id, type, value);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Set(app_id, type, value);
}
void PolicyHandler::Add(const std::string& app_id,
usage_statistics::AppStopwatchId type,
int32_t timespan_seconds) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->Add(app_id, type, timespan_seconds);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->Add(app_id, type, timespan_seconds);
}
bool PolicyHandler::IsUrlAppIdValid(const std::string app_id,
@@ -2679,7 +2804,7 @@ std::vector<std::string> PolicyHandler::GetDevicesIds(
void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app,
mobile_apis::HMILevel::eType level) {
SDL_LOG_AUTO_TRACE();
- DCHECK_OR_RETURN_VOID(app);
+ POLICY_LIB_CHECK_VOID(app);
if (app->hmi_level(mobile_apis::PredefinedWindows::DEFAULT_WINDOW) ==
mobile_apis::HMILevel::HMI_NONE) {
// If default is FULL, send request to HMI. Notification to mobile will be
@@ -2702,14 +2827,16 @@ void PolicyHandler::UpdateHMILevel(ApplicationSharedPtr app,
bool PolicyHandler::CheckModule(const PTString& app_id,
const PTString& module) {
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->CheckModule(app_id, module);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->CheckModule(app_id, module);
}
void PolicyHandler::OnRemoteAppPermissionsChanged(
const std::string& device_id, const std::string& application_id) {
- POLICY_LIB_CHECK_VOID();
- policy_manager_->SendAppPermissionsChanged(device_id, application_id);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
+ policy_manager->SendAppPermissionsChanged(device_id, application_id);
}
void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id,
@@ -2723,8 +2850,7 @@ void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id,
<< policy_app_id);
return;
}
- mobile_apis::HMILevel::eType level =
- MessageHelper::StringToHMILevel(hmi_level);
+ auto level = StringToEnum<mobile_apis::HMILevel::eType>(hmi_level);
if (mobile_apis::HMILevel::INVALID_ENUM == level) {
SDL_LOG_WARN("Couldn't convert default hmi level " << hmi_level
<< " to enum.");
@@ -2744,8 +2870,9 @@ void PolicyHandler::OnUpdateHMIStatus(const std::string& device_id,
bool PolicyHandler::GetModuleTypes(const std::string& policy_app_id,
std::vector<std::string>* modules) const {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
- return policy_manager_->GetModuleTypes(policy_app_id, modules);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
+ return policy_manager->GetModuleTypes(policy_app_id, modules);
}
void PolicyHandler::SetDefaultHmiTypes(
@@ -2753,7 +2880,8 @@ void PolicyHandler::SetDefaultHmiTypes(
const std::string& application_id,
const smart_objects::SmartObject* app_types) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_VOID();
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_VOID(policy_manager);
std::vector<int> hmi_types;
if (app_types && app_types->asArray()) {
smart_objects::SmartArray* hmi_list = app_types->asArray();
@@ -2762,16 +2890,17 @@ void PolicyHandler::SetDefaultHmiTypes(
std::back_inserter(hmi_types),
SmartObjectToInt());
}
- policy_manager_->SetDefaultHmiTypes(device_handle, application_id, hmi_types);
+ policy_manager->SetDefaultHmiTypes(device_handle, application_id, hmi_types);
}
bool PolicyHandler::CheckHMIType(const std::string& application_id,
mobile_apis::AppHMIType::eType hmi,
const smart_objects::SmartObject* app_types) {
SDL_LOG_AUTO_TRACE();
- POLICY_LIB_CHECK_OR_RETURN(false);
+ const auto policy_manager = LoadPolicyManager();
+ POLICY_LIB_CHECK_OR_RETURN(policy_manager, false);
std::vector<int> policy_hmi_types;
- bool ret = policy_manager_->GetHMITypes(application_id, &policy_hmi_types);
+ bool ret = policy_manager->GetHMITypes(application_id, &policy_hmi_types);
std::vector<int> additional_hmi_types;
if (app_types && app_types->asArray()) {
@@ -2797,8 +2926,7 @@ void PolicyHandler::OnUpdateHMILevel(const std::string& device_id,
<< policy_app_id);
return;
}
- mobile_apis::HMILevel::eType level =
- MessageHelper::StringToHMILevel(hmi_level);
+ auto level = StringToEnum<mobile_apis::HMILevel::eType>(hmi_level);
if (mobile_apis::HMILevel::INVALID_ENUM == level) {
SDL_LOG_WARN("Couldn't convert default hmi level " << hmi_level
<< " to enum.");
diff --git a/src/components/application_manager/src/postponed_activation_controller.cc b/src/components/application_manager/src/postponed_activation_controller.cc
new file mode 100644
index 0000000000..59ee3d05e2
--- /dev/null
+++ b/src/components/application_manager/src/postponed_activation_controller.cc
@@ -0,0 +1,66 @@
+/*
+ * Copyright (c) 2020, Ford Motor Company
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions are met:
+ *
+ * Redistributions of source code must retain the above copyright notice, this
+ * list of conditions and the following disclaimer.
+ *
+ * Redistributions in binary form must reproduce the above copyright notice,
+ * this list of conditions and the following
+ * disclaimer in the documentation and/or other materials provided with the
+ * distribution.
+ *
+ * Neither the name of the Ford Motor Company nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+ * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
+ * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include "application_manager/postponed_activation_controller.h"
+
+namespace application_manager {
+
+SDL_CREATE_LOG_VARIABLE("StateControllerImpl")
+
+PostponedActivationController::PostponedActivationController()
+ : activate_app_list_lock_ptr_(std::make_shared<sync_primitives::Lock>()) {}
+
+void PostponedActivationController::AddAppToActivate(uint32_t app_id,
+ uint32_t corr_id) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(activate_app_list_lock_ptr_);
+ app_to_activate_.insert(std::pair<uint32_t, uint32_t>(app_id, corr_id));
+}
+
+uint32_t PostponedActivationController::GetPendingActivationCorrId(
+ uint32_t app_id) const {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(activate_app_list_lock_ptr_);
+ auto it = app_to_activate_.find(app_id);
+ if (app_to_activate_.end() == it) {
+ return 0;
+ }
+ return it->second;
+}
+
+void PostponedActivationController::RemoveAppToActivate(uint32_t app_id) {
+ SDL_LOG_AUTO_TRACE();
+ sync_primitives::AutoLock lock(activate_app_list_lock_ptr_);
+ app_to_activate_.erase(app_id);
+}
+
+} // namespace application_manager
diff --git a/src/components/application_manager/src/request_controller.cc b/src/components/application_manager/src/request_controller.cc
index d2db9fced2..a34457ff66 100644
--- a/src/components/application_manager/src/request_controller.cc
+++ b/src/components/application_manager/src/request_controller.cc
@@ -81,7 +81,7 @@ void RequestController::InitializeThreadpool() {
pool_state_ = TPoolState::STARTED;
char name[50];
for (uint32_t i = 0; i < pool_size_; i++) {
- snprintf(name, sizeof(name) / sizeof(name[0]), "AM Pool %d", i);
+ snprintf(name, sizeof(name) / sizeof(name[0]), "AM Pool %u", i);
pool_.push_back(threads::CreateThread(name, new Worker(this)));
pool_[i]->Start();
SDL_LOG_DEBUG("Request thread initialized: " << name);
diff --git a/src/components/application_manager/src/request_info.cc b/src/components/application_manager/src/request_info.cc
index 1149c9aaf9..e1fffdf6fe 100644
--- a/src/components/application_manager/src/request_info.cc
+++ b/src/components/application_manager/src/request_info.cc
@@ -219,7 +219,7 @@ bool RequestInfoSet::Erase(const RequestInfoPtr request_info) {
DCHECK(request_info == found);
time_sorted_pending_requests_.erase(it);
CheckSetSizes();
- return 1 == erased_count;
+ return true;
}
CheckSetSizes();
return false;
diff --git a/src/components/application_manager/src/request_tracker.cc b/src/components/application_manager/src/request_tracker.cc
index 5f92a107b5..2ad504aadf 100644
--- a/src/components/application_manager/src/request_tracker.cc
+++ b/src/components/application_manager/src/request_tracker.cc
@@ -49,8 +49,7 @@ TrackResult RequestTracker::Track(const ApplicationID& app_id,
SDL_LOG_AUTO_TRACE();
bool track_result = false;
- SDL_LOG_DEBUG("Tracking request for level: "
- << MessageHelper::StringifiedHMILevel(level));
+ SDL_LOG_DEBUG("Tracking request for level: " << EnumToString(level));
if (mobile_apis::HMILevel::HMI_NONE == level) {
track_result = Track(app_id,
diff --git a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
index 8295ddd1f9..6a045fda03 100644
--- a/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
+++ b/src/components/application_manager/src/resumption/resume_ctrl_impl.cc
@@ -60,7 +60,8 @@ static mobile_api::HMILevel::eType PickHigherHmiLevel(
mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2);
static mobile_api::HMILevel::eType PickLowerHmiLevel(
mobile_api::HMILevel::eType val1, mobile_api::HMILevel::eType val2);
-static mobile_api::HMILevel::eType ConvertHmiLevelString(const std::string str);
+static mobile_api::HMILevel::eType ConvertHmiLevelString(
+ const std::string& str);
SDL_CREATE_LOG_VARIABLE("Resumption")
@@ -160,10 +161,10 @@ void ResumeCtrlImpl::SaveApplication(ApplicationSharedPtr application) {
resumption_storage_->SaveApplication(application);
}
-bool ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
+void ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
using namespace mobile_apis;
SDL_LOG_AUTO_TRACE();
- DCHECK_OR_RETURN(application, false);
+ DCHECK(application);
SDL_LOG_DEBUG("app_id : " << application->app_id() << "; policy_app_id : "
<< application->policy_app_id());
const std::string& device_mac = application->mac_address();
@@ -171,7 +172,6 @@ bool ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
bool result = resumption_storage_->GetSavedApplication(
application->policy_app_id(), device_mac, saved_app);
if (result) {
- DCHECK_OR_RETURN(application, false);
if (saved_app.keyExists(strings::hmi_level)) {
HMILevel::eType saved_hmi_level;
if (HMILevel::eType::INVALID_ENUM !=
@@ -208,16 +208,14 @@ bool ResumeCtrlImpl::RestoreAppHMIState(ApplicationSharedPtr application) {
SetAppHMIState(application, saved_hmi_level, true);
if (app_exists_in_full_or_limited) {
SDL_LOG_DEBUG("App exists in full or limited. Do not resume");
- return false;
+ return;
}
} else {
- result = false;
SDL_LOG_ERROR("saved app data corrupted");
}
} else {
SDL_LOG_ERROR("Application not saved");
}
- return result;
}
void ResumeCtrlImpl::ProcessSystemCapabilityUpdated(
@@ -263,9 +261,8 @@ void ResumeCtrlImpl::ApplicationResumptiOnTimer() {
SDL_LOG_ERROR("Invalid app_id = " << *it);
continue;
}
- if (!StartAppHmiStateResumption(app)) {
- app->set_is_resuming(false);
- }
+ StartAppHmiStateResumption(app);
+ app->set_is_resuming(false);
}
is_resumption_active_ = false;
waiting_for_timer_.clear();
@@ -493,18 +490,18 @@ void ResumeCtrlImpl::RetryResumption(const uint32_t app_id) {
AddToResumptionTimerQueue(app_id);
}
-bool ResumeCtrlImpl::StartAppHmiStateResumption(
+void ResumeCtrlImpl::StartAppHmiStateResumption(
ApplicationSharedPtr application) {
using namespace date_time;
SDL_LOG_AUTO_TRACE();
- DCHECK_OR_RETURN(application, false);
+ DCHECK(application);
smart_objects::SmartObject saved_app;
const std::string& device_mac = application->mac_address();
const bool get_saved_app_result = resumption_storage_->GetSavedApplication(
application->policy_app_id(), device_mac, saved_app);
if (!get_saved_app_result) {
SDL_LOG_ERROR("Application was not saved");
- return false;
+ return;
}
const bool is_hmi_level_applicable_to_resume =
@@ -512,7 +509,7 @@ bool ResumeCtrlImpl::StartAppHmiStateResumption(
if (!is_hmi_level_applicable_to_resume) {
SDL_LOG_DEBUG("No applicable HMI level found for resuming");
- return false;
+ return;
}
const bool is_resume_allowed_by_low_voltage =
CheckLowVoltageRestrictions(saved_app);
@@ -530,19 +527,17 @@ bool ResumeCtrlImpl::StartAppHmiStateResumption(
if (restore_hmi_level_allowed) {
SDL_LOG_INFO("Resume application " << application->policy_app_id());
- const bool hmi_state_restore_result = RestoreAppHMIState(application);
+ RestoreAppHMIState(application);
if (mobile_apis::HMILevel::eType::INVALID_ENUM !=
application->deferred_resumption_hmi_level()) {
// the application has not been fully resumed
- return false;
+ return;
}
RemoveApplicationFromSaved(application);
- return hmi_state_restore_result;
} else {
SDL_LOG_INFO("Do not need to resume application "
<< application->policy_app_id());
}
- return true;
}
void ResumeCtrlImpl::ResetLaunchTime() {
@@ -1037,7 +1032,7 @@ static mobile_api::HMILevel::eType PickLowerHmiLevel(
}
static mobile_api::HMILevel::eType ConvertHmiLevelString(
- const std::string str) {
+ const std::string& str) {
using namespace mobile_apis;
if ("BACKGROUND" == str) {
@@ -1046,8 +1041,6 @@ static mobile_api::HMILevel::eType ConvertHmiLevelString(
return HMILevel::HMI_FULL;
} else if ("LIMITED" == str) {
return HMILevel::HMI_LIMITED;
- } else if ("NONE" == str) {
- return HMILevel::HMI_NONE;
} else {
return HMILevel::HMI_NONE;
}
diff --git a/src/components/application_manager/src/resumption/resumption_data.cc b/src/components/application_manager/src/resumption/resumption_data.cc
index 558724ecdc..95dd331b88 100644
--- a/src/components/application_manager/src/resumption/resumption_data.cc
+++ b/src/components/application_manager/src/resumption/resumption_data.cc
@@ -186,7 +186,7 @@ smart_objects::SmartObject ResumptionData::GetApplicationFiles(
int i = 0;
for (AppFilesMap::const_iterator file_it = app_files.begin();
file_it != app_files.end();
- file_it++) {
+ ++file_it) {
const AppFile& file = file_it->second;
if (file.is_persistent) {
smart_objects::SmartObject file_data =
diff --git a/src/components/application_manager/src/resumption/resumption_data_db.cc b/src/components/application_manager/src/resumption/resumption_data_db.cc
index 88f28a41a3..f00b100913 100644
--- a/src/components/application_manager/src/resumption/resumption_data_db.cc
+++ b/src/components/application_manager/src/resumption/resumption_data_db.cc
@@ -1756,7 +1756,6 @@ bool ResumptionDataDB::ExecInsertChoice(
field "idimage" from table "choice" = 4
field "idsecondaryImage" from table "choice" = 5*/
int64_t image_primary_key = 0;
- int64_t choice_primary_key = 0;
size_t length_choice_array = choice_array.length();
for (size_t i = 0; i < length_choice_array; ++i) {
insert_choice.Bind(0, (choice_array[i][strings::choice_id]).asInt());
@@ -1789,7 +1788,7 @@ bool ResumptionDataDB::ExecInsertChoice(
SDL_LOG_WARN("Problem with execution insert_choice query");
return false;
}
- choice_primary_key = insert_choice.LastInsertId();
+ int64_t choice_primary_key = insert_choice.LastInsertId();
if ((!ExecInsertVrCommands(choice_primary_key,
choice_array[i][strings::vr_commands],
@@ -2082,7 +2081,6 @@ bool ResumptionDataDB::InsertCommandsData(
}
utils::dbms::SQLQuery query_insert_command(db());
int64_t image_primary_key = 0;
- int64_t command_primary_key = 0;
if (!query_insert_command.Prepare(kInsertToCommand)) {
SDL_LOG_WARN("Problem with verification queries for insertion commands");
@@ -2121,7 +2119,7 @@ bool ResumptionDataDB::InsertCommandsData(
SDL_LOG_WARN("Incorrect insertion of command data to DB");
return false;
}
- command_primary_key = query_insert_command.LastInsertId();
+ int64_t command_primary_key = query_insert_command.LastInsertId();
if (commands[i].keyExists(strings::vr_commands)) {
if (!ExecInsertVrCommands(command_primary_key,
commands[i][strings::vr_commands],
diff --git a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
index a490429197..792e7f97ea 100644
--- a/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
+++ b/src/components/application_manager/src/resumption/resumption_data_processor_impl.cc
@@ -49,14 +49,6 @@ namespace commands = app_mngr::commands;
namespace message_params = rc_rpc_plugin::message_params;
SDL_CREATE_LOG_VARIABLE("Resumption")
-std::map<hmi_apis::Common_ModuleType::eType, std::string>
- module_types_str_mapping{
- {hmi_apis::Common_ModuleType::eType::CLIMATE, {"CLIMATE"}},
- {hmi_apis::Common_ModuleType::eType::RADIO, {"RADIO"}},
- {hmi_apis::Common_ModuleType::eType::SEAT, {"SEAT"}},
- {hmi_apis::Common_ModuleType::eType::AUDIO, {"AUDIO"}},
- {hmi_apis::Common_ModuleType::eType::LIGHT, {"LIGHT"}},
- {hmi_apis::Common_ModuleType::eType::HMI_SETTINGS, {"HMI_SETTINGS"}}};
bool ResumptionRequestID::operator<(const ResumptionRequestID& other) const {
return correlation_id < other.correlation_id ||
@@ -79,12 +71,6 @@ void ResumptionDataProcessorImpl::Restore(
ResumeCtrl::ResumptionCallBack callback) {
SDL_LOG_AUTO_TRACE();
- if (!HasDataToRestore(saved_app)) {
- SDL_LOG_DEBUG("No data to restore, resumption is successful");
- callback(mobile_apis::Result::SUCCESS, "Data resumption succesful");
- return;
- }
-
AddFiles(application, saved_app);
AddSubmenus(application, saved_app);
AddCommands(application, saved_app);
@@ -93,99 +79,15 @@ void ResumptionDataProcessorImpl::Restore(
AddSubscriptions(application, saved_app);
AddWindows(application, saved_app);
- resumption_status_lock_.AcquireForReading();
const auto app_id = application->app_id();
- bool is_requests_list_empty = true;
- if (resumption_status_.find(app_id) != resumption_status_.end()) {
- is_requests_list_empty =
- resumption_status_[app_id].list_of_sent_requests.empty();
- }
- resumption_status_lock_.Release();
-
- if (!is_requests_list_empty) {
+ if (!IsResumptionFinished(app_id)) {
sync_primitives::AutoWriteLock lock(register_callbacks_lock_);
register_callbacks_[app_id] = callback;
} else {
- SDL_LOG_DEBUG("No requests to HMI for " << app_id
- << " , resumption is successful");
- callback(mobile_apis::Result::SUCCESS, "Data resumption successful");
+ FinalizeResumption(callback, app_id);
}
}
-bool ResumptionDataProcessorImpl::HasDataToRestore(
- const smart_objects::SmartObject& saved_app) const {
- SDL_LOG_AUTO_TRACE();
-
- auto has_data_to_restore = [&saved_app]() -> bool {
- return !saved_app[strings::application_files].empty() ||
- !saved_app[strings::application_submenus].empty() ||
- !saved_app[strings::application_commands].empty() ||
- !saved_app[strings::application_choice_sets].empty() ||
- !saved_app[strings::windows_info].empty();
- };
-
- auto has_gp_to_restore = [&saved_app]() -> bool {
- const smart_objects::SmartObject& global_properties =
- saved_app[strings::application_global_properties];
-
- return !global_properties[strings::help_prompt].empty() ||
- !global_properties[strings::keyboard_properties].empty() ||
- !global_properties[strings::menu_icon].empty() ||
- !global_properties[strings::menu_title].empty() ||
- !global_properties[strings::timeout_prompt].empty() ||
- !global_properties[strings::vr_help].empty() ||
- !global_properties[strings::vr_help_title].empty();
- };
-
- auto has_subscriptions_to_restore = [&saved_app]() -> bool {
- const smart_objects::SmartObject& subscriptions =
- saved_app[strings::application_subscriptions];
-
- const bool has_ivi_subscriptions =
- !subscriptions[strings::application_vehicle_info].empty();
-
- const bool has_button_subscriptions =
- !subscriptions[strings::application_buttons].empty() &&
- !(subscriptions[strings::application_buttons].length() == 1 &&
- static_cast<hmi_apis::Common_ButtonName::eType>(
- subscriptions[strings::application_buttons][0].asInt()) ==
- hmi_apis::Common_ButtonName::CUSTOM_BUTTON);
-
- const bool has_waypoints_subscriptions =
- subscriptions[strings::subscribed_for_way_points].asBool();
-
- const bool has_appservice_subscriptions =
- subscriptions.keyExists(app_mngr::hmi_interface::app_service) &&
- !subscriptions[app_mngr::hmi_interface::app_service].empty();
-
- const bool has_system_capability_subscriptions =
- subscriptions.keyExists(strings::system_capability) &&
- !subscriptions[strings::system_capability].empty();
-
- return has_ivi_subscriptions || has_button_subscriptions ||
- has_waypoints_subscriptions || has_appservice_subscriptions ||
- has_system_capability_subscriptions;
- };
-
- if (has_data_to_restore()) {
- SDL_LOG_DEBUG("Application has data to restore");
- return true;
- }
-
- if (has_gp_to_restore()) {
- SDL_LOG_DEBUG("Application has global properties to restore");
- return true;
- }
-
- if (has_subscriptions_to_restore()) {
- SDL_LOG_DEBUG("Application has subscriptions to restore");
- return true;
- }
-
- SDL_LOG_DEBUG("Application does not have any data to restore");
- return false;
-}
-
utils::Optional<uint32_t>
ResumptionDataProcessorImpl::GetAppIdWaitingForResponse(
const hmi_apis::FunctionID::eType function_id, const int32_t corr_id) {
@@ -268,7 +170,7 @@ void ResumptionDataProcessorImpl::ProcessResumptionStatus(
}
}
-bool ResumptionDataProcessorImpl::IsResumptionFinished(
+void ResumptionDataProcessorImpl::EraseProcessedRequest(
const uint32_t app_id, const ResumptionRequest& found_request) {
SDL_LOG_AUTO_TRACE();
@@ -285,8 +187,19 @@ bool ResumptionDataProcessorImpl::IsResumptionFinished(
found_request.request_id.function_id;
});
list_of_sent_requests.erase(request_iter);
+}
+
+bool ResumptionDataProcessorImpl::IsResumptionFinished(
+ const uint32_t app_id) const {
+ SDL_LOG_AUTO_TRACE();
- return list_of_sent_requests.empty();
+ sync_primitives::AutoReadLock lock(resumption_status_lock_);
+ bool is_requests_list_empty = true;
+ const auto app_status = resumption_status_.find(app_id);
+ if (app_status != resumption_status_.end()) {
+ is_requests_list_empty = app_status->second.list_of_sent_requests.empty();
+ }
+ return is_requests_list_empty;
}
utils::Optional<ResumeCtrl::ResumptionCallBack>
@@ -307,7 +220,7 @@ bool ResumptionDataProcessorImpl::IsResumptionSuccessful(
sync_primitives::AutoReadLock lock(resumption_status_lock_);
auto it = resumption_status_.find(app_id);
if (resumption_status_.end() == it) {
- return false;
+ return true;
}
const ApplicationResumptionStatus& status = it->second;
@@ -317,17 +230,27 @@ bool ResumptionDataProcessorImpl::IsResumptionSuccessful(
}
void ResumptionDataProcessorImpl::EraseAppResumptionData(
- const uint32_t app_id,
- const hmi_apis::FunctionID::eType function_id,
- const int32_t corr_id) {
+ const uint32_t app_id) {
SDL_LOG_AUTO_TRACE();
+ std::vector<ResumptionRequest> all_requests;
+
resumption_status_lock_.AcquireForWriting();
+ all_requests.insert(all_requests.end(),
+ resumption_status_[app_id].successful_requests.begin(),
+ resumption_status_[app_id].successful_requests.end());
+ all_requests.insert(all_requests.end(),
+ resumption_status_[app_id].error_requests.begin(),
+ resumption_status_[app_id].error_requests.end());
+
resumption_status_.erase(app_id);
resumption_status_lock_.Release();
request_app_ids_lock_.AcquireForWriting();
- request_app_ids_.erase({function_id, corr_id});
+ for (auto request : all_requests) {
+ request_app_ids_.erase(
+ {request.request_id.function_id, request.request_id.correlation_id});
+ }
request_app_ids_lock_.Release();
register_callbacks_lock_.AcquireForWriting();
@@ -362,8 +285,9 @@ void ResumptionDataProcessorImpl::ProcessResponseFromHMI(
auto request = *found_request;
ProcessResumptionStatus(app_id, response, request);
+ EraseProcessedRequest(app_id, request);
- if (!IsResumptionFinished(app_id, request)) {
+ if (!IsResumptionFinished(app_id)) {
SDL_LOG_DEBUG("Resumption app "
<< app_id << " not finished. Some requests are still waited");
return;
@@ -375,7 +299,11 @@ void ResumptionDataProcessorImpl::ProcessResponseFromHMI(
return;
}
auto callback = *found_callback;
+ FinalizeResumption(callback, app_id);
+}
+void ResumptionDataProcessorImpl::FinalizeResumption(
+ const ResumeCtrl::ResumptionCallBack& callback, const uint32_t app_id) {
if (IsResumptionSuccessful(app_id)) {
SDL_LOG_DEBUG("Resumption for app " << app_id << " successful");
callback(mobile_apis::Result::SUCCESS, "Data resumption successful");
@@ -386,8 +314,7 @@ void ResumptionDataProcessorImpl::ProcessResponseFromHMI(
RevertRestoredData(application_manager_.application(app_id));
application_manager_.state_controller().DropPostponedWindows(app_id);
}
-
- EraseAppResumptionData(app_id, function_id, corr_id);
+ EraseAppResumptionData(app_id);
}
void ResumptionDataProcessorImpl::HandleOnTimeOut(
@@ -1117,7 +1044,7 @@ void ResumptionDataProcessorImpl::CheckModuleDataSubscription(
response_module_data_so[message_params::kModuleType].asUInt());
const auto responsed_module_type_str =
- module_types_str_mapping[responsed_module_type_int];
+ application_manager::EnumToString(responsed_module_type_int);
const auto response_module_id =
response_module_data_so[message_params::kModuleId].asString();
diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc
index b8dad59830..4137ab93bb 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -283,6 +283,26 @@ void RPCHandlerImpl::OnMessageReceived(
void RPCHandlerImpl::OnErrorSending(
hmi_message_handler::MessageSharedPointer message) {
+ SDL_LOG_AUTO_TRACE();
+ smart_objects::SmartObjectSPtr smart_object =
+ std::make_shared<smart_objects::SmartObject>();
+ std::string warning_info;
+ bool allow_unknown_parameters = true;
+ if (ConvertMessageToSO(
+ *message, *smart_object, warning_info, allow_unknown_parameters)) {
+ (*smart_object)[strings::params][strings::message_type] =
+ application_manager::MessageType::kResponse;
+ (*smart_object).erase(strings::msg_params);
+ (*smart_object)[strings::params][hmi_response::code] =
+ hmi_apis::Common_Result::GENERIC_ERROR;
+ (*smart_object)[strings::params][strings::error_msg] =
+ std::string("Error sending message, mb component not registered");
+
+ if (!app_manager_.GetRPCService().ManageHMICommand(
+ smart_object, commands::Command::SOURCE_HMI, warning_info)) {
+ SDL_LOG_ERROR("Received command didn't run successfully");
+ }
+ }
return;
}
diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc
index 248db00729..34a0bed7af 100644
--- a/src/components/application_manager/src/rpc_service_impl.cc
+++ b/src/components/application_manager/src/rpc_service_impl.cc
@@ -467,8 +467,8 @@ void RPCServiceImpl::Handle(const impl::MessageToMobile message) {
SDL_LOG_INFO("Message for mobile given away");
if (close_session) {
- app_manager_.connection_handler().CloseSession(message->connection_key(),
- connection_handler::kCommon);
+ app_manager_.connection_handler().CloseSession(
+ message->connection_key(), connection_handler::kFinalMessage);
}
}
diff --git a/src/components/application_manager/src/state_controller_impl.cc b/src/components/application_manager/src/state_controller_impl.cc
index 2eb813e69f..89dac83165 100644
--- a/src/components/application_manager/src/state_controller_impl.cc
+++ b/src/components/application_manager/src/state_controller_impl.cc
@@ -56,7 +56,9 @@ bool IsStateChanged(const HmiState& old_state, const HmiState& new_state) {
} // unnamed namespace
StateControllerImpl::StateControllerImpl(ApplicationManager& app_mngr)
- : EventObserver(app_mngr.event_dispatcher()), app_mngr_(app_mngr) {
+ : EventObserver(app_mngr.event_dispatcher())
+ , app_mngr_(app_mngr)
+ , postponed_activation_controller_() {
subscribe_on_event(hmi_apis::FunctionID::BasicCommunication_OnAppActivated);
subscribe_on_event(hmi_apis::FunctionID::BasicCommunication_OnAppDeactivated);
subscribe_on_event(hmi_apis::FunctionID::TTS_Started);
@@ -394,7 +396,7 @@ void StateControllerImpl::HmiLevelConflictResolver::operator()(
result_video_state = mobile_apis::VideoStreamingState::STREAMABLE;
}
- mobile_apis::HMILevel::eType result_hmi_level = state_to_resolve->hmi_level();
+ mobile_apis::HMILevel::eType result_hmi_level;
using namespace helpers;
if (mobile_apis::VideoStreamingState::STREAMABLE == result_video_state ||
@@ -408,7 +410,11 @@ void StateControllerImpl::HmiLevelConflictResolver::operator()(
? mobile_apis::HMILevel::HMI_LIMITED
: to_resolve_hmi_level;
} else {
- result_hmi_level = mobile_apis::HMILevel::HMI_BACKGROUND;
+ result_hmi_level =
+ mobile_apis::HMILevel::HMI_FULL == to_resolve_hmi_level &&
+ mobile_apis::HMILevel::HMI_FULL != applied_hmi_level
+ ? to_resolve_hmi_level
+ : mobile_apis::HMILevel::HMI_BACKGROUND;
}
if (std::make_tuple(to_resolve_hmi_level,
@@ -803,11 +809,11 @@ void StateControllerImpl::on_event(const event_engine::Event& event) {
case FunctionID::BasicCommunication_OnEventChanged: {
bool is_active =
message[strings::msg_params][hmi_notification::is_active].asBool();
- const uint32_t id =
+ const uint32_t event_id =
message[strings::msg_params][hmi_notification::event_name].asUInt();
// TODO(AOleynik): Add verification/conversion check here
const Common_EventTypes::eType state_id =
- static_cast<Common_EventTypes::eType>(id);
+ static_cast<Common_EventTypes::eType>(event_id);
if (is_active) {
if (Common_EventTypes::AUDIO_SOURCE == state_id) {
ApplyTempState<HmiState::STATE_ID_AUDIO_SOURCE>();
@@ -913,6 +919,12 @@ void StateControllerImpl::OnStateChanged(ApplicationSharedPtr app,
SDL_LOG_DEBUG("Window #" << window_id << " old state: " << *old_state);
SDL_LOG_DEBUG("Window #" << window_id << " new state: " << *new_state);
+ if ((new_state->hmi_level() == mobile_apis::HMILevel::INVALID_ENUM) &&
+ (old_state->hmi_level() == mobile_apis::HMILevel::INVALID_ENUM)) {
+ SDL_LOG_DEBUG("HMI level is invalid data.");
+ return;
+ }
+
if (!IsStateChanged(*old_state, *new_state)) {
SDL_LOG_DEBUG("State has NOT been changed.");
return;
@@ -949,6 +961,19 @@ void StateControllerImpl::OnStateChanged(ApplicationSharedPtr app,
app_mngr_.OnHMIStateChanged(app->app_id(), old_state, new_state);
app->usage_report().RecordHmiStateChanged(new_state->hmi_level());
+
+ if (mobile_apis::HMILevel::INVALID_ENUM == old_state->hmi_level()) {
+ const auto app_default_hmi_level = app_mngr_.GetDefaultHmiLevel(app);
+ if (app_default_hmi_level == new_state->hmi_level()) {
+ const uint32_t app_id = app->app_id();
+ const uint32_t corr_id =
+ postponed_activation_controller_.GetPendingActivationCorrId(app_id);
+ if (corr_id > 0) {
+ app_mngr_.GetPolicyHandler().OnActivateApp(app_id, corr_id);
+ postponed_activation_controller_.RemoveAppToActivate(app_id);
+ }
+ }
+ }
}
bool StateControllerImpl::IsTempStateActive(HmiState::StateID id) const {
@@ -1001,11 +1026,6 @@ void StateControllerImpl::OnApplicationRegistered(
const mobile_apis::HMILevel::eType default_level) {
SDL_LOG_AUTO_TRACE();
- if (app->is_cloud_app()) {
- // Return here, there should already be an onHMIStatus=FULL being processed
- // for when the cloud app was initially activated by the hmi
- return;
- }
// After app registration HMI level should be set for DEFAULT_WINDOW only
OnAppWindowAdded(app,
mobile_apis::PredefinedWindows::DEFAULT_WINDOW,
@@ -1405,4 +1425,9 @@ mobile_apis::VideoStreamingState::eType StateControllerImpl::CalcVideoState(
return state;
}
+PostponedActivationController&
+StateControllerImpl::GetPostponedActivationController() {
+ return postponed_activation_controller_;
+}
+
} // namespace application_manager
diff --git a/src/components/application_manager/test/application_impl_test.cc b/src/components/application_manager/test/application_impl_test.cc
index 717df8f482..d468c9790b 100644
--- a/src/components/application_manager/test/application_impl_test.cc
+++ b/src/components/application_manager/test/application_impl_test.cc
@@ -837,7 +837,6 @@ TEST_F(ApplicationImplTest, StartStreaming_StreamingApproved) {
TEST_F(ApplicationImplTest, SuspendNaviStreaming) {
protocol_handler::ServiceType type =
protocol_handler::ServiceType::kMobileNav;
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
EXPECT_CALL(mock_application_manager_,
ProcessOnDataStreamingNotification(type, app_id, false));
app_impl->SuspendStreaming(type);
@@ -845,7 +844,6 @@ TEST_F(ApplicationImplTest, SuspendNaviStreaming) {
TEST_F(ApplicationImplTest, SuspendAudioStreaming) {
protocol_handler::ServiceType type = protocol_handler::ServiceType::kAudio;
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
EXPECT_CALL(mock_application_manager_,
ProcessOnDataStreamingNotification(type, app_id, false));
app_impl->SuspendStreaming(type);
@@ -854,12 +852,16 @@ TEST_F(ApplicationImplTest, SuspendAudioStreaming) {
// TODO {AKozoriz} : Fix tests with streaming (APPLINK-19289)
TEST_F(ApplicationImplTest, DISABLED_Suspend_WakeUpAudioStreaming) {
protocol_handler::ServiceType type = protocol_handler::ServiceType::kAudio;
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kSuspended));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
SendOnDataStreaming(type, false, _));
app_impl->SuspendStreaming(type);
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, true));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kStarted));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
SendOnDataStreaming(type, true, _));
app_impl->WakeUpStreaming(type);
@@ -868,12 +870,16 @@ TEST_F(ApplicationImplTest, DISABLED_Suspend_WakeUpAudioStreaming) {
TEST_F(ApplicationImplTest, DISABLED_Suspend_WakeUpNaviStreaming) {
protocol_handler::ServiceType type =
protocol_handler::ServiceType::kMobileNav;
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kSuspended));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
SendOnDataStreaming(type, false, _));
app_impl->SuspendStreaming(type);
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, true));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kStarted));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
SendOnDataStreaming(type, true, _));
app_impl->WakeUpStreaming(type);
@@ -885,7 +891,9 @@ TEST_F(ApplicationImplTest, StopStreaming_StreamingApproved) {
protocol_handler::ServiceType::kMobileNav;
app_impl->set_video_streaming_approved(true);
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kStopped));
EXPECT_CALL(mock_application_manager_,
ProcessOnDataStreamingNotification(type, app_id, false));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
@@ -897,7 +905,9 @@ TEST_F(ApplicationImplTest, StopStreaming_StreamingApproved) {
// Stop audio streaming
app_impl->set_audio_streaming_approved(true);
type = protocol_handler::ServiceType::kAudio;
- EXPECT_CALL(mock_application_manager_, OnAppStreaming(app_id, type, false));
+ EXPECT_CALL(
+ mock_application_manager_,
+ OnAppStreaming(app_id, type, Application::StreamingState::kStopped));
EXPECT_CALL(mock_application_manager_,
ProcessOnDataStreamingNotification(type, app_id, false));
EXPECT_CALL(*MockMessageHelper::message_helper_mock(),
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 493d4a18fc..cf8aadb080 100644
--- a/src/components/application_manager/test/application_manager_impl_test.cc
+++ b/src/components/application_manager/test/application_manager_impl_test.cc
@@ -94,9 +94,14 @@ using test::components::policy_test::MockPolicyHandlerInterface;
using namespace application_manager;
-// custom action to call a member function with 4 arguments
-ACTION_P6(InvokeMemberFuncWithArg4, ptr, memberFunc, a, b, c, d) {
- (ptr->*memberFunc)(a, b, c, d);
+// custom action to call a member function with 2 arguments
+ACTION_P4(InvokeMemberFuncWithArg2, ptr, memberFunc, a, b) {
+ (ptr->*memberFunc)(a, b);
+}
+
+// custom action to call a member function with 3 arguments
+ACTION_P5(InvokeMemberFuncWithArg3, ptr, memberFunc, a, b, c) {
+ (ptr->*memberFunc)(a, b, c);
}
namespace {
@@ -541,7 +546,7 @@ TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_RpcService) {
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
app_manager_impl_->OnServiceStartedCallback(
@@ -552,28 +557,6 @@ TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_RpcService) {
EXPECT_TRUE(rejected_params.empty());
}
-TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_UnknownApp) {
- AddMockApplication();
-
- const connection_handler::DeviceHandle device_handle = 0;
- const protocol_handler::ServiceType service_type =
- protocol_handler::ServiceType::kInvalidServiceType;
- const int32_t session_key = 123;
- EXPECT_CALL(*mock_app_ptr_, app_id()).WillRepeatedly(Return(456));
-
- bool result = false;
- std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
- .WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
-
- app_manager_impl_->OnServiceStartedCallback(
- device_handle, session_key, service_type, NULL);
-
- // check: return value is false and list is empty
- EXPECT_FALSE(result);
- EXPECT_TRUE(rejected_params.empty());
-}
-
TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_UnknownService) {
AddMockApplication();
@@ -585,7 +568,7 @@ TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_UnknownService) {
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
app_manager_impl_->OnServiceStartedCallback(
@@ -616,7 +599,7 @@ TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_VideoServiceStart) {
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
// check: SetVideoConfig() should not be called, StartStreaming() is called
@@ -647,7 +630,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
// check: SetVideoConfig() and StartStreaming() should not be called
@@ -684,7 +667,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
// check: SetVideoConfig() and StartStreaming() should not be called
@@ -720,7 +703,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
BsonObject input_params;
@@ -746,18 +729,15 @@ TEST_F(ApplicationManagerImplTest,
converted_params[strings::height] = 640;
converted_params[strings::width] = 480;
- std::vector<std::string> empty;
-
// check: SetVideoConfig() and StartStreaming() are called
EXPECT_CALL(*mock_app_ptr_, SetVideoConfig(service_type, converted_params))
- .WillOnce(DoAll(InvokeMemberFuncWithArg4(
- app_manager_impl_.get(),
- &ApplicationManagerImpl::OnStreamingConfigured,
- session_key,
- service_type,
- true,
- ByRef(empty)),
- Return(true)));
+ .WillOnce(
+ DoAll(InvokeMemberFuncWithArg2(
+ app_manager_impl_.get(),
+ &ApplicationManagerImpl::OnStreamingConfigurationSuccessful,
+ session_key,
+ service_type),
+ Return(true)));
EXPECT_CALL(*mock_app_ptr_, StartStreaming(service_type)).WillOnce(Return());
app_manager_impl_->OnServiceStartedCallback(
@@ -809,7 +789,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
BsonObject input_params;
@@ -838,17 +818,18 @@ TEST_F(ApplicationManagerImplTest,
std::vector<std::string> rejected_list;
rejected_list.push_back(std::string("protocol"));
rejected_list.push_back(std::string("codec"));
+ std::string reason;
// simulate HMI returning negative response
EXPECT_CALL(*mock_app_ptr_, SetVideoConfig(service_type, converted_params))
- .WillOnce(DoAll(InvokeMemberFuncWithArg4(
- app_manager_impl_.get(),
- &ApplicationManagerImpl::OnStreamingConfigured,
- session_key,
- service_type,
- false,
- ByRef(rejected_list)),
- Return(true)));
+ .WillOnce(
+ DoAll(InvokeMemberFuncWithArg3(
+ app_manager_impl_.get(),
+ &ApplicationManagerImpl::OnStreamingConfigurationFailed,
+ session_key,
+ ByRef(rejected_list),
+ ByRef(reason)),
+ Return(true)));
// check: StartStreaming() should not be called
EXPECT_CALL(*mock_app_ptr_, StartStreaming(service_type)).Times(0);
@@ -888,7 +869,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
BsonObject input_params;
@@ -928,7 +909,7 @@ TEST_F(ApplicationManagerImplTest, OnServiceStartedCallback_AudioServiceStart) {
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
// check: SetVideoConfig() should not be called, StartStreaming() is called
@@ -963,7 +944,7 @@ TEST_F(ApplicationManagerImplTest,
bool result = false;
std::vector<std::string> rejected_params;
- EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _))
+ EXPECT_CALL(mock_connection_handler_, NotifyServiceStartedResult(_, _, _, _))
.WillOnce(DoAll(SaveArg<1>(&result), SaveArg<2>(&rejected_params)));
BsonObject input_params;
@@ -1576,7 +1557,7 @@ TEST_F(ApplicationManagerImplTest,
// - .ini file specifies TCP_WIFI for EMPTY_APP entry.
// -> The app does not have required transport.
bool result = CheckResumptionRequiredTransportAvailableTest(
- NULL,
+ nullptr,
primary_device_handle,
primary_transport_device_string,
secondary_device_handle,
diff --git a/src/components/application_manager/test/hmi_capabilities_old_apt.json b/src/components/application_manager/test/hmi_capabilities_old_apt.json
index 5a5af37e2f..56ae151caa 100644
--- a/src/components/application_manager/test/hmi_capabilities_old_apt.json
+++ b/src/components/application_manager/test/hmi_capabilities_old_apt.json
@@ -2,7 +2,7 @@
"UI": {
"audioPassThruCapabilities": {
"samplingRate": "22KHZ",
- "bitsPerSample": "RATE_16_BIT",
+ "bitsPerSample": "16_BIT",
"audioType": "PCM"
}
}
diff --git a/src/components/application_manager/test/hmi_capabilities_test.cc b/src/components/application_manager/test/hmi_capabilities_test.cc
index 73e86fc7a7..4e2e948335 100644
--- a/src/components/application_manager/test/hmi_capabilities_test.cc
+++ b/src/components/application_manager/test/hmi_capabilities_test.cc
@@ -80,45 +80,6 @@ using ::testing::ReturnRef;
using namespace application_manager;
-typedef std::map<std::string, hmi_apis::Common_Language::eType>
- LanguageCStringToEnumMap;
-
-typedef std::map<std::string, hmi_apis::Common_LightName::eType>
- LightNameCStringToEnumMap;
-
-static LanguageCStringToEnumMap languages_map;
-static LightNameCStringToEnumMap light_names_map;
-
-const std::vector<std::string> language_string_values{
- {"EN-US"}, {"ES-MX"}, {"FR-CA"}, {"DE-DE"}, {"ES-ES"}, {"EN-GB"}, {"RU-RU"},
- {"TR-TR"}, {"PL-PL"}, {"FR-FR"}, {"IT-IT"}, {"SV-SE"}, {"PT-PT"}, {"NL-NL"},
- {"EN-AU"}, {"ZH-CN"}, {"ZH-TW"}, {"JA-JP"}, {"AR-SA"}, {"KO-KR"}, {"PT-BR"},
- {"CS-CZ"}, {"DA-DK"}, {"NO-NO"}, {"NL-BE"}, {"EL-GR"}, {"HU-HU"}, {"FI-FI"},
- {"SK-SK"}, {"EN-IN"}, {"TH-TH"}, {"EN-SA"}, {"HE-IL"}, {"RO-RO"}, {"UK-UA"},
- {"ID-ID"}, {"VI-VN"}, {"MS-MY"}, {"HI-IN"}};
-
-const std::vector<hmi_apis::Common_Language::eType> language_enum_values{
- hmi_apis::Common_Language::EN_US, hmi_apis::Common_Language::ES_MX,
- hmi_apis::Common_Language::FR_CA, hmi_apis::Common_Language::DE_DE,
- hmi_apis::Common_Language::ES_ES, hmi_apis::Common_Language::EN_GB,
- hmi_apis::Common_Language::RU_RU, hmi_apis::Common_Language::TR_TR,
- hmi_apis::Common_Language::PL_PL, hmi_apis::Common_Language::FR_FR,
- hmi_apis::Common_Language::IT_IT, hmi_apis::Common_Language::SV_SE,
- hmi_apis::Common_Language::PT_PT, hmi_apis::Common_Language::NL_NL,
- hmi_apis::Common_Language::EN_AU, hmi_apis::Common_Language::ZH_CN,
- hmi_apis::Common_Language::ZH_TW, hmi_apis::Common_Language::JA_JP,
- hmi_apis::Common_Language::AR_SA, hmi_apis::Common_Language::KO_KR,
- hmi_apis::Common_Language::PT_BR, hmi_apis::Common_Language::CS_CZ,
- hmi_apis::Common_Language::DA_DK, hmi_apis::Common_Language::NO_NO,
- hmi_apis::Common_Language::NL_BE, hmi_apis::Common_Language::EL_GR,
- hmi_apis::Common_Language::HU_HU, hmi_apis::Common_Language::FI_FI,
- hmi_apis::Common_Language::SK_SK, hmi_apis::Common_Language::EN_IN,
- hmi_apis::Common_Language::TH_TH, hmi_apis::Common_Language::EN_SA,
- hmi_apis::Common_Language::HE_IL, hmi_apis::Common_Language::RO_RO,
- hmi_apis::Common_Language::UK_UA, hmi_apis::Common_Language::ID_ID,
- hmi_apis::Common_Language::VI_VN, hmi_apis::Common_Language::MS_MY,
- hmi_apis::Common_Language::HI_IN};
-
const std::vector<hmi_apis::Common_LightName::eType> light_name_enum_values{
hmi_apis::Common_LightName::eType::FRONT_LEFT_HIGH_BEAM,
hmi_apis::Common_LightName::eType::FRONT_RIGHT_HIGH_BEAM,
@@ -169,109 +130,6 @@ const std::vector<hmi_apis::Common_LightName::eType> light_name_enum_values{
hmi_apis::Common_LightName::eType::EXTERIOR_RIGHT_LIGHTS,
hmi_apis::Common_LightName::eType::EXTERIOR_ALL_LIGHTS};
-const std::vector<std::string> light_name_string_values{
- {"FRONT_LEFT_HIGH_BEAM"},
- {"FRONT_RIGHT_HIGH_BEAM"},
- {"FRONT_LEFT_LOW_BEAM"},
- {"FRONT_RIGHT_LOW_BEAM"},
- {"FRONT_LEFT_PARKING_LIGHT"},
- {"FRONT_RIGHT_PARKING_LIGHT"},
- {"FRONT_LEFT_FOG_LIGHT"},
- {"FRONT_RIGHT_FOG_LIGHT"},
- {"FRONT_LEFT_DAYTIME_RUNNING_LIGHT"},
- {"FRONT_RIGHT_DAYTIME_RUNNING_LIGHT"},
- {"FRONT_LEFT_TURN_LIGHT"},
- {"FRONT_RIGHT_TURN_LIGHT"},
- {"REAR_LEFT_FOG_LIGHT"},
- {"REAR_RIGHT_FOG_LIGHT"},
- {"REAR_LEFT_TAIL_LIGHT"},
- {"REAR_RIGHT_TAIL_LIGHT"},
- {"REAR_LEFT_BRAKE_LIGHT"},
- {"REAR_RIGHT_BRAKE_LIGHT"},
- {"REAR_LEFT_TURN_LIGHT"},
- {"REAR_RIGHT_TURN_LIGHT"},
- {"REAR_REGISTRATION_PLATE_LIGHT"},
- {"HIGH_BEAMS"},
- {"LOW_BEAMS"},
- {"FOG_LIGHTS"},
- {"RUNNING_LIGHTS"},
- {"PARKING_LIGHTS"},
- {"BRAKE_LIGHTS"},
- {"REAR_REVERSING_LIGHTS"},
- {"SIDE_MARKER_LIGHTS"},
- {"LEFT_TURN_LIGHTS"},
- {"RIGHT_TURN_LIGHTS"},
- {"HAZARD_LIGHTS"},
- {"REAR_CARGO_LIGHTS"},
- {"REAR_TRUCK_BED_LIGHTS"},
- {"REAR_TRAILER_LIGHTS"},
- {"LEFT_SPOT_LIGHTS"},
- {"RIGHT_SPOT_LIGHTS"},
- {"LEFT_PUDDLE_LIGHTS"},
- {"RIGHT_PUDDLE_LIGHTS"},
- {"AMBIENT_LIGHTS"},
- {"OVERHEAD_LIGHTS"},
- {"READING_LIGHTS"},
- {"TRUNK_LIGHTS"},
- {"EXTERIOR_FRONT_LIGHTS"},
- {"EXTERIOR_REAR_LIGHTS"},
- {"EXTERIOR_LEFT_LIGHTS"},
- {"EXTERIOR_RIGHT_LIGHTS"},
- {"EXTERIOR_ALL_LIGHTS"}};
-
-void InitLightNameStringToEnumMap(
- LightNameCStringToEnumMap& out_light_names_map) {
- for (size_t i = 0; i < light_name_string_values.size(); ++i) {
- out_light_names_map[light_name_string_values[i]] =
- light_name_enum_values[i];
- }
-}
-
-bool LightNameStringToEnum(const std::string& light_name_str,
- hmi_apis::Common_LightName::eType& out_value) {
- auto it = light_names_map.find(light_name_str);
- if (it == light_names_map.end()) {
- return false;
- }
- out_value = it->second;
- return true;
-}
-
-void InitLanguageStringToEnumMap(LanguageCStringToEnumMap& out_languages_map) {
- for (size_t i = 0; i < language_string_values.size(); ++i) {
- out_languages_map[language_string_values[i]] = language_enum_values[i];
- }
-}
-
-bool LanguageStringToEnum(const std::string& language_str,
- hmi_apis::Common_Language::eType& out_value) {
- LanguageCStringToEnumMap::const_iterator it =
- languages_map.find(language_str);
- if (it == languages_map.end()) {
- return false;
- }
- out_value = it->second;
- return true;
-}
-
-hmi_apis::Common_Language::eType TestCommonLanguageFromString(
- const std::string& language) {
- hmi_apis::Common_Language::eType value;
- if (LanguageStringToEnum(language, value)) {
- return value;
- }
- return hmi_apis::Common_Language::INVALID_ENUM;
-}
-
-hmi_apis::Common_LightName::eType TestCommonLightNameFromString(
- const std::string& light_name_str) {
- hmi_apis::Common_LightName::eType value;
- if (LightNameStringToEnum(light_name_str, value)) {
- return value;
- }
- return hmi_apis::Common_LightName::INVALID_ENUM;
-}
-
bool IsLightNameExists(const hmi_apis::Common_LightName::eType& light_name) {
auto it = std::find(
light_name_enum_values.begin(), light_name_enum_values.end(), light_name);
@@ -283,14 +141,7 @@ class HMICapabilitiesTest : public ::testing::Test {
HMICapabilitiesTest()
: last_state_wrapper_(std::make_shared<resumption::LastStateWrapperImpl>(
std::make_shared<resumption::LastStateImpl>(kAppStorageFolder,
- kAppInfoStorage))) {
- if (languages_map.empty()) {
- InitLanguageStringToEnumMap(languages_map);
- }
- if (light_names_map.empty()) {
- InitLightNameStringToEnumMap(light_names_map);
- }
- }
+ kAppInfoStorage))) {}
void SetUp() OVERRIDE {
ON_CALL(mock_app_mngr_, event_dispatcher())
@@ -325,13 +176,6 @@ class HMICapabilitiesTest : public ::testing::Test {
void SetUpLanguageAndLightCapabilitiesExpectation() {
ON_CALL(mock_app_mngr_, IsSOStructValid(_, _)).WillByDefault(Return(true));
-
- EXPECT_CALL(*(MockMessageHelper::message_helper_mock()),
- CommonLanguageFromString(_))
- .WillRepeatedly(Invoke(TestCommonLanguageFromString));
- EXPECT_CALL(*(MockMessageHelper::message_helper_mock()),
- CommonLightNameFromString(_))
- .WillRepeatedly(Invoke(TestCommonLightNameFromString));
}
std::shared_ptr<HMICapabilitiesImpl> hmi_capabilities_;
@@ -1011,10 +855,6 @@ TEST_F(HMICapabilitiesTest,
ON_CALL(mock_application_manager_settings_, hmi_capabilities_file_name())
.WillByDefault(ReturnRef(hmi_capabilities_file));
- EXPECT_CALL(*(MockMessageHelper::message_helper_mock()),
- CommonLanguageFromString(_))
- .WillRepeatedly(Invoke(TestCommonLanguageFromString));
-
hmi_capabilities_->Init(last_state_wrapper_);
// with old audio pass thru format, the object is an array containing a single
@@ -1201,10 +1041,7 @@ TEST_F(
HMICapabilitiesTest,
SaveCachedCapabilitiesToFile_LanguageIsNotTheSameAsPersisted_SaveNewLanguageToCache) {
SetUpLanguageAndLightCapabilitiesExpectation();
- const std::string new_language = "RU_RU";
- ON_CALL(*(MockMessageHelper::message_helper_mock()),
- CommonLanguageToString(_))
- .WillByDefault(Return(new_language));
+ const std::string new_language = "RU-RU";
hmi_capabilities_->Init(last_state_wrapper_);
hmi_capabilities_->set_active_tts_language(hmi_apis::Common_Language::RU_RU);
diff --git a/src/components/application_manager/test/include/application_manager/mock_application.h b/src/components/application_manager/test/include/application_manager/mock_application.h
index 3c1ddca125..454b43b99f 100644
--- a/src/components/application_manager/test/include/application_manager/mock_application.h
+++ b/src/components/application_manager/test/include/application_manager/mock_application.h
@@ -88,9 +88,8 @@ class MockApplication : public ::application_manager::Application {
void(protocol_handler::ServiceType service_type));
MOCK_METHOD1(SuspendStreaming,
void(protocol_handler::ServiceType service_type));
- MOCK_METHOD2(WakeUpStreaming,
- void(protocol_handler::ServiceType service_type,
- uint32_t timer_len));
+ MOCK_METHOD1(WakeUpStreaming,
+ void(protocol_handler::ServiceType service_type));
MOCK_CONST_METHOD0(is_voice_communication_supported, bool());
MOCK_METHOD1(set_voice_communication_supported,
void(bool is_voice_communication_supported));
diff --git a/src/components/application_manager/test/include/application_manager/mock_message_helper.h b/src/components/application_manager/test/include/application_manager/mock_message_helper.h
index 3b4df0af1b..d7919a374b 100644
--- a/src/components/application_manager/test/include/application_manager/mock_message_helper.h
+++ b/src/components/application_manager/test/include/application_manager/mock_message_helper.h
@@ -57,22 +57,12 @@ class MockMessageHelper {
smart_objects::SmartObjectSPtr(const uint32_t app_id));
MOCK_METHOD2(SendHashUpdateNotification,
void(const uint32_t app_id, ApplicationManager& app_mngr));
- MOCK_METHOD1(HMIResultToString,
- std::string(hmi_apis::Common_Result::eType hmi_result));
- MOCK_METHOD1(HMIResultFromString,
- hmi_apis::Common_Result::eType(const std::string& hmi_result));
- MOCK_METHOD1(MobileResultToString,
- std::string(mobile_apis::Result::eType mobile_result));
- MOCK_METHOD1(MobileResultFromString,
- mobile_api::Result::eType(const std::string& mobile_result));
MOCK_METHOD1(HMIToMobileResult,
mobile_api::Result::eType(
const hmi_apis::Common_Result::eType hmi_result));
MOCK_METHOD1(MobileToHMIResult,
hmi_apis::Common_Result::eType(
const mobile_api::Result::eType mobile_result));
- MOCK_METHOD1(StringToHMILevel,
- mobile_api::HMILevel::eType(const std::string& hmi_level));
MOCK_METHOD3(CreateDeviceListSO,
smart_objects::SmartObjectSPtr(
const connection_handler::DeviceMap& devices,
@@ -177,14 +167,6 @@ class MockMessageHelper {
const std::vector<uint8_t>& policy_data,
const std::string& url,
ApplicationManager& app_mngr));
- MOCK_METHOD1(CommonLanguageFromString,
- hmi_apis::Common_Language::eType(const std::string& language));
- MOCK_METHOD1(CommonLightNameFromString,
- hmi_apis::Common_LightName::eType(const std::string& lightName));
- MOCK_METHOD1(CommonLanguageToString,
- std::string(hmi_apis::Common_Language::eType));
- MOCK_METHOD1(MobileLanguageToString,
- std::string(mobile_apis::Language::eType));
MOCK_METHOD2(CreateModuleInfoSO,
smart_objects::SmartObjectSPtr(uint32_t function_id,
ApplicationManager& app_mngr));
@@ -340,8 +322,6 @@ class MockMessageHelper {
void(const uint32_t app_id,
const std::string& icon_path,
ApplicationManager& application_manager));
- MOCK_METHOD1(StringifiedHMILevel,
- std::string(const mobile_apis::HMILevel::eType hmi_level));
MOCK_METHOD2(GetDeviceMacAddressForHandle,
std::string(const transport_manager::DeviceHandle device_handle,
const ApplicationManager& app_mngr));
diff --git a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
index 6b2d31f72f..c2c02a1d0c 100644
--- a/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
+++ b/src/components/application_manager/test/include/application_manager/mock_resume_ctrl.h
@@ -96,11 +96,11 @@ class MockResumeCtrl : public resumption::ResumeCtrl {
MOCK_CONST_METHOD2(GetSavedAppHmiLevel,
int32_t(const std::string&, const std::string&));
MOCK_METHOD1(RestoreAppHMIState,
- bool(application_manager::ApplicationSharedPtr application));
+ void(application_manager::ApplicationSharedPtr application));
MOCK_METHOD1(SetupDefaultHMILevel,
bool(application_manager::ApplicationSharedPtr application));
MOCK_METHOD1(StartAppHmiStateResumption,
- bool(application_manager::ApplicationSharedPtr application));
+ void(application_manager::ApplicationSharedPtr application));
MOCK_METHOD3(SetAppHMIState,
bool(application_manager::ApplicationSharedPtr application,
const mobile_apis::HMILevel::eType hmi_level,
diff --git a/src/components/application_manager/test/message_helper/message_helper_test.cc b/src/components/application_manager/test/message_helper/message_helper_test.cc
index 273775bebf..c380805bc2 100644
--- a/src/components/application_manager/test/message_helper/message_helper_test.cc
+++ b/src/components/application_manager/test/message_helper/message_helper_test.cc
@@ -641,41 +641,6 @@ class MessageHelperTest : public ::testing::Test {
const size_t delta_from_functions_id;
};
-TEST_F(MessageHelperTest,
- CommonLanguageFromString_StringValueOfEnum_CorrectEType) {
- HmiLanguage::eType enum_value;
- HmiLanguage::eType enum_from_string_value;
- // Check all languages >= 0
- for (size_t array_index = 0; array_index < language_strings.size();
- ++array_index) {
- enum_value = static_cast<HmiLanguage::eType>(array_index);
- enum_from_string_value =
- MessageHelper::CommonLanguageFromString(language_strings[array_index]);
- EXPECT_EQ(enum_value, enum_from_string_value);
- }
- // Check InvalidEnum == -1
- enum_value = HmiLanguage::INVALID_ENUM;
- enum_from_string_value = MessageHelper::CommonLanguageFromString("");
- EXPECT_EQ(enum_value, enum_from_string_value);
-}
-
-TEST_F(MessageHelperTest,
- CommonLanguageToString_ETypeValueOfEnum_CorrectString) {
- std::string string_from_enum;
- HmiLanguage::eType casted_enum;
- // Check all languages >=0
- for (size_t array_index = 0; array_index < language_strings.size();
- ++array_index) {
- casted_enum = static_cast<HmiLanguage::eType>(array_index);
- string_from_enum = MessageHelper::CommonLanguageToString(casted_enum);
- EXPECT_EQ(language_strings[array_index], string_from_enum);
- }
- // Check InvalidEnum == -1
- string_from_enum =
- MessageHelper::CommonLanguageToString(HmiLanguage::INVALID_ENUM);
- EXPECT_EQ("", string_from_enum);
-}
-
TEST_F(MessageHelperTest, ConvertEnumAPINoCheck_AnyEnumType_AnotherEnumType) {
hmi_apis::Common_LayoutMode::eType tested_enum_value =
hmi_apis::Common_LayoutMode::ICON_ONLY;
@@ -686,38 +651,6 @@ TEST_F(MessageHelperTest, ConvertEnumAPINoCheck_AnyEnumType_AnotherEnumType) {
EXPECT_EQ(hmi_apis::Common_AppHMIType::DEFAULT, converted);
}
-TEST_F(MessageHelperTest, HMIResultFromString_StringValueOfEnum_CorrectEType) {
- HmiResults::eType enum_value;
- HmiResults::eType enum_from_string_value;
- // Check all results >= 0
- for (size_t array_index = 0; array_index < hmi_result_strings.size();
- ++array_index) {
- enum_value = static_cast<HmiResults::eType>(array_index);
- enum_from_string_value =
- MessageHelper::HMIResultFromString(hmi_result_strings[array_index]);
- EXPECT_EQ(enum_value, enum_from_string_value);
- }
- // Check InvalidEnum == -1
- enum_value = HmiResults::INVALID_ENUM;
- enum_from_string_value = MessageHelper::HMIResultFromString("");
- EXPECT_EQ(enum_value, enum_from_string_value);
-}
-
-TEST_F(MessageHelperTest, HMIResultToString_ETypeValueOfEnum_CorrectString) {
- std::string string_from_enum;
- HmiResults::eType casted_enum;
- // Check all results >=0
- for (size_t array_index = 0; array_index < hmi_result_strings.size();
- ++array_index) {
- casted_enum = static_cast<HmiResults::eType>(array_index);
- string_from_enum = MessageHelper::HMIResultToString(casted_enum);
- EXPECT_EQ(hmi_result_strings[array_index], string_from_enum);
- }
- // Check InvalidEnum == -1
- string_from_enum = MessageHelper::HMIResultToString(HmiResults::INVALID_ENUM);
- EXPECT_EQ("", string_from_enum);
-}
-
TEST_F(MessageHelperTest,
HMIToMobileResult_HmiResultEType_GetCorrectMobileResultEType) {
MobileResults::eType tested_enum;
@@ -727,7 +660,7 @@ TEST_F(MessageHelperTest,
for (size_t enum_index = 0; enum_index < hmi_result_strings.size();
++enum_index) {
tested_enum =
- MessageHelper::MobileResultFromString(hmi_result_strings[enum_index]);
+ StringToEnum<MobileResults::eType>(hmi_result_strings[enum_index]);
casted_hmi_enum = static_cast<HmiResults::eType>(enum_index);
converted_enum = MessageHelper::HMIToMobileResult(casted_hmi_enum);
EXPECT_EQ(tested_enum, converted_enum);
@@ -955,27 +888,6 @@ TEST_F(MessageHelperTest,
}
}
-TEST_F(MessageHelperTest,
- StringifiedHmiLevel_LevelEnum_EqualsWithStringsInArray) {
- mobile_apis::HMILevel::eType casted_enum;
- std::string converted_value;
- for (size_t i = 0; i < hmi_level_strings.size(); ++i) {
- casted_enum = static_cast<mobile_apis::HMILevel::eType>(i);
- converted_value = MessageHelper::StringifiedHMILevel(casted_enum);
- EXPECT_EQ(hmi_level_strings[i], converted_value);
- }
-}
-
-TEST_F(MessageHelperTest, StringToHmiLevel_LevelString_EqEType) {
- mobile_apis::HMILevel::eType tested_enum;
- mobile_apis::HMILevel::eType converted_enum;
- for (size_t i = 0; i < hmi_level_strings.size(); ++i) {
- tested_enum = static_cast<mobile_apis::HMILevel::eType>(i);
- converted_enum = MessageHelper::StringToHMILevel(hmi_level_strings[i]);
- EXPECT_EQ(tested_enum, converted_enum);
- }
-}
-
TEST_F(MessageHelperTest, SubscribeApplicationToSoftButton_CallFromApp) {
// Create application mock
MockApplicationSharedPtr appSharedPtr = std::make_shared<MockApplication>();
diff --git a/src/components/application_manager/test/mock_message_helper.cc b/src/components/application_manager/test/mock_message_helper.cc
index fdad51ad63..91f953eaf5 100644
--- a/src/components/application_manager/test/mock_message_helper.cc
+++ b/src/components/application_manager/test/mock_message_helper.cc
@@ -102,30 +102,6 @@ smart_objects::SmartObjectSPtr GetHashUpdateNotification(
app_id);
}
-std::string MessageHelper::HMIResultToString(
- hmi_apis::Common_Result::eType hmi_result) {
- return MockMessageHelper::message_helper_mock()->HMIResultToString(
- hmi_result);
-}
-
-hmi_apis::Common_Result::eType MessageHelper::HMIResultFromString(
- const std::string& hmi_result) {
- return MockMessageHelper::message_helper_mock()->HMIResultFromString(
- hmi_result);
-}
-
-std::string MessageHelper::MobileResultToString(
- mobile_apis::Result::eType mobile_result) {
- return MockMessageHelper::message_helper_mock()->MobileResultToString(
- mobile_result);
-}
-
-mobile_api::Result::eType MessageHelper::MobileResultFromString(
- const std::string& mobile_result) {
- return MockMessageHelper::message_helper_mock()->MobileResultFromString(
- mobile_result);
-}
-
mobile_api::Result::eType MessageHelper::HMIToMobileResult(
const hmi_apis::Common_Result::eType hmi_result) {
return MockMessageHelper::message_helper_mock()->HMIToMobileResult(
@@ -138,11 +114,6 @@ hmi_apis::Common_Result::eType MessageHelper::MobileToHMIResult(
mobile_result);
}
-mobile_api::HMILevel::eType MessageHelper::StringToHMILevel(
- const std::string& hmi_level) {
- return MockMessageHelper::message_helper_mock()->StringToHMILevel(hmi_level);
-}
-
smart_objects::SmartObjectSPtr MessageHelper::CreateDeviceListSO(
const connection_handler::DeviceMap& devices,
const policy::PolicyHandlerInterface& policy_handler,
@@ -286,18 +257,6 @@ void MessageHelper::SendUpdateSDLResponse(const std::string& result,
result, correlation_id, app_mngr);
}
-hmi_apis::Common_Language::eType MessageHelper::CommonLanguageFromString(
- const std::string& language) {
- return MockMessageHelper::message_helper_mock()->CommonLanguageFromString(
- language);
-}
-
-hmi_apis::Common_LightName::eType MessageHelper::CommonLightNameFromString(
- const std::string& lightName) {
- return MockMessageHelper::message_helper_mock()->CommonLightNameFromString(
- lightName);
-}
-
smart_objects::SmartObjectSPtr MessageHelper::CreateModuleInfoSO(
uint32_t function_id, ApplicationManager& app_mngr) {
return MockMessageHelper::message_helper_mock()->CreateModuleInfoSO(
@@ -376,16 +335,6 @@ mobile_apis::Result::eType MessageHelper::VerifyImageFiles(
message, app, app_mngr);
}
-std::string MessageHelper::CommonLanguageToString(
- hmi_apis::Common_Language::eType lang) {
- return MockMessageHelper::message_helper_mock()->CommonLanguageToString(lang);
-}
-
-std::string MessageHelper::MobileLanguageToString(
- mobile_apis::Language::eType lang) {
- return MockMessageHelper::message_helper_mock()->MobileLanguageToString(lang);
-}
-
smart_objects::SmartObjectSPtr MessageHelper::GetBCActivateAppRequestToHMI(
ApplicationConstSharedPtr app,
const policy::PolicyHandlerInterface& policy_handler,
@@ -574,12 +523,6 @@ void MessageHelper::SendSetAppIcon(const uint32_t app_id,
app_id, icon_path, application_manager);
}
-std::string MessageHelper::StringifiedHMILevel(
- const mobile_apis::HMILevel::eType hmi_level) {
- return MockMessageHelper::message_helper_mock()->StringifiedHMILevel(
- hmi_level);
-}
-
std::string MessageHelper::GetDeviceMacAddressForHandle(
const transport_manager::DeviceHandle device_handle,
const ApplicationManager& app_mngr) {
diff --git a/src/components/application_manager/test/policy_handler_test.cc b/src/components/application_manager/test/policy_handler_test.cc
index 35fa7d912e..39ad034d6f 100644
--- a/src/components/application_manager/test/policy_handler_test.cc
+++ b/src/components/application_manager/test/policy_handler_test.cc
@@ -248,8 +248,6 @@ class PolicyHandlerTest : public ::testing::Test {
EXPECT_CALL(*mock_app_, hmi_level(kDefaultWindowId))
.WillOnce(Return(mobile_apis::HMILevel::HMI_NONE));
- EXPECT_CALL(mock_message_helper_, StringToHMILevel(default_hmi_level))
- .WillOnce(Return(hmi_level));
ChangePolicyManagerToMock();
const policy::EncryptionRequired require_encryption;
EXPECT_CALL(*mock_policy_manager_, GetAppEncryptionRequired(kPolicyAppId_))
@@ -593,16 +591,13 @@ TEST_F(PolicyHandlerTest,
TEST_F(PolicyHandlerTest,
OnPermissionsUpdated_MethodWith3Parameters_FromNONE_ToFULL) {
// Set hmi level from NONE to FULL
- const std::string new_kHmiLevel_string = "HMI_FULL";
+ const std::string new_kHmiLevel_string = "FULL";
mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL;
// Check expectations
EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
- EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string))
- .WillOnce(Return(new_hmi_level));
-
EXPECT_CALL(*mock_app_, hmi_level(kDefaultWindowId))
.WillOnce(Return(mobile_apis::HMILevel::HMI_NONE));
ChangePolicyManagerToMock();
@@ -625,7 +620,7 @@ TEST_F(PolicyHandlerTest,
TEST_F(PolicyHandlerTest,
OnPermissionsUpdated_MethodWith3Parameters_FromNONE_ToNotFull) {
// Set hmi level from NONE to Limited
- const std::string new_kHmiLevel_string = "HMI_LIMITED";
+ const std::string new_kHmiLevel_string = "LIMITED";
mobile_apis::HMILevel::eType new_hmi_level =
mobile_apis::HMILevel::HMI_LIMITED;
// Check expectations
@@ -633,9 +628,6 @@ TEST_F(PolicyHandlerTest,
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
- EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string))
- .WillOnce(Return(new_hmi_level));
-
EXPECT_CALL(*mock_app_, hmi_level(kDefaultWindowId))
.WillOnce(Return(mobile_apis::HMILevel::HMI_NONE));
ChangePolicyManagerToMock();
@@ -658,15 +650,12 @@ TEST_F(PolicyHandlerTest,
TEST_F(PolicyHandlerTest,
OnPermissionsUpdated_MethodWith3Parameters_FromNotNONE) {
// Set hmi level from LIMITED to FULL
- std::string new_kHmiLevel_string = "HMI_FULL";
- mobile_apis::HMILevel::eType new_hmi_level = mobile_apis::HMILevel::HMI_FULL;
+ std::string new_kHmiLevel_string = "FULL";
// Check expectations
EXPECT_CALL(app_manager_, application(kDeviceId, kPolicyAppId_))
.Times(2)
.WillRepeatedly(Return(mock_app_));
EXPECT_CALL(*mock_app_, app_id()).WillOnce(Return(kAppId1_));
- EXPECT_CALL(mock_message_helper_, StringToHMILevel(new_kHmiLevel_string))
- .WillOnce(Return(new_hmi_level));
EXPECT_CALL(*mock_app_, hmi_level(kDefaultWindowId))
.WillOnce(Return(mobile_apis::HMILevel::HMI_LIMITED));
@@ -716,8 +705,6 @@ TEST_F(PolicyHandlerTest, CheckPermissions) {
CheckPermissions(
kDeviceId, kPolicyAppId_, kHmiLevel_, kRpc_, kRpc_params, _));
#endif // EXTERNAL_PROPRIETARY_MODE
- EXPECT_CALL(mock_message_helper_, StringifiedHMILevel(hmi_level))
- .WillOnce(Return(kHmiLevel_));
EXPECT_CALL(mock_message_helper_, GetDeviceMacAddressForHandle(device, _))
.WillOnce(Return(kDeviceId));
// Act
@@ -1248,17 +1235,15 @@ TEST_F(PolicyHandlerTest, OnGetUserFriendlyMessage) {
ChangePolicyManagerToMock();
// Check expectations
std::vector<std::string> message_codes;
- const std::string language("ru-ru");
+ const std::string language("RU-RU");
const uint32_t correlation_id = 2;
#ifdef EXTERNAL_PROPRIETARY_MODE
const hmi_apis::Common_Language::eType default_language =
hmi_apis::Common_Language::EN_US;
- const std::string default_language_string = "EN_US";
+ const std::string default_language_string = "EN-US";
application_manager_test::MockHMICapabilities mock_hmi_capabilities;
EXPECT_CALL(app_manager_, hmi_capabilities())
.WillOnce(ReturnRef(mock_hmi_capabilities));
- EXPECT_CALL(mock_message_helper_, CommonLanguageToString(default_language))
- .WillOnce(Return(default_language_string));
EXPECT_CALL(mock_hmi_capabilities, active_ui_language())
.WillOnce(Return(default_language));
EXPECT_CALL(
@@ -3073,16 +3058,12 @@ TEST_F(PolicyHandlerTest, GetAppPropertiesStatus_HybridAppNotChanged_SUCCESS) {
}
TEST_F(PolicyHandlerTest, GetAppPropertiesStatus_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
policy_handler_.LoadPolicyLibrary();
smart_objects::SmartObject properties;
properties[strings::app_id] = kPolicyAppId_;
- EXPECT_CALL(*mock_policy_manager_, GetAppProperties(_, _)).Times(0);
- EXPECT_CALL(*mock_policy_manager_, GetInitialAppData(_, _, _)).Times(0);
const auto expected_app_properties_state =
policy::PolicyHandlerInterface::AppPropertiesState::NO_CHANGES;
EXPECT_EQ(expected_app_properties_state,
@@ -3114,16 +3095,11 @@ TEST_F(PolicyHandlerTest, PushAppIdToPTUQueue_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, PushAppIdToPTUQueue_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- const uint32_t expected_apps_count = 0u;
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_,
- UpdatePTUReadyAppsCount(expected_apps_count))
- .Times(0);
policy_handler_.LoadPolicyLibrary();
policy_handler_.PushAppIdToPTUQueue(kAppId1_);
+ const uint32_t expected_apps_count = 0u;
EXPECT_EQ(expected_apps_count,
policy_handler_.applications_ptu_queue_.size());
}
@@ -3134,16 +3110,6 @@ TEST_F(PolicyHandlerTest, StopRetrySequence_PolicyEnabled_SUCCESS) {
policy_handler_.StopRetrySequence();
}
-TEST_F(PolicyHandlerTest, StopRetrySequence_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, StopRetrySequence()).Times(0);
-
- policy_handler_.LoadPolicyLibrary();
- policy_handler_.StopRetrySequence();
-}
-
TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyEnabled_SUCCESS) {
ChangePolicyManagerToMock();
Json::Value expected_table_data(Json::objectValue);
@@ -3154,10 +3120,7 @@ TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, GetPolicyTableData_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, GetPolicyTableData()).Times(0);
policy_handler_.LoadPolicyLibrary();
@@ -3185,10 +3148,7 @@ TEST_F(PolicyHandlerTest, GetRemovedVehicleDataItems_PolicyEnabled_SUCCESS) {
TEST_F(PolicyHandlerTest, GetRemovedVehicleDataItems_PolicyDisabled_FAIL) {
using rpc::policy_table_interface_base::VehicleDataItem;
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, GetRemovedVehicleDataItems()).Times(0);
policy_handler_.LoadPolicyLibrary();
@@ -3226,16 +3186,6 @@ TEST_F(PolicyHandlerTest, OnLocalAppAdded_PolicyEnabled_SUCCESS) {
policy_handler_.OnLocalAppAdded();
}
-TEST_F(PolicyHandlerTest, OnLocalAppAdded_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- EXPECT_CALL(*mock_policy_manager_, OnLocalAppAdded()).Times(0);
-
- policy_handler_.LoadPolicyLibrary();
- policy_handler_.OnLocalAppAdded();
-}
-
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyEnabled_SUCCESS) {
ChangePolicyManagerToMock();
@@ -3255,14 +3205,10 @@ TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyEnabled_SUCCESS) {
}
TEST_F(PolicyHandlerTest, OnPermissionsUpdated_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
policy_handler_.LoadPolicyLibrary();
EXPECT_CALL(app_manager_, application(kDeviceId_, kPolicyAppId_)).Times(0);
- EXPECT_CALL(*mock_policy_manager_, GetAppEncryptionRequired(kPolicyAppId_))
- .Times(0);
EXPECT_CALL(*mock_app_, app_id()).Times(0);
Permissions app_permissions;
@@ -3281,16 +3227,6 @@ TEST_F(PolicyHandlerTest, IsNewApplication_PolicyEnabled_SUCCESS) {
EXPECT_TRUE(policy_handler_.IsNewApplication(kPolicyAppId_));
}
-TEST_F(PolicyHandlerTest, IsNewApplication_PolicyDisabled_FAIL) {
- ChangePolicyManagerToMock();
-
- EXPECT_CALL(policy_settings_, enable_policy()).WillOnce(Return(false));
- policy_handler_.LoadPolicyLibrary();
-
- EXPECT_CALL(*mock_policy_manager_, IsNewApplication(kPolicyAppId_)).Times(0);
- EXPECT_FALSE(policy_handler_.IsNewApplication(kPolicyAppId_));
-}
-
} // namespace policy_handler_test
} // namespace components
} // namespace test
diff --git a/src/components/application_manager/test/resumption/resume_ctrl_test.cc b/src/components/application_manager/test/resumption/resume_ctrl_test.cc
index ded6aa956e..8d228240d2 100644
--- a/src/components/application_manager/test/resumption/resume_ctrl_test.cc
+++ b/src/components/application_manager/test/resumption/resume_ctrl_test.cc
@@ -251,25 +251,6 @@ class ResumeCtrlTest : public ::testing::Test {
* @brief Group of tests which check starting resumption with different data
*/
-TEST_F(ResumeCtrlTest, StartResumption_AppWithGrammarId) {
- smart_objects::SmartObject saved_app;
- saved_app[application_manager::strings::hash_id] = kHash_;
- saved_app[application_manager::strings::grammar_id] = kTestGrammarId_;
-
- // Check RestoreApplicationData
- GetInfoFromApp();
- ON_CALL(mock_app_mngr_, GetDefaultHmiLevel(const_app_))
- .WillByDefault(Return(kDefaultTestLevel_));
- ON_CALL(*mock_storage_,
- GetSavedApplication(kTestPolicyAppId_, kMacAddress_, _))
- .WillByDefault(DoAll(SetArgReferee<2>(saved_app), Return(true)));
-
- EXPECT_CALL(*mock_app_, set_grammar_id(kTestGrammarId_));
-
- const bool res = res_ctrl_->StartResumption(mock_app_, kHash_, callback_);
- EXPECT_TRUE(res);
-}
-
MATCHER_P4(CheckAppFile, is_persistent, is_download, file_name, file_type, "") {
application_manager::AppFile app_file = arg;
return app_file.is_persistent == is_persistent &&
@@ -986,8 +967,7 @@ TEST_F(ResumeCtrlTest, RestoreAppHMIState_RestoreHMILevelFull) {
ON_CALL(mock_app_mngr_, GetUserConsentForDevice("12345"))
.WillByDefault(Return(policy::kDeviceAllowed));
- const bool res = res_ctrl_->RestoreAppHMIState(mock_app_);
- EXPECT_TRUE(res);
+ res_ctrl_->RestoreAppHMIState(mock_app_);
}
TEST_F(ResumeCtrlTest, SetupDefaultHMILevel) {
diff --git a/src/components/application_manager/test/resumption/resumption_data_test.cc b/src/components/application_manager/test/resumption/resumption_data_test.cc
index 12a38e1bc4..d5228934db 100644
--- a/src/components/application_manager/test/resumption/resumption_data_test.cc
+++ b/src/components/application_manager/test/resumption/resumption_data_test.cc
@@ -176,7 +176,7 @@ void ResumptionDataTest::CheckChoiceSet(sm::SmartObject& res_list) {
sm::SmartObject command = res_list[i][am::strings::choice_set][j];
EXPECT_EQ(i + j, command[am::strings::choice_id].asUInt());
char numb[12];
- std::snprintf(numb, 12, "%d", i + j);
+ std::snprintf(numb, 12, "%u", i + j);
std::string test_choice =
(*test_choiceset_map[i])[am::strings::choice_set][j]
[am::strings::vr_commands][0]
@@ -340,11 +340,10 @@ void ResumptionDataTest::CheckTimeoutPrompt(
void ResumptionDataTest::CheckVRHelp(sm::SmartObject& res_list) {
std::string text;
- int position;
for (uint i = 0; i < kCountOfVrhelptitle_; ++i) {
text = (*vr_help_)[i][am::strings::text].asString();
EXPECT_EQ(text, res_list[i][am::strings::text].asString());
- position = (*vr_help_)[i][am::strings::position].asInt();
+ int position = (*vr_help_)[i][am::strings::position].asInt();
EXPECT_EQ(position, res_list[i][am::strings::position].asInt());
}
}
@@ -517,7 +516,7 @@ void ResumptionDataTest::SetCommands() {
sm::SmartObject sm_icon;
for (uint32_t i = 0; i < kCountOfCommands_; ++i) {
char numb[12];
- std::snprintf(numb, 12, "%d", i);
+ std::snprintf(numb, 12, "%u", i);
sm_comm[am::strings::cmd_id] = i;
sm_comm[am::strings::menu_params][am::strings::position] = i;
sm_comm[am::strings::menu_params][am::hmi_request::parent_id] = i;
@@ -526,7 +525,7 @@ void ResumptionDataTest::SetCommands() {
for (uint32_t j = 0; j < kCountOfChoice_; ++j) {
char vr[12];
- std::snprintf(vr, 12, "%d", i + j);
+ std::snprintf(vr, 12, "%u", i + j);
vr_commandsvector[j] = "VrCommand " + std::string(vr);
}
sm_comm[am::strings::vr_commands] = vr_commandsvector;
@@ -544,7 +543,7 @@ void ResumptionDataTest::SetSubmenues() {
sm::SmartObject sm_comm;
for (uint32_t i = 10; i < kCountOfSubmenues_ + 10; ++i) {
char numb[12];
- std::snprintf(numb, 12, "%d", i);
+ std::snprintf(numb, 12, "%u", i);
sm_comm[am::strings::menu_id] = i;
sm_comm[am::strings::position] = i;
sm_comm[am::strings::menu_name] = "SubMenu" + std::string(numb);
@@ -563,7 +562,7 @@ void ResumptionDataTest::SetChoiceSet() {
for (uint32_t i = 0; i < kCountOfChoiceSets_; ++i) {
for (uint32_t j = 0; j < kCountOfChoice_; ++j) {
char numb[12];
- std::snprintf(numb, 12, "%d", i + j);
+ std::snprintf(numb, 12, "%u", i + j);
choice[am::strings::choice_id] = i + j;
vr_commandsvector[0] = "ChoiceSet VrCommand " + std::string(numb);
@@ -596,11 +595,10 @@ void ResumptionDataTest::SetChoiceSet() {
void ResumptionDataTest::SetAppFiles() {
am::AppFile test_file;
- int file_types;
for (uint i = 0; i < kCountOfFiles_; ++i) {
char numb[12];
std::snprintf(numb, 12, "%d", i);
- file_types = i;
+ int file_types = i;
test_file.is_persistent = true;
test_file.is_download_complete = true;
test_file.file_type = static_cast<FileType::eType>(file_types);
diff --git a/src/components/application_manager/test/state_controller/state_controller_test.cc b/src/components/application_manager/test/state_controller/state_controller_test.cc
index 374ad611ef..16e8bff8b8 100644
--- a/src/components/application_manager/test/state_controller/state_controller_test.cc
+++ b/src/components/application_manager/test/state_controller/state_controller_test.cc
@@ -1539,7 +1539,7 @@ TEST_F(StateControllerImplTest, MoveSimpleAppToValidStates) {
namespace AudioStreamingState = mobile_apis::AudioStreamingState;
namespace VideoStreamingState = mobile_apis::VideoStreamingState;
namespace SystemContext = mobile_apis::SystemContext;
- HmiStatePtr initial_state = createHmiState(HMILevel::INVALID_ENUM,
+ HmiStatePtr initial_state = createHmiState(HMILevel::HMI_NONE,
AudioStreamingState::INVALID_ENUM,
VideoStreamingState::INVALID_ENUM,
SystemContext::INVALID_ENUM);
@@ -1580,7 +1580,7 @@ TEST_F(StateControllerImplTest, MoveAudioNotResumeAppToValidStates) {
NiceMock<application_manager_test::MockApplication>* audio_app_mock =
media_navi_vc_app_ptr_;
- HmiStatePtr initial_state = createHmiState(HMILevel::INVALID_ENUM,
+ HmiStatePtr initial_state = createHmiState(HMILevel::HMI_NONE,
AudioStreamingState::INVALID_ENUM,
VideoStreamingState::INVALID_ENUM,
SystemContext::INVALID_ENUM);
@@ -1619,7 +1619,7 @@ TEST_F(StateControllerImplTest, MoveAudioResumeAppToValidStates) {
NiceMock<application_manager_test::MockApplication>* audio_app_mock =
media_navi_vc_app_ptr_;
- HmiStatePtr initial_state = createHmiState(HMILevel::INVALID_ENUM,
+ HmiStatePtr initial_state = createHmiState(HMILevel::HMI_NONE,
AudioStreamingState::INVALID_ENUM,
VideoStreamingState::INVALID_ENUM,
SystemContext::INVALID_ENUM);
diff --git a/src/components/config_profile/src/ini_file.cc b/src/components/config_profile/src/ini_file.cc
index f549f4b915..dd64f48afa 100644
--- a/src/components/config_profile/src/ini_file.cc
+++ b/src/components/config_profile/src/ini_file.cc
@@ -152,13 +152,15 @@ char* ini_read_value(const char* fname,
return NULL;
}
+#ifdef BUILD_TESTS
+// cppcheck-suppress unusedFunction //Used in unit tests
char ini_write_value(const char* fname,
const char* chapter,
const char* item,
const char* value,
uint8_t flag) {
FILE *rd_fp, *wr_fp = 0;
- uint16_t i, cr_count;
+ uint16_t cr_count;
int32_t wr_result;
bool chapter_found = false;
bool value_written = false;
@@ -186,11 +188,9 @@ char ini_write_value(const char* fname,
#if USE_MKSTEMP
{
const char* temp_str = "./";
- int32_t fd = -1;
if (temp_str) {
snprintf(temp_fname, PATH_MAX, "%s/ini.XXXXXX", temp_str);
-
- fd = mkstemp(temp_fname);
+ int32_t fd = mkstemp(temp_fname);
if (-1 == fd) {
fclose(rd_fp);
return FALSE;
@@ -244,7 +244,7 @@ char ini_write_value(const char* fname,
first chapter is significant */
value_written = true;
} else if (result == INI_RIGHT_ITEM) {
- for (i = 0; i < cr_count; i++)
+ for (uint16_t i = 0; i < cr_count; i++)
fprintf(wr_fp, "\n");
cr_count = 0;
wr_result = fprintf(wr_fp, "%s=%s\n", item, value);
@@ -286,10 +286,10 @@ char ini_write_value(const char* fname,
return (value_written);
}
+#endif // BUILD_TESTS
Ini_search_id ini_parse_line(const char* line, const char* tag, char* value) {
const char* line_ptr;
- char* temp_ptr;
char temp_str[INI_LINE_LEN] = "";
*temp_str = '\0';
@@ -332,7 +332,7 @@ Ini_search_id ini_parse_line(const char* line, const char* tag, char* value) {
return INI_NOTHING;
snprintf(temp_str, INI_LINE_LEN, "%s", line_ptr);
- temp_ptr = strrchr(temp_str, ']');
+ char* temp_ptr = strrchr(temp_str, ']');
if (NULL == temp_ptr) {
return INI_NOTHING;
} else {
diff --git a/src/components/config_profile/src/profile.cc b/src/components/config_profile/src/profile.cc
index a86d09da94..d9204acf90 100644
--- a/src/components/config_profile/src/profile.cc
+++ b/src/components/config_profile/src/profile.cc
@@ -1739,8 +1739,7 @@ void Profile::UpdateValues() {
help_prompt_.clear();
std::string help_prompt_value;
if (ReadValue(&help_prompt_value, kGlobalPropertiesSection, kHelpPromptKey)) {
- char* str = NULL;
- str = strtok(const_cast<char*>(help_prompt_value.c_str()), ",");
+ char* str = strtok(const_cast<char*>(help_prompt_value.c_str()), ",");
while (str != NULL) {
// Default prompt should have delimiter included for each item
const std::string prompt_item = std::string(str) + tts_delimiter_;
@@ -1759,8 +1758,7 @@ void Profile::UpdateValues() {
std::string timeout_prompt_value;
if (ReadValue(
&timeout_prompt_value, kGlobalPropertiesSection, kTimeoutPromptKey)) {
- char* str = NULL;
- str = strtok(const_cast<char*>(timeout_prompt_value.c_str()), ",");
+ char* str = strtok(const_cast<char*>(timeout_prompt_value.c_str()), ",");
while (str != NULL) {
// Default prompt should have delimiter included for each item
const std::string prompt_item = std::string(str) + tts_delimiter_;
@@ -1784,8 +1782,7 @@ void Profile::UpdateValues() {
vr_commands_.clear();
std::string vr_help_command_value;
if (ReadValue(&vr_help_command_value, kVrCommandsSection, kHelpCommandKey)) {
- char* str = NULL;
- str = strtok(const_cast<char*>(vr_help_command_value.c_str()), ",");
+ char* str = strtok(const_cast<char*>(vr_help_command_value.c_str()), ",");
while (str != NULL) {
const std::string vr_item = str;
vr_commands_.push_back(vr_item);
@@ -1867,8 +1864,8 @@ void Profile::UpdateValues() {
"",
kMainSection,
kSupportedDiagModesKey)) {
- char* str = NULL;
- str = strtok(const_cast<char*>(supported_diag_modes_value.c_str()), ",");
+ char* str =
+ strtok(const_cast<char*>(supported_diag_modes_value.c_str()), ",");
while (str != NULL) {
errno = 0;
uint32_t user_value = strtol(str, NULL, 16);
diff --git a/src/components/connection_handler/include/connection_handler/connection.h b/src/components/connection_handler/include/connection_handler/connection.h
index 1a93509aca..8b286e1309 100644
--- a/src/components/connection_handler/include/connection_handler/connection.h
+++ b/src/components/connection_handler/include/connection_handler/connection.h
@@ -177,6 +177,17 @@ class Connection {
uint32_t RemoveSession(uint8_t session_id);
/**
+ * @brief Called upon final message being sent for a session
+ */
+ void OnFinalMessageCallback();
+
+ /**
+ * @brief Check whether final message was sent from this connection
+ * @return true if final message was sent by any session of this connection
+ */
+ bool IsFinalMessageSent() const;
+
+ /**
* @brief Adds uprotected service to session or
* check protection to service has been started before
* @param session_id session ID
@@ -378,6 +389,7 @@ class Connection {
HeartBeatMonitor* heartbeat_monitor_;
uint32_t heartbeat_timeout_;
threads::Thread* heart_beat_monitor_thread_;
+ bool final_message_sent_;
DISALLOW_COPY_AND_ASSIGN(Connection);
};
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 fb859330b9..3bfa5b34b8 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
@@ -35,6 +35,7 @@
#include <list>
#include <map>
+#include <set>
#include <string>
#include <vector>
@@ -272,6 +273,8 @@ class ConnectionHandlerImpl
*/
void OnMalformedMessageCallback(const uint32_t& connection_key) OVERRIDE;
+ void OnFinalMessageCallback(const uint32_t& connection_key) OVERRIDE;
+
/**
* @brief Converts connection handle to transport type string used in
* smartDeviceLink.ini file, e.g. "TCP_WIFI"
@@ -606,10 +609,10 @@ class ConnectionHandlerImpl
* \note This is invoked only once but can be invoked by multiple threads.
* Also it can be invoked before OnServiceStartedCallback() returns.
**/
- virtual void NotifyServiceStartedResult(
- uint32_t session_key,
- bool result,
- std::vector<std::string>& rejected_params);
+ void NotifyServiceStartedResult(uint32_t session_key,
+ bool result,
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) OVERRIDE;
/**
* \brief Called when secondary transport with given session ID is established
@@ -646,6 +649,10 @@ class ConnectionHandlerImpl
**/
void RemoveConnection(const ConnectionHandle connection_handle);
+ /**
+ * @brief Called when connection is closed.
+ * @param connection_id Connection unique identifier.
+ */
void OnConnectionEnded(const transport_manager::ConnectionUID connection_id);
const uint8_t GetSessionIdFromSecondaryTransport(
diff --git a/src/components/connection_handler/src/connection.cc b/src/components/connection_handler/src/connection.cc
index 14e2b83848..5bd72773c2 100644
--- a/src/components/connection_handler/src/connection.cc
+++ b/src/components/connection_handler/src/connection.cc
@@ -82,7 +82,8 @@ Connection::Connection(ConnectionHandle connection_handle,
, connection_handle_(connection_handle)
, connection_device_handle_(connection_device_handle)
, primary_connection_handle_(0)
- , heartbeat_timeout_(heartbeat_timeout) {
+ , heartbeat_timeout_(heartbeat_timeout)
+ , final_message_sent_(false) {
SDL_LOG_AUTO_TRACE();
DCHECK(connection_handler_);
@@ -110,7 +111,7 @@ Connection::~Connection() {
<< static_cast<int>(session_it->first)
<< " from Session/Connection Map in Connection Destructor");
connection_handler_->RemoveSession(session_it->first);
- session_it++;
+ ++session_it;
}
session_map_.clear();
@@ -162,6 +163,15 @@ uint32_t Connection::RemoveSession(uint8_t session_id) {
return session_id;
}
+void Connection::OnFinalMessageCallback() {
+ SDL_LOG_AUTO_TRACE();
+ final_message_sent_ = true;
+}
+
+bool Connection::IsFinalMessageSent() const {
+ return final_message_sent_;
+}
+
bool Connection::AddNewService(uint8_t session_id,
protocol_handler::ServiceType service_type,
const bool request_protection,
@@ -324,7 +334,7 @@ uint8_t Connection::RemoveSecondaryServices(
removed_services_list.push_back(service_it->service_type);
service_it = service_list.erase(service_it);
} else {
- service_it++;
+ ++service_it;
}
}
diff --git a/src/components/connection_handler/src/connection_handler_impl.cc b/src/components/connection_handler/src/connection_handler_impl.cc
index b9d1de8332..549450dbe0 100644
--- a/src/components/connection_handler/src/connection_handler_impl.cc
+++ b/src/components/connection_handler/src/connection_handler_impl.cc
@@ -215,7 +215,7 @@ namespace {
struct DeviceFinder {
explicit DeviceFinder(const std::string& device_uid)
: device_uid_(device_uid) {}
- bool operator()(const DeviceMap::value_type& device) {
+ bool operator()(const DeviceMap::value_type& device) const {
return device_uid_ == device.second.mac_address();
}
@@ -366,7 +366,7 @@ void ConnectionHandlerImpl::OnUnexpectedDisconnect(
transport_manager::ConnectionUID connection_id,
const transport_manager::CommunicationError& error) {
SDL_LOG_AUTO_TRACE();
-
+ UNUSED(error);
OnConnectionEnded(connection_id);
}
@@ -403,9 +403,8 @@ bool AllowProtection(const ConnectionHandlerSettings& settings,
if (std::find(force_unprotected_list.begin(),
force_unprotected_list.end(),
service_type) != force_unprotected_list.end()) {
- SDL_LOG_ERROR(
-
- "Service " << static_cast<int>(service_type) << " shall be protected");
+ SDL_LOG_ERROR("Service " << static_cast<int>(service_type)
+ << " shall be protected");
return false;
}
SDL_LOG_DEBUG("Service " << static_cast<int>(service_type) << " allowed");
@@ -465,10 +464,21 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
return;
}
#endif // ENABLE_SECURITY
- sync_primitives::AutoReadLock lock(connection_list_lock_);
- ConnectionList::iterator it =
- connection_list_.find(primary_connection_handle);
- if (connection_list_.end() == it) {
+
+ auto find_connection =
+ [this](const transport_manager::ConnectionUID& primary_connection_handle)
+ -> Connection* {
+ sync_primitives::AutoReadLock lock(connection_list_lock_);
+ auto it = connection_list_.find(primary_connection_handle);
+ if (it != connection_list_.end()) {
+ return it->second;
+ }
+ return nullptr;
+ };
+
+ Connection* connection = find_connection(primary_connection_handle);
+
+ if (!connection) {
SDL_LOG_ERROR("Unknown connection!");
protocol_handler_->NotifySessionStarted(
context,
@@ -477,7 +487,6 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
return;
}
- Connection* connection = it->second;
context.is_new_service_ =
!connection->SessionServiceExists(session_id, service_type);
@@ -510,7 +519,7 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
context,
rejected_params,
"Cannot start " +
- std::string(is_protected ? "a protected" : " an unprotected") +
+ std::string(is_protected ? "a protected" : "an unprotected") +
" service of type " + std::to_string(service_type) + ". " +
err_reason);
return;
@@ -548,7 +557,8 @@ void ConnectionHandlerImpl::OnSessionStartedCallback(
void ConnectionHandlerImpl::NotifyServiceStartedResult(
uint32_t session_key,
bool result,
- std::vector<std::string>& rejected_params) {
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) {
SDL_LOG_AUTO_TRACE();
protocol_handler::SessionContext context;
@@ -589,7 +599,7 @@ void ConnectionHandlerImpl::NotifyServiceStartedResult(
}
if (protocol_handler_ != NULL) {
- protocol_handler_->NotifySessionStarted(context, rejected_params);
+ protocol_handler_->NotifySessionStarted(context, rejected_params, reason);
}
}
@@ -665,6 +675,25 @@ void ConnectionHandlerImpl::OnMalformedMessageCallback(
CloseConnection(connection_handle);
}
+void ConnectionHandlerImpl::OnFinalMessageCallback(
+ const uint32_t& connection_key) {
+ SDL_LOG_AUTO_TRACE();
+
+ transport_manager::ConnectionUID connection_handle = 0;
+ uint8_t session_id = 0;
+ PairFromKey(connection_key, &connection_handle, &session_id);
+
+ sync_primitives::AutoWriteLock connection_list_lock(connection_list_lock_);
+ ConnectionList::iterator connection_it =
+ connection_list_.find(connection_handle);
+
+ if (connection_list_.end() != connection_it) {
+ SDL_LOG_DEBUG("OnFinalMessageCallback found connection "
+ << connection_handle);
+ connection_it->second->OnFinalMessageCallback();
+ }
+}
+
uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
const transport_manager::ConnectionUID connection_handle,
const uint8_t session_id,
@@ -719,16 +748,14 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
KeyFromPair(primary_connection_handle, session_id);
if (protocol_handler::kRpc == service_type) {
- SDL_LOG_INFO(
-
- "Session " << static_cast<uint32_t>(session_id) << " to be removed");
+ SDL_LOG_INFO("Session " << static_cast<uint32_t>(session_id)
+ << " to be removed");
// old version of protocol doesn't support hash
if (protocol_handler::HASH_ID_NOT_SUPPORTED != *hashCode) {
if (protocol_handler::HASH_ID_WRONG == *hashCode ||
session_key != *hashCode) {
- SDL_LOG_WARN(
-
- "Wrong hash_id for session " << static_cast<uint32_t>(session_id));
+ SDL_LOG_WARN("Wrong hash_id for session "
+ << static_cast<uint32_t>(session_id));
*hashCode = protocol_handler::HASH_ID_WRONG;
if (err_reason) {
@@ -748,13 +775,11 @@ uint32_t ConnectionHandlerImpl::OnSessionEndedCallback(
return 0;
}
} else {
- SDL_LOG_INFO(
-
- "Service " << static_cast<uint32_t>(service_type) << " to be removed");
+ SDL_LOG_INFO("Service " << static_cast<uint32_t>(service_type)
+ << " to be removed");
if (!connection->RemoveService(session_id, service_type)) {
- SDL_LOG_WARN(
-
- "Couldn't remove service " << static_cast<uint32_t>(service_type));
+ SDL_LOG_WARN("Couldn't remove service "
+ << static_cast<uint32_t>(service_type));
if (err_reason) {
*err_reason = "Couldn't remove service " +
std::to_string(static_cast<uint32_t>(service_type));
@@ -944,6 +969,8 @@ ConnectionHandlerImpl::TransportTypeProfileStringFromDeviceHandle(
return std::string("IAP_CARPLAY");
} else if (connection_type == "CLOUD_WEBSOCKET") {
return std::string("WEBSOCKET");
+ } else if (connection_type == "WEBENGINE_WEBSOCKET") {
+ return std::string("WEBENGINE");
#ifdef BUILD_TESTS
} else if (connection_type == "BTMAC") {
return std::string("BTMAC");
@@ -976,11 +1003,10 @@ void ConnectionHandlerImpl::PairFromKey(
uint8_t* session_id) const {
*connection_handle = key & 0xFF00FFFF;
*session_id = key >> 16;
- SDL_LOG_DEBUG(
-
- "ConnectionHandle:" << static_cast<int32_t>(*connection_handle)
- << " Session:" << static_cast<int32_t>(*session_id)
- << " for key:" << static_cast<int32_t>(key));
+ SDL_LOG_DEBUG("ConnectionHandle: "
+ << static_cast<int32_t>(*connection_handle)
+ << " Session: " << static_cast<int32_t>(*session_id)
+ << " for key: " << static_cast<int32_t>(key));
}
int32_t ConnectionHandlerImpl::GetDataOnSessionKey(
@@ -1157,7 +1183,7 @@ const uint8_t ConnectionHandlerImpl::GetSessionIdFromSecondaryTransport(
transport_manager::ConnectionUID secondary_transport_id) const {
sync_primitives::AutoLock auto_lock(session_connection_map_lock_ptr_);
SessionConnectionMap::const_iterator it = session_connection_map_.begin();
- for (; session_connection_map_.end() != it; it++) {
+ for (; session_connection_map_.end() != it; ++it) {
SessionTransports st = it->second;
if (st.secondary_transport == secondary_transport_id) {
return it->first;
@@ -1563,9 +1589,8 @@ void ConnectionHandlerImpl::CloseSession(ConnectionHandle connection_handle,
return;
}
- SDL_LOG_DEBUG(
-
- "Session with id: " << session_id << " has been closed successfully");
+ SDL_LOG_DEBUG("Session with id: " << session_id
+ << " has been closed successfully");
}
void ConnectionHandlerImpl::CloseConnectionSessions(
@@ -1710,6 +1735,10 @@ void ConnectionHandlerImpl::OnConnectionEnded(
ending_connection_ = connection.get();
const SessionMap session_map = connection->session_map();
+ const CloseSessionReason close_reason =
+ connection->IsFinalMessageSent() ? CloseSessionReason::kFinalMessage
+ : CloseSessionReason::kCommon;
+
for (SessionMap::const_iterator session_it = session_map.begin();
session_map.end() != session_it;
++session_it) {
@@ -1725,9 +1754,7 @@ void ConnectionHandlerImpl::OnConnectionEnded(
service_list.rbegin();
for (; service_list_itr != service_list.rend(); ++service_list_itr) {
connection_handler_observer_->OnServiceEndedCallback(
- session_key,
- service_list_itr->service_type,
- CloseSessionReason::kCommon);
+ session_key, service_list_itr->service_type, close_reason);
}
}
ending_connection_ = NULL;
diff --git a/src/components/connection_handler/src/device.cc b/src/components/connection_handler/src/device.cc
index c831c0b2d2..94e7226f84 100644
--- a/src/components/connection_handler/src/device.cc
+++ b/src/components/connection_handler/src/device.cc
@@ -54,9 +54,8 @@ Device::Device(DeviceHandle device_handle,
, mac_address_(mac_address)
, connection_type_(connection_type) {
mac_address_ = encryption::MakeHash(mac_address);
- SDL_LOG_DEBUG(
-
- "Device: MAC address - " << mac_address << ", hash - " << mac_address_);
+ SDL_LOG_DEBUG("Device: MAC address - " << mac_address << ", hash - "
+ << mac_address_);
}
DeviceHandle Device::device_handle() const {
diff --git a/src/components/connection_handler/src/heartbeat_monitor.cc b/src/components/connection_handler/src/heartbeat_monitor.cc
index e53e914b0a..f3e2da2696 100644
--- a/src/components/connection_handler/src/heartbeat_monitor.cc
+++ b/src/components/connection_handler/src/heartbeat_monitor.cc
@@ -78,9 +78,8 @@ void HeartBeatMonitor::Process() {
void HeartBeatMonitor::threadMain() {
AutoLock main_lock(main_thread_lock_);
- SDL_LOG_DEBUG(
-
- "Start heart beat monitor. Timeout is " << default_heartbeat_timeout_);
+ SDL_LOG_DEBUG("Start heart beat monitor. Timeout is "
+ << default_heartbeat_timeout_);
while (run_) {
heartbeat_monitor_.WaitFor(main_lock, kDefaultCycleTimeout);
Process();
diff --git a/src/components/connection_handler/test/connection_handler_impl_test.cc b/src/components/connection_handler/test/connection_handler_impl_test.cc
index 5a8feda2db..9305eee2ee 100644
--- a/src/components/connection_handler/test/connection_handler_impl_test.cc
+++ b/src/components/connection_handler/test/connection_handler_impl_test.cc
@@ -65,9 +65,9 @@ using ::testing::ReturnRefOfCopy;
using ::testing::SaveArg;
using ::testing::SaveArgPointee;
-// custom action to call a member function with 3 arguments
-ACTION_P5(InvokeMemberFuncWithArg3, ptr, memberFunc, a, b, c) {
- (ptr->*memberFunc)(a, b, c);
+// custom action to call a member function with 4 arguments
+ACTION_P6(InvokeMemberFuncWithArg4, ptr, memberFunc, a, b, c, d) {
+ (ptr->*memberFunc)(a, b, c, d);
}
namespace {
@@ -855,6 +855,24 @@ TEST_F(ConnectionHandlerTest, OnConnectionClosed) {
connection_handler_->OnConnectionClosed(uid_);
}
+TEST_F(ConnectionHandlerTest, OnFinalMessageCallback_OnConnectionClosed) {
+ AddTestDeviceConnection();
+ AddTestSession();
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(connection_key_, kBulk, kFinalMessage));
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(connection_key_, kRpc, kFinalMessage));
+
+ connection_handler_->OnFinalMessageCallback(connection_key_);
+ connection_handler_->OnConnectionClosed(uid_);
+}
+
TEST_F(ConnectionHandlerTest, OnUnexpectedDisconnect) {
AddTestDeviceConnection();
AddTestSession();
@@ -874,6 +892,27 @@ TEST_F(ConnectionHandlerTest, OnUnexpectedDisconnect) {
connection_handler_->OnUnexpectedDisconnect(uid_, err);
}
+TEST_F(ConnectionHandlerTest, OnFinalMessageCallback_OnUnexpectedDisconnect) {
+ AddTestDeviceConnection();
+ AddTestSession();
+
+ connection_handler_test::MockConnectionHandlerObserver
+ mock_connection_handler_observer;
+ connection_handler_->set_connection_handler_observer(
+ &mock_connection_handler_observer);
+
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(
+ connection_key_, kBulk, CloseSessionReason::kFinalMessage));
+ EXPECT_CALL(mock_connection_handler_observer,
+ OnServiceEndedCallback(
+ connection_key_, kRpc, CloseSessionReason::kFinalMessage));
+
+ connection_handler_->OnFinalMessageCallback(connection_key_);
+ transport_manager::CommunicationError err;
+ connection_handler_->OnUnexpectedDisconnect(uid_, err);
+}
+
TEST_F(ConnectionHandlerTest, ConnectToDevice) {
// Precondition
const uint32_t dev_handle1 = 1;
@@ -1307,16 +1346,18 @@ TEST_F(ConnectionHandlerTest, SessionStarted_WithRpc) {
connection_handler_->set_connection_handler_observer(
&mock_connection_handler_observer);
std::vector<std::string> empty;
+ std::string reason;
uint32_t session_key =
connection_handler_->KeyFromPair(uid_, out_context_.initial_session_id_);
EXPECT_CALL(mock_connection_handler_observer,
OnServiceStartedCallback(device_handle_, _, kRpc, NULL))
- .WillOnce(InvokeMemberFuncWithArg3(
+ .WillOnce(InvokeMemberFuncWithArg4(
connection_handler_,
&ConnectionHandler::NotifyServiceStartedResult,
session_key,
true,
- ByRef(empty)));
+ ByRef(empty),
+ reason));
connection_handler_->set_protocol_handler(&mock_protocol_handler_);
EXPECT_CALL(mock_protocol_handler_, NotifySessionStarted(_, _, _))
@@ -1345,15 +1386,17 @@ TEST_F(ConnectionHandlerTest, ServiceStarted_Video_SUCCESS) {
uint32_t session_key =
connection_handler_->KeyFromPair(uid_, out_context_.new_session_id_);
std::vector<std::string> empty;
+ std::string reason;
EXPECT_CALL(mock_connection_handler_observer,
OnServiceStartedCallback(
device_handle_, session_key, kMobileNav, dummy_params))
- .WillOnce(InvokeMemberFuncWithArg3(
+ .WillOnce(InvokeMemberFuncWithArg4(
connection_handler_,
&ConnectionHandler::NotifyServiceStartedResult,
session_key,
true,
- ByRef(empty)));
+ ByRef(empty),
+ reason));
// confirm that NotifySessionStarted() is called
connection_handler_->set_protocol_handler(&mock_protocol_handler_);
@@ -1385,15 +1428,17 @@ TEST_F(ConnectionHandlerTest, ServiceStarted_Video_FAILURE) {
uint32_t session_key =
connection_handler_->KeyFromPair(uid_, out_context_.new_session_id_);
std::vector<std::string> empty;
+ std::string reason;
EXPECT_CALL(mock_connection_handler_observer,
OnServiceStartedCallback(
device_handle_, session_key, kMobileNav, dummy_params))
- .WillOnce(InvokeMemberFuncWithArg3(
+ .WillOnce(InvokeMemberFuncWithArg4(
connection_handler_,
&ConnectionHandler::NotifyServiceStartedResult,
session_key,
false,
- ByRef(empty)));
+ ByRef(empty),
+ reason));
// confirm that NotifySessionStarted() is called
connection_handler_->set_protocol_handler(&mock_protocol_handler_);
@@ -1455,6 +1500,8 @@ TEST_F(ConnectionHandlerTest, ServiceStarted_Video_Multiple) {
connection_handler_->KeyFromPair(uid_, context_second.new_session_id_);
std::vector<std::string> empty;
+ std::string reason;
+
ChangeProtocol(uid_,
context_first.new_session_id_,
protocol_handler::PROTOCOL_VERSION_3);
@@ -1472,18 +1519,20 @@ TEST_F(ConnectionHandlerTest, ServiceStarted_Video_Multiple) {
device_handle_, session_key2, kMobileNav, dummy_params))
// call NotifyServiceStartedResult() twice, first for the second session
// then for the first session
- .WillOnce(DoAll(InvokeMemberFuncWithArg3(
+ .WillOnce(DoAll(InvokeMemberFuncWithArg4(
connection_handler_,
&ConnectionHandler::NotifyServiceStartedResult,
session_key2,
false,
- ByRef(empty)),
- InvokeMemberFuncWithArg3(
+ ByRef(empty),
+ reason),
+ InvokeMemberFuncWithArg4(
connection_handler_,
&ConnectionHandler::NotifyServiceStartedResult,
session_key1,
true,
- ByRef(empty))));
+ ByRef(empty),
+ reason)));
// verify that connection handler will not mix up the two results
SessionContext new_context_first, new_context_second;
diff --git a/src/components/formatters/src/CFormatterJsonBase.cc b/src/components/formatters/src/CFormatterJsonBase.cc
index e5354d5326..d88ffc7158 100644
--- a/src/components/formatters/src/CFormatterJsonBase.cc
+++ b/src/components/formatters/src/CFormatterJsonBase.cc
@@ -95,7 +95,7 @@ void ns_smart_device_link::ns_json_handler::formatters::CFormatterJsonBase::
for (std::set<std::string>::const_iterator key = keys.begin();
key != keys.end();
- key++) {
+ ++key) {
Json::Value value(Json::nullValue);
objToJsonValue(obj.getElement(*key), value);
diff --git a/src/components/formatters/test/include/formatters/SmartFactoryTestHelper.h b/src/components/formatters/test/include/formatters/SmartFactoryTestHelper.h
index 08962db120..d937849b5d 100644
--- a/src/components/formatters/test/include/formatters/SmartFactoryTestHelper.h
+++ b/src/components/formatters/test/include/formatters/SmartFactoryTestHelper.h
@@ -110,10 +110,6 @@ class CSmartFactoryTest : public CSmartFactory<FunctionIdTest::eType,
std::shared_ptr<ISchemaItem> >
TStructsSchemaItems;
- static std::shared_ptr<ISchemaItem> ProvideObjectSchemaItemForStruct(
- TStructsSchemaItems& struct_schema_items,
- const StructIdentifiersTest::eType struct_id);
-
void InitStructSchemes(TStructsSchemaItems& struct_schema_items);
void InitFunctionSchemes(
diff --git a/src/components/formatters/test/src/SmartFactoryTestHelper.cc b/src/components/formatters/test/src/SmartFactoryTestHelper.cc
index 4d089ff9b1..dd4dbe5910 100644
--- a/src/components/formatters/test/src/SmartFactoryTestHelper.cc
+++ b/src/components/formatters/test/src/SmartFactoryTestHelper.cc
@@ -432,13 +432,6 @@ std::shared_ptr<ISchemaItem> CSmartFactoryTest::InitStructSchemaItem_Common_1(
TSchemaItemParameter<size_t>(500),
TSchemaItemParameter<std::string>());
- // Struct member image.
- //
- // Image struct
- std::shared_ptr<ISchemaItem> image_SchemaItem =
- ProvideObjectSchemaItemForStruct(struct_schema_items,
- StructIdentifiersTest::Common_2);
-
// Struct member position.
//
// Position to display item
@@ -446,19 +439,12 @@ std::shared_ptr<ISchemaItem> CSmartFactoryTest::InitStructSchemaItem_Common_1(
TNumberSchemaItem<int32_t>::create(TSchemaItemParameter<int32_t>(1),
TSchemaItemParameter<int32_t>(500),
TSchemaItemParameter<int32_t>());
- Members struct_members;
- struct_members["image"] = SMember(image_SchemaItem, false);
Members schema_members;
schema_members["text"] = SMember(text_SchemaItem, true);
schema_members["position"] = SMember(position_SchemaItem, true);
- Members root_members_map;
- root_members_map[""] =
- SMember(CObjectSchemaItem::create(struct_members), true);
- root_members_map[""] =
- SMember(CObjectSchemaItem::create(schema_members), true);
return CObjectSchemaItem::create(schema_members);
}
@@ -485,16 +471,3 @@ CSmartFactoryTest::InitStructSchemaItem_Common_2() {
return CObjectSchemaItem::create(schema_members);
}
-
-std::shared_ptr<ISchemaItem>
-CSmartFactoryTest::ProvideObjectSchemaItemForStruct(
- TStructsSchemaItems& struct_schema_items,
- const StructIdentifiersTest::eType struct_id) {
- const TStructsSchemaItems::const_iterator it =
- struct_schema_items.find(struct_id);
- if (it != struct_schema_items.end()) {
- return it->second;
- }
- return ns_smart_device_link::ns_smart_objects::CAlwaysFalseSchemaItem::
- create();
-}
diff --git a/src/components/formatters/test/src/create_smartSchema.cc b/src/components/formatters/test/src/create_smartSchema.cc
index c852c65ea1..23459e2eac 100644
--- a/src/components/formatters/test/src/create_smartSchema.cc
+++ b/src/components/formatters/test/src/create_smartSchema.cc
@@ -139,6 +139,8 @@ const AppTypeTest::eType
test::components::formatters::AppTypeTest::MEDIA,
};
+#ifdef BUILD_TESTS
+// cppcheck-suppress unusedFunction //Used in unit tests
CSmartSchema initObjectSchema() {
std::set<TestType::eType> resultCode_allowedEnumSubsetValues;
resultCode_allowedEnumSubsetValues.insert(
@@ -222,6 +224,7 @@ CSmartSchema initObjectSchema() {
return CSmartSchema(CObjectSchemaItem::create(rootMembersMap));
};
+// cppcheck-suppress unusedFunction //Used in unit tests
CSmartSchema initSchemaForMetaFormatter() {
std::set<TestType::eType> resultCode_allowedEnumSubsetValues;
resultCode_allowedEnumSubsetValues.insert(
@@ -336,15 +339,6 @@ CSmartSchema initSchemaForMetaFormatter() {
ISchemaItemPtr majorVersion_SchemaItem = TNumberSchemaItem<int>::create();
ISchemaItemPtr minorVersion_SchemaItem = TNumberSchemaItem<int>::create();
ISchemaItemPtr patchVersion_SchemaItem = TNumberSchemaItem<int>::create();
- ISchemaItemPtr syncMsg_SchemaItem =
- CStringSchemaItem::create(TSchemaItemParameter<size_t>(0),
- TSchemaItemParameter<size_t>(1000),
- TSchemaItemParameter<std::string>());
-
- ISchemaItemPtr syncMsgVersion_SchemaItem =
- CArraySchemaItem::create(syncMsg_SchemaItem,
- TSchemaItemParameter<size_t>(0),
- TSchemaItemParameter<size_t>(1000));
// Creation map for syncMsgVersion
std::map<std::string, SMember> schemaSyncMsgVersionMap;
@@ -400,6 +394,7 @@ CSmartSchema initSchemaForMetaFormatter() {
SMember(CObjectSchemaItem::create(paramsMembersMap), true);
return CSmartSchema(CObjectSchemaItem::create(rootMembersMap));
};
+#endif // BUILD_TESTS
} // namespace formatters
} // namespace components
diff --git a/src/components/formatters/test/src/meta_formatter_test_helper.cc b/src/components/formatters/test/src/meta_formatter_test_helper.cc
index 4f8975fe53..0c396d4dc7 100644
--- a/src/components/formatters/test/src/meta_formatter_test_helper.cc
+++ b/src/components/formatters/test/src/meta_formatter_test_helper.cc
@@ -148,7 +148,7 @@ void CMetaFormatterTestHelper::CompareObjects(const SmartObject& first,
for (std::set<std::string>::const_iterator key = keys.begin();
key != keys.end();
- key++) {
+ ++key) {
CompareObjects(first.getElement(*key), second.getElement(*key));
}
} else if (SmartType_Boolean == first.getType()) {
diff --git a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h
index 6e0ad66199..5a10ccee38 100644
--- a/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h
+++ b/src/components/hmi_message_handler/include/hmi_message_handler/mb_controller.h
@@ -66,8 +66,7 @@ enum ErrorCode {
class WebsocketSession;
-class CMessageBrokerController
- : public std::enable_shared_from_this<CMessageBrokerController> {
+class CMessageBrokerController {
public:
CMessageBrokerController(const std::string& address,
uint16_t port,
@@ -99,7 +98,7 @@ class CMessageBrokerController
void sendResponse(Json::Value& message);
- void sendJsonMessage(Json::Value& message);
+ bool sendJsonMessage(Json::Value& message);
void subscribeTo(std::string property);
@@ -123,26 +122,26 @@ class CMessageBrokerController
std::string GetComponentName(std::string& method);
- void processInternalRequest(Json::Value& message,
- WebsocketSession* ws_session);
+ void processInternalRequest(const Json::Value& message,
+ WebsocketSession& ws_session);
- void pushRequest(Json::Value& message, WebsocketSession* ws_session);
+ bool pushRequest(Json::Value& message, WebsocketSession& ws_session);
// Registry
- bool addController(WebsocketSession* ws_session, std::string name);
+ bool addController(WebsocketSession& ws_session, const std::string& name);
- void deleteController(WebsocketSession* ws_session);
+ void deleteController(WebsocketSession& ws_session);
- void deleteController(std::string name);
+ void deleteController(const std::string& name);
- void removeSubscribersBySession(const WebsocketSession* ws);
+ void removeSubscribersBySession(const WebsocketSession& ws);
- bool addSubscriber(WebsocketSession* ws_session, std::string name);
+ bool addSubscriber(WebsocketSession& ws_session, const std::string& name);
- void deleteSubscriber(WebsocketSession* ws, std::string name);
+ void deleteSubscriber(const WebsocketSession& ws, const std::string& name);
- int getSubscribersFd(std::string name,
- std::vector<WebsocketSession*>& result);
+ std::vector<std::shared_ptr<WebsocketSession> > getSubscribersFd(
+ const std::string& name);
int getNextControllerId();
@@ -168,13 +167,13 @@ class CMessageBrokerController
mConnectionList;
sync_primitives::Lock mConnectionListLock;
- std::map<std::string, WebsocketSession*> mControllersList;
+ std::map<std::string, std::weak_ptr<WebsocketSession> > mControllersList;
sync_primitives::Lock mControllersListLock;
- std::multimap<std::string, WebsocketSession*> mSubscribersList;
+ std::multimap<std::string, std::weak_ptr<WebsocketSession> > mSubscribersList;
sync_primitives::Lock mSubscribersListLock;
- std::map<std::string, WebsocketSession*> mRequestList;
+ std::map<std::string, std::weak_ptr<WebsocketSession> > mRequestList;
sync_primitives::Lock mRequestListLock;
std::atomic_bool shutdown_;
diff --git a/src/components/hmi_message_handler/src/mb_controller.cc b/src/components/hmi_message_handler/src/mb_controller.cc
index 681e57906a..e74f719780 100644
--- a/src/components/hmi_message_handler/src/mb_controller.cc
+++ b/src/components/hmi_message_handler/src/mb_controller.cc
@@ -137,15 +137,13 @@ bool CMessageBrokerController::isNotification(Json::Value& message) {
void CMessageBrokerController::sendNotification(Json::Value& message) {
std::string methodName = message["method"].asString();
- std::vector<WebsocketSession*> result;
- int subscribersCount = getSubscribersFd(methodName, result);
- if (0 < subscribersCount) {
- std::vector<WebsocketSession*>::iterator it;
- for (it = result.begin(); it != result.end(); ++it) {
- (*it)->sendJsonMessage(message);
- }
- } else {
- SDL_LOG_ERROR(("No subscribers for this property!\n"));
+ const auto result = getSubscribersFd(methodName);
+ if (result.empty()) {
+ SDL_LOG_ERROR("No subscribers for method: " << methodName);
+ }
+
+ for (const auto& ws : result) {
+ ws->sendJsonMessage(message);
}
}
@@ -159,40 +157,59 @@ bool CMessageBrokerController::isResponse(Json::Value& message) {
}
void CMessageBrokerController::sendResponse(Json::Value& message) {
- WebsocketSession* ws;
- std::map<std::string, WebsocketSession*>::iterator it;
- sync_primitives::AutoLock request_lock(mRequestListLock);
-
+ std::weak_ptr<WebsocketSession> weak_ws;
std::string id = message["id"].asString();
- it = mRequestList.find(id);
- if (it != mRequestList.end()) {
- ws = it->second;
+
+ {
+ sync_primitives::AutoLock request_lock(mRequestListLock);
+ const auto it = mRequestList.find(id);
+ if (it != mRequestList.end()) {
+ std::swap(weak_ws, it->second);
+ mRequestList.erase(it);
+ }
+ }
+
+ if (auto ws = weak_ws.lock()) {
ws->sendJsonMessage(message);
- mRequestList.erase(it);
+ } else {
+ SDL_LOG_ERROR("A request is not found for id: " << id);
}
}
-void CMessageBrokerController::sendJsonMessage(Json::Value& message) {
+bool CMessageBrokerController::sendJsonMessage(Json::Value& message) {
if (isNotification(message)) {
sendNotification(message);
- return;
+ return true;
} else if (isResponse(message)) {
sendResponse(message);
- return;
+ return true;
}
// Send request
- WebsocketSession* ws;
- std::map<std::string, WebsocketSession*>::iterator it;
+ std::shared_ptr<WebsocketSession> ws;
std::string method = message["method"].asString();
std::string component_name = GetComponentName(method);
- sync_primitives::AutoLock lock(mControllersListLock);
- it = mControllersList.find(component_name);
- if (it != mControllersList.end()) {
- ws = it->second;
- ws->sendJsonMessage(message);
+ {
+ sync_primitives::AutoLock lock(mControllersListLock);
+ const auto it = mControllersList.find(component_name);
+ if (it != mControllersList.end()) {
+ ws = it->second.lock();
+ if (!ws) {
+ // Clear expired
+ mControllersList.erase(it);
+ }
+ }
+ }
+
+ if (!ws) {
+ SDL_LOG_ERROR(
+ "A controller is not found for the method: " << component_name);
+ return false;
}
+
+ ws->sendJsonMessage(message);
+ return true;
}
void CMessageBrokerController::subscribeTo(std::string property) {}
@@ -245,139 +262,121 @@ std::string CMessageBrokerController::GetComponentName(std::string& method) {
return return_string;
}
-bool CMessageBrokerController::addController(WebsocketSession* ws_session,
- std::string name) {
- bool result = false;
- std::map<std::string, WebsocketSession*>::iterator it;
-
+bool CMessageBrokerController::addController(WebsocketSession& ws_session,
+ const std::string& name) {
sync_primitives::AutoLock lock(mControllersListLock);
- it = mControllersList.find(name);
- if (it == mControllersList.end()) {
- mControllersList.insert(
- std::map<std::string, WebsocketSession*>::value_type(name, ws_session));
- result = true;
- } else {
- SDL_LOG_ERROR(("Controller already exists!\n"));
- }
- return result;
+ return mControllersList.emplace(name, ws_session.shared_from_this()).second;
}
-void CMessageBrokerController::deleteController(WebsocketSession* ws_session) {
- {
- sync_primitives::AutoLock lock(mControllersListLock);
- std::map<std::string, WebsocketSession*>::iterator it;
- for (it = mControllersList.begin(); it != mControllersList.end();) {
- if (it->second == ws_session) {
- mControllersList.erase(it++);
- } else {
- ++it;
- }
+void CMessageBrokerController::deleteController(WebsocketSession& ws_session) {
+ removeSubscribersBySession(ws_session);
+ sync_primitives::AutoLock lock(mControllersListLock);
+ for (auto it = mControllersList.cbegin(); it != mControllersList.cend();) {
+ const std::shared_ptr<WebsocketSession> ws = it->second.lock();
+ if (!ws || ws.get() == &ws_session) {
+ it = mControllersList.erase(it);
+ } else {
+ ++it;
}
}
- removeSubscribersBySession(ws_session);
}
-void CMessageBrokerController::deleteController(std::string name) {
- std::map<std::string, WebsocketSession*>::iterator it;
- WebsocketSession* ws;
+void CMessageBrokerController::deleteController(const std::string& name) {
+ std::weak_ptr<WebsocketSession> weak_ws;
{
sync_primitives::AutoLock lock(mControllersListLock);
- it = mControllersList.find(name);
+ const auto it = mControllersList.find(name);
if (it != mControllersList.end()) {
- ws = it->second;
+ std::swap(weak_ws, it->second);
mControllersList.erase(it);
- } else {
- return;
}
}
- removeSubscribersBySession(ws);
+
+ if (auto ws = weak_ws.lock()) {
+ removeSubscribersBySession(*ws);
+ } else {
+ SDL_LOG_ERROR("A controller is not found for the method: " << name);
+ }
}
void CMessageBrokerController::removeSubscribersBySession(
- const WebsocketSession* ws) {
+ const WebsocketSession& ws) {
sync_primitives::AutoLock lock(mSubscribersListLock);
- std::multimap<std::string, WebsocketSession*>::iterator it_s =
- mSubscribersList.begin();
- for (; it_s != mSubscribersList.end();) {
- if (it_s->second == ws) {
- mSubscribersList.erase(it_s++);
+ for (auto it_s = mSubscribersList.cbegin();
+ it_s != mSubscribersList.cend();) {
+ auto ws_session = it_s->second.lock();
+ if (!ws_session || ws_session.get() == &ws) {
+ it_s = mSubscribersList.erase(it_s);
} else {
++it_s;
}
}
}
-void CMessageBrokerController::pushRequest(Json::Value& message,
- WebsocketSession* ws_session) {
- sync_primitives::AutoLock lock(mRequestListLock);
+bool CMessageBrokerController::pushRequest(Json::Value& message,
+ WebsocketSession& ws_session) {
std::string id = message["id"].asString();
- mRequestList.insert(
- std::map<std::string, WebsocketSession*>::value_type(id, ws_session));
+ sync_primitives::AutoLock lock(mRequestListLock);
+ return mRequestList.emplace(std::move(id), ws_session.shared_from_this())
+ .second;
}
-bool CMessageBrokerController::addSubscriber(WebsocketSession* ws_session,
- std::string name) {
- bool result = true;
+bool CMessageBrokerController::addSubscriber(WebsocketSession& ws_session,
+ const std::string& name) {
sync_primitives::AutoLock lock(mSubscribersListLock);
- std::pair<std::multimap<std::string, WebsocketSession*>::iterator,
- std::multimap<std::string, WebsocketSession*>::iterator>
- p = mSubscribersList.equal_range(name);
- if (p.first != p.second) {
- std::multimap<std::string, WebsocketSession*>::iterator itr;
- for (itr = p.first; itr != p.second; ++itr) {
- if (ws_session == itr->second) {
- result = false;
- SDL_LOG_ERROR(("Subscriber already exists!\n"));
- }
+ auto p = mSubscribersList.equal_range(name);
+ for (auto it = p.first; it != p.second;) {
+ const std::shared_ptr<WebsocketSession> ws = it->second.lock();
+ if (!ws) {
+ // Clear expired
+ it = mSubscribersList.erase(it);
+ } else if (ws.get() == &ws_session) {
+ // Found an element: {name, ws_session}
+ return false;
+ } else {
+ ++it;
}
}
- if (result) {
- mSubscribersList.insert(
- std::map<std::string, WebsocketSession*>::value_type(name, ws_session));
- }
- return result;
+
+ // Not found an element: {name, ws_session}
+ mSubscribersList.emplace_hint(p.second, name, ws_session.shared_from_this());
+ return true;
}
-void CMessageBrokerController::deleteSubscriber(WebsocketSession* ws,
- std::string name) {
+void CMessageBrokerController::deleteSubscriber(const WebsocketSession& ws,
+ const std::string& name) {
sync_primitives::AutoLock lock(mSubscribersListLock);
- std::pair<std::multimap<std::string, WebsocketSession*>::iterator,
- std::multimap<std::string, WebsocketSession*>::iterator>
- p = mSubscribersList.equal_range(name);
- if (p.first != p.second) {
- std::multimap<std::string, WebsocketSession*>::iterator itr;
- for (itr = p.first; itr != p.second;) {
- if (ws == itr->second) {
- mSubscribersList.erase(itr++);
- } else {
- ++itr;
- }
+ auto p = mSubscribersList.equal_range(name);
+ for (auto it = p.first; it != p.second;) {
+ const std::shared_ptr<WebsocketSession> ws_session = it->second.lock();
+ if (!ws_session || &ws == ws_session.get()) {
+ it = mSubscribersList.erase(it);
+ } else {
+ ++it;
}
}
}
-int CMessageBrokerController::getSubscribersFd(
- std::string name, std::vector<WebsocketSession*>& result) {
- int res = 0;
- std::map<std::string, WebsocketSession*>::iterator it;
-
+std::vector<std::shared_ptr<WebsocketSession> >
+CMessageBrokerController::getSubscribersFd(const std::string& name) {
+ std::vector<std::shared_ptr<WebsocketSession> > result;
sync_primitives::AutoLock lock(mSubscribersListLock);
- std::pair<std::multimap<std::string, WebsocketSession*>::iterator,
- std::multimap<std::string, WebsocketSession*>::iterator>
- p = mSubscribersList.equal_range(name);
- if (p.first != p.second) {
- std::multimap<std::string, WebsocketSession*>::iterator itr;
- for (itr = p.first; itr != p.second; ++itr) {
- result.push_back(itr->second);
+ auto p = mSubscribersList.equal_range(name);
+ for (auto it = p.first; it != p.second;) {
+ if (std::shared_ptr<WebsocketSession> ws = it->second.lock()) {
+ result.push_back(std::move(ws));
+ ++it;
+ } else {
+ // Clear expired
+ it = mSubscribersList.erase(it);
}
}
- res = result.size();
- return res;
+ return result;
}
void CMessageBrokerController::processInternalRequest(
- Json::Value& message, WebsocketSession* ws_session) {
+ const Json::Value& message, WebsocketSession& ws_session) {
std::string method = message["method"].asString();
std::string methodName = getMethodName(method);
if (methodName == "registerComponent") {
@@ -390,7 +389,7 @@ void CMessageBrokerController::processInternalRequest(
response["id"] = message["id"];
response["jsonrpc"] = "2.0";
response["result"] = getNextControllerId();
- ws_session->sendJsonMessage(response);
+ ws_session.sendJsonMessage(response);
} else {
Json::Value error, err;
error["id"] = message["id"];
@@ -398,7 +397,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = CONTROLLER_EXISTS;
err["message"] = "Controller has been already registered.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else {
Json::Value error, err;
@@ -407,7 +406,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = INVALID_REQUEST;
err["message"] = "Wrong method parameter.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else if (methodName == "subscribeTo") {
Json::Value params = message["params"];
@@ -418,7 +417,7 @@ void CMessageBrokerController::processInternalRequest(
response["id"] = message["id"];
response["jsonrpc"] = "2.0";
response["result"] = "OK";
- ws_session->sendJsonMessage(response);
+ ws_session.sendJsonMessage(response);
} else {
Json::Value error, err;
error["id"] = message["id"];
@@ -426,7 +425,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = CONTROLLER_EXISTS;
err["message"] = "Subscribe has been already registered.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else {
Json::Value error, err;
@@ -435,7 +434,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = INVALID_REQUEST;
err["message"] = "Wrong method parameter.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else if (methodName == "unregisterComponent") {
@@ -448,7 +447,7 @@ void CMessageBrokerController::processInternalRequest(
response["id"] = message["id"];
response["jsonrpc"] = "2.0";
response["result"] = "OK";
- ws_session->sendJsonMessage(response);
+ ws_session.sendJsonMessage(response);
} else {
Json::Value error, err;
error["id"] = message["id"];
@@ -456,7 +455,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = INVALID_REQUEST;
err["message"] = "Wrong method parameter.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else if (methodName == "unsubscribeFrom") {
Json::Value params = message["params"];
@@ -467,7 +466,7 @@ void CMessageBrokerController::processInternalRequest(
response["id"] = message["id"];
response["jsonrpc"] = "2.0";
response["result"] = "OK";
- ws_session->sendJsonMessage(response);
+ ws_session.sendJsonMessage(response);
} else {
Json::Value error, err;
error["id"] = message["id"];
@@ -475,7 +474,7 @@ void CMessageBrokerController::processInternalRequest(
err["code"] = INVALID_REQUEST;
err["message"] = "Wrong method parameter.";
error["error"] = err;
- ws_session->sendJsonMessage(error);
+ ws_session.sendJsonMessage(error);
}
} else {
}
diff --git a/src/components/hmi_message_handler/src/messagebroker_adapter.cc b/src/components/hmi_message_handler/src/messagebroker_adapter.cc
index ca3d03dd91..cc13341ca0 100644
--- a/src/components/hmi_message_handler/src/messagebroker_adapter.cc
+++ b/src/components/hmi_message_handler/src/messagebroker_adapter.cc
@@ -70,7 +70,9 @@ void MessageBrokerAdapter::SendMessageToHMI(
return;
}
- sendJsonMessage(json_value);
+ if (!sendJsonMessage(json_value)) {
+ handler()->OnErrorSending(message);
+ }
}
void MessageBrokerAdapter::processResponse(std::string method,
diff --git a/src/components/hmi_message_handler/src/websocket_session.cc b/src/components/hmi_message_handler/src/websocket_session.cc
index f2cb265770..a387b639a2 100644
--- a/src/components/hmi_message_handler/src/websocket_session.cc
+++ b/src/components/hmi_message_handler/src/websocket_session.cc
@@ -85,7 +85,7 @@ void WebsocketSession::Recv(boost::system::error_code ec) {
SDL_LOG_ERROR(str_err);
shutdown_ = true;
thread_delegate_->SetShutdown();
- controller_->deleteController(this);
+ controller_->deleteController(*this);
return;
}
@@ -126,7 +126,7 @@ void WebsocketSession::Read(boost::system::error_code ec,
SDL_LOG_ERROR(str_err);
shutdown_ = true;
thread_delegate_->SetShutdown();
- controller_->deleteController(this);
+ controller_->deleteController(*this);
buffer_.consume(buffer_.size());
return;
}
@@ -198,9 +198,9 @@ void WebsocketSession::onMessageReceived(Json::Value message) {
std::string component_name = GetComponentName(method);
if (component_name == "MB") {
- controller_->processInternalRequest(message, this);
+ controller_->processInternalRequest(message, *this);
} else {
- controller_->pushRequest(message, this);
+ controller_->pushRequest(message, *this);
controller_->processRequest(message);
}
}
diff --git a/src/components/include/application_manager/application_manager.h b/src/components/include/application_manager/application_manager.h
index 72dfb71a29..67f23956be 100644
--- a/src/components/include/application_manager/application_manager.h
+++ b/src/components/include/application_manager/application_manager.h
@@ -554,9 +554,24 @@ class ApplicationManager {
*/
virtual void IviInfoUpdated(const std::string& vehicle_info, int value) = 0;
+ /**
+ * @brief Creates the application object for a newly registered application.
+ * This method performs initialiation of the app object by setting properties
+ * and starting the resumption process if applicable.
+ * @param request_for_registration Smart Object RegisterAppInterfaceRequest
+ * message received from mobile.
+ */
virtual ApplicationSharedPtr RegisterApplication(
const std::shared_ptr<smart_objects::SmartObject>&
request_for_registration) = 0;
+ /**
+ * @brief Completes initialization process by adding the app to the
+ * applications accessor. App is now accessible by all other Core components.
+ * @param application ApplicationSharedPtr for newly registered application.
+ * @param connection_key Internal application id of registering application.
+ */
+ virtual void FinalizeAppRegistration(ApplicationSharedPtr application,
+ const uint32_t connection_key) = 0;
virtual void SendUpdateAppList() = 0;
@@ -813,11 +828,11 @@ class ApplicationManager {
* @brief Callback calls when application starts/stops data streaming
* @param app_id Streaming application id
* @param service_type Streaming service type
- * @param state Shows if streaming started or stopped
+ * @param new_state Defines new streaming state
*/
virtual void OnAppStreaming(uint32_t app_id,
protocol_handler::ServiceType service_type,
- bool state) = 0;
+ const Application::StreamingState new_state) = 0;
/**
* @brief CreateRegularState create regular HMI state for application
@@ -858,18 +873,24 @@ class ApplicationManager {
protocol_handler::ServiceType service_type) = 0;
/**
- * @brief Called when application completes streaming configuration
+ * @brief Called when application successfully completes streaming
+ * configuration
* @param app_id Streaming application id
* @param service_type Streaming service type
- * @param result true if configuration is successful, false otherwise
- * @param rejected_params list of rejected parameters' name. Valid
- * only when result is false.
*/
- virtual void OnStreamingConfigured(
+ virtual void OnStreamingConfigurationSuccessful(
+ uint32_t app_id, protocol_handler::ServiceType service_type) = 0;
+
+ /**
+ * @brief Called when application fails streaming configuration
+ * @param app_id Streaming application id
+ * @param rejected_params list of rejected parameter names
+ * @param reason NACK reason
+ */
+ virtual void OnStreamingConfigurationFailed(
uint32_t app_id,
- protocol_handler::ServiceType service_type,
- bool result,
- std::vector<std::string>& rejected_params) = 0;
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) = 0;
virtual const ApplicationManagerSettings& get_settings() const = 0;
// Extract the app ID to use internally based on the UseFullAppID .ini setting
diff --git a/src/components/include/application_manager/state_controller.h b/src/components/include/application_manager/state_controller.h
index 422b34e0a0..e604675cea 100644
--- a/src/components/include/application_manager/state_controller.h
+++ b/src/components/include/application_manager/state_controller.h
@@ -35,9 +35,12 @@
#include "application_manager/application.h"
#include "application_manager/application_manager.h"
+#include "application_manager/postponed_activation_controller.h"
#include "application_manager/request_controller_settings.h"
#include "stdint.h"
+class PostponedActivationController;
+
namespace application_manager {
class StateController {
public:
@@ -246,6 +249,8 @@ class StateController {
* @param app_id id of application to check
*/
virtual void DropPostponedWindows(const uint32_t app_id) = 0;
+
+ virtual PostponedActivationController& GetPostponedActivationController() = 0;
};
} // namespace application_manager
diff --git a/src/components/include/connection_handler/connection_handler.h b/src/components/include/connection_handler/connection_handler.h
index de78024e61..c5995fbbb8 100644
--- a/src/components/include/connection_handler/connection_handler.h
+++ b/src/components/include/connection_handler/connection_handler.h
@@ -48,7 +48,13 @@
*/
namespace connection_handler {
-enum CloseSessionReason { kCommon = 0, kFlood, kMalformed, kUnauthorizedApp };
+enum CloseSessionReason {
+ kCommon = 0,
+ kFlood,
+ kMalformed,
+ kUnauthorizedApp,
+ kFinalMessage
+};
class ConnectionHandlerObserver;
@@ -297,7 +303,8 @@ class ConnectionHandler {
virtual void NotifyServiceStartedResult(
uint32_t session_key,
bool result,
- std::vector<std::string>& rejected_params) = 0;
+ std::vector<std::string>& rejected_params,
+ const std::string& reason) = 0;
/**
* \brief Called when secondary transport with given session ID is established
diff --git a/src/components/include/media_manager/media_manager.h b/src/components/include/media_manager/media_manager.h
index 2d2201a949..0729adc7d8 100644
--- a/src/components/include/media_manager/media_manager.h
+++ b/src/components/include/media_manager/media_manager.h
@@ -70,14 +70,6 @@ class MediaManager {
*/
virtual const MediaManagerSettings& settings() const = 0;
- /**
- * \brief Convert an amount of audio bytes to an estimated time in ms
- * \param data_size number of bytes to be played
- * \return milliseconds required to play <data_size> many bytes with
- * the current pcm stream capabilities
- */
- virtual uint32_t DataSizeToMilliseconds(uint64_t data_size) const = 0;
-
virtual ~MediaManager() {}
};
diff --git a/src/components/include/protocol/rpc_type.h b/src/components/include/protocol/rpc_type.h
index db4a808cfd..fde8fe7885 100644
--- a/src/components/include/protocol/rpc_type.h
+++ b/src/components/include/protocol/rpc_type.h
@@ -49,7 +49,6 @@ enum RpcType {
// Validate and map byte value to RPC type
RpcType RpcTypeFromByte(uint8_t byte);
// Check and convert RpcType to byte value ready to be transmitted
-uint8_t RpcTypeToByte(RpcType type);
const char* RpcTypeToString(RpcType type);
diff --git a/src/components/include/protocol/service_type.h b/src/components/include/protocol/service_type.h
index 803b8106b8..77a095f7e9 100644
--- a/src/components/include/protocol/service_type.h
+++ b/src/components/include/protocol/service_type.h
@@ -79,7 +79,6 @@ enum ServiceType {
* Service types to binary stream
*/
ServiceType ServiceTypeFromByte(uint8_t type);
-uint8_t ServiceTypeToByte(ServiceType type);
} // namespace protocol_handler
#endif // SRC_COMPONENTS_INCLUDE_PROTOCOL_SERVICE_TYPE_H_
diff --git a/src/components/include/protocol_handler/protocol_handler.h b/src/components/include/protocol_handler/protocol_handler.h
index bb596631a0..c7ee670972 100644
--- a/src/components/include/protocol_handler/protocol_handler.h
+++ b/src/components/include/protocol_handler/protocol_handler.h
@@ -134,6 +134,8 @@ class ProtocolHandler {
* @param rejected_params list of parameters name that are rejected.
* Only valid when generated_session_id is 0. Note, even if
* generated_session_id is 0, the list may be empty.
+ * @param err_reason string with NACK reason. Only valid when
+ * generated_session_id is 0.
*/
virtual void NotifySessionStarted(
const SessionContext& context,
diff --git a/src/components/include/protocol_handler/session_observer.h b/src/components/include/protocol_handler/session_observer.h
index cdf4267188..593ce8408c 100644
--- a/src/components/include/protocol_handler/session_observer.h
+++ b/src/components/include/protocol_handler/session_observer.h
@@ -179,6 +179,13 @@ class SessionObserver {
virtual void OnMalformedMessageCallback(const uint32_t& connection_key) = 0;
/**
+ * @brief Callback function used by ProtocolHandler when the last message was
+ * sent for a mobile connection
+ * @param connection_key used by other components as an application identifier
+ */
+ virtual void OnFinalMessageCallback(const uint32_t& connection_key) = 0;
+
+ /**
* @brief Converts connection handle to transport type string used in
* smartDeviceLink.ini file, e.g. "TCP_WIFI"
* @param connection_handle A connection identifier
diff --git a/src/components/include/test/application_manager/mock_application_manager.h b/src/components/include/test/application_manager/mock_application_manager.h
index 862c862a20..ee5d7f315a 100644
--- a/src/components/include/test/application_manager/mock_application_manager.h
+++ b/src/components/include/test/application_manager/mock_application_manager.h
@@ -220,6 +220,9 @@ class MockApplicationManager : public application_manager::ApplicationManager {
application_manager::ApplicationSharedPtr(
const std::shared_ptr<smart_objects::SmartObject>&
request_for_registration));
+ MOCK_METHOD2(FinalizeAppRegistration,
+ void(application_manager::ApplicationSharedPtr,
+ const uint32_t connection_key));
MOCK_METHOD0(SendUpdateAppList, void());
MOCK_METHOD2(MarkAppsGreyOut,
void(const connection_handler::DeviceHandle handle,
@@ -309,10 +312,11 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_METHOD1(OnAppUnauthorized, void(const uint32_t& app_id));
MOCK_METHOD1(ActivateApplication,
bool(application_manager::ApplicationSharedPtr app));
- MOCK_METHOD3(OnAppStreaming,
- void(uint32_t app_id,
- protocol_handler::ServiceType service_type,
- bool state));
+ MOCK_METHOD3(
+ OnAppStreaming,
+ void(uint32_t app_id,
+ protocol_handler::ServiceType service_type,
+ application_manager::Application::StreamingState new_state));
MOCK_CONST_METHOD6(CreateRegularState,
application_manager::HmiStatePtr(
application_manager::ApplicationSharedPtr app,
@@ -373,11 +377,13 @@ class MockApplicationManager : public application_manager::ApplicationManager {
MOCK_METHOD0(OnTimerSendTTSGlobalProperties, void());
MOCK_METHOD0(OnLowVoltage, void());
MOCK_METHOD0(OnWakeUp, void());
- MOCK_METHOD4(OnStreamingConfigured,
+ MOCK_METHOD2(OnStreamingConfigurationSuccessful,
+ void(uint32_t app_id,
+ protocol_handler::ServiceType service_type));
+ MOCK_METHOD3(OnStreamingConfigurationFailed,
void(uint32_t app_id,
- protocol_handler::ServiceType service_type,
- bool result,
- std::vector<std::string>& rejected_params));
+ std::vector<std::string>& rejected_params,
+ const std::string& reason));
MOCK_METHOD2(ProcessReconnection,
void(application_manager::ApplicationSharedPtr application,
const uint32_t connection_key));
diff --git a/src/components/include/test/application_manager/mock_state_controller.h b/src/components/include/test/application_manager/mock_state_controller.h
index a06336467e..ca538bacb0 100644
--- a/src/components/include/test/application_manager/mock_state_controller.h
+++ b/src/components/include/test/application_manager/mock_state_controller.h
@@ -113,6 +113,8 @@ class MockStateController : public am::StateController {
MOCK_METHOD2(DeactivateApp,
void(am::ApplicationSharedPtr app,
const am::WindowID window_id));
+ MOCK_METHOD0(GetPostponedActivationController,
+ application_manager::PostponedActivationController&());
};
} // namespace application_manager_test
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 d44dd94ddd..bf266751d4 100644
--- a/src/components/include/test/connection_handler/mock_connection_handler.h
+++ b/src/components/include/test/connection_handler/mock_connection_handler.h
@@ -123,10 +123,11 @@ class MockConnectionHandler : public connection_handler::ConnectionHandler {
transport_manager::ConnectionUID secondary_transport_id));
MOCK_CONST_METHOD1(GetSessionTransports,
const SessionTransports(uint8_t session_id));
- MOCK_METHOD3(NotifyServiceStartedResult,
+ MOCK_METHOD4(NotifyServiceStartedResult,
void(uint32_t session_key,
bool result,
- std::vector<std::string>& rejected_params));
+ std::vector<std::string>& rejected_params,
+ const std::string& reason));
MOCK_METHOD3(
OnSecondaryTransportStarted,
bool(transport_manager::ConnectionUID& primary_connection_handle,
diff --git a/src/components/include/test/media_manager/mock_media_manager.h b/src/components/include/test/media_manager/mock_media_manager.h
index 364c495236..36e35352d6 100644
--- a/src/components/include/test/media_manager/mock_media_manager.h
+++ b/src/components/include/test/media_manager/mock_media_manager.h
@@ -64,7 +64,6 @@ class MockMediaManager : public media_manager::MediaManager {
MOCK_METHOD2(FramesProcessed,
void(int32_t application_key, int32_t frame_number));
MOCK_CONST_METHOD0(settings, const media_manager::MediaManagerSettings&());
- MOCK_CONST_METHOD1(DataSizeToMilliseconds, uint32_t(uint64_t data_size));
};
} // namespace media_manager_test
diff --git a/src/components/include/test/protocol_handler/mock_protocol_handler.h b/src/components/include/test/protocol_handler/mock_protocol_handler.h
index e3a52157ec..94a9efd9e5 100644
--- a/src/components/include/test/protocol_handler/mock_protocol_handler.h
+++ b/src/components/include/test/protocol_handler/mock_protocol_handler.h
@@ -64,9 +64,6 @@ class MockProtocolHandler : public ::protocol_handler::ProtocolHandler {
MOCK_CONST_METHOD0(get_settings,
const ::protocol_handler::ProtocolHandlerSettings&());
MOCK_METHOD0(get_session_observer, protocol_handler::SessionObserver&());
- MOCK_METHOD2(NotifySessionStarted,
- void(const ::protocol_handler::SessionContext& context,
- std::vector<std::string>& rejected_params));
MOCK_METHOD3(NotifySessionStarted,
void(const ::protocol_handler::SessionContext& context,
std::vector<std::string>& rejected_params,
diff --git a/src/components/include/test/protocol_handler/mock_session_observer.h b/src/components/include/test/protocol_handler/mock_session_observer.h
index 3414153fc7..6bd67f6516 100644
--- a/src/components/include/test/protocol_handler/mock_session_observer.h
+++ b/src/components/include/test/protocol_handler/mock_session_observer.h
@@ -83,6 +83,7 @@ class MockSessionObserver : public ::protocol_handler::SessionObserver {
void(const uint32_t& connection_key));
MOCK_METHOD1(OnMalformedMessageCallback,
void(const uint32_t& connection_key));
+ MOCK_METHOD1(OnFinalMessageCallback, void(const uint32_t& connection_key));
MOCK_CONST_METHOD1(
TransportTypeProfileStringFromConnHandle,
const std::string(transport_manager::ConnectionUID connection_handle));
diff --git a/src/components/media_manager/include/media_manager/media_manager_impl.h b/src/components/media_manager/include/media_manager/media_manager_impl.h
index 3e24212ed5..8d60cd0e54 100644
--- a/src/components/media_manager/include/media_manager/media_manager_impl.h
+++ b/src/components/media_manager/include/media_manager/media_manager_impl.h
@@ -33,7 +33,6 @@
#ifndef SRC_COMPONENTS_MEDIA_MANAGER_INCLUDE_MEDIA_MANAGER_MEDIA_MANAGER_IMPL_H_
#define SRC_COMPONENTS_MEDIA_MANAGER_INCLUDE_MEDIA_MANAGER_MEDIA_MANAGER_IMPL_H_
-#include <chrono>
#include <map>
#include <string>
#include "interfaces/MOBILE_API.h"
@@ -80,7 +79,6 @@ class MediaManagerImpl : public MediaManager,
protocol_handler::ServiceType service_type);
virtual void StopStreaming(int32_t application_key,
protocol_handler::ServiceType service_type);
-
virtual void SetProtocolHandler(
protocol_handler::ProtocolHandler* protocol_handler);
virtual void OnMessageReceived(
@@ -91,8 +89,6 @@ class MediaManagerImpl : public MediaManager,
virtual const MediaManagerSettings& settings() const OVERRIDE;
- virtual uint32_t DataSizeToMilliseconds(uint64_t data_size) const OVERRIDE;
-
#ifdef BUILD_TESTS
void set_mock_a2dp_player(MediaAdapter* media_adapter);
void set_mock_mic_listener(MediaListenerPtr media_listener);
@@ -118,12 +114,6 @@ class MediaManagerImpl : public MediaManager,
std::map<protocol_handler::ServiceType, MediaAdapterImplPtr> streamer_;
std::map<protocol_handler::ServiceType, MediaListenerPtr> streamer_listener_;
- uint32_t bits_per_sample_;
- uint32_t sampling_rate_;
- uint64_t stream_data_size_;
- std::chrono::time_point<std::chrono::system_clock>
- socket_audio_stream_start_time_;
-
application_manager::ApplicationManager& application_manager_;
private:
diff --git a/src/components/media_manager/include/media_manager/streamer_adapter.h b/src/components/media_manager/include/media_manager/streamer_adapter.h
index a35e680b6a..15f21bb924 100644
--- a/src/components/media_manager/include/media_manager/streamer_adapter.h
+++ b/src/components/media_manager/include/media_manager/streamer_adapter.h
@@ -87,7 +87,7 @@ class StreamerAdapter : public MediaAdapterImpl {
};
private:
- int32_t current_application_;
+ std::atomic_int current_application_;
utils::MessageQueue<protocol_handler::RawMessagePtr> messages_;
Streamer* streamer_;
diff --git a/src/components/media_manager/src/audio/a2dp_source_player_adapter.cc b/src/components/media_manager/src/audio/a2dp_source_player_adapter.cc
index b9cdf55482..a2c088c8a1 100644
--- a/src/components/media_manager/src/audio/a2dp_source_player_adapter.cc
+++ b/src/components/media_manager/src/audio/a2dp_source_player_adapter.cc
@@ -85,9 +85,8 @@ A2DPSourcePlayerAdapter::~A2DPSourcePlayerAdapter() {
}
void A2DPSourcePlayerAdapter::StartActivity(int32_t application_key) {
- SDL_LOG_INFO(
-
- "Starting a2dp playing music for " << application_key << " application.");
+ SDL_LOG_INFO("Starting a2dp playing music for " << application_key
+ << " application.");
if (application_key != current_application_) {
current_application_ = application_key;
diff --git a/src/components/media_manager/src/media_manager_impl.cc b/src/components/media_manager/src/media_manager_impl.cc
index ce80cc3c50..6f0a67b0c9 100644
--- a/src/components/media_manager/src/media_manager_impl.cc
+++ b/src/components/media_manager/src/media_manager_impl.cc
@@ -35,8 +35,6 @@
#include "application_manager/application_impl.h"
#include "application_manager/application_manager.h"
#include "application_manager/message_helper.h"
-#include "application_manager/smart_object_keys.h"
-#include "interfaces/MOBILE_API.h"
#include "media_manager/audio/from_mic_recorder_listener.h"
#include "media_manager/streamer_listener.h"
#include "protocol_handler/protocol_handler.h"
@@ -66,9 +64,6 @@ MediaManagerImpl::MediaManagerImpl(
, protocol_handler_(NULL)
, a2dp_player_(NULL)
, from_mic_recorder_(NULL)
- , bits_per_sample_(16)
- , sampling_rate_(16000)
- , stream_data_size_(0ull)
, application_manager_(application_manager) {
Init();
}
@@ -165,23 +160,6 @@ void MediaManagerImpl::Init() {
streamer_[ServiceType::kAudio]->AddListener(
streamer_listener_[ServiceType::kAudio]);
}
-
- if (application_manager_.hmi_capabilities().pcm_stream_capabilities()) {
- const auto pcm_caps =
- application_manager_.hmi_capabilities().pcm_stream_capabilities();
-
- if (pcm_caps->keyExists(application_manager::strings::bits_per_sample)) {
- bits_per_sample_ =
- pcm_caps->getElement(application_manager::strings::bits_per_sample)
- .asUInt();
- }
-
- if (pcm_caps->keyExists(application_manager::strings::sampling_rate)) {
- sampling_rate_ =
- pcm_caps->getElement(application_manager::strings::sampling_rate)
- .asUInt();
- }
- }
}
void MediaManagerImpl::PlayA2DPSource(int32_t application_key) {
@@ -298,8 +276,6 @@ void MediaManagerImpl::StopStreaming(
int32_t application_key, protocol_handler::ServiceType service_type) {
SDL_LOG_AUTO_TRACE();
- stream_data_size_ = 0ull;
-
if (streamer_[service_type]) {
streamer_[service_type]->StopActivity(application_key);
}
@@ -337,25 +313,7 @@ void MediaManagerImpl::OnMessageReceived(
ApplicationSharedPtr app = application_manager_.application(streaming_app_id);
if (app) {
- if (ServiceType::kAudio == service_type &&
- "socket" == settings().audio_server_type()) {
- if (stream_data_size_ == 0) {
- socket_audio_stream_start_time_ = std::chrono::system_clock::now();
- }
-
- stream_data_size_ += message->data_size();
- uint32_t ms_for_all_data = DataSizeToMilliseconds(stream_data_size_);
- uint32_t ms_since_stream_start =
- std::chrono::duration_cast<std::chrono::milliseconds>(
- std::chrono::system_clock::now() -
- socket_audio_stream_start_time_)
- .count();
- uint32_t ms_stream_remaining = ms_for_all_data - ms_since_stream_start;
-
- app->WakeUpStreaming(service_type, ms_stream_remaining);
- } else {
- app->WakeUpStreaming(service_type);
- }
+ app->WakeUpStreaming(service_type);
streamer_[service_type]->SendData(streaming_app_id, message);
}
}
@@ -378,8 +336,7 @@ void MediaManagerImpl::FramesProcessed(int32_t application_key,
auto video_stream = std::dynamic_pointer_cast<StreamerAdapter>(
streamer_[protocol_handler::ServiceType::kMobileNav]);
- if (audio_stream.use_count() != 0 &&
- "pipe" == settings().audio_server_type()) {
+ if (audio_stream.use_count() != 0) {
size_t audio_queue_size = audio_stream->GetMsgQueueSize();
SDL_LOG_DEBUG("# Messages in audio queue = " << audio_queue_size);
if (audio_queue_size > 0) {
@@ -387,8 +344,7 @@ void MediaManagerImpl::FramesProcessed(int32_t application_key,
}
}
- if (video_stream.use_count() != 0 &&
- "pipe" == settings().video_server_type()) {
+ if (video_stream.use_count() != 0) {
size_t video_queue_size = video_stream->GetMsgQueueSize();
SDL_LOG_DEBUG("# Messages in video queue = " << video_queue_size);
if (video_queue_size > 0) {
@@ -402,10 +358,4 @@ const MediaManagerSettings& MediaManagerImpl::settings() const {
return settings_;
}
-uint32_t MediaManagerImpl::DataSizeToMilliseconds(uint64_t data_size) const {
- constexpr uint16_t latency_compensation = 500;
- return 1000 * data_size / (sampling_rate_ * bits_per_sample_ / 8) +
- latency_compensation;
-}
-
} // namespace media_manager
diff --git a/src/components/media_manager/src/pipe_streamer_adapter.cc b/src/components/media_manager/src/pipe_streamer_adapter.cc
index 0759813c04..5e4c87c73d 100644
--- a/src/components/media_manager/src/pipe_streamer_adapter.cc
+++ b/src/components/media_manager/src/pipe_streamer_adapter.cc
@@ -86,9 +86,8 @@ bool PipeStreamerAdapter::PipeStreamer::Connect() {
return false;
}
- SDL_LOG_INFO(
-
- "Pipe " << named_pipe_path_ << " was successfuly opened for writing");
+ SDL_LOG_INFO("Pipe " << named_pipe_path_
+ << " was successfuly opened for writing");
return true;
}
diff --git a/src/components/media_manager/src/streamer_adapter.cc b/src/components/media_manager/src/streamer_adapter.cc
index 808b9715af..8dedd56ea5 100644
--- a/src/components/media_manager/src/streamer_adapter.cc
+++ b/src/components/media_manager/src/streamer_adapter.cc
@@ -59,7 +59,6 @@ void StreamerAdapter::StartActivity(int32_t application_key) {
<< " has been already started");
return;
}
- messages_.Reset();
DCHECK(thread_);
const size_t kStackSize = 16384;
@@ -87,6 +86,7 @@ void StreamerAdapter::StopActivity(int32_t application_key) {
DCHECK(streamer_);
streamer_->exitThreadMain();
+ messages_.Reset();
for (std::set<MediaListenerPtr>::iterator it = media_listeners_.begin();
media_listeners_.end() != it;
diff --git a/src/components/media_manager/test/media_manager_impl_test.cc b/src/components/media_manager/test/media_manager_impl_test.cc
index 3b4e6f6150..a64faabe91 100644
--- a/src/components/media_manager/test/media_manager_impl_test.cc
+++ b/src/components/media_manager/test/media_manager_impl_test.cc
@@ -35,7 +35,6 @@
#include "application_manager/message.h"
#include "application_manager/mock_application.h"
#include "application_manager/mock_application_manager.h"
-#include "application_manager/mock_hmi_capabilities.h"
#include "application_manager/resumption/resume_ctrl.h"
#include "application_manager/state_controller.h"
#include "gmock/gmock.h"
@@ -110,10 +109,6 @@ class MediaManagerImplTest : public ::testing::Test {
.WillByDefault(ReturnRef(kDefaultValue));
ON_CALL(mock_media_manager_settings_, audio_server_type())
.WillByDefault(ReturnRef(kDefaultValue));
- ON_CALL(mock_hmi_capabilities_, pcm_stream_capabilities())
- .WillByDefault(Return(nullptr));
- ON_CALL(app_mngr_, hmi_capabilities())
- .WillByDefault(ReturnRef(mock_hmi_capabilities_));
mock_app_ = std::make_shared<MockApp>();
media_manager_impl_.reset(
new MediaManagerImpl(app_mngr_, mock_media_manager_settings_));
@@ -181,7 +176,7 @@ class MediaManagerImplTest : public ::testing::Test {
.WillOnce(Return(true));
EXPECT_CALL(app_mngr_, application(kConnectionKey))
.WillOnce(Return(mock_app_));
- EXPECT_CALL(*mock_app_, WakeUpStreaming(service_type, 0ull));
+ EXPECT_CALL(*mock_app_, WakeUpStreaming(service_type));
MockMediaAdapterImplPtr mock_media_streamer =
std::make_shared<MockMediaAdapterImpl>();
media_manager_impl_->set_mock_streamer(service_type, mock_media_streamer);
@@ -211,7 +206,6 @@ class MediaManagerImplTest : public ::testing::Test {
const ::testing::NiceMock<MockMediaManagerSettings>
mock_media_manager_settings_;
std::shared_ptr<MediaManagerImpl> media_manager_impl_;
- application_manager_test::MockHMICapabilities mock_hmi_capabilities_;
};
TEST_F(MediaManagerImplTest,
diff --git a/src/components/policy/policy_external/include/policy/policy_helper.h b/src/components/policy/policy_external/include/policy/policy_helper.h
index 69ba8806d4..87a9228c12 100644
--- a/src/components/policy/policy_external/include/policy/policy_helper.h
+++ b/src/components/policy/policy_external/include/policy/policy_helper.h
@@ -68,13 +68,6 @@ struct CompareGroupName {
const StringsValueType& group_name_;
};
-/*
- * @brief Used for compare of policies parameters mapped with specific
- * application ids
- */
-bool operator!=(const policy_table::ApplicationParams& first,
- const policy_table::ApplicationParams& second);
-
/**
* @brief Helper struct for checking changes of application policies, which
* come with update along with current data snapshot
@@ -393,15 +386,6 @@ FunctionalGroupIDs Merge(const FunctionalGroupIDs& first,
const FunctionalGroupIDs& second);
/**
- * @brief Finds same values
- * @param first First source of values
- * @param second Second source of values
- * @return Same values set, if any found
- */
-FunctionalGroupIDs FindSame(const FunctionalGroupIDs& first,
- const FunctionalGroupIDs& second);
-
-/**
* @brief Unwrap application policies from predefined values to specific policy
* values, i.e. if application has "default", it will be assigned default
* policies
diff --git a/src/components/policy/policy_external/include/policy/policy_table/types.h b/src/components/policy/policy_external/include/policy/policy_table/types.h
index c95802f181..6b2f05d336 100644
--- a/src/components/policy/policy_external/include/policy/policy_table/types.h
+++ b/src/components/policy/policy_external/include/policy/policy_table/types.h
@@ -654,6 +654,7 @@ struct VehicleDataItem : CompositeType {
Optional<String<0, 255> > until;
Optional<Boolean> removed;
Optional<Boolean> deprecated;
+ Optional<String<0, UINT32_MAX> > defvalue;
Optional<Float<-INT32_MAX, INT32_MAX> > minvalue;
Optional<Float<-INT32_MAX, INT32_MAX> > maxvalue;
Optional<Integer<uint32_t, 0, UINT32_MAX> > minsize;
@@ -682,6 +683,12 @@ struct VehicleDataItem : CompositeType {
* @return true if type is valid.
*/
bool ValidateTypes() const;
+ /**
+ * @brief Validates default value of vehicle data item based
+ * on type, unable to validate enum values
+ * @return true if defvalue is valid.
+ */
+ bool ValidateDefault() const;
bool IsPrimitiveType() const;
bool ValidateNaming(std::string str) const;
diff --git a/src/components/policy/policy_external/src/cache_manager.cc b/src/components/policy/policy_external/src/cache_manager.cc
index 67d8bdb2d1..81a5518cb8 100644
--- a/src/components/policy/policy_external/src/cache_manager.cc
+++ b/src/components/policy/policy_external/src/cache_manager.cc
@@ -166,7 +166,8 @@ struct LinkCollector
typedef std::vector<policy_table::UserConsentRecords::key_type>
ApplicationsIds;
- LinkCollector(std::map<std::string, std::string>& links) : links_(links) {}
+ explicit LinkCollector(std::map<std::string, std::string>& links)
+ : links_(links) {}
void operator()(const policy_table::DeviceData::value_type& value) {
using namespace policy_table;
@@ -208,10 +209,12 @@ struct ExternalConsentConsentGroupAppender
};
struct DefaultPolicyUpdater {
- DefaultPolicyUpdater(const policy_table::ApplicationParams& default_params)
+ explicit DefaultPolicyUpdater(
+ const policy_table::ApplicationParams& default_params)
: default_params_(default_params) {}
- void operator()(policy_table::ApplicationPolicies::value_type& pt_value) {
+ void operator()(
+ policy_table::ApplicationPolicies::value_type& pt_value) const {
if (policy::kDefaultId == pt_value.second.get_string()) {
pt_value.second = default_params_;
pt_value.second.set_to_string(policy::kDefaultId);
@@ -1302,7 +1305,6 @@ int CacheManager::IgnitionCyclesBeforeExchange() {
*pt_->policy_table.module_meta->ignition_cycles_since_last_exchange);
current = std::max(last_exch, 0);
SDL_LOG_DEBUG(
-
"IgnitionCyclesBeforeExchange current:" << static_cast<int>(current));
return std::max(limit - current, 0);
@@ -1340,7 +1342,6 @@ bool CacheManager::SetCountersPassedForSuccessfulUpdate(
case DAYS_AFTER_EPOCH:
*pt_->policy_table.module_meta->pt_exchanged_x_days_after_epoch = value;
SDL_LOG_DEBUG(
-
"SetCountersPassedForSuccessfulUpdate days after epoch:" << value);
break;
default:
@@ -1704,6 +1705,8 @@ std::vector<UserFriendlyMessage> CacheManager::GetUserFriendlyMsg(
SDL_LOG_ERROR("No fallback language found for message code: " << *it);
continue;
}
+ // FIXME (VSemenyuk): message_string will always be overwritten by
+ // active_hmi_language_message_string
message_string = fallback_message_string;
}
message_string = active_hmi_language_message_string;
@@ -1827,10 +1830,6 @@ bool CacheManager::GetPriority(const std::string& policy_app_id,
void CacheManager::CheckSnapshotInitialization() {
CACHE_MANAGER_CHECK_VOID();
- if (!snapshot_) {
- SDL_LOG_ERROR("Snapshot pointer is not initialized");
- return;
- }
*(snapshot_->policy_table.module_config.preloaded_pt) = false;
@@ -2182,9 +2181,9 @@ int CacheManager::CountUnconsentedGroups(const std::string& policy_app_id,
pt_->policy_table.app_policies_section;
policy_table::Strings::iterator app_groups;
- policy_table::Strings::iterator app_groups_end = app_groups;
+ policy_table::Strings::iterator app_groups_end;
policy_table::Strings::iterator app_pre_groups;
- policy_table::Strings::iterator app_pre_groups_end = app_pre_groups;
+ policy_table::Strings::iterator app_pre_groups_end;
if (kDeviceId == policy_app_id) {
app_groups = app_policies_section.device.groups.begin();
@@ -2294,11 +2293,10 @@ std::string CacheManager::GetCCPUVersionFromPT() const {
bool CacheManager::IsMetaInfoPresent() const {
CACHE_MANAGER_CHECK(false);
- bool result = true;
sync_primitives::AutoLock lock(cache_lock_);
- result = NULL != pt_->policy_table.module_meta->ccpu_version &&
- NULL != pt_->policy_table.module_meta->wers_country_code &&
- NULL != pt_->policy_table.module_meta->language;
+ bool result = NULL != pt_->policy_table.module_meta->ccpu_version &&
+ NULL != pt_->policy_table.module_meta->wers_country_code &&
+ NULL != pt_->policy_table.module_meta->language;
return result;
}
@@ -2353,9 +2351,8 @@ bool CacheManager::CleanupUnpairedDevices() {
SDL_LOG_DEBUG("Device_data size is: " << device_data.size());
device_data.erase(it_device);
- SDL_LOG_INFO(
-
- "Device id " << *iter << " had been deleted from device_data section.");
+ SDL_LOG_INFO("Device id " << *iter
+ << " had been deleted from device_data section.");
SDL_LOG_DEBUG("Device_data size is: " << device_data.size());
}
is_unpaired_.clear();
diff --git a/src/components/policy/policy_external/src/policy_helper.cc b/src/components/policy/policy_external/src/policy_helper.cc
index 4607c3ca5f..0dde301d0e 100644
--- a/src/components/policy/policy_external/src/policy_helper.cc
+++ b/src/components/policy/policy_external/src/policy_helper.cc
@@ -102,25 +102,6 @@ bool CompareGroupName::operator()(
return !(strcasecmp(gn_.c_str(), gn_compare.c_str()));
}
-bool operator!=(const policy_table::ApplicationParams& first,
- const policy_table::ApplicationParams& second) {
- if (first.groups.size() != second.groups.size()) {
- return true;
- }
- StringsConstItr it_first = first.groups.begin();
- StringsConstItr it_first_end = first.groups.end();
- StringsConstItr it_second = second.groups.begin();
- StringsConstItr it_second_end = second.groups.end();
- for (; it_first != it_first_end; ++it_first) {
- CompareGroupName gp(*it_first);
- StringsConstItr it = std::find_if(it_second, it_second_end, gp);
- if (it_second_end == it) {
- return true;
- }
- }
- return false;
-}
-
CheckAppPolicy::CheckAppPolicy(
PolicyManagerImpl* pm,
const std::shared_ptr<policy_table::Table> update,
@@ -607,7 +588,6 @@ bool CheckAppPolicy::IsConsentRequired(const std::string& app_id,
return false;
}
- bool is_preconsented = false;
policy_table::Strings::value_type str(group_name);
policy_table::Strings::iterator pre_begin =
update_->policy_table.app_policies_section.apps[app_id]
@@ -618,7 +598,7 @@ bool CheckAppPolicy::IsConsentRequired(const std::string& app_id,
policy_table::Strings::iterator it2 = std::find(pre_begin, pre_end, str);
- is_preconsented = pre_end != it2;
+ bool is_preconsented = pre_end != it2;
return it->second.user_consent_prompt.is_initialized() && !is_preconsented;
}
@@ -695,7 +675,6 @@ bool CheckAppPolicy::IsAppPropertiesChanged(
if (!IsKnownAppication(app_policy.first)) {
SDL_LOG_DEBUG(
-
"AppProperties provided for new application: " << app_policy.first);
return true;
}
@@ -768,7 +747,7 @@ bool CheckAppPolicy::IsEncryptionRequiredFlagChanged(
return result;
};
- auto get_app_rpcs = [](const std::string group_name,
+ auto get_app_rpcs = [](const std::string& group_name,
const FunctionalGroupings& groups)
-> rpc::Optional<policy_table::Rpcs> {
auto it = groups.find(group_name);
@@ -953,8 +932,7 @@ void FillNotificationData::UpdateParameters(
// If 'parameters' section is omitted
if (!in_parameters.is_initialized()) {
- if (!does_require_user_consent_ ||
- (does_require_user_consent_ && kAllowedKey == current_key_)) {
+ if (!does_require_user_consent_ || kAllowedKey == current_key_) {
out_parameter.any_parameter_allowed = true;
}
}
@@ -1251,28 +1229,6 @@ FunctionalGroupIDs Merge(const FunctionalGroupIDs& first,
return merged;
}
-FunctionalGroupIDs FindSame(const FunctionalGroupIDs& first,
- const FunctionalGroupIDs& second) {
- SDL_LOG_INFO("Find same groups");
- FunctionalGroupIDs first_copy(first);
- FunctionalGroupIDs second_copy(second);
-
- std::sort(first_copy.begin(), first_copy.end());
- std::sort(second_copy.begin(), second_copy.end());
-
- FunctionalGroupIDs same;
- std::set_intersection(first_copy.begin(),
- first_copy.end(),
- second_copy.begin(),
- second_copy.end(),
- std::back_inserter(same));
-
- same.resize(
- std::distance(same.begin(), std::unique(same.begin(), same.end())));
-
- return same;
-}
-
bool UnwrapAppPolicies(policy_table::ApplicationPolicies& app_policies) {
policy_table::ApplicationPolicies::iterator it_default =
app_policies.find(kDefaultId);
diff --git a/src/components/policy/policy_external/src/policy_manager_impl.cc b/src/components/policy/policy_external/src/policy_manager_impl.cc
index 773c689409..9bcea70803 100644
--- a/src/components/policy/policy_external/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_external/src/policy_manager_impl.cc
@@ -62,7 +62,7 @@ namespace {
struct GroupNamesAppender
: public std::unary_function<void,
const policy::FunctionalGroupPermission&> {
- GroupNamesAppender(policy_table::Strings& names) : names_(names) {}
+ explicit GroupNamesAppender(policy_table::Strings& names) : names_(names) {}
void operator()(const policy::FunctionalGroupPermission& value) {
names_.push_back(value.group_name);
@@ -465,7 +465,6 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
const std::string& file, const BinaryMessage& pt_content) {
SDL_LOG_INFO("LoadPT of size " << pt_content.size());
SDL_LOG_DEBUG(
-
"PTU content is: " << std::string(pt_content.begin(), pt_content.end()));
// Parse message into table struct
@@ -491,7 +490,6 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
auto policy_table_snapshot = cache_->GenerateSnapshot();
if (!policy_table_snapshot) {
SDL_LOG_ERROR(
-
"Failed to create snapshot of policy table, trying another exchange");
return PtProcessingResult::kNewPtRequired;
}
@@ -507,7 +505,6 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
// Replace current data with updated
if (!cache_->ApplyUpdate(*pt_update)) {
SDL_LOG_WARN(
-
"Unsuccessful save of updated policy table, trying another exchange");
return PtProcessingResult::kNewPtRequired;
}
@@ -968,7 +965,6 @@ void PolicyManagerImpl::CheckPermissions(const PTString& device_id,
hmi_level)) {
// RPC found in allowed == allowed by backend, but disallowed by user
SDL_LOG_DEBUG(
-
"RPC found in allowed == allowed by backend, but disallowed by user");
result.hmi_level_permitted = kRpcUserDisallowed;
} else {
@@ -1266,7 +1262,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
app_permissions_diff_.find(policy_app_id);
if (app_permissions_diff_.end() == it_pending) {
SDL_LOG_WARN(
-
"No pending permissions had been found for appID: " << policy_app_id);
return;
}
@@ -1284,7 +1279,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
for (; it_groups != it_end_groups; ++it_groups) {
if (policy::kGroupUndefined == it_groups->state) {
SDL_LOG_DEBUG(
-
"Unconsented groups still present for appID: " << policy_app_id);
it_pending->second.appPermissionsConsentNeeded = true;
return;
@@ -1292,7 +1286,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
}
SDL_LOG_DEBUG(
-
"Unconsented groups not present anymore for appID: " << policy_app_id);
it_pending->second.appPermissionsConsentNeeded = false;
return;
@@ -1827,13 +1820,12 @@ bool PolicyManagerImpl::IsNeedToUpdateExternalConsentStatus(
ItemV difference_v;
difference_v.resize(new_status_v.size() + existing_status_v.size());
- ItemV::iterator ci = difference_v.begin();
- ci = std::set_difference(new_status_v.begin(),
- new_status_v.end(),
- existing_status_v.begin(),
- existing_status_v.end(),
- difference_v.begin(),
- ConsentStatusComparatorFunc);
+ ItemV::iterator ci = std::set_difference(new_status_v.begin(),
+ new_status_v.end(),
+ existing_status_v.begin(),
+ existing_status_v.end(),
+ difference_v.begin(),
+ ConsentStatusComparatorFunc);
difference_v.resize(ci - difference_v.begin());
return !difference_v.empty();
@@ -2255,16 +2247,14 @@ void PolicyManagerImpl::AddNewApplication(const std::string& device_id,
if (kDeviceHasNoConsent == device_consent ||
kDeviceDisallowed == device_consent) {
- SDL_LOG_INFO(
-
- "Setting " << policy::kPreDataConsentId
- << " permissions for application id: " << application_id);
+ SDL_LOG_INFO("Setting "
+ << policy::kPreDataConsentId
+ << " permissions for application id: " << application_id);
cache_->SetPredataPolicy(application_id);
} else {
- SDL_LOG_INFO(
-
- "Setting " << policy::kDefaultId
- << " permissions for application id: " << application_id);
+ SDL_LOG_INFO("Setting "
+ << policy::kDefaultId
+ << " permissions for application id: " << application_id);
cache_->SetDefaultPolicy(application_id);
}
@@ -2285,10 +2275,9 @@ void PolicyManagerImpl::PromoteExistedApplication(
<< " device_consent: " << device_consent);
if (kDeviceAllowed == device_consent &&
cache_->IsPredataPolicy(application_id)) {
- SDL_LOG_INFO(
-
- "Setting " << policy::kDefaultId
- << " permissions for application id: " << application_id);
+ SDL_LOG_INFO("Setting "
+ << policy::kDefaultId
+ << " permissions for application id: " << application_id);
cache_->SetDefaultPolicy(application_id);
}
ProcessExternalConsentStatusForApp(
@@ -2386,7 +2375,7 @@ void PolicyManagerImpl::SetDefaultHmiTypes(
}
struct HMITypeToInt {
- int operator()(const policy_table::AppHMITypes::value_type item) {
+ int operator()(const policy_table::AppHMITypes::value_type item) const {
return policy_table::AppHMIType(item);
}
};
@@ -2587,6 +2576,7 @@ __attribute__((visibility("default"))) policy::PolicyManager* CreateManager(
return new policy::PolicyManagerImpl();
}
+// cppcheck-suppress unusedFunction
__attribute__((visibility("default"))) void DeleteManager(
policy::PolicyManager* pm) {
delete pm;
diff --git a/src/components/policy/policy_external/src/policy_table/types.cc b/src/components/policy/policy_external/src/policy_table/types.cc
index 1f344f5263..243cf98066 100644
--- a/src/components/policy/policy_external/src/policy_table/types.cc
+++ b/src/components/policy/policy_external/src/policy_table/types.cc
@@ -1,5 +1,8 @@
#include "policy/policy_table/types.h"
+
#include <algorithm>
+#include <regex>
+
#include "rpc_base/rpc_base_json_inl.h"
namespace rpc {
@@ -872,7 +875,6 @@ ModuleConfig::ModuleConfig(const Json::Value* value__)
impl::ValueMember(value__, "lock_screen_dismissal_enabled")) {}
void ModuleConfig::SafeCopyFrom(const ModuleConfig& from) {
- exchange_after_x_days = from.exchange_after_x_days;
exchange_after_x_kilometers = from.exchange_after_x_kilometers;
exchange_after_x_days = from.exchange_after_x_days;
exchange_after_x_ignition_cycles = from.exchange_after_x_ignition_cycles;
@@ -2217,6 +2219,7 @@ VehicleDataItem::VehicleDataItem(const VehicleDataItem& vehicle_data)
, until(vehicle_data.until)
, removed(vehicle_data.removed)
, deprecated(vehicle_data.deprecated)
+ , defvalue(vehicle_data.defvalue)
, minvalue(vehicle_data.minvalue)
, maxvalue(vehicle_data.maxvalue)
, minsize(vehicle_data.minsize)
@@ -2236,12 +2239,17 @@ VehicleDataItem::VehicleDataItem(const Json::Value* value__)
, until(impl::ValueMember(value__, "until"))
, removed(impl::ValueMember(value__, "removed"))
, deprecated(impl::ValueMember(value__, "deprecated"))
+ , defvalue(static_cast<Json::Value*>(nullptr))
, minvalue(impl::ValueMember(value__, "minvalue"))
, maxvalue(impl::ValueMember(value__, "maxvalue"))
, minsize(impl::ValueMember(value__, "minsize"))
, maxsize(impl::ValueMember(value__, "maxsize"))
, minlength(impl::ValueMember(value__, "minlength"))
- , maxlength(impl::ValueMember(value__, "maxlength")) {}
+ , maxlength(impl::ValueMember(value__, "maxlength")) {
+ if (value__->isMember("defvalue")) {
+ *defvalue = impl::ValueMember(value__, "defvalue")->asString();
+ }
+}
VehicleDataItem::~VehicleDataItem() {}
@@ -2267,6 +2275,7 @@ Json::Value VehicleDataItem::ToJsonValue() const {
impl::WriteJsonField("until", until, &ret);
impl::WriteJsonField("removed", removed, &ret);
impl::WriteJsonField("deprecated", deprecated, &ret);
+ impl::WriteJsonField("defvalue", defvalue, &ret);
impl::WriteJsonField("minvalue", minvalue, &ret);
impl::WriteJsonField("maxvalue", maxvalue, &ret);
impl::WriteJsonField("minsize", minsize, &ret);
@@ -2281,9 +2290,10 @@ bool VehicleDataItem::operator==(const VehicleDataItem& vd) {
mandatory == vd.mandatory && params == vd.params &&
array == vd.array && since == vd.since && until == vd.until &&
removed == vd.removed && deprecated == vd.deprecated &&
- minvalue == vd.minvalue && maxvalue == vd.maxvalue &&
- minsize == vd.minsize && maxsize == vd.maxsize &&
- minlength == vd.minlength && maxlength == vd.maxlength);
+ defvalue == vd.defvalue && minvalue == vd.minvalue &&
+ maxvalue == vd.maxvalue && minsize == vd.minsize &&
+ maxsize == vd.maxsize && minlength == vd.minlength &&
+ maxlength == vd.maxlength);
}
bool VehicleDataItem::is_valid() const {
@@ -2317,6 +2327,9 @@ bool VehicleDataItem::is_valid() const {
if (!deprecated.is_valid()) {
return false;
}
+ if (!(defvalue.is_valid() && ValidateDefault())) {
+ return false;
+ }
if (!minvalue.is_valid()) {
return false;
}
@@ -2373,6 +2386,9 @@ bool VehicleDataItem::struct_not_empty() const {
if (!deprecated.is_initialized()) {
return false;
}
+ if (!defvalue.is_initialized()) {
+ return false;
+ }
if (!minvalue.is_initialized()) {
return false;
}
@@ -2443,6 +2459,13 @@ void VehicleDataItem::ReportErrors(rpc::ValidationReport* report__) const {
if (!deprecated.is_valid()) {
deprecated.ReportErrors(&report__->ReportSubobject("deprecated"));
}
+ if (!defvalue.is_valid()) {
+ defvalue.ReportErrors(&report__->ReportSubobject("defvalue"));
+ }
+ if (!ValidateDefault()) {
+ report__->set_validation_info("Invalid default value: " +
+ std::string(*defvalue));
+ }
if (!minvalue.is_valid()) {
minvalue.ReportErrors(&report__->ReportSubobject("minvalue"));
}
@@ -2475,6 +2498,7 @@ void VehicleDataItem::SetPolicyTableType(PolicyTableType pt_type) {
until.SetPolicyTableType(pt_type);
removed.SetPolicyTableType(pt_type);
deprecated.SetPolicyTableType(pt_type);
+ defvalue.SetPolicyTableType(pt_type);
minvalue.SetPolicyTableType(pt_type);
maxvalue.SetPolicyTableType(pt_type);
minsize.SetPolicyTableType(pt_type);
@@ -2510,6 +2534,46 @@ bool VehicleDataItem::ValidateNaming(std::string str) const {
!contains_spec_chars(str);
}
+bool VehicleDataItem::ValidateDefault() const {
+ if (!defvalue.is_initialized()) {
+ return true;
+ }
+ std::string value = std::string(*defvalue);
+ bool valid = false;
+ if (VehicleDataItem::kInteger == std::string(type)) {
+ // Match int
+ std::regex pattern("^-?\\d+$");
+ bool type_matches = std::regex_match(value, pattern);
+ if (type_matches) {
+ size_t int_value = std::stol(value);
+ valid = (!minvalue.is_initialized() || int_value >= *minvalue) &&
+ (!maxvalue.is_initialized() || int_value <= *maxvalue);
+ }
+ } else if (VehicleDataItem::kFloat == std::string(type) ||
+ VehicleDataItem::kDouble == std::string(type)) {
+ // Match double
+ std::regex pattern("^-?\\d+(\\.\\d+)?$");
+ bool type_matches = std::regex_match(value, pattern);
+ if (type_matches) {
+ double dbl_value = std::stod(value);
+ valid = (!minvalue.is_initialized() || dbl_value >= *minvalue) &&
+ (!maxvalue.is_initialized() || dbl_value <= *maxvalue);
+ }
+ } else if (VehicleDataItem::kString == std::string(type)) {
+ size_t length = value.length();
+ valid = (!minsize.is_initialized() || length >= *minsize) &&
+ (!maxsize.is_initialized() || length <= *maxsize);
+ } else if (VehicleDataItem::kBoolean == std::string(type)) {
+ valid = ("false" == value || "true" == value);
+ } else if (VehicleDataItem::kStruct != std::string(type) &&
+ !IsPrimitiveType()) {
+ // Enum values cannot be validated here
+ valid = true;
+ }
+
+ return valid;
+}
+
bool VehicleDataItem::ValidateTypes() const {
if (VehicleDataItem::kStruct == std::string(type)) {
return params.is_initialized() && !(params->empty()) && params.is_valid();
diff --git a/src/components/policy/policy_external/src/policy_table/validation.cc b/src/components/policy/policy_external/src/policy_table/validation.cc
index 89c5992fab..825fd20b84 100644
--- a/src/components/policy/policy_external/src/policy_table/validation.cc
+++ b/src/components/policy/policy_external/src/policy_table/validation.cc
@@ -30,7 +30,6 @@ bool VerifyPredefinedApp(ApplicationPolicies::value_type& app_policies) {
if (PT_PRELOADED == app_policies.second.GetPolicyTableType() &&
predefined_request_types.is_cleaned_up()) {
SDL_LOG_ERROR(
-
app_id << " policy RequestTypes is empty after clean-up. Exiting.");
return false;
}
@@ -326,9 +325,8 @@ bool VehicleDataItem::Validate() const {
};
if (!ValidateTypes()) {
- SDL_LOG_ERROR(
-
- "Unknown type: " << std::string(type) << " of " << std::string(key));
+ SDL_LOG_ERROR("Unknown type: " << std::string(type) << " of "
+ << std::string(key));
return false;
}
return true;
diff --git a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
index 05b45e5f1c..7147e0949d 100644
--- a/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
+++ b/src/components/policy/policy_external/src/sql_pt_ext_representation.cc
@@ -1123,7 +1123,6 @@ void SQLPTExtRepresentation::GatherConsentGroup(
// Fill data for ExternalConsent consents
if (!query.Prepare(sql_pt_ext::kSelectExternalConsentStatusGroup)) {
SDL_LOG_WARN(
-
"Incorrect select statement for ExternalConsent consented groups.");
return;
}
diff --git a/src/components/policy/policy_external/src/sql_pt_queries.cc b/src/components/policy/policy_external/src/sql_pt_queries.cc
index 95c82b6ea6..9e69d2cef8 100644
--- a/src/components/policy/policy_external/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_external/src/sql_pt_queries.cc
@@ -480,6 +480,7 @@ const std::string kCreateSchema =
" `until` VARCHAR(45), "
" `removed` BOOL, "
" `deprecated` BOOL, "
+ " `defvalue` VARCHAR(65535), "
" `minvalue` INTEGER, "
" `maxvalue` INTEGER, "
" `minsize` INTEGER, "
@@ -759,13 +760,14 @@ const std::string kInsertVehicleDataItem =
" `until`, "
" `removed`, "
" `deprecated`, "
+ " `defvalue`, "
" `minvalue`, "
" `maxvalue`, "
" `minsize`, "
" `maxsize`, "
" `minlength`, "
" `maxlength`) "
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
const std::string kInsertVehicleDataItemParams =
"INSERT INTO `vehicle_data_item_parameters` ("
diff --git a/src/components/policy/policy_external/src/sql_pt_representation.cc b/src/components/policy/policy_external/src/sql_pt_representation.cc
index 36e363d922..d4458ef2a5 100644
--- a/src/components/policy/policy_external/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_external/src/sql_pt_representation.cc
@@ -108,9 +108,8 @@ void SQLPTRepresentation::CheckPermissions(const PTString& app_id,
utils::dbms::SQLQuery query(db());
if (!query.Prepare(sql_pt::kSelectRpc)) {
- SDL_LOG_WARN(
-
- "Incorrect select statement from rpcs" << query.LastError().text());
+ SDL_LOG_WARN("Incorrect select statement from rpcs"
+ << query.LastError().text());
return;
}
query.Bind(0, app_id);
@@ -379,9 +378,8 @@ InitResult SQLPTRepresentation::Init(const PolicySettings* settings) {
utils::dbms::SQLQuery check_first_run(db());
if (check_first_run.Prepare(sql_pt::kIsFirstRun) &&
check_first_run.Next()) {
- SDL_LOG_INFO(
-
- "Selecting is first run " << check_first_run.GetBoolean(0));
+ SDL_LOG_INFO("Selecting is first run "
+ << check_first_run.GetBoolean(0));
if (check_first_run.GetBoolean(0)) {
utils::dbms::SQLQuery set_not_first_run(db());
set_not_first_run.Exec(sql_pt::kSetNotFirstRun);
@@ -403,13 +401,11 @@ InitResult SQLPTRepresentation::Init(const PolicySettings* settings) {
utils::dbms::SQLQuery query(db());
if (!query.Exec(sql_pt::kCreateSchema)) {
SDL_LOG_ERROR(
-
"Failed creating schema of database: " << query.LastError().text());
return InitResult::FAIL;
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return InitResult::FAIL;
}
@@ -442,7 +438,6 @@ bool SQLPTRepresentation::Clear() {
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return false;
}
@@ -457,13 +452,11 @@ bool SQLPTRepresentation::RefreshDB() {
}
if (!query.Exec(sql_pt::kCreateSchema)) {
SDL_LOG_ERROR(
-
"Failed creating schema of database: " << query.LastError().text());
return false;
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return false;
}
@@ -1711,22 +1704,25 @@ policy_table::VehicleDataItem SQLPTRepresentation::PopulateVDIFromQuery(
*result.deprecated = query.GetBoolean(8);
}
if (!query.IsNull(9)) {
- *result.minvalue = query.GetInteger(9);
+ *result.defvalue = query.GetString(9);
}
if (!query.IsNull(10)) {
- *result.maxvalue = query.GetInteger(10);
+ *result.minvalue = query.GetInteger(10);
}
if (!query.IsNull(11)) {
- *result.minsize = query.GetUInteger(11);
+ *result.maxvalue = query.GetInteger(11);
}
if (!query.IsNull(12)) {
- *result.maxsize = query.GetUInteger(12);
+ *result.minsize = query.GetUInteger(12);
}
if (!query.IsNull(13)) {
- *result.minlength = query.GetUInteger(13);
+ *result.maxsize = query.GetUInteger(13);
}
if (!query.IsNull(14)) {
- *result.maxlength = query.GetUInteger(14);
+ *result.minlength = query.GetUInteger(14);
+ }
+ if (!query.IsNull(15)) {
+ *result.maxlength = query.GetUInteger(15);
}
result.params->mark_initialized();
@@ -1750,9 +1746,7 @@ SQLPTRepresentation::SelectCompositeVehicleDataItems() const {
if (!vdi.is_initialized()) {
return policy_table::VehicleDataItems();
}
- for (const auto& item : vdi) {
- result.push_back(item);
- }
+ std::copy(vdi.begin(), vdi.end(), std::back_inserter(result));
}
return result;
@@ -2632,24 +2626,27 @@ bool SQLPTRepresentation::InsertVehicleDataItem(
vehicle_data_item.deprecated.is_initialized()
? query.Bind(8, *vehicle_data_item.deprecated)
: query.Bind(8);
- vehicle_data_item.minvalue.is_initialized()
- ? query.Bind(9, *vehicle_data_item.minvalue)
+ vehicle_data_item.defvalue.is_initialized()
+ ? query.Bind(9, *vehicle_data_item.defvalue)
: query.Bind(9);
- vehicle_data_item.maxvalue.is_initialized()
- ? query.Bind(10, *vehicle_data_item.maxvalue)
+ vehicle_data_item.minvalue.is_initialized()
+ ? query.Bind(10, *vehicle_data_item.minvalue)
: query.Bind(10);
- vehicle_data_item.minsize.is_initialized()
- ? query.Bind(11, static_cast<int64_t>(*vehicle_data_item.minsize))
+ vehicle_data_item.maxvalue.is_initialized()
+ ? query.Bind(11, *vehicle_data_item.maxvalue)
: query.Bind(11);
- vehicle_data_item.maxsize.is_initialized()
- ? query.Bind(12, static_cast<int64_t>(*vehicle_data_item.maxsize))
+ vehicle_data_item.minsize.is_initialized()
+ ? query.Bind(12, static_cast<int64_t>(*vehicle_data_item.minsize))
: query.Bind(12);
- vehicle_data_item.minlength.is_initialized()
- ? query.Bind(13, static_cast<int64_t>(*vehicle_data_item.minlength))
+ vehicle_data_item.maxsize.is_initialized()
+ ? query.Bind(13, static_cast<int64_t>(*vehicle_data_item.maxsize))
: query.Bind(13);
- vehicle_data_item.maxlength.is_initialized()
- ? query.Bind(14, static_cast<int64_t>(*vehicle_data_item.maxlength))
+ vehicle_data_item.minlength.is_initialized()
+ ? query.Bind(14, static_cast<int64_t>(*vehicle_data_item.minlength))
: query.Bind(14);
+ vehicle_data_item.maxlength.is_initialized()
+ ? query.Bind(15, static_cast<int64_t>(*vehicle_data_item.maxlength))
+ : query.Bind(15);
if (!query.Exec() || !query.Reset()) {
SDL_LOG_ERROR("Failed to insert vehicle data item: "
@@ -2684,7 +2681,6 @@ bool SQLPTRepresentation::InsertVehicleDataItem(
if (!query.Exec() || !query.Reset()) {
SDL_LOG_ERROR(
-
"Failed to insert to vehicle data item relations helper table: "
<< static_cast<std::string>(param.key)
<< ". Error: " << query.LastError().text());
diff --git a/src/components/policy/policy_external/test/sql_pt_representation_test.cc b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
index 5495ef65b0..224c663c52 100644
--- a/src/components/policy/policy_external/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_external/test/sql_pt_representation_test.cc
@@ -408,6 +408,7 @@ TEST_F(SQLPTRepresentationTest, VehicleDataItem_Store_Complete_Item) {
*message.until = "5.0";
*message.removed = false;
*message.deprecated = false;
+ *message.defvalue = "0";
*message.minvalue = 0;
*message.maxvalue = 255;
*message.minsize = 0;
diff --git a/src/components/policy/policy_regular/include/policy/policy_helper.h b/src/components/policy/policy_regular/include/policy/policy_helper.h
index d5155cf91b..f01d132049 100644
--- a/src/components/policy/policy_regular/include/policy/policy_helper.h
+++ b/src/components/policy/policy_regular/include/policy/policy_helper.h
@@ -68,13 +68,6 @@ struct CompareGroupName {
};
/*
- * @brief Used for compare of policies parameters mapped with specific
- * application ids
- */
-bool operator!=(const policy_table::ApplicationParams& first,
- const policy_table::ApplicationParams& second);
-
-/*
* @brief Helper struct for checking changes of application policies, which
* come with update along with current data snapshot
* In case of policies changed for some application, current data will be
@@ -257,15 +250,6 @@ FunctionalGroupIDs Merge(const FunctionalGroupIDs& first,
const FunctionalGroupIDs& second);
/**
- * @brief Finds same values
- * @param first First source of values
- * @param second Second source of values
- * @return Same values set, if any found
- */
-FunctionalGroupIDs FindSame(const FunctionalGroupIDs& first,
- const FunctionalGroupIDs& second);
-
-/**
* @brief Unwrap application policies from predefined values to specific policy
* values, i.e. if application has "default", it will be assigned default
* policies
diff --git a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
index 307697dd64..dff4802d82 100644
--- a/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
+++ b/src/components/policy/policy_regular/include/policy/policy_manager_impl.h
@@ -869,7 +869,7 @@ class PolicyManagerImpl : public PolicyManager {
void ResetTimeout() OVERRIDE;
protected:
-#ifdef USE_HMI_PTU_DECRYPTION
+#if defined USE_HMI_PTU_DECRYPTION && defined PROPRIETARY_MODE
/**
* @brief Parse policy table content and convert to PT object
* @param pt_content binary content of PT
diff --git a/src/components/policy/policy_regular/include/policy/policy_table/types.h b/src/components/policy/policy_regular/include/policy/policy_table/types.h
index 38d49bcc7c..673f17e32b 100644
--- a/src/components/policy/policy_regular/include/policy/policy_table/types.h
+++ b/src/components/policy/policy_regular/include/policy/policy_table/types.h
@@ -551,6 +551,7 @@ struct VehicleDataItem : CompositeType {
Optional<String<0, 255> > until;
Optional<Boolean> removed;
Optional<Boolean> deprecated;
+ Optional<String<0, UINT32_MAX> > defvalue;
Optional<Float<-INT32_MAX, INT32_MAX> > minvalue;
Optional<Float<-INT32_MAX, INT32_MAX> > maxvalue;
Optional<Integer<uint32_t, 0, UINT32_MAX> > minsize;
@@ -579,6 +580,12 @@ struct VehicleDataItem : CompositeType {
* @return true if type is valid.
*/
bool ValidateTypes() const;
+ /**
+ * @brief Validates default value of vehicle data item based
+ * on type, unable to validate enum values
+ * @return true if defvalue is valid.
+ */
+ bool ValidateDefault() const;
bool IsPrimitiveType() const;
bool ValidateNaming(std::string str) const;
diff --git a/src/components/policy/policy_regular/src/cache_manager.cc b/src/components/policy/policy_regular/src/cache_manager.cc
index 5a75c47725..8f98996687 100644
--- a/src/components/policy/policy_regular/src/cache_manager.cc
+++ b/src/components/policy/policy_regular/src/cache_manager.cc
@@ -79,7 +79,7 @@ SDL_CREATE_LOG_VARIABLE("Policy")
}
struct LanguageFinder {
- LanguageFinder(const std::string& language) : language_(language) {}
+ explicit LanguageFinder(const std::string& language) : language_(language) {}
bool operator()(const policy_table::Languages::value_type& lang) const {
return !strcasecmp(language_.c_str(), lang.first.c_str());
}
@@ -89,10 +89,12 @@ struct LanguageFinder {
};
struct PolicyTableUpdater {
- PolicyTableUpdater(const policy_table::ApplicationParams& default_params)
+ explicit PolicyTableUpdater(
+ const policy_table::ApplicationParams& default_params)
: default_params_(default_params) {}
- void operator()(policy_table::ApplicationPolicies::value_type& pt_value) {
+ void operator()(
+ policy_table::ApplicationPolicies::value_type& pt_value) const {
if (policy::kDefaultId == pt_value.second.get_string()) {
pt_value.second = default_params_;
pt_value.second.set_to_string(policy::kDefaultId);
@@ -607,7 +609,6 @@ int CacheManager::IgnitionCyclesBeforeExchange() {
*pt_->policy_table.module_meta->ignition_cycles_since_last_exchange);
current = std::max(last_exch, 0);
SDL_LOG_DEBUG(
-
"IgnitionCyclesBeforeExchange current:" << static_cast<int>(current));
return std::max(limit - current, 0);
@@ -645,7 +646,6 @@ bool CacheManager::SetCountersPassedForSuccessfulUpdate(
case DAYS_AFTER_EPOCH:
*pt_->policy_table.module_meta->pt_exchanged_x_days_after_epoch = value;
SDL_LOG_DEBUG(
-
"SetCountersPassedForSuccessfulUpdate days after epoch:" << value);
break;
default:
@@ -1138,10 +1138,6 @@ bool CacheManager::GetPriority(const std::string& policy_app_id,
void CacheManager::CheckSnapshotInitialization() {
CACHE_MANAGER_CHECK_VOID();
- if (!snapshot_) {
- SDL_LOG_ERROR("Snapshot pointer is not initialized");
- return;
- }
*(snapshot_->policy_table.module_config.preloaded_pt) = false;
@@ -1309,8 +1305,6 @@ void CacheManager::PersistData() {
copy_pt.policy_table.app_policies_section.apps.end();
bool is_revoked = false;
- bool is_default_policy;
- bool is_predata_policy;
for (; app_policy_iter != app_policy_iter_end; ++app_policy_iter) {
const std::string app_id = (*app_policy_iter).first;
@@ -1321,7 +1315,7 @@ void CacheManager::PersistData() {
copy_pt.policy_table.app_policies_section.apps[app_id].is_null();
}
- is_default_policy =
+ bool is_default_policy =
copy_pt.policy_table.app_policies_section.apps.end() !=
copy_pt.policy_table.app_policies_section.apps.find(app_id) &&
policy::kDefaultId ==
@@ -1329,7 +1323,7 @@ void CacheManager::PersistData() {
.get_string();
// TODO(AOleynik): Remove this field from DB
- is_predata_policy =
+ bool is_predata_policy =
copy_pt.policy_table.app_policies_section.apps.end() !=
copy_pt.policy_table.app_policies_section.apps.find(app_id) &&
policy::kPreDataConsentId ==
diff --git a/src/components/policy/policy_regular/src/policy_helper.cc b/src/components/policy/policy_regular/src/policy_helper.cc
index 7d99ff51c0..a5d66fafba 100644
--- a/src/components/policy/policy_regular/src/policy_helper.cc
+++ b/src/components/policy/policy_regular/src/policy_helper.cc
@@ -54,9 +54,10 @@ bool CompareStrings(const StringsValueType& first,
}
struct CheckGroupName {
- CheckGroupName(const policy::StringsValueType& value) : value_(value) {}
+ explicit CheckGroupName(const policy::StringsValueType& value)
+ : value_(value) {}
- bool operator()(const FunctionalGroupNames::value_type& value) {
+ bool operator()(const FunctionalGroupNames::value_type& value) const {
return value.second.second == std::string(value_);
}
@@ -101,25 +102,6 @@ bool CompareGroupName::operator()(
return !(strcasecmp(gn_.c_str(), gn_compare.c_str()));
}
-bool operator!=(const policy_table::ApplicationParams& first,
- const policy_table::ApplicationParams& second) {
- if (first.groups.size() != second.groups.size()) {
- return true;
- }
- StringsConstItr it_first = first.groups.begin();
- StringsConstItr it_first_end = first.groups.end();
- StringsConstItr it_second = second.groups.begin();
- StringsConstItr it_second_end = second.groups.end();
- for (; it_first != it_first_end; ++it_first) {
- CompareGroupName gp(*it_first);
- StringsConstItr it = std::find_if(it_second, it_second_end, gp);
- if (it_second_end == it) {
- return true;
- }
- }
- return false;
-}
-
CheckAppPolicy::CheckAppPolicy(
PolicyManagerImpl* pm,
const std::shared_ptr<policy_table::Table> update,
@@ -340,7 +322,6 @@ void policy::CheckAppPolicy::NotifySystem(
const auto devices_ids = listener.GetDevicesIds(app_policy.first);
if (devices_ids.empty()) {
SDL_LOG_WARN(
-
"Couldn't find device info for application id: " << app_policy.first);
return;
}
@@ -559,8 +540,7 @@ bool CheckAppPolicy::IsConsentRequired(const std::string& app_id,
return false;
}
- bool is_preconsented = false;
- return it->second.user_consent_prompt.is_initialized() && !is_preconsented;
+ return it->second.user_consent_prompt.is_initialized();
}
bool CheckAppPolicy::IsRequestTypeChanged(
@@ -635,7 +615,6 @@ bool CheckAppPolicy::IsAppPropertiesChanged(
if (!IsKnownAppication(app_policy.first)) {
SDL_LOG_DEBUG(
-
"AppProperties provided for new application: " << app_policy.first);
return true;
}
@@ -707,7 +686,7 @@ bool CheckAppPolicy::IsEncryptionRequiredFlagChanged(
return result;
};
- auto get_app_rpcs = [](const std::string group_name,
+ auto get_app_rpcs = [](const std::string& group_name,
const FunctionalGroupings& groups)
-> rpc::Optional<policy_table::Rpcs> {
auto it = groups.find(group_name);
@@ -1106,28 +1085,6 @@ FunctionalGroupIDs Merge(const FunctionalGroupIDs& first,
return merged;
}
-FunctionalGroupIDs FindSame(const FunctionalGroupIDs& first,
- const FunctionalGroupIDs& second) {
- SDL_LOG_INFO("Find same groups");
- FunctionalGroupIDs first_copy(first);
- FunctionalGroupIDs second_copy(second);
-
- std::sort(first_copy.begin(), first_copy.end());
- std::sort(second_copy.begin(), second_copy.end());
-
- FunctionalGroupIDs same;
- std::set_intersection(first_copy.begin(),
- first_copy.end(),
- second_copy.begin(),
- second_copy.end(),
- std::back_inserter(same));
-
- same.resize(
- std::distance(same.begin(), std::unique(same.begin(), same.end())));
-
- return same;
-}
-
bool UnwrapAppPolicies(policy_table::ApplicationPolicies& app_policies) {
policy_table::ApplicationPolicies::iterator it = app_policies.begin();
policy_table::ApplicationPolicies::iterator it_default =
diff --git a/src/components/policy/policy_regular/src/policy_manager_impl.cc b/src/components/policy/policy_regular/src/policy_manager_impl.cc
index 36beeeb07f..059375322a 100644
--- a/src/components/policy/policy_regular/src/policy_manager_impl.cc
+++ b/src/components/policy/policy_regular/src/policy_manager_impl.cc
@@ -87,7 +87,7 @@ void PolicyManagerImpl::set_listener(PolicyListener* listener) {
update_status_manager_.set_listener(listener);
}
-#ifdef USE_HMI_PTU_DECRYPTION
+#if defined USE_HMI_PTU_DECRYPTION && defined PROPRIETARY_MODE
std::shared_ptr<policy_table::Table> PolicyManagerImpl::Parse(
const BinaryMessage& pt_content) {
@@ -328,10 +328,9 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
const std::string& file, const BinaryMessage& pt_content) {
SDL_LOG_INFO("LoadPT of size " << pt_content.size());
SDL_LOG_DEBUG(
-
"PTU content is: " << std::string(pt_content.begin(), pt_content.end()));
-#ifdef USE_HMI_PTU_DECRYPTION
+#if defined USE_HMI_PTU_DECRYPTION && defined PROPRIETARY_MODE
// Assuemes Policy Table was parsed, formatted, and/or decrypted by
// the HMI after system request before calling OnReceivedPolicyUpdate
// Parse message into table struct
@@ -386,7 +385,6 @@ PolicyManager::PtProcessingResult PolicyManagerImpl::LoadPT(
// Replace current data with updated
if (!cache_->ApplyUpdate(*pt_update)) {
SDL_LOG_WARN(
-
"Unsuccessful save of updated policy table, trying another exchange");
return PtProcessingResult::kNewPtRequired;
}
@@ -1023,7 +1021,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
app_permissions_diff_.find(policy_app_id);
if (app_permissions_diff_.end() == it_pending) {
SDL_LOG_WARN(
-
"No pending permissions had been found for appID: " << policy_app_id);
return;
}
@@ -1041,7 +1038,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
for (; it_groups != it_end_groups; ++it_groups) {
if (policy::kGroupUndefined == it_groups->state) {
SDL_LOG_DEBUG(
-
"Unconsented groups still present for appID: " << policy_app_id);
it_pending->second.appPermissionsConsentNeeded = true;
return;
@@ -1049,7 +1045,6 @@ void PolicyManagerImpl::CheckPendingPermissionsChanges(
}
SDL_LOG_DEBUG(
-
"Unconsented groups not present anymore for appID: " << policy_app_id);
it_pending->second.appPermissionsConsentNeeded = false;
return;
@@ -1708,7 +1703,7 @@ void PolicyManagerImpl::SetDefaultHmiTypes(
}
struct HMITypeToInt {
- int operator()(const policy_table::AppHMITypes::value_type item) {
+ int operator()(const policy_table::AppHMITypes::value_type item) const {
return policy_table::AppHMIType(item);
}
};
diff --git a/src/components/policy/policy_regular/src/policy_table/types.cc b/src/components/policy/policy_regular/src/policy_table/types.cc
index 017a7e75cb..d3473bb2a7 100644
--- a/src/components/policy/policy_regular/src/policy_table/types.cc
+++ b/src/components/policy/policy_regular/src/policy_table/types.cc
@@ -1,5 +1,8 @@
// This file is generated, do not edit
#include "policy/policy_table/types.h"
+
+#include <regex>
+
#include "rpc_base/rpc_base_json_inl.h"
namespace rpc {
@@ -1676,6 +1679,7 @@ VehicleDataItem::VehicleDataItem(const VehicleDataItem& vehicle_data)
, until(vehicle_data.until)
, removed(vehicle_data.removed)
, deprecated(vehicle_data.deprecated)
+ , defvalue(vehicle_data.defvalue)
, minvalue(vehicle_data.minvalue)
, maxvalue(vehicle_data.maxvalue)
, minsize(vehicle_data.minsize)
@@ -1695,12 +1699,17 @@ VehicleDataItem::VehicleDataItem(const Json::Value* value__)
, until(impl::ValueMember(value__, "until"))
, removed(impl::ValueMember(value__, "removed"))
, deprecated(impl::ValueMember(value__, "deprecated"))
+ , defvalue(static_cast<Json::Value*>(nullptr))
, minvalue(impl::ValueMember(value__, "minvalue"))
, maxvalue(impl::ValueMember(value__, "maxvalue"))
, minsize(impl::ValueMember(value__, "minsize"))
, maxsize(impl::ValueMember(value__, "maxsize"))
, minlength(impl::ValueMember(value__, "minlength"))
- , maxlength(impl::ValueMember(value__, "maxlength")) {}
+ , maxlength(impl::ValueMember(value__, "maxlength")) {
+ if (value__->isMember("defvalue")) {
+ *defvalue = impl::ValueMember(value__, "defvalue")->asString();
+ }
+}
VehicleDataItem::~VehicleDataItem() {}
@@ -1726,6 +1735,7 @@ Json::Value VehicleDataItem::ToJsonValue() const {
impl::WriteJsonField("until", until, &ret);
impl::WriteJsonField("removed", removed, &ret);
impl::WriteJsonField("deprecated", deprecated, &ret);
+ impl::WriteJsonField("defvalue", defvalue, &ret);
impl::WriteJsonField("minvalue", minvalue, &ret);
impl::WriteJsonField("maxvalue", maxvalue, &ret);
impl::WriteJsonField("minsize", minsize, &ret);
@@ -1740,9 +1750,10 @@ bool VehicleDataItem::operator==(const VehicleDataItem& vd) {
mandatory == vd.mandatory && params == vd.params &&
array == vd.array && since == vd.since && until == vd.until &&
removed == vd.removed && deprecated == vd.deprecated &&
- minvalue == vd.minvalue && maxvalue == vd.maxvalue &&
- minsize == vd.minsize && maxsize == vd.maxsize &&
- minlength == vd.minlength && maxlength == vd.maxlength);
+ defvalue == vd.defvalue && minvalue == vd.minvalue &&
+ maxvalue == vd.maxvalue && minsize == vd.minsize &&
+ maxsize == vd.maxsize && minlength == vd.minlength &&
+ maxlength == vd.maxlength);
}
bool VehicleDataItem::is_valid() const {
@@ -1776,6 +1787,9 @@ bool VehicleDataItem::is_valid() const {
if (!deprecated.is_valid()) {
return false;
}
+ if (!(defvalue.is_valid() && ValidateDefault())) {
+ return false;
+ }
if (!minvalue.is_valid()) {
return false;
}
@@ -1832,6 +1846,9 @@ bool VehicleDataItem::struct_not_empty() const {
if (!deprecated.is_initialized()) {
return false;
}
+ if (!defvalue.is_initialized()) {
+ return false;
+ }
if (!minvalue.is_initialized()) {
return false;
}
@@ -1901,6 +1918,13 @@ void VehicleDataItem::ReportErrors(rpc::ValidationReport* report__) const {
if (!deprecated.is_valid()) {
deprecated.ReportErrors(&report__->ReportSubobject("deprecated"));
}
+ if (!defvalue.is_valid()) {
+ defvalue.ReportErrors(&report__->ReportSubobject("defvalue"));
+ }
+ if (!ValidateDefault()) {
+ report__->set_validation_info("Invalid default value: " +
+ std::string(*defvalue));
+ }
if (!minvalue.is_valid()) {
minvalue.ReportErrors(&report__->ReportSubobject("minvalue"));
}
@@ -1933,6 +1957,7 @@ void VehicleDataItem::SetPolicyTableType(PolicyTableType pt_type) {
until.SetPolicyTableType(pt_type);
removed.SetPolicyTableType(pt_type);
deprecated.SetPolicyTableType(pt_type);
+ defvalue.SetPolicyTableType(pt_type);
minvalue.SetPolicyTableType(pt_type);
maxvalue.SetPolicyTableType(pt_type);
minsize.SetPolicyTableType(pt_type);
@@ -1976,6 +2001,46 @@ bool VehicleDataItem::ValidateTypes() const {
return (!(params.is_initialized()) || params->empty());
}
+bool VehicleDataItem::ValidateDefault() const {
+ if (!defvalue.is_initialized()) {
+ return true;
+ }
+ std::string value = std::string(*defvalue);
+ bool valid = false;
+ if (VehicleDataItem::kInteger == std::string(type)) {
+ // Match int
+ std::regex pattern("^-?\\d+$");
+ bool type_matches = std::regex_match(value, pattern);
+ if (type_matches) {
+ size_t int_value = std::stol(value);
+ valid = (!minvalue.is_initialized() || int_value >= *minvalue) &&
+ (!maxvalue.is_initialized() || int_value <= *maxvalue);
+ }
+ } else if (VehicleDataItem::kFloat == std::string(type) ||
+ VehicleDataItem::kDouble == std::string(type)) {
+ // Match double
+ std::regex pattern("^-?\\d+(\\.\\d+)?$");
+ bool type_matches = std::regex_match(value, pattern);
+ if (type_matches) {
+ double dbl_value = std::stod(value);
+ valid = (!minvalue.is_initialized() || dbl_value >= *minvalue) &&
+ (!maxvalue.is_initialized() || dbl_value <= *maxvalue);
+ }
+ } else if (VehicleDataItem::kString == std::string(type)) {
+ size_t length = value.length();
+ valid = (!minsize.is_initialized() || length >= *minsize) &&
+ (!maxsize.is_initialized() || length <= *maxsize);
+ } else if (VehicleDataItem::kBoolean == std::string(type)) {
+ valid = ("false" == value || "true" == value);
+ } else if (VehicleDataItem::kStruct != std::string(type) &&
+ !IsPrimitiveType()) {
+ // Enum values cannot be validated here
+ valid = true;
+ }
+
+ return valid;
+}
+
bool VehicleDataItem::IsPrimitiveType() const {
return helpers::in_range(kPODTypes, std::string(type));
}
diff --git a/src/components/policy/policy_regular/src/policy_table/validation.cc b/src/components/policy/policy_regular/src/policy_table/validation.cc
index c98a0ed5f0..dbc44f01ab 100644
--- a/src/components/policy/policy_regular/src/policy_table/validation.cc
+++ b/src/components/policy/policy_regular/src/policy_table/validation.cc
@@ -288,9 +288,8 @@ bool VehicleDataItem::Validate() const {
};
if (!ValidateTypes()) {
- SDL_LOG_ERROR(
-
- "Unknown type: " << std::string(type) << " of " << std::string(key));
+ SDL_LOG_ERROR("Unknown type: " << std::string(type) << " of "
+ << std::string(key));
return false;
}
return true;
diff --git a/src/components/policy/policy_regular/src/sql_pt_queries.cc b/src/components/policy/policy_regular/src/sql_pt_queries.cc
index 4910ee32e9..cf9167406f 100644
--- a/src/components/policy/policy_regular/src/sql_pt_queries.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_queries.cc
@@ -448,6 +448,7 @@ const std::string kCreateSchema =
" `until` VARCHAR(45), "
" `removed` BOOL, "
" `deprecated` BOOL, "
+ " `defvalue` VARCHAR(65535), "
" `minvalue` INTEGER, "
" `maxvalue` INTEGER, "
" `minsize` INTEGER, "
@@ -721,13 +722,14 @@ const std::string kInsertVehicleDataItem =
" `until`, "
" `removed`, "
" `deprecated`, "
+ " `defvalue`, "
" `minvalue`, "
" `maxvalue`, "
" `minsize`, "
" `maxsize`, "
" `minlength`, "
" `maxlength`) "
- "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
+ "VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?) ";
const std::string kInsertVehicleDataItemParams =
"INSERT INTO `vehicle_data_item_parameters` ("
diff --git a/src/components/policy/policy_regular/src/sql_pt_representation.cc b/src/components/policy/policy_regular/src/sql_pt_representation.cc
index 49b7f2e7be..7193a06bdb 100644
--- a/src/components/policy/policy_regular/src/sql_pt_representation.cc
+++ b/src/components/policy/policy_regular/src/sql_pt_representation.cc
@@ -92,9 +92,8 @@ void SQLPTRepresentation::CheckPermissions(const PTString& app_id,
utils::dbms::SQLQuery query(db());
if (!query.Prepare(sql_pt::kSelectRpc)) {
- SDL_LOG_WARN(
-
- "Incorrect select statement from rpcs" << query.LastError().text());
+ SDL_LOG_WARN("Incorrect select statement from rpcs"
+ << query.LastError().text());
return;
}
query.Bind(0, app_id);
@@ -363,9 +362,8 @@ InitResult SQLPTRepresentation::Init(const PolicySettings* settings) {
utils::dbms::SQLQuery check_first_run(db());
if (check_first_run.Prepare(sql_pt::kIsFirstRun) &&
check_first_run.Next()) {
- SDL_LOG_INFO(
-
- "Selecting is first run " << check_first_run.GetBoolean(0));
+ SDL_LOG_INFO("Selecting is first run "
+ << check_first_run.GetBoolean(0));
if (check_first_run.GetBoolean(0)) {
utils::dbms::SQLQuery set_not_first_run(db());
set_not_first_run.Exec(sql_pt::kSetNotFirstRun);
@@ -387,13 +385,11 @@ InitResult SQLPTRepresentation::Init(const PolicySettings* settings) {
utils::dbms::SQLQuery query(db());
if (!query.Exec(sql_pt::kCreateSchema)) {
SDL_LOG_ERROR(
-
"Failed creating schema of database: " << query.LastError().text());
return InitResult::FAIL;
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return InitResult::FAIL;
}
@@ -426,7 +422,6 @@ bool SQLPTRepresentation::Clear() {
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return false;
}
@@ -441,13 +436,11 @@ bool SQLPTRepresentation::RefreshDB() {
}
if (!query.Exec(sql_pt::kCreateSchema)) {
SDL_LOG_ERROR(
-
"Failed creating schema of database: " << query.LastError().text());
return false;
}
if (!query.Exec(sql_pt::kInsertInitData)) {
SDL_LOG_ERROR(
-
"Failed insert init data to database: " << query.LastError().text());
return false;
}
@@ -2625,22 +2618,25 @@ policy_table::VehicleDataItem SQLPTRepresentation::PopulateVDIFromQuery(
*result.deprecated = query.GetBoolean(8);
}
if (!query.IsNull(9)) {
- *result.minvalue = query.GetInteger(9);
+ *result.defvalue = query.GetString(9);
}
if (!query.IsNull(10)) {
- *result.maxvalue = query.GetInteger(10);
+ *result.minvalue = query.GetInteger(10);
}
if (!query.IsNull(11)) {
- *result.minsize = query.GetUInteger(11);
+ *result.maxvalue = query.GetInteger(11);
}
if (!query.IsNull(12)) {
- *result.maxsize = query.GetUInteger(12);
+ *result.minsize = query.GetUInteger(12);
}
if (!query.IsNull(13)) {
- *result.minlength = query.GetUInteger(13);
+ *result.maxsize = query.GetUInteger(13);
}
if (!query.IsNull(14)) {
- *result.maxlength = query.GetUInteger(14);
+ *result.minlength = query.GetUInteger(14);
+ }
+ if (!query.IsNull(15)) {
+ *result.maxlength = query.GetUInteger(15);
}
result.params->mark_initialized();
@@ -2688,24 +2684,27 @@ bool SQLPTRepresentation::InsertVehicleDataItem(
vehicle_data_item.deprecated.is_initialized()
? query.Bind(8, *vehicle_data_item.deprecated)
: query.Bind(8);
- vehicle_data_item.minvalue.is_initialized()
- ? query.Bind(9, *vehicle_data_item.minvalue)
+ vehicle_data_item.defvalue.is_initialized()
+ ? query.Bind(9, *vehicle_data_item.defvalue)
: query.Bind(9);
- vehicle_data_item.maxvalue.is_initialized()
- ? query.Bind(10, *vehicle_data_item.maxvalue)
+ vehicle_data_item.minvalue.is_initialized()
+ ? query.Bind(10, *vehicle_data_item.minvalue)
: query.Bind(10);
- vehicle_data_item.minsize.is_initialized()
- ? query.Bind(11, static_cast<int64_t>(*vehicle_data_item.minsize))
+ vehicle_data_item.maxvalue.is_initialized()
+ ? query.Bind(11, *vehicle_data_item.maxvalue)
: query.Bind(11);
- vehicle_data_item.maxsize.is_initialized()
- ? query.Bind(12, static_cast<int64_t>(*vehicle_data_item.maxsize))
+ vehicle_data_item.minsize.is_initialized()
+ ? query.Bind(12, static_cast<int64_t>(*vehicle_data_item.minsize))
: query.Bind(12);
- vehicle_data_item.minlength.is_initialized()
- ? query.Bind(13, static_cast<int64_t>(*vehicle_data_item.minlength))
+ vehicle_data_item.maxsize.is_initialized()
+ ? query.Bind(13, static_cast<int64_t>(*vehicle_data_item.maxsize))
: query.Bind(13);
- vehicle_data_item.maxlength.is_initialized()
- ? query.Bind(14, static_cast<int64_t>(*vehicle_data_item.maxlength))
+ vehicle_data_item.minlength.is_initialized()
+ ? query.Bind(14, static_cast<int64_t>(*vehicle_data_item.minlength))
: query.Bind(14);
+ vehicle_data_item.maxlength.is_initialized()
+ ? query.Bind(15, static_cast<int64_t>(*vehicle_data_item.maxlength))
+ : query.Bind(15);
if (!query.Exec() || !query.Reset()) {
SDL_LOG_ERROR("Failed to insert vehicle data item: "
@@ -2740,7 +2739,6 @@ bool SQLPTRepresentation::InsertVehicleDataItem(
if (!query.Exec() || !query.Reset()) {
SDL_LOG_ERROR(
-
"Failed to insert to vehicle data item relations helper table: "
<< static_cast<std::string>(param.key)
<< ". Error: " << query.LastError().text());
@@ -2770,9 +2768,7 @@ SQLPTRepresentation::SelectCompositeVehicleDataItems() const {
if (!vdi.is_initialized()) {
return policy_table::VehicleDataItems();
}
- for (const auto& item : vdi) {
- result.push_back(item);
- }
+ std::copy(vdi.begin(), vdi.end(), std::back_inserter(result));
}
return result;
diff --git a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
index 880e9ca4f9..f4efa811b6 100644
--- a/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
+++ b/src/components/policy/policy_regular/test/sql_pt_representation_test.cc
@@ -466,6 +466,7 @@ TEST_F(SQLPTRepresentationTest, VehicleDataItem_Store_Complete_Item) {
*message.until = "5.0";
*message.removed = false;
*message.deprecated = false;
+ *message.defvalue = "0";
*message.minvalue = 0;
*message.maxvalue = 255;
*message.minsize = 0;
diff --git a/src/components/policy/policy_regular/test/vehicle_data_item_type_test.cc b/src/components/policy/policy_regular/test/vehicle_data_item_type_test.cc
index ec728a69ae..6431ed7394 100644
--- a/src/components/policy/policy_regular/test/vehicle_data_item_type_test.cc
+++ b/src/components/policy/policy_regular/test/vehicle_data_item_type_test.cc
@@ -123,6 +123,7 @@ class VehicleDataItemTypeTest : public ::testing::Test {
str.AddField("until", "5.0");
str.AddField("removed", true);
str.AddField("deprecated", true);
+ str.AddField("defvalue", "TestStringVal");
str.AddField("minvalue", 1);
str.AddField("maxvalue", 2);
str.AddField("minsize", 10);
@@ -171,6 +172,7 @@ TEST_F(VehicleDataItemTypeTest, CheckConvertFromJsonToVehicleDataItem_Success) {
EXPECT_TRUE((std::string)*vdi.until == "5.0");
EXPECT_TRUE(*vdi.removed == true);
EXPECT_TRUE(*vdi.deprecated == true);
+ EXPECT_TRUE(*vdi.defvalue == "TestStringVal");
EXPECT_TRUE(*vdi.minvalue == 1);
EXPECT_TRUE(*vdi.maxvalue == 2);
EXPECT_TRUE(*vdi.minsize == 10);
@@ -201,6 +203,7 @@ TEST_F(VehicleDataItemTypeTest, CheckIsValid_Struct_Success) {
VehicleDataItem vdi(&json_);
vdi.type = "Struct";
+ vdi.defvalue = rpc::Optional<rpc::String<0, UINT32_MAX> >();
EXPECT_TRUE(vdi.is_valid());
}
@@ -211,6 +214,7 @@ TEST_F(VehicleDataItemTypeTest, CheckIsValid_Struct_EmptyParams_Failed) {
VehicleDataItem vdi(&json_);
vdi.type = "Struct";
+ vdi.defvalue = rpc::Optional<rpc::String<0, UINT32_MAX> >();
EXPECT_FALSE(vdi.is_valid());
}
@@ -220,16 +224,19 @@ TEST_F(VehicleDataItemTypeTest, CheckIsValid_PODTypes_Success) {
VehicleDataItem vdi(&json_);
- vdi.type = "Integer";
+ vdi.type = "String";
EXPECT_TRUE(vdi.is_valid());
- vdi.type = "Float";
+ vdi.type = "Integer";
+ *vdi.defvalue = "1";
EXPECT_TRUE(vdi.is_valid());
- vdi.type = "String";
+ vdi.type = "Float";
+ *vdi.defvalue = "1.1";
EXPECT_TRUE(vdi.is_valid());
vdi.type = "Boolean";
+ *vdi.defvalue = "true";
EXPECT_TRUE(vdi.is_valid());
}
diff --git a/src/components/protocol/src/rpc_type.cc b/src/components/protocol/src/rpc_type.cc
index fb9845d148..0e2edb34e8 100644
--- a/src/components/protocol/src/rpc_type.cc
+++ b/src/components/protocol/src/rpc_type.cc
@@ -62,11 +62,6 @@ RpcType RpcTypeFromByte(uint8_t byte) {
return supported_type ? type : kRpcTypeReserved;
}
-uint8_t RpcTypeToByte(RpcType type) {
- DCHECK(IsSupported(type));
- return uint8_t(type);
-}
-
const char* RpcTypeToString(RpcType type) {
switch (type) {
case kRpcTypeRequest:
diff --git a/src/components/protocol/src/service_type.cc b/src/components/protocol/src/service_type.cc
index e6417b07d0..b1674e10d8 100644
--- a/src/components/protocol/src/service_type.cc
+++ b/src/components/protocol/src/service_type.cc
@@ -63,9 +63,4 @@ ServiceType ServiceTypeFromByte(uint8_t byte) {
return valid_type ? type : kInvalidServiceType;
}
-uint8_t ServiceTypeToByte(ServiceType type) {
- DCHECK(IsValid(type));
- return uint8_t(type);
-}
-
} // namespace protocol_handler
diff --git a/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h b/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
index ead997da69..33abd4a96b 100644
--- a/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
+++ b/src/components/protocol_handler/include/protocol_handler/protocol_handler_impl.h
@@ -379,7 +379,7 @@ class ProtocolHandlerImpl
uint8_t session_id,
uint8_t protocol_version,
uint8_t service_type,
- const std::string reason);
+ const std::string& reason);
/**
* \brief Sends fail of starting session to mobile application
@@ -395,7 +395,7 @@ class ProtocolHandlerImpl
uint8_t protocol_version,
uint8_t service_type,
std::vector<std::string>& rejectedParams,
- const std::string reason);
+ const std::string& reason);
/**
* \brief Sends acknowledgement of end session/service to mobile application
diff --git a/src/components/protocol_handler/src/incoming_data_handler.cc b/src/components/protocol_handler/src/incoming_data_handler.cc
index f0692b3304..08997acaac 100644
--- a/src/components/protocol_handler/src/incoming_data_handler.cc
+++ b/src/components/protocol_handler/src/incoming_data_handler.cc
@@ -158,7 +158,7 @@ RESULT_CODE IncomingDataHandler::CreateFrame(
}
SDL_LOG_DEBUG("Payload size " << header_.dataSize);
const uint32_t packet_size = GetPacketSize(header_);
- if (packet_size <= 0) {
+ if (packet_size == 0) {
SDL_LOG_WARN("Null packet size");
++data_it;
--data_size;
diff --git a/src/components/protocol_handler/src/protocol_handler_impl.cc b/src/components/protocol_handler/src/protocol_handler_impl.cc
index f1179e7107..1db599e656 100644
--- a/src/components/protocol_handler/src/protocol_handler_impl.cc
+++ b/src/components/protocol_handler/src/protocol_handler_impl.cc
@@ -139,7 +139,6 @@ ProtocolHandlerImpl::ProtocolHandlerImpl(
}
} else {
SDL_LOG_WARN(
-
"Malformed message filtering is disabled."
<< "Connection will be close on first malformed message detection");
}
@@ -320,7 +319,6 @@ void ProtocolHandlerImpl::SendStartSessionAck(
&params, strings::protocol_version, protocol_version_string);
UNUSED(protocol_ver_written);
SDL_LOG_DEBUG(
-
"Protocol version parameter was written to bson params: "
<< protocol_ver_written << "; Value: "
<< bson_object_get_string(&params, strings::protocol_version));
@@ -346,7 +344,6 @@ void ProtocolHandlerImpl::SendStartSessionAck(
sizeof(secondaryTransport));
secondaryTransport[sizeof(secondaryTransport) - 1] = '\0';
SDL_LOG_DEBUG(
-
"Adding "
<< secondaryTransport
<< " to secondaryTransports parameter of StartSessionAck");
@@ -387,7 +384,6 @@ void ProtocolHandlerImpl::SendStartSessionAck(
send_transport_update_event = true;
} else {
SDL_LOG_DEBUG(
-
"Multiple transports feature is disabled by configuration");
// In this case, we must remember that this session will never have
// a secondary transport.
@@ -396,7 +392,6 @@ void ProtocolHandlerImpl::SendStartSessionAck(
}
} else {
SDL_LOG_WARN(
-
"Failed to set up secondary transport and service type params");
connection_handler_.SetSecondaryTransportID(session_id,
kDisabledSecondary);
@@ -451,7 +446,7 @@ void ProtocolHandlerImpl::SendStartSessionNAck(ConnectionID connection_id,
uint8_t session_id,
uint8_t protocol_version,
uint8_t service_type,
- const std::string reason) {
+ const std::string& reason) {
std::vector<std::string> rejectedParams;
SendStartSessionNAck(connection_id,
session_id,
@@ -467,7 +462,7 @@ void ProtocolHandlerImpl::SendStartSessionNAck(
uint8_t protocol_version,
uint8_t service_type,
std::vector<std::string>& rejectedParams,
- const std::string reason) {
+ const std::string& reason) {
SDL_LOG_AUTO_TRACE();
ProtocolFramePtr ptr(
@@ -669,7 +664,6 @@ void ProtocolHandlerImpl::SendEndServicePrivate(int32_t primary_connection_id,
<< static_cast<int32_t>(session_id));
} else {
SDL_LOG_WARN(
-
"SendEndServicePrivate is failed connection or session does not exist");
}
}
@@ -1075,6 +1069,7 @@ void ProtocolHandlerImpl::OnTMMessageSend(const RawMessagePtr message) {
if (ready_to_close_connections_.end() != connection_it) {
ready_to_close_connections_.erase(connection_it);
+ session_observer_.OnFinalMessageCallback(connection_handle);
transport_manager_.Disconnect(connection_handle);
return;
}
@@ -1243,7 +1238,7 @@ void ProtocolHandlerImpl::OnTransportConfigUpdated(
if (st.secondary_transport != kDisabledSecondary) {
SendTransportUpdateEvent(st.primary_transport, itr->first);
}
- itr++;
+ ++itr;
}
}
@@ -1451,7 +1446,6 @@ RESULT_CODE ProtocolHandlerImpl::HandleSingleFrameMessage(
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG(
-
"FRAME_TYPE_SINGLE message of size "
<< packet->data_size() << "; message "
<< ConvertPacketDataToString(packet->data(), packet->data_size()));
@@ -1706,7 +1700,6 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
const ProtocolFramePtr packet) {
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG(
-
"Protocol version:" << static_cast<int>(packet->protocol_version()));
const ServiceType service_type = ServiceTypeFromByte(packet->service_type());
@@ -1736,12 +1729,18 @@ RESULT_CODE ProtocolHandlerImpl::HandleControlMessageStartSession(
<< service_type << ", disallowed by settings.");
service_status_update_handler_->OnServiceUpdate(
connection_key, service_type, settings_check);
- SendStartSessionNAck(connection_id,
- session_id,
- protocol_version,
- service_type,
- "Service type: " + std::to_string(service_type) +
- " disallowed by settings");
+
+ std::string reason("Service type: " + std::to_string(service_type) +
+ " disallowed by settings.");
+ if (ServiceStatus::PROTECTION_ENFORCED == settings_check) {
+ reason += " Allowed only in protected mode";
+ }
+ if (ServiceStatus::UNSECURE_START_FAILED == settings_check) {
+ reason += " Allowed only in unprotected mode";
+ }
+
+ SendStartSessionNAck(
+ connection_id, session_id, protocol_version, service_type, reason);
return RESULT_OK;
}
@@ -2052,9 +2051,8 @@ void ProtocolHandlerImpl::NotifySessionStarted(
RESULT_CODE ProtocolHandlerImpl::HandleControlMessageHeartBeat(
const ProtocolPacket& packet) {
const ConnectionID connection_id = packet.connection_id();
- SDL_LOG_DEBUG(
-
- "Sending heart beat acknowledgment for connection " << connection_id);
+ SDL_LOG_DEBUG("Sending heart beat acknowledgment for connection "
+ << connection_id);
uint8_t protocol_version;
if (session_observer_.ProtocolVersionUsed(
connection_id, packet.session_id(), protocol_version)) {
@@ -2143,9 +2141,8 @@ bool ProtocolHandlerImpl::TrackMalformedMessage(const uint32_t& connection_key,
<< malformed_message_frequency);
if (!get_settings().malformed_message_filtering() ||
malformed_message_frequency > malformed_frequency_count) {
- SDL_LOG_WARN(
-
- "Malformed frequency of " << connection_key << " is marked as high.");
+ SDL_LOG_WARN("Malformed frequency of " << connection_key
+ << " is marked as high.");
session_observer_.OnMalformedMessageCallback(connection_key);
malformed_message_meter_.RemoveIdentifier(connection_key);
return true;
@@ -2248,9 +2245,8 @@ RESULT_CODE ProtocolHandlerImpl::EncryptFrame(ProtocolFramePtr packet) {
security_manager::SSLContext* context = session_observer_.GetSSLContext(
connection_key, ServiceTypeFromByte(packet->service_type()));
- SDL_LOG_DEBUG(
-
- "Protection flag is: " << packet->protection_flag() << std::boolalpha);
+ SDL_LOG_DEBUG("Protection flag is: " << packet->protection_flag()
+ << std::boolalpha);
if ((!context || !context->IsInitCompleted()) || !packet->protection_flag()) {
SDL_LOG_DEBUG("Ecryption is skipped!");
return RESULT_OK;
@@ -2492,7 +2488,6 @@ const bool ProtocolHandlerImpl::ParseSecondaryTransportConfiguration(
secondary_transport_types = settings_.secondary_transports_for_wifi();
} else {
SDL_LOG_ERROR(
-
"Bad or unknown device type in ParseSecondaryTransportConfiguration");
return false;
}
@@ -2556,13 +2551,11 @@ void ProtocolHandlerImpl::GenerateSecondaryTransportsForStartSessionAck(
} else if (transport_type.CompareIgnoreCase("Bluetooth")) {
if (device_is_ios) {
SDL_LOG_TRACE(
-
"Adding IAP_BLUETOOTH to secondaryTransports for StartSessionAck");
secondaryTransports.push_back("IAP_BLUETOOTH");
}
if (device_is_android) {
SDL_LOG_TRACE(
-
"Adding SPP_BLUETOOTH to secondaryTransports for StartSessionAck");
secondaryTransports.push_back("SPP_BLUETOOTH");
}
@@ -2573,7 +2566,7 @@ void ProtocolHandlerImpl::GenerateSecondaryTransportsForStartSessionAck(
secondaryTransports.push_back("TCP_WIFI");
}
- it++;
+ ++it;
}
}
@@ -2600,11 +2593,10 @@ void ProtocolHandlerImpl::GenerateServiceTransportsForStartSessionAck(
bool fPrimaryAdded = false;
bool fSecondaryAdded = false;
std::vector<std::string>::const_iterator it = service_transports.begin();
- for (; it != service_transports.end(); it++) {
+ for (; it != service_transports.end(); ++it) {
const utils::custom_string::CustomString transport(*it);
- SDL_LOG_TRACE(
-
- "Service Allowed to run on " << transport.c_str() << " transport");
+ SDL_LOG_TRACE("Service Allowed to run on " << transport.c_str()
+ << " transport");
if (!fPrimaryAdded &&
(transport.CompareIgnoreCase(primary_connection_type.c_str()) ||
diff --git a/src/components/protocol_handler/src/protocol_packet.cc b/src/components/protocol_handler/src/protocol_packet.cc
index bd052c8660..db2f124c53 100644
--- a/src/components/protocol_handler/src/protocol_packet.cc
+++ b/src/components/protocol_handler/src/protocol_packet.cc
@@ -359,12 +359,11 @@ RESULT_CODE ProtocolPacket::ProtocolHeaderValidator::validate(
if (header.dataSize > payload_size ||
(FRAME_TYPE_CONTROL != header.frameType && header.dataSize == 0u)) {
UNUSED(StringifyFrameType);
- SDL_LOG_WARN(
-
- "Packet data size of "
- << StringifyFrameType(header.frameType)
- << " frame must be in range (0, payload_size=" << payload_size
- << "], but actual value is " << header.dataSize);
+ SDL_LOG_WARN("Packet data size of "
+ << StringifyFrameType(header.frameType)
+ << " frame must be in range (0, payload_size="
+ << payload_size << "], but actual value is "
+ << header.dataSize);
return RESULT_FAIL;
}
} break;
diff --git a/src/components/protocol_handler/src/protocol_payload.cc b/src/components/protocol_handler/src/protocol_payload.cc
index 8916fe91b0..a18f04f8a1 100644
--- a/src/components/protocol_handler/src/protocol_payload.cc
+++ b/src/components/protocol_handler/src/protocol_payload.cc
@@ -93,8 +93,11 @@ std::ostream& operator<<(std::ostream& os, const ProtocolPayloadV2& payload) {
<< ", data (bytes): " << payload.data.size() << ")";
}
+#ifdef BUILD_TESTS
+// cppcheck-suppress unusedFunction //Used in unit tests
size_t ProtocolPayloadV2SizeBits() {
return PayloadHeaderBits;
}
+#endif // BUILD_TESTS
} // namespace protocol_handler
diff --git a/src/components/protocol_handler/test/protocol_handler_tm_test.cc b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
index d5d68d9b83..41c16817b5 100644
--- a/src/components/protocol_handler/test/protocol_handler_tm_test.cc
+++ b/src/components/protocol_handler/test/protocol_handler_tm_test.cc
@@ -3550,6 +3550,56 @@ TEST_F(ProtocolHandlerImplTest, MalformedLimitVerification_NullCount) {
EXPECT_TRUE(waiter->WaitFor(times, kAsyncExpectationsTimeout));
}
+TEST_F(ProtocolHandlerImplTest, OnFinalMessageCallback) {
+ const auto protection = false;
+ const auto is_final_message = true;
+ const uint32_t total_data_size = 1;
+ UCharDataVector data(total_data_size);
+
+ ProtocolFramePtr ptr(new protocol_handler::ProtocolPacket(connection_id,
+ PROTOCOL_VERSION_3,
+ protection,
+ FRAME_TYPE_SINGLE,
+ kControl,
+ FRAME_DATA_SINGLE,
+ session_id,
+ total_data_size,
+ message_id,
+ &data[0]));
+
+ using RawFordMessageToMobile = protocol_handler::impl::RawFordMessageToMobile;
+ using Handler = protocol_handler::impl::ToMobileQueue::Handler;
+
+ auto message =
+ std::make_shared<RawFordMessageToMobile>(ptr, is_final_message);
+ auto raw_message = ptr->serializePacket();
+
+ auto handler = std::static_pointer_cast<Handler>(protocol_handler_impl);
+ auto transport_manager_listener =
+ std::static_pointer_cast<TransportManagerListener>(protocol_handler_impl);
+
+ EXPECT_CALL(session_observer_mock,
+ ProtocolVersionUsed(connection_id, session_id, An<uint8_t&>()))
+ .WillRepeatedly(Return(false));
+
+ EXPECT_CALL(session_observer_mock,
+ PairFromKey(raw_message->connection_key(), _, _))
+ .WillRepeatedly(
+ DoAll(SetArgPointee<1>(connection_id), SetArgPointee<2>(session_id)));
+
+ EXPECT_CALL(transport_manager_mock, SendMessageToDevice(_))
+ .WillOnce(Return(E_SUCCESS));
+
+ EXPECT_CALL(session_observer_mock, OnFinalMessageCallback(connection_id));
+ EXPECT_CALL(transport_manager_mock, Disconnect(connection_id));
+
+ handler->Handle(*message);
+ // Put the message to list of connections ready to close
+ transport_manager_listener->OnTMMessageSend(raw_message);
+ // Processing the list of connections ready to close
+ transport_manager_listener->OnTMMessageSend(raw_message);
+}
+
TEST_F(ProtocolHandlerImplTest,
SendEndServicePrivate_NoConnection_MessageNotSent) {
// Expect check connection with ProtocolVersionUsed
@@ -3954,7 +4004,7 @@ TEST_F(ProtocolHandlerImplTest, StartSession_NACKReason_DisallowedBySettings) {
bson_object_initialize_default(&bson_nack_params);
// NAK reason param
std::string reason = "Service type: " + std::to_string(service_type) +
- " disallowed by settings";
+ " disallowed by settings.";
bson_object_put_string(&bson_nack_params,
protocol_handler::strings::reason,
const_cast<char*>(reason.c_str()));
diff --git a/src/components/resumption/src/last_state_impl.cc b/src/components/resumption/src/last_state_impl.cc
index f34d793c49..185535c50d 100644
--- a/src/components/resumption/src/last_state_impl.cc
+++ b/src/components/resumption/src/last_state_impl.cc
@@ -81,9 +81,8 @@ void LastStateImpl::SaveToFileSystem() {
const std::vector<uint8_t> char_vector_pdata(styled_string.begin(),
styled_string.end());
DCHECK(file_system::CreateDirectoryRecursively(app_storage_folder_));
- SDL_LOG_INFO(
-
- "LastState::SaveToFileSystem " << app_info_storage_ << styled_string);
+ SDL_LOG_INFO("LastState::SaveToFileSystem " << app_info_storage_
+ << styled_string);
DCHECK(file_system::Write(app_info_storage_, char_vector_pdata));
}
diff --git a/src/components/rpc_base/include/rpc_base/rpc_base_json_inl.h b/src/components/rpc_base/include/rpc_base/rpc_base_json_inl.h
index 80e11994f1..9d2fb81b49 100644
--- a/src/components/rpc_base/include/rpc_base/rpc_base_json_inl.h
+++ b/src/components/rpc_base/include/rpc_base/rpc_base_json_inl.h
@@ -94,7 +94,7 @@ inline const Json::Value* ValueMember(const Json::Value* value,
if (value && value->isObject() && value->isMember(member_name)) {
return &(*value)[member_name];
}
- return NULL;
+ return nullptr;
}
template <class T>
diff --git a/src/components/security_manager/include/security_manager/crypto_manager_settings_impl.h b/src/components/security_manager/include/security_manager/crypto_manager_settings_impl.h
index ae0866705a..f170ef90a7 100644
--- a/src/components/security_manager/include/security_manager/crypto_manager_settings_impl.h
+++ b/src/components/security_manager/include/security_manager/crypto_manager_settings_impl.h
@@ -39,7 +39,6 @@ class CryptoManagerSettingsImpl : public CryptoManagerSettings {
}
SDL_LOG_ERROR(
-
"Unknown protocol: " << profile_.security_manager_protocol_name());
return static_cast<security_manager::Protocol>(-1);
}
diff --git a/src/components/security_manager/src/crypto_manager_impl.cc b/src/components/security_manager/src/crypto_manager_impl.cc
index 9ee820b19d..b4b4d01485 100644
--- a/src/components/security_manager/src/crypto_manager_impl.cc
+++ b/src/components/security_manager/src/crypto_manager_impl.cc
@@ -154,9 +154,8 @@ bool CryptoManagerImpl::Init() {
}
SDL_LOG_DEBUG("Peer verification "
<< (get_settings().verify_peer() ? "enabled" : "disabled"));
- SDL_LOG_DEBUG(
-
- "CA certificate file is \"" << get_settings().ca_cert_path() << '"');
+ SDL_LOG_DEBUG("CA certificate file is \"" << get_settings().ca_cert_path()
+ << '"');
#if OPENSSL_VERSION_NUMBER < CONST_SSL_METHOD_MINIMAL_VERSION
SSL_METHOD* method;
@@ -338,10 +337,16 @@ bool CryptoManagerImpl::IsCertificateUpdateRequired(
const double seconds = difftime(certificates_time, system_time);
- SDL_LOG_DEBUG(
- "Certificate UTC time: " << asctime(gmtime(&certificates_time)));
+ const size_t maxsize = 40;
+ char certificate_utc_time[maxsize];
+ std::strftime(
+ certificate_utc_time, maxsize, "%c", gmtime(&certificates_time));
+ SDL_LOG_DEBUG("Certificate UTC time: " << certificate_utc_time);
+
+ char host_utc_time[maxsize];
+ std::strftime(host_utc_time, maxsize, "%c", gmtime(&system_time));
+ SDL_LOG_DEBUG("Host UTC time: " << host_utc_time);
- SDL_LOG_DEBUG("Host UTC time: " << asctime(gmtime(&system_time)));
SDL_LOG_DEBUG("Seconds before expiration: " << seconds);
if (seconds < 0) {
SDL_LOG_WARN("Certificate is already expired.");
@@ -381,9 +386,8 @@ bool CryptoManagerImpl::SaveCertificateData(
UNUSED(cert_guard);
if (1 != BIO_reset(bio_cert)) {
- SDL_LOG_WARN(
-
- "Unabled to reset BIO in order to read private key, " << LastError());
+ SDL_LOG_WARN("Unabled to reset BIO in order to read private key, "
+ << LastError());
}
EVP_PKEY* pkey = NULL;
diff --git a/src/components/security_manager/src/security_manager_impl.cc b/src/components/security_manager/src/security_manager_impl.cc
index 50a58e0486..1bf10c4f7c 100644
--- a/src/components/security_manager/src/security_manager_impl.cc
+++ b/src/components/security_manager/src/security_manager_impl.cc
@@ -516,9 +516,8 @@ bool SecurityManagerImpl::ProcessHandshakeData(
const uint32_t seqNumber = inMessage->get_header().seq_number;
const uint32_t connection_key = inMessage->get_connection_key();
- SDL_LOG_DEBUG(
-
- "Received " << inMessage->get_data_size() << " bytes handshake data ");
+ SDL_LOG_DEBUG("Received " << inMessage->get_data_size()
+ << " bytes handshake data ");
if (!inMessage->get_data_size()) {
const std::string error_text("SendHandshakeData: null arguments size.");
diff --git a/src/components/security_manager/test/security_query_matcher.cc b/src/components/security_manager/test/security_query_matcher.cc
index 1bf22bf8cd..b9a4f83b10 100644
--- a/src/components/security_manager/test/security_query_matcher.cc
+++ b/src/components/security_manager/test/security_query_matcher.cc
@@ -90,15 +90,12 @@ MATCHER_P(InternalErrorWithErrId,
} // namespace security_manager_test
} // namespace components
} // namespace test
- /*
- * Matcher for checking QueryHeader equal in GTests
- */
-::testing::AssertionResult QueryHeader_EQ(
- const char* m_expr,
- const char* n_expr,
- const ::security_manager::SecurityQuery::QueryHeader& q1,
- const ::security_manager::SecurityQuery::QueryHeader& q2);
+#ifdef BUILD_TESTS
+/*
+ * Matcher for checking QueryHeader equal in GTests
+ */
+// cppcheck-suppress unusedFunction //Used in unit tests
::testing::AssertionResult QueryHeader_EQ(
const char* m_expr,
const char* n_expr,
@@ -121,3 +118,4 @@ MATCHER_P(InternalErrorWithErrId,
<< ", seq_number_2=" << q2.seq_number;
return ::testing::AssertionSuccess();
}
+#endif // BUILD_TESTS
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc
index 7e5c49bae0..920d548c48 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -146,7 +146,7 @@ errors::eType CObjectSchemaItem::validate(
}
const SmartObject& field = object.getElement(key);
- errors::eType result = errors::OK;
+ errors::eType result;
// Check if MessageVersion matches schema version
if (correct_member) {
result =
diff --git a/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc b/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc
index 555239c489..1ce383e44d 100644
--- a/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc
+++ b/src/components/smart_objects/test/SmartObjectConvertionTime_test.cc
@@ -270,367 +270,279 @@ class SmartObjectConvertionTimeTest : public ::testing::Test {
return CSmartSchema(CObjectSchemaItem::create(rootMembersMap));
}
- // Create SmartObjectSchema for test object
- CSmartSchema initObjectSchema() {
- std::set<TestType::eType> resultCode_allowedEnumSubsetValues;
- resultCode_allowedEnumSubsetValues.insert(
- TestType::APPLICATION_NOT_REGISTERED);
- resultCode_allowedEnumSubsetValues.insert(TestType::SUCCESS);
- resultCode_allowedEnumSubsetValues.insert(
- TestType::TOO_MANY_PENDING_REQUESTS);
- resultCode_allowedEnumSubsetValues.insert(TestType::REJECTED);
- resultCode_allowedEnumSubsetValues.insert(TestType::INVALID_DATA);
- resultCode_allowedEnumSubsetValues.insert(TestType::OUT_OF_MEMORY);
- resultCode_allowedEnumSubsetValues.insert(TestType::ABORTED);
- resultCode_allowedEnumSubsetValues.insert(TestType::USER_DISALLOWED);
- resultCode_allowedEnumSubsetValues.insert(TestType::GENERIC_ERROR);
- resultCode_allowedEnumSubsetValues.insert(TestType::DISALLOWED);
-
- std::set<FunctionIdTest::eType> functionId_allowedEnumSubsetValues;
- functionId_allowedEnumSubsetValues.insert(
- FunctionIdTest::RegisterAppInterface);
- functionId_allowedEnumSubsetValues.insert(
- FunctionIdTest::UnregisterAppInterface);
- functionId_allowedEnumSubsetValues.insert(
- FunctionIdTest::SetGlobalProperties);
-
- std::set<MessageTypeTest::eType> messageType_allowedEnumSubsetValues;
- messageType_allowedEnumSubsetValues.insert(MessageTypeTest::request);
- messageType_allowedEnumSubsetValues.insert(MessageTypeTest::response);
- messageType_allowedEnumSubsetValues.insert(MessageTypeTest::notification);
-
- ISchemaItemPtr success_SchemaItem =
- CBoolSchemaItem::create(TSchemaItemParameter<bool>());
-
- ISchemaItemPtr resultCode_SchemaItem =
- TEnumSchemaItem<TestType::eType>::create(
- resultCode_allowedEnumSubsetValues,
- TSchemaItemParameter<TestType::eType>());
-
- ISchemaItemPtr info_SchemaItem =
- CStringSchemaItem::create(TSchemaItemParameter<size_t>(0),
- TSchemaItemParameter<size_t>(1000),
- TSchemaItemParameter<std::string>());
-
- ISchemaItemPtr tryAgainTime_SchemaItem =
- TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(0),
- TSchemaItemParameter<int>(2000000000),
- TSchemaItemParameter<int>());
-
- std::map<std::string, SMember> schemaMembersMap;
-
- schemaMembersMap["success"] = SMember(success_SchemaItem, true);
- schemaMembersMap["resultCode"] = SMember(resultCode_SchemaItem, true);
- schemaMembersMap["info"] = SMember(info_SchemaItem, false);
- schemaMembersMap["tryAgainTime"] = SMember(tryAgainTime_SchemaItem, true);
-
- std::map<std::string, SMember> paramsMembersMap;
- paramsMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_FUNCTION_ID] =
- SMember(TEnumSchemaItem<FunctionIdTest::eType>::create(
- functionId_allowedEnumSubsetValues),
- true);
- paramsMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_MESSAGE_TYPE] =
- SMember(TEnumSchemaItem<MessageTypeTest::eType>::create(
- messageType_allowedEnumSubsetValues),
- true);
- paramsMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_CORRELATION_ID] =
- SMember(TNumberSchemaItem<int>::create(), true);
- paramsMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_PROTOCOL_VERSION] =
- SMember(
- TNumberSchemaItem<int>::create(TSchemaItemParameter<int>(1),
- TSchemaItemParameter<int>(2)),
- true);
- paramsMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_PROTOCOL_TYPE] =
- SMember(TNumberSchemaItem<int>::create(), true);
-
- std::map<std::string, SMember> rootMembersMap;
- rootMembersMap
- [ns_smart_device_link::ns_json_handler::strings::S_MSG_PARAMS] =
- SMember(CObjectSchemaItem::create(schemaMembersMap), true);
- rootMembersMap[ns_smart_device_link::ns_json_handler::strings::S_PARAMS] =
- SMember(CObjectSchemaItem::create(paramsMembersMap), true);
- return CSmartSchema(CObjectSchemaItem::create(rootMembersMap));
+ TEST_F(SmartObjectConvertionTimeTest, test_int_object_convertion) {
+ SmartObject srcObj, dstObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 1;
+ srcObj[S_MSG_PARAMS]["value"] = 5;
+
+ printf("\n INT value.\n");
+ calculateConvertionTime(srcObj, dstObj);
}
-};
-TEST_F(SmartObjectConvertionTimeTest, test_int_object_convertion) {
- SmartObject srcObj, dstObj;
- CSmartSchema schema = initObjectSchema();
+ TEST_F(SmartObjectConvertionTimeTest, test_double_object_convertion) {
+ SmartObject srcObj, dstObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["value1"] = 3.1415926;
+ srcObj[S_MSG_PARAMS]["value2"] = 32.6;
+ srcObj[S_MSG_PARAMS]["value3"] = 33.945;
+ srcObj[S_MSG_PARAMS]["value4"] = -12.5487698;
+ srcObj[S_MSG_PARAMS]["value5"] = 0.61287346;
+
+ printf("\n Double value.\n");
+ calculateConvertionTime(srcObj, dstObj);
+ }
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
+ TEST_F(SmartObjectConvertionTimeTest, test_some_object_convertion) {
+ SmartObject srcObj, dstObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["appId"] = "APP ID";
+ srcObj[S_MSG_PARAMS]["appName"] = "APP NAME";
+ srcObj[S_MSG_PARAMS]["appType"][0] = "SYSTEM";
+ srcObj[S_MSG_PARAMS]["appType"][1] = "COMMUNICATION";
+ srcObj[S_MSG_PARAMS]["hmiDisplayLanguageDesired"] = "RU-RU";
+ srcObj[S_MSG_PARAMS]["isMediaApplication"] = true;
+ srcObj[S_MSG_PARAMS]["languageDesired"] = "EN-US";
+ srcObj[S_MSG_PARAMS]["ngnMediaScreenAppName"] = "SCREEN NAME";
+ srcObj[S_MSG_PARAMS]["syncMsgVersion"]["majorVersion"] = 2;
+ srcObj[S_MSG_PARAMS]["syncMsgVersion"]["minorVersion"] = 10;
+ srcObj[S_MSG_PARAMS]["syncMsgVersion"]["patchVersion"] = 5;
+
+ srcObj[S_MSG_PARAMS]["ttsName"][0]["text"] = "ABC";
+ srcObj[S_MSG_PARAMS]["ttsName"][0]["type"] = "TEXT";
+ srcObj[S_MSG_PARAMS]["vrSynonyms"][0] = "Synonym1";
+ srcObj[S_MSG_PARAMS]["vrSynonyms"][1] = "Synonym2";
+ srcObj[S_MSG_PARAMS]["null"] = SmartObject();
+ srcObj[S_MSG_PARAMS]["double"] = -0.1234;
+
+ printf("\n Random object.\n");
+ calculateConvertionTime(srcObj, dstObj);
+ }
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 1;
- srcObj[S_MSG_PARAMS]["value"] = 5;
+ TEST_F(SmartObjectConvertionTimeTest, test_map_object_convertion) {
+ SmartObject srcObj, dstObj, mapObj, innerObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ // First iteration
+ mapObj["request"]["name"] = "My Request";
+ mapObj["request"]["id"] = 123;
+ mapObj["response"]["name"] = "My Response";
+ mapObj["response"]["id"] = 456;
+ mapObj["we"]["need"]["to"]["go"]["deeper"] = true;
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["value"] = mapObj;
+
+ printf("\n MAP object.\n");
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Second iteration
+ innerObj = mapObj;
+ mapObj["request"]["value"] = innerObj;
+ mapObj["response"]["value"] = innerObj;
+ mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
+ srcObj[S_MSG_PARAMS]["value"] = mapObj;
+
+ printf("\n Complex MAP object.\n");
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Third iteration
+ innerObj = mapObj;
+ mapObj["request"]["value"] = innerObj;
+ mapObj["response"]["value"] = innerObj;
+ mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
+ srcObj[S_MSG_PARAMS]["value"] = mapObj;
+
+ printf("\n Very Complex MAP object.\n");
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Last iteration
+ innerObj = mapObj;
+ mapObj["request"]["value"] = innerObj;
+ mapObj["response"]["value"] = innerObj;
+ mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
+ srcObj[S_MSG_PARAMS]["value"] = mapObj;
+
+ printf("\n Very Very Complex MAP object.\n");
+ calculateConvertionTime(srcObj, dstObj);
+ }
- printf("\n INT value.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
+ TEST_F(SmartObjectConvertionTimeTest, test_array_convertion) {
+ SmartObject srcObj, dstObj, arrayObj, innerObj;
+ CSmartSchema schema = initObjectSchema();
+ int arraySize = 10;
-TEST_F(SmartObjectConvertionTimeTest, test_double_object_convertion) {
- SmartObject srcObj, dstObj;
- CSmartSchema schema = initObjectSchema();
-
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["value1"] = 3.1415926;
- srcObj[S_MSG_PARAMS]["value2"] = 32.6;
- srcObj[S_MSG_PARAMS]["value3"] = 33.945;
- srcObj[S_MSG_PARAMS]["value4"] = -12.5487698;
- srcObj[S_MSG_PARAMS]["value5"] = 0.61287346;
-
- printf("\n Double value.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
-TEST_F(SmartObjectConvertionTimeTest, test_some_object_convertion) {
- SmartObject srcObj, dstObj;
- CSmartSchema schema = initObjectSchema();
-
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["appId"] = "APP ID";
- srcObj[S_MSG_PARAMS]["appName"] = "APP NAME";
- srcObj[S_MSG_PARAMS]["appType"][0] = "SYSTEM";
- srcObj[S_MSG_PARAMS]["appType"][1] = "COMMUNICATION";
- srcObj[S_MSG_PARAMS]["hmiDisplayLanguageDesired"] = "RU-RU";
- srcObj[S_MSG_PARAMS]["isMediaApplication"] = true;
- srcObj[S_MSG_PARAMS]["languageDesired"] = "EN-US";
- srcObj[S_MSG_PARAMS]["ngnMediaScreenAppName"] = "SCREEN NAME";
- srcObj[S_MSG_PARAMS]["syncMsgVersion"]["majorVersion"] = 2;
- srcObj[S_MSG_PARAMS]["syncMsgVersion"]["minorVersion"] = 10;
- srcObj[S_MSG_PARAMS]["syncMsgVersion"]["patchVersion"] = 5;
-
- srcObj[S_MSG_PARAMS]["ttsName"][0]["text"] = "ABC";
- srcObj[S_MSG_PARAMS]["ttsName"][0]["type"] = "TEXT";
- srcObj[S_MSG_PARAMS]["vrSynonyms"][0] = "Synonym1";
- srcObj[S_MSG_PARAMS]["vrSynonyms"][1] = "Synonym2";
- srcObj[S_MSG_PARAMS]["null"] = SmartObject();
- srcObj[S_MSG_PARAMS]["double"] = -0.1234;
-
- printf("\n Random object.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
+ // First iteration
+ for (int i = 0; i < arraySize; i++) {
+ arrayObj[i] = rand();
+ }
-TEST_F(SmartObjectConvertionTimeTest, test_map_object_convertion) {
- SmartObject srcObj, dstObj, mapObj, innerObj;
- CSmartSchema schema = initObjectSchema();
-
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
-
- // First iteration
- mapObj["request"]["name"] = "My Request";
- mapObj["request"]["id"] = 123;
- mapObj["response"]["name"] = "My Response";
- mapObj["response"]["id"] = 456;
- mapObj["we"]["need"]["to"]["go"]["deeper"] = true;
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["value"] = mapObj;
-
- printf("\n MAP object.\n");
- calculateConvertionTime(srcObj, dstObj);
-
- // Second iteration
- innerObj = mapObj;
- mapObj["request"]["value"] = innerObj;
- mapObj["response"]["value"] = innerObj;
- mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
- srcObj[S_MSG_PARAMS]["value"] = mapObj;
-
- printf("\n Complex MAP object.\n");
- calculateConvertionTime(srcObj, dstObj);
-
- // Third iteration
- innerObj = mapObj;
- mapObj["request"]["value"] = innerObj;
- mapObj["response"]["value"] = innerObj;
- mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
- srcObj[S_MSG_PARAMS]["value"] = mapObj;
-
- printf("\n Very Complex MAP object.\n");
- calculateConvertionTime(srcObj, dstObj);
-
- // Last iteration
- innerObj = mapObj;
- mapObj["request"]["value"] = innerObj;
- mapObj["response"]["value"] = innerObj;
- mapObj["we"]["need"]["to"]["go"]["deeper"]["value"] = innerObj;
- srcObj[S_MSG_PARAMS]["value"] = mapObj;
-
- printf("\n Very Very Complex MAP object.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["array"] = arrayObj;
+
+ printf("\n Array object [%d].\n", arraySize);
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Second iteration
+ printf("\n Array object [%d x %d].\n", arraySize, arraySize);
+ innerObj = arrayObj;
+ for (int i = 0; i < arraySize; i++) {
+ arrayObj[i] = innerObj;
+ }
-TEST_F(SmartObjectConvertionTimeTest, test_array_convertion) {
- SmartObject srcObj, dstObj, arrayObj, innerObj;
- CSmartSchema schema = initObjectSchema();
- int arraySize = 10;
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["array"] = arrayObj;
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
+ calculateConvertionTime(srcObj, dstObj);
- // First iteration
- for (int i = 0; i < arraySize; i++) {
- arrayObj[i] = rand();
- }
+ // Third iteration
+ printf(
+ "\n Array object [%d x %d x %d].\n", arraySize, arraySize, arraySize);
+ innerObj = arrayObj;
+ for (int i = 0; i < arraySize; i++) {
+ arrayObj[i] = innerObj;
+ }
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["array"] = arrayObj;
-
- printf("\n Array object [%d].\n", arraySize);
- calculateConvertionTime(srcObj, dstObj);
-
- // Second iteration
- printf("\n Array object [%d x %d].\n", arraySize, arraySize);
- innerObj = arrayObj;
- for (int i = 0; i < arraySize; i++) {
- arrayObj[i] = innerObj;
- }
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["array"] = arrayObj;
+
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Fourth iteration
+ printf("\n Array object [%d x %d x %d x %d].\n",
+ arraySize,
+ arraySize,
+ arraySize,
+ arraySize);
+ innerObj = arrayObj;
+ for (int i = 0; i < arraySize; i++) {
+ arrayObj[i] = innerObj;
+ }
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["array"] = arrayObj;
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["array"] = arrayObj;
+
+ calculateConvertionTime(srcObj, dstObj);
+
+ // Last iteration
+ printf("\n Array object [%d x %d x %d x %d x %d].\n",
+ arraySize,
+ arraySize,
+ arraySize,
+ arraySize,
+ arraySize);
+ innerObj = arrayObj;
+ for (int i = 0; i < arraySize; i++) {
+ arrayObj[i] = innerObj;
+ }
- calculateConvertionTime(srcObj, dstObj);
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["array"] = arrayObj;
- // Third iteration
- printf("\n Array object [%d x %d x %d].\n", arraySize, arraySize, arraySize);
- innerObj = arrayObj;
- for (int i = 0; i < arraySize; i++) {
- arrayObj[i] = innerObj;
+ calculateConvertionTime(srcObj, dstObj);
}
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["array"] = arrayObj;
-
- calculateConvertionTime(srcObj, dstObj);
-
- // Fourth iteration
- printf("\n Array object [%d x %d x %d x %d].\n",
- arraySize,
- arraySize,
- arraySize,
- arraySize);
- innerObj = arrayObj;
- for (int i = 0; i < arraySize; i++) {
- arrayObj[i] = innerObj;
+ TEST_F(SmartObjectConvertionTimeTest, test_object_with_enum_convertion) {
+ SmartObject srcObj, dstObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["success"] = true;
+ srcObj[S_MSG_PARAMS]["resultCode"] = 2;
+ srcObj[S_MSG_PARAMS]["info"] = "Some string";
+ srcObj[S_MSG_PARAMS]["tryAgainTime"] = 322;
+ srcObj.setSchema(schema);
+
+ printf("\n Object with enum.\n");
+ calculateConvertionTime(srcObj, dstObj);
}
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["array"] = arrayObj;
-
- calculateConvertionTime(srcObj, dstObj);
-
- // Last iteration
- printf("\n Array object [%d x %d x %d x %d x %d].\n",
- arraySize,
- arraySize,
- arraySize,
- arraySize,
- arraySize);
- innerObj = arrayObj;
- for (int i = 0; i < arraySize; i++) {
- arrayObj[i] = innerObj;
+ TEST_F(SmartObjectConvertionTimeTest, test_object_without_enum_convertion) {
+ SmartObject srcObj, dstObj;
+ CSmartSchema schema = initObjectSchema();
+
+ srcObj.setSchema(schema);
+ dstObj.setSchema(schema);
+
+ srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
+ srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
+ srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
+ srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
+ srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
+ srcObj[S_MSG_PARAMS]["success"] = true;
+ srcObj[S_MSG_PARAMS]["resultCode"] = 2;
+ srcObj[S_MSG_PARAMS]["info"] = "Some string";
+ srcObj[S_MSG_PARAMS]["tryAgainTime"] = 322;
+
+ printf("\n Object without enum.\n");
+ calculateConvertionTime(srcObj, dstObj);
}
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["array"] = arrayObj;
-
- calculateConvertionTime(srcObj, dstObj);
-}
-
-TEST_F(SmartObjectConvertionTimeTest, test_object_with_enum_convertion) {
- SmartObject srcObj, dstObj;
- CSmartSchema schema = initObjectSchema();
-
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["success"] = true;
- srcObj[S_MSG_PARAMS]["resultCode"] = 2;
- srcObj[S_MSG_PARAMS]["info"] = "Some string";
- srcObj[S_MSG_PARAMS]["tryAgainTime"] = 322;
- srcObj.setSchema(schema);
-
- printf("\n Object with enum.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
-
-TEST_F(SmartObjectConvertionTimeTest, test_object_without_enum_convertion) {
- SmartObject srcObj, dstObj;
- CSmartSchema schema = initObjectSchema();
-
- srcObj.setSchema(schema);
- dstObj.setSchema(schema);
-
- srcObj[S_PARAMS][S_MESSAGE_TYPE] = MessageTypeTest::request;
- srcObj[S_PARAMS][S_FUNCTION_ID] = FunctionIdTest::RegisterAppInterface;
- srcObj[S_PARAMS][S_CORRELATION_ID] = 13;
- srcObj[S_PARAMS][S_PROTOCOL_TYPE] = 0;
- srcObj[S_PARAMS][S_PROTOCOL_VERSION] = 2;
- srcObj[S_MSG_PARAMS]["success"] = true;
- srcObj[S_MSG_PARAMS]["resultCode"] = 2;
- srcObj[S_MSG_PARAMS]["info"] = "Some string";
- srcObj[S_MSG_PARAMS]["tryAgainTime"] = 322;
-
- printf("\n Object without enum.\n");
- calculateConvertionTime(srcObj, dstObj);
-}
-
+};
} // namespace smart_object_test
} // namespace components
-} // namespace test
namespace ns_smart_device_link {
namespace ns_smart_objects {
diff --git a/src/components/telemetry_monitor/src/protocol_handler_observer.cc b/src/components/telemetry_monitor/src/protocol_handler_observer.cc
index 7752e6fb94..9a89973e82 100644
--- a/src/components/telemetry_monitor/src/protocol_handler_observer.cc
+++ b/src/components/telemetry_monitor/src/protocol_handler_observer.cc
@@ -50,7 +50,6 @@ void ProtocolHandlerObserver::StartMessageProcess(
}
if (time_starts.find(message_id) != time_starts.end()) {
SDL_LOG_DEBUG(
-
"Already waiting for stop processing for Message ID: " << message_id);
return;
}
diff --git a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
index 9eea8389e6..30ecf1a277 100644
--- a/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
+++ b/src/components/transport_manager/include/transport_manager/tcp/tcp_client_listener.h
@@ -37,6 +37,9 @@
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_TCP_TCP_CLIENT_LISTENER_H_
#include "transport_manager/transport_adapter/client_connection_listener.h"
+
+#include <atomic>
+
#include "utils/lock.h"
#include "utils/threads/thread_delegate.h"
@@ -149,8 +152,8 @@ class TcpClientListener : public ClientConnectionListener {
bool started_;
threads::Thread* thread_;
int socket_;
- bool thread_stop_requested_;
- bool remove_devices_on_terminate_;
+ std::atomic_bool thread_stop_requested_;
+ std::atomic_bool remove_devices_on_terminate_;
int pipe_fds_[2];
NetworkInterfaceListener* interface_listener_;
const std::string designated_interface_;
diff --git a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
index 0fb9c599c7..4d0fa70f70 100644
--- a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
+++ b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_connection.h
@@ -86,7 +86,7 @@ class UsbConnection : public Connection {
std::list<protocol_handler::RawMessagePtr> out_messages_;
protocol_handler::RawMessagePtr current_out_message_;
- sync_primitives::Lock out_messages_mutex_;
+ sync_primitives::RecursiveLock out_messages_mutex_;
size_t bytes_sent_;
bool disconnecting_;
bool waiting_in_transfer_cancel_;
diff --git a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
index 9c16b49df6..eabb902379 100644
--- a/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
+++ b/src/components/transport_manager/include/transport_manager/usb/libusb/usb_handler.h
@@ -37,6 +37,7 @@
#define SRC_COMPONENTS_TRANSPORT_MANAGER_INCLUDE_TRANSPORT_MANAGER_USB_LIBUSB_USB_HANDLER_H_
#include <libusb-1.0/libusb.h>
+#include <atomic>
#include "transport_manager/transport_adapter/transport_adapter.h"
#include "transport_manager/usb/libusb/platform_usb_device.h"
@@ -71,6 +72,11 @@ class UsbHandler {
void SubmitControlTransfer(ControlTransferSequenceState* sequence_state);
friend void UsbTransferSequenceCallback(libusb_transfer* transfer);
+ void RequestStopThread();
+ void DeregisterHotplugCallbacks();
+ void JoinAndDeleteThread();
+ void InvokeLibusbExit();
+
private:
class UsbHandlerDelegate : public threads::ThreadDelegate {
public:
@@ -82,7 +88,7 @@ class UsbHandler {
UsbHandler* handler_;
};
- bool shutdown_requested_;
+ std::atomic<bool> shutdown_requested_;
threads::Thread* thread_;
friend class UsbDeviceListener;
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_device.cc b/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
index 91f561a7d9..5e19e32ea3 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_device.cc
@@ -69,7 +69,6 @@ bool BluetoothDevice::GetRfcommChannel(const ApplicationHandle app_handle,
std::find(rfcomm_channels_.begin(), rfcomm_channels_.end(), channel);
if (it == rfcomm_channels_.end()) {
SDL_LOG_TRACE(
-
"exit with FALSE. Condition: channel not found in RfcommChannelVector");
return false;
}
diff --git a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
index b527bf1ef0..87012c0690 100644
--- a/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
+++ b/src/components/transport_manager/src/bluetooth/bluetooth_socket_connection.cc
@@ -92,9 +92,8 @@ bool BluetoothSocketConnection::Establish(ConnectError** error) {
do {
rfcomm_socket = socket(AF_BLUETOOTH, SOCK_STREAM, BTPROTO_RFCOMM);
if (-1 == rfcomm_socket) {
- SDL_LOG_ERROR_WITH_ERRNO(
-
- "Failed to create RFCOMM socket for device " << device_handle());
+ SDL_LOG_ERROR_WITH_ERRNO("Failed to create RFCOMM socket for device "
+ << device_handle());
*error = new ConnectError();
SDL_LOG_TRACE("exit with FALSE");
return false;
@@ -117,7 +116,6 @@ bool BluetoothSocketConnection::Establish(ConnectError** error) {
SDL_LOG_INFO("rfcomm Connect attempts finished");
if (0 != connect_status) {
SDL_LOG_DEBUG(
-
"Failed to Connect to remote device "
<< BluetoothDevice::GetUniqueDeviceId(remoteSocketAddress.rc_bdaddr)
<< " for session " << this);
diff --git a/src/components/transport_manager/src/cloud/cloud_websocket_connection_factory.cc b/src/components/transport_manager/src/cloud/cloud_websocket_connection_factory.cc
index a5d25c56c1..27e14b4d33 100644
--- a/src/components/transport_manager/src/cloud/cloud_websocket_connection_factory.cc
+++ b/src/components/transport_manager/src/cloud/cloud_websocket_connection_factory.cc
@@ -67,7 +67,6 @@ TransportAdapter::Error CloudWebsocketConnectionFactory::CreateConnection(
TransportAdapter::Error error = ws_connection->Start();
if (TransportAdapter::OK != error) {
SDL_LOG_ERROR(
-
"Cloud Websocket connection::Start() failed with error: " << error);
}
return error;
diff --git a/src/components/transport_manager/src/cloud/websocket_client_connection.cc b/src/components/transport_manager/src/cloud/websocket_client_connection.cc
index f6b791f886..b190e73cb6 100644
--- a/src/components/transport_manager/src/cloud/websocket_client_connection.cc
+++ b/src/components/transport_manager/src/cloud/websocket_client_connection.cc
@@ -95,7 +95,6 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
SDL_LOG_DEBUG(
"Cloud app authentication token: " << cloud_properties.auth_token);
SDL_LOG_DEBUG(
-
"Cloud app transport type: " << cloud_properties.cloud_transport_type);
SDL_LOG_DEBUG("Cloud app hybrid app preference: "
<< cloud_properties.hybrid_app_preference);
@@ -163,9 +162,8 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
#endif // ENABLE_SECURITY
if (ec) {
std::string str_err = "ErrorMessage: " + ec.message();
- SDL_LOG_ERROR(
-
- "Could not complete handshake with host/port: " << host << ":" << port);
+ SDL_LOG_ERROR("Could not complete handshake with host/port: " << host << ":"
+ << port);
SDL_LOG_ERROR(str_err);
return TransportAdapter::FAIL;
}
@@ -202,9 +200,8 @@ TransportAdapter::Error WebsocketClientConnection::Start() {
boost::asio::post(io_pool_, [&]() { ioc_.run(); });
- SDL_LOG_DEBUG(
-
- "Successfully started websocket connection @: " << host << ":" << port);
+ SDL_LOG_DEBUG("Successfully started websocket connection @: " << host << ":"
+ << port);
return TransportAdapter::OK;
}
@@ -248,7 +245,6 @@ void WebsocketClientConnection::OnRead(boost::system::error_code ec,
Shutdown();
return;
}
- std::string data_str = boost::beast::buffers_to_string(buffer_.data());
ssize_t size = (ssize_t)buffer_.size();
const uint8_t* data = boost::asio::buffer_cast<const uint8_t*>(
diff --git a/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc b/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc
index 8da69b5f6b..96ea5df917 100644
--- a/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc
+++ b/src/components/transport_manager/src/tcp/platform_specific/linux/platform_specific_network_interface_listener.cc
@@ -417,17 +417,15 @@ bool PlatformSpecificNetworkInterfaceListener::UpdateStatus(
switch (type) {
case RTM_NEWLINK: {
const std::string& ifname = GetInterfaceName(it->if_index);
- SDL_LOG_DEBUG(
-
- "netlink event: interface " << ifname << " created or updated");
+ SDL_LOG_DEBUG("netlink event: interface " << ifname
+ << " created or updated");
status.SetName(ifname);
status.SetFlags(it->flags);
break;
}
case RTM_DELLINK:
- SDL_LOG_DEBUG(
-
- "netlink event: interface " << status.GetName() << " removed");
+ SDL_LOG_DEBUG("netlink event: interface " << status.GetName()
+ << " removed");
status_table_.erase(it->if_index);
break;
case RTM_NEWADDR: {
diff --git a/src/components/transport_manager/src/tcp/tcp_client_listener.cc b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
index 0812cd39c9..6aaec5d659 100644
--- a/src/components/transport_manager/src/tcp/tcp_client_listener.cc
+++ b/src/components/transport_manager/src/tcp/tcp_client_listener.cc
@@ -97,7 +97,7 @@ TcpClientListener::TcpClientListener(TransportAdapterController* controller,
TransportAdapter::Error TcpClientListener::Init() {
SDL_LOG_AUTO_TRACE();
- thread_stop_requested_ = false;
+ thread_stop_requested_.store(false);
if (!IsListeningOnSpecificInterface()) {
// Network interface is not specified. We will listen on all interfaces
@@ -163,9 +163,13 @@ TcpClientListener::~TcpClientListener() {
void SetKeepaliveOptions(const int fd) {
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG("fd: " << fd);
+ // cppcheck-suppress unreadVariable
int yes = 1;
+ // cppcheck-suppress unreadVariable
int keepidle = 3; // 3 seconds to disconnection detecting
+ // cppcheck-suppress unreadVariable
int keepcnt = 5;
+ // cppcheck-suppress unreadVariable
int keepintvl = 1;
#ifdef __linux__
int user_timeout = 7000; // milliseconds
@@ -248,7 +252,6 @@ void TcpClientListener::Loop() {
if (ret < 0) {
if (errno != EINTR && errno != EAGAIN && errno != EWOULDBLOCK) {
SDL_LOG_WARN(
-
"Failed to read from pipe, aborting TCP server socket loop.");
break;
}
@@ -343,7 +346,7 @@ void TcpClientListener::StopLoop() {
return;
}
- thread_stop_requested_ = true;
+ thread_stop_requested_.store(true);
char dummy[1] = {0};
int ret = write(pipe_fds_[1], dummy, sizeof(dummy));
@@ -459,7 +462,7 @@ TransportAdapter::Error TcpClientListener::StartListeningThread() {
}
}
- thread_stop_requested_ = false;
+ thread_stop_requested_.store(false);
if (!thread_->Start()) {
return TransportAdapter::FAIL;
@@ -493,9 +496,8 @@ void TcpClientListener::OnIPAddressUpdated(const std::string ipv4_addr,
if (IsListeningOnSpecificInterface()) {
if (!current_ip_address_.empty()) {
// the server socket is running, terminate it
- SDL_LOG_DEBUG(
-
- "Stopping current TCP server socket on " << designated_interface_);
+ SDL_LOG_DEBUG("Stopping current TCP server socket on "
+ << designated_interface_);
StopOnNetworkInterface();
}
if (!ipv4_addr.empty()) {
@@ -538,7 +540,7 @@ bool TcpClientListener::StartOnNetworkInterface() {
}
}
- remove_devices_on_terminate_ = true;
+ remove_devices_on_terminate_.store(true);
if (TransportAdapter::OK != StartListeningThread()) {
SDL_LOG_WARN("Failed to start TCP client listener");
@@ -564,7 +566,7 @@ bool TcpClientListener::StopOnNetworkInterface() {
socket_ = -1;
}
- remove_devices_on_terminate_ = false;
+ remove_devices_on_terminate_.store(false);
SDL_LOG_INFO("TCP server socket on " << designated_interface_
<< " stopped");
diff --git a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc b/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
index 42da741611..5b02c3907e 100644
--- a/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
+++ b/src/components/transport_manager/src/tcp/tcp_connection_factory.cc
@@ -52,9 +52,8 @@ TransportAdapter::Error TcpConnectionFactory::Init() {
TransportAdapter::Error TcpConnectionFactory::CreateConnection(
const DeviceUID& device_uid, const ApplicationHandle& app_handle) {
SDL_LOG_AUTO_TRACE();
- SDL_LOG_DEBUG(
-
- "DeviceUID: " << &device_uid << ", ApplicationHandle: " << &app_handle);
+ SDL_LOG_DEBUG("DeviceUID: " << &device_uid
+ << ", ApplicationHandle: " << &app_handle);
std::shared_ptr<TcpServerOriginatedSocketConnection> connection =
std::make_shared<TcpServerOriginatedSocketConnection>(
device_uid, app_handle, controller_);
diff --git a/src/components/transport_manager/src/tcp/tcp_device.cc b/src/components/transport_manager/src/tcp/tcp_device.cc
index bccafd934f..6d0b87ea6c 100644
--- a/src/components/transport_manager/src/tcp/tcp_device.cc
+++ b/src/components/transport_manager/src/tcp/tcp_device.cc
@@ -56,9 +56,8 @@ TcpDevice::TcpDevice(const in_addr_t& in_addr,
, last_handle_(0) {
SDL_LOG_AUTO_TRACE();
SDL_LOG_DEBUG("Device created with transport switch emulation support.");
- SDL_LOG_DEBUG(
-
- "Device parameters: " << device_uid << " / " << transport_switch_id);
+ SDL_LOG_DEBUG("Device parameters: " << device_uid << " / "
+ << transport_switch_id);
}
#endif // ENABLE_IAP2EMULATION
@@ -69,7 +68,6 @@ bool TcpDevice::IsSameAs(const Device* other) const {
if (other_tcp_device && other_tcp_device->in_addr_ == in_addr_) {
SDL_LOG_TRACE(
-
"exit with TRUE. Condition: other_tcp_device->in_addr_ == in_addr_");
return true;
} else {
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 7d0eda9773..447aa6c8ff 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
@@ -104,16 +104,14 @@ TransportAdapterImpl::~TransportAdapterImpl() {
SDL_LOG_DEBUG("device_scanner_ deleted.");
}
if (server_connection_factory_) {
- SDL_LOG_DEBUG(
-
- "Deleting server_connection_factory " << server_connection_factory_);
+ SDL_LOG_DEBUG("Deleting server_connection_factory "
+ << server_connection_factory_);
delete server_connection_factory_;
SDL_LOG_DEBUG("server_connection_factory deleted.");
}
if (client_connection_listener_) {
- SDL_LOG_DEBUG(
-
- "Deleting client_connection_listener_ " << client_connection_listener_);
+ SDL_LOG_DEBUG("Deleting client_connection_listener_ "
+ << client_connection_listener_);
delete client_connection_listener_;
SDL_LOG_DEBUG("client_connection_listener_ deleted.");
}
@@ -200,9 +198,8 @@ TransportAdapter::Error TransportAdapterImpl::SearchDevices() {
TransportAdapter::Error TransportAdapterImpl::Connect(
const DeviceUID& device_id, const ApplicationHandle& app_handle) {
- SDL_LOG_TRACE(
-
- "enter. DeviceUID " << device_id << " ApplicationHandle " << app_handle);
+ SDL_LOG_TRACE("enter. DeviceUID " << device_id << " ApplicationHandle "
+ << app_handle);
if (server_connection_factory_ == 0) {
SDL_LOG_TRACE("exit with NOT_SUPPORTED");
return NOT_SUPPORTED;
@@ -342,9 +339,8 @@ void TransportAdapterImpl::ConnectionStatusUpdated(DeviceSptr device,
TransportAdapter::Error TransportAdapterImpl::Disconnect(
const DeviceUID& device_id, const ApplicationHandle& app_handle) {
- SDL_LOG_TRACE(
-
- "enter. device_id: " << &device_id << ", device_id: " << &device_id);
+ SDL_LOG_TRACE("enter. device_id: " << &device_id
+ << ", device_id: " << &device_id);
if (!initialised_) {
SDL_LOG_TRACE("exit with BAD_STATE");
return BAD_STATE;
@@ -558,13 +554,13 @@ void TransportAdapterImpl::SearchDeviceDone(const DeviceVector& devices) {
bool device_found = false;
devices_mutex_.Acquire();
- for (DeviceMap::iterator it = devices_.begin(); it != devices_.end();
- ++it) {
- DeviceSptr existing_device = it->second;
+ for (DeviceMap::iterator iter = devices_.begin(); iter != devices_.end();
+ ++iter) {
+ DeviceSptr existing_device = iter->second;
if (device->IsSameAs(existing_device.get())) {
existing_device->set_keep_on_disconnect(true);
device_found = true;
- SDL_LOG_DEBUG("device found. DeviceSptr" << it->second);
+ SDL_LOG_DEBUG("device found. DeviceSptr" << iter->second);
break;
}
}
@@ -745,9 +741,8 @@ void TransportAdapterImpl::DisconnectDone(const DeviceUID& device_handle,
SDL_LOG_AUTO_TRACE();
const DeviceUID device_uid = device_handle;
const ApplicationHandle app_uid = app_handle;
- SDL_LOG_TRACE(
-
- "enter. device_id: " << &device_uid << ", app_handle: " << &app_uid);
+ SDL_LOG_TRACE("enter. device_id: " << &device_uid
+ << ", app_handle: " << &app_uid);
DeviceSptr device = FindDevice(device_handle);
if (!device) {
SDL_LOG_WARN("Device: uid " << &device_uid << " not found");
@@ -867,9 +862,8 @@ void TransportAdapterImpl::DeviceSwitched(const DeviceUID& device_handle) {
ConnectionSPtr TransportAdapterImpl::FindPendingConnection(
const DeviceUID& device_id, const ApplicationHandle& app_handle) const {
- SDL_LOG_TRACE(
-
- "enter. device_id: " << &device_id << ", app_handle: " << &app_handle);
+ SDL_LOG_TRACE("enter. device_id: " << &device_id
+ << ", app_handle: " << &app_handle);
ConnectionSPtr connection;
connections_lock_.AcquireForReading();
ConnectionMap::const_iterator it =
@@ -930,9 +924,8 @@ void TransportAdapterImpl::ConnectPending(const DeviceUID& device_id,
void TransportAdapterImpl::ConnectDone(const DeviceUID& device_id,
const ApplicationHandle& app_handle) {
- SDL_LOG_TRACE(
-
- "enter. device_id: " << &device_id << ", app_handle: " << &app_handle);
+ SDL_LOG_TRACE("enter. device_id: " << &device_id
+ << ", app_handle: " << &app_handle);
connections_lock_.AcquireForReading();
ConnectionMap::iterator it_conn =
connections_.find(std::make_pair(device_id, app_handle));
@@ -1184,9 +1177,8 @@ bool TransportAdapterImpl::ToBeAutoDisconnected(DeviceSptr device) const {
ConnectionSPtr TransportAdapterImpl::FindEstablishedConnection(
const DeviceUID& device_id, const ApplicationHandle& app_handle) const {
- SDL_LOG_TRACE(
-
- "enter. device_id: " << &device_id << ", app_handle: " << &app_handle);
+ SDL_LOG_TRACE("enter. device_id: " << &device_id
+ << ", app_handle: " << &app_handle);
ConnectionSPtr connection;
connections_lock_.AcquireForReading();
ConnectionMap::const_iterator it =
diff --git a/src/components/transport_manager/src/transport_manager_impl.cc b/src/components/transport_manager/src/transport_manager_impl.cc
index a0d019cd69..ee6398db44 100644
--- a/src/components/transport_manager/src/transport_manager_impl.cc
+++ b/src/components/transport_manager/src/transport_manager_impl.cc
@@ -190,7 +190,6 @@ int TransportManagerImpl::ConnectDevice(const DeviceHandle device_handle) {
if (!this->is_initialized_) {
SDL_LOG_ERROR("TransportManager is not initialized.");
SDL_LOG_TRACE(
-
"exit with E_TM_IS_NOT_INITIALIZED. Condition: !this->is_initialized_");
return E_TM_IS_NOT_INITIALIZED;
}
@@ -234,7 +233,6 @@ int TransportManagerImpl::DisconnectDevice(const DeviceHandle device_handle) {
if (!this->is_initialized_) {
SDL_LOG_ERROR("TransportManager is not initialized.");
SDL_LOG_TRACE(
-
"exit with E_TM_IS_NOT_INITIALIZED. Condition: !this->is_initialized_");
return E_TM_IS_NOT_INITIALIZED;
}
@@ -259,7 +257,6 @@ int TransportManagerImpl::Disconnect(const ConnectionUID cid) {
if (!this->is_initialized_) {
SDL_LOG_ERROR("TransportManager is not initialized.");
SDL_LOG_TRACE(
-
"exit with E_TM_IS_NOT_INITIALIZED. Condition: !this->is_initialized_");
return E_TM_IS_NOT_INITIALIZED;
}
@@ -317,7 +314,6 @@ int TransportManagerImpl::DisconnectForce(const ConnectionUID cid) {
const ConnectionInternal* connection = GetConnection(cid);
if (NULL == connection) {
SDL_LOG_ERROR(
-
"TransportManagerImpl::DisconnectForce: Connection does not exist.");
SDL_LOG_TRACE("exit with E_INVALID_HANDLE. Condition: NULL == connection");
return E_INVALID_HANDLE;
@@ -411,7 +407,6 @@ int TransportManagerImpl::SendMessageToDevice(
if (connection->shutdown_) {
SDL_LOG_ERROR(
-
"TransportManagerImpl::Disconnect: Connection is to shut down.");
SDL_LOG_TRACE(
"exit with E_CONNECTION_IS_TO_SHUTDOWN. Condition: "
@@ -522,7 +517,6 @@ int TransportManagerImpl::SearchDevices() {
if (!this->is_initialized_) {
SDL_LOG_ERROR("TM is not initialized");
SDL_LOG_TRACE(
-
"exit with E_TM_IS_NOT_INITIALIZED. Condition: !this->is_initialized_");
return E_TM_IS_NOT_INITIALIZED;
}
@@ -1005,9 +999,8 @@ bool TransportManagerImpl::UpdateDeviceMapping(
item = device_to_adapter_map_.begin();
}
- SDL_LOG_DEBUG(
-
- "After cleanup. Device map size is " << device_to_adapter_map_.size());
+ SDL_LOG_DEBUG("After cleanup. Device map size is "
+ << device_to_adapter_map_.size());
for (DeviceList::const_iterator it = adapter_device_list.begin();
it != adapter_device_list.end();
@@ -1031,9 +1024,8 @@ bool TransportManagerImpl::UpdateDeviceMapping(
RaiseEvent(&TransportManagerListener::OnDeviceFound, info);
}
- SDL_LOG_DEBUG(
-
- "After update. Device map size is " << device_to_adapter_map_.size());
+ SDL_LOG_DEBUG("After update. Device map size is "
+ << device_to_adapter_map_.size());
return true;
}
@@ -1386,7 +1378,8 @@ void TransportManagerImpl::Handle(::protocol_handler::RawMessagePtr msg) {
}
TransportAdapter* transport_adapter = connection->transport_adapter;
- if (NULL == transport_adapter) {
+
+ if (nullptr == transport_adapter) {
std::string error_text = "Transport adapter is not found";
SDL_LOG_ERROR(error_text);
RaiseEvent(&TransportManagerListener::OnTMMessageSendFailed,
diff --git a/src/components/transport_manager/src/usb/libusb/usb_connection.cc b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
index fbe217f243..278a1b1f05 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_connection.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_connection.cc
@@ -108,10 +108,8 @@ bool UsbConnection::PostInTransfer() {
const int libusb_ret = libusb_submit_transfer(in_transfer_);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_ERROR(
-
"libusb_submit_transfer failed: " << libusb_error_name(libusb_ret));
SDL_LOG_TRACE(
-
"exit with FALSE. Condition: LIBUSB_SUCCESS != libusb_submit_transfer");
return false;
}
@@ -192,7 +190,6 @@ TransportAdapter::Error UsbConnection::PostOutTransfer() {
const int libusb_ret = libusb_submit_transfer(out_transfer_);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_ERROR(
-
"libusb_submit_transfer failed: " << libusb_error_name(libusb_ret));
SDL_LOG_TRACE("exit with TransportAdapter::FAIL. Condition: "
<< "LIBUSB_SUCCESS != libusb_fill_bulk_transfer");
@@ -211,7 +208,6 @@ void UsbConnection::OnOutTransfer(libusb_transfer* transfer) {
bytes_sent_ += transfer->actual_length;
if (current_out_message_->data_size() == bytes_sent_) {
SDL_LOG_DEBUG(
-
"USB out transfer, data sent: " << current_out_message_.get());
controller_->DataSendDone(
device_uid_, app_handle_, current_out_message_);
@@ -219,7 +215,6 @@ void UsbConnection::OnOutTransfer(libusb_transfer* transfer) {
}
} else {
SDL_LOG_ERROR(
-
"USB out transfer failed: " << libusb_error_name(transfer->status));
controller_->DataSendFailed(
device_uid_, app_handle_, current_out_message_, DataSendError());
diff --git a/src/components/transport_manager/src/usb/libusb/usb_handler.cc b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
index c8973dfcc1..3b459eb0af 100644
--- a/src/components/transport_manager/src/usb/libusb/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/libusb/usb_handler.cc
@@ -89,8 +89,27 @@ UsbHandler::UsbHandler()
}
UsbHandler::~UsbHandler() {
- shutdown_requested_ = true;
- SDL_LOG_INFO("UsbHandler thread finished");
+ SDL_LOG_AUTO_TRACE();
+
+ // Notify Thread to stop on next iteration...
+ RequestStopThread();
+
+ // ... and unregister hotplug callbacks in order to wake
+ // libusb_handle_events()
+ DeregisterHotplugCallbacks();
+
+ // Now it is safe to join the Thread and free up resources
+ JoinAndDeleteThread();
+ InvokeLibusbExit();
+}
+
+void UsbHandler::RequestStopThread() {
+ SDL_LOG_AUTO_TRACE();
+ shutdown_requested_.store(true);
+}
+
+void UsbHandler::DeregisterHotplugCallbacks() {
+ SDL_LOG_AUTO_TRACE();
if (libusb_context_) {
// The libusb_hotplug_deregister_callback() wakes up blocking call of
@@ -99,10 +118,20 @@ UsbHandler::~UsbHandler() {
arrived_callback_handle_);
libusb_hotplug_deregister_callback(libusb_context_, left_callback_handle_);
}
+}
+
+void UsbHandler::JoinAndDeleteThread() {
+ SDL_LOG_AUTO_TRACE();
+ // Let thread finish on its own
thread_->Stop(threads::Thread::kThreadSoftStop);
delete thread_->GetDelegate();
threads::DeleteThread(thread_);
+ SDL_LOG_INFO("UsbHandler thread finished");
+}
+
+void UsbHandler::InvokeLibusbExit() {
+ SDL_LOG_AUTO_TRACE();
if (libusb_context_) {
libusb_exit(libusb_context_);
@@ -134,7 +163,6 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_ret = libusb_get_configuration(device_handle_libusb, &configuration);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_INFO(
-
"libusb_get_configuration failed: " << libusb_error_name(libusb_ret));
SDL_LOG_TRACE("exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
@@ -145,7 +173,6 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_set_configuration(device_handle_libusb, kUsbConfiguration);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_INFO(
-
"libusb_set_configuration failed: " << libusb_error_name(libusb_ret));
SDL_LOG_TRACE("exit. Condition: LIBUSB_SUCCESS != libusb_ret");
return;
@@ -155,7 +182,6 @@ void UsbHandler::DeviceArrived(libusb_device* device_libusb) {
libusb_ret = libusb_claim_interface(device_handle_libusb, 0);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_INFO(
-
"libusb_claim_interface failed: " << libusb_error_name(libusb_ret));
CloseDeviceHandle(device_handle_libusb);
SDL_LOG_TRACE("exit. Condition: LIBUSB_SUCCESS != libusb_ret");
@@ -420,7 +446,6 @@ void UsbHandler::SubmitControlTransfer(
const int libusb_ret = libusb_submit_transfer(libusb_transfer);
if (LIBUSB_SUCCESS != libusb_ret) {
SDL_LOG_ERROR(
-
"libusb_submit_transfer failed: " << libusb_error_name(libusb_ret));
libusb_free_transfer(libusb_transfer);
sequence_state->Finish();
diff --git a/src/components/transport_manager/src/usb/qnx/usb_handler.cc b/src/components/transport_manager/src/usb/qnx/usb_handler.cc
index 441fc8b664..2381daa15a 100644
--- a/src/components/transport_manager/src/usb/qnx/usb_handler.cc
+++ b/src/components/transport_manager/src/usb/qnx/usb_handler.cc
@@ -76,11 +76,6 @@ UsbHandler::~UsbHandler() {
}
}
-bool operator==(const usbd_device_instance_t& a,
- const usbd_device_instance_t& b) {
- return a.path == b.path && a.devno == b.devno;
-}
-
void UsbHandler::DeviceArrived(usbd_connection* connection,
usbd_device_instance_t* instance) {
for (Devices::const_iterator it = devices_.begin(); it != devices_.end();
diff --git a/src/components/transport_manager/src/usb/usb_device_scanner.cc b/src/components/transport_manager/src/usb/usb_device_scanner.cc
index b0749728a6..e2e2fecd6e 100644
--- a/src/components/transport_manager/src/usb/usb_device_scanner.cc
+++ b/src/components/transport_manager/src/usb/usb_device_scanner.cc
@@ -47,7 +47,7 @@ SDL_CREATE_LOG_VARIABLE("TransportManager")
class AoaInitSequence : public UsbControlTransferSequence {
public:
AoaInitSequence();
- AoaInitSequence(const TransportManagerSettings& settings);
+ explicit AoaInitSequence(const TransportManagerSettings& settings);
virtual ~AoaInitSequence() {}
private:
diff --git a/src/components/transport_manager/test/include/transport_manager/raw_message_matcher.h b/src/components/transport_manager/test/include/transport_manager/raw_message_matcher.h
index 2ee699096f..5aedfd58aa 100644
--- a/src/components/transport_manager/test/include/transport_manager/raw_message_matcher.h
+++ b/src/components/transport_manager/test/include/transport_manager/raw_message_matcher.h
@@ -55,7 +55,8 @@ class RawMessageMatcher : public MatcherInterface<RawMessagePtr> {
public:
explicit RawMessageMatcher(RawMessagePtr ptr);
- virtual bool MatchAndExplain(const RawMessagePtr ptr,
+ DEPRECATED
+ virtual bool MatchAndExplain(const RawMessagePtr msg,
MatchResultListener* listener) const;
virtual void DescribeTo(std::ostream* os) const;
virtual void DescribeNegationTo(std::ostream* os) const;
diff --git a/src/components/transport_manager/test/network_interface_listener_test.cc b/src/components/transport_manager/test/network_interface_listener_test.cc
index c6e007b62a..b2d9cbb51e 100644
--- a/src/components/transport_manager/test/network_interface_listener_test.cc
+++ b/src/components/transport_manager/test/network_interface_listener_test.cc
@@ -30,24 +30,10 @@ class NetworkInterfaceListenerTest : public ::testing::Test {
virtual ~NetworkInterfaceListenerTest() {}
protected:
- struct InterfaceEntry {
- const char* name;
- const char* ipv4_address;
- const char* ipv6_address;
- unsigned int flags;
- };
-
void Deinit() {
delete interface_listener_impl_;
}
- void SleepFor(long msec) const {
- if (msec > 0) {
- struct timespec ts = {0, msec * 1000 * 1000};
- nanosleep(&ts, NULL);
- }
- }
-
NetworkInterfaceListenerImpl* interface_listener_impl_;
MockTcpClientListener mock_tcp_client_listener_;
};
diff --git a/src/components/transport_manager/test/raw_message_matcher.cc b/src/components/transport_manager/test/raw_message_matcher.cc
index 61d73a9253..48e0908f9a 100644
--- a/src/components/transport_manager/test/raw_message_matcher.cc
+++ b/src/components/transport_manager/test/raw_message_matcher.cc
@@ -38,6 +38,7 @@ namespace transport_manager_test {
RawMessageMatcher::RawMessageMatcher(RawMessagePtr ptr) : ptr_(ptr) {}
+// cppcheck-suppress unusedFunction
bool RawMessageMatcher::MatchAndExplain(const RawMessagePtr msg,
MatchResultListener* listener) const {
if (msg->data_size() != ptr_->data_size()) {
diff --git a/src/components/transport_manager/test/websocket_client_connection_test.cc b/src/components/transport_manager/test/websocket_client_connection_test.cc
index b9aa6f7c7e..2eab434d1a 100644
--- a/src/components/transport_manager/test/websocket_client_connection_test.cc
+++ b/src/components/transport_manager/test/websocket_client_connection_test.cc
@@ -121,7 +121,7 @@ class WebsocketConnectionTest : public ::testing::Test {
std::shared_ptr<websocket::WSSSession> wss_session;
WebsocketClient ws_client;
std::string kHost = "127.0.0.1";
- uint16_t kPort = 8080;
+ uint16_t kPort = 48080;
std::string kPath = "/folder/file.html/";
std::string kQuery = "?eventId=2345&eventName='Test'&expectedResult=true";
std::string kFragment = "#section_1";
diff --git a/src/components/transport_manager/test/websocket_sample_client/websocket_sample_client.cc b/src/components/transport_manager/test/websocket_sample_client/websocket_sample_client.cc
index 88525ad29d..6c2ff12bfd 100644
--- a/src/components/transport_manager/test/websocket_sample_client/websocket_sample_client.cc
+++ b/src/components/transport_manager/test/websocket_sample_client/websocket_sample_client.cc
@@ -105,7 +105,6 @@ bool WSSampleClient<WS>::Connect(tcp::resolver::results_type& results) {
boost::system::error_code ec;
boost::asio::connect(ws_->next_layer(), results.begin(), results.end(), ec);
if (ec) {
- std::string str_err = "ErrorMessage: " + ec.message();
return false;
}
return true;
@@ -116,7 +115,6 @@ bool WSSampleClient<WSS>::Connect(tcp::resolver::results_type& results) {
boost::system::error_code ec;
boost::asio::connect(ws_->lowest_layer(), results.begin(), results.end(), ec);
if (ec) {
- std::string str_err = "ErrorMessage: " + ec.message();
return false;
}
return true;
@@ -128,7 +126,6 @@ bool WSSampleClient<WS>::Handshake(const std::string& host,
boost::system::error_code ec;
ws_->handshake(host, target, ec);
if (ec) {
- std::string str_err = "ErrorMessage: " + ec.message();
return false;
}
return true;
@@ -156,7 +153,6 @@ bool WSSampleClient<WSS>::Handshake(const std::string& host,
ws_->handshake(host, target, ec);
if (ec) {
- std::string str_err = "ErrorMessage: " + ec.message();
return false;
}
diff --git a/src/components/utils/src/date_time.cc b/src/components/utils/src/date_time.cc
index cea35a977e..389f973837 100644
--- a/src/components/utils/src/date_time.cc
+++ b/src/components/utils/src/date_time.cc
@@ -46,9 +46,7 @@ namespace date_time {
TimeDuration getCurrentTime() {
return bpt::microsec_clock::local_time() - bpt::from_time_t(0);
}
-TimeDuration TimeDurationZero() {
- return TimeDuration(0, 0, 0, 0);
-}
+
int64_t getSecs(const TimeDuration& t) {
return t.total_seconds();
}
@@ -61,13 +59,22 @@ int64_t getuSecs(const TimeDuration& t) {
return t.total_microseconds();
}
+#ifdef BUILD_TESTS
+// cppcheck-suppress unusedFunction //Used in unit tests
+TimeDuration TimeDurationZero() {
+ return TimeDuration(0, 0, 0, 0);
+}
+
+// cppcheck-suppress unusedFunction //Used in unit tests
int64_t get_just_mSecs(const TimeDuration& t) {
return t.total_milliseconds() % MILLISECONDS_IN_SECOND;
}
+// cppcheck-suppress unusedFunction //Used in unit tests
int64_t get_just_uSecs(const TimeDuration& t) {
return t.total_microseconds() % MICROSECONDS_IN_SECOND;
}
+#endif // BUILD_TESTS
int64_t calculateTimeSpan(const TimeDuration& sinceTime) {
return calculateTimeDiff(getCurrentTime(), sinceTime);
diff --git a/src/components/utils/src/file_system.cc b/src/components/utils/src/file_system.cc
index e5c98183ac..f0c838a7f9 100644
--- a/src/components/utils/src/file_system.cc
+++ b/src/components/utils/src/file_system.cc
@@ -56,8 +56,7 @@ using boost::system::error_code;
uint64_t file_system::GetAvailableDiskSpace(const std::string& path) {
SDL_LOG_AUTO_TRACE();
error_code ec;
- fs::space_info si = {0, 0, 0};
- si = fs::space(path, ec);
+ fs::space_info si = fs::space(path, ec);
if (ec) {
// If something went wrong, assume no free space
@@ -74,9 +73,8 @@ uint64_t file_system::FileSize(const std::string& path) {
const uint64_t fsize = static_cast<uint64_t>(fs::file_size(path, ec));
if (ec) {
- SDL_LOG_ERROR_WITH_ERRNO(
-
- "Unable to get file size: '" << path << "', reason: " << ec.message());
+ SDL_LOG_ERROR_WITH_ERRNO("Unable to get file size: '"
+ << path << "', reason: " << ec.message());
return 0;
}
return fsize;
@@ -174,9 +172,8 @@ bool file_system::IsDirectory(const std::string& name) {
bool file_system::DirectoryExists(const std::string& name) {
SDL_LOG_AUTO_TRACE();
const bool exists = FileExists(name) && IsDirectory(name);
- SDL_LOG_DEBUG(
-
- "Directory '" << name << "' " << (exists ? "exists" : "NOT exists"));
+ SDL_LOG_DEBUG("Directory '" << name << "' "
+ << (exists ? "exists" : "NOT exists"));
return exists;
}
@@ -305,10 +302,9 @@ void file_system::remove_directory_content(const std::string& directory_name) {
while (dir_iter != end) {
fs::remove_all(dir_iter->path(), ec);
if (ec) {
- SDL_LOG_ERROR_WITH_ERRNO(
-
- "Unable to remove file: " << dir_iter->path().string() << " reason "
- << ec.message());
+ SDL_LOG_ERROR_WITH_ERRNO("Unable to remove file: "
+ << dir_iter->path().string() << " reason "
+ << ec.message());
}
dir_iter.increment(ec);
if (ec) {
@@ -325,7 +321,6 @@ bool file_system::RemoveDirectory(const std::string& directory_name,
// Make sure the directory exists
if (!DirectoryExists(directory_name) && IsAccessible(directory_name, W_OK)) {
SDL_LOG_WARN(
-
"Unable to remove directory either doesn't exist or is not accessible");
return false;
}
@@ -466,11 +461,10 @@ bool file_system::ReadFile(const std::string& name, std::string& result) {
const std::string file_system::ConvertPathForURL(const std::string& path) {
SDL_LOG_AUTO_TRACE();
const std::string reserved_symbols = "!#$&'()*+,:;=?@[] ";
- size_t pos = std::string::npos;
std::string converted_path;
for (const auto symbol : path) {
- pos = reserved_symbols.find_first_of(symbol);
+ size_t pos = reserved_symbols.find_first_of(symbol);
if (pos != std::string::npos) {
const size_t size = 100;
char percent_value[size];
@@ -519,9 +513,8 @@ bool file_system::CopyFile(const std::string& src, const std::string& dst) {
error_code ec;
fs::copy_file(src, dst, ec);
if (ec) {
- SDL_LOG_ERROR_WITH_ERRNO(
-
- "Unable to copy file: '" << src << "', reason: " << ec.message());
+ SDL_LOG_ERROR_WITH_ERRNO("Unable to copy file: '"
+ << src << "', reason: " << ec.message());
// something failed
return false;
}
diff --git a/src/components/utils/src/threads/thread_validator.cc b/src/components/utils/src/threads/thread_validator.cc
index 218137127b..c59054ae11 100644
--- a/src/components/utils/src/threads/thread_validator.cc
+++ b/src/components/utils/src/threads/thread_validator.cc
@@ -46,13 +46,12 @@ SingleThreadSimpleValidator::~SingleThreadSimpleValidator() {}
void SingleThreadSimpleValidator::AssertRunningOnCreationThread() const {
PlatformThreadHandle current_id = Thread::CurrentId();
if (creation_thread_id_ != current_id) {
- SDL_LOG_ERROR(
-
- "Single-threaded object created at thread "
- << creation_thread_id_ << " is accessed from thread " << current_id
+ SDL_LOG_ERROR("Single-threaded object created at thread "
+ << creation_thread_id_ << " is accessed from thread "
+ << current_id
#ifdef BACKTRACE_SUPPORT
- << "\n"
- << utils::Backtrace()
+ << "\n"
+ << utils::Backtrace()
#endif
);
}
diff --git a/tools/rpc_spec b/tools/rpc_spec
-Subproject 0d7185781f4dd1a316137a052e1126cdb6e3f47
+Subproject 762489ca140f246923e8bb8f54e96364e9d0101