diff options
author | Alexander Kutsan <akutsan@luxoft.com> | 2017-08-14 12:59:20 +0300 |
---|---|---|
committer | Andrey Oleynik <aoleynik@luxoft.com> | 2017-08-16 22:56:22 +0300 |
commit | 7d051034794594f368a42c80ccd2e5ec7bbf9171 (patch) | |
tree | f68be8186135f7dfe1c815f4eb33ca210a7e64b8 | |
parent | 9149eea9fb300cdf186b53a9345c036923831d4b (diff) | |
download | sdl_core-7d051034794594f368a42c80ccd2e5ec7bbf9171.tar.gz |
Check if capabilities is null
If capabilities is null SDl should send Unsuported resourse on request with module type or module data related to this capabilities
-rw-r--r-- | src/components/remote_control/src/commands/get_interior_vehicle_data_request.cc | 29 | ||||
-rw-r--r-- | src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc | 15 |
2 files changed, 40 insertions, 4 deletions
diff --git a/src/components/remote_control/src/commands/get_interior_vehicle_data_request.cc b/src/components/remote_control/src/commands/get_interior_vehicle_data_request.cc index cfd08b47f6..0c62ee4711 100644 --- a/src/components/remote_control/src/commands/get_interior_vehicle_data_request.cc +++ b/src/components/remote_control/src/commands/get_interior_vehicle_data_request.cc @@ -54,11 +54,40 @@ GetInteriorVehicleDataRequest::GetInteriorVehicleDataRequest( RemotePluginInterface& rc_module) : BaseCommandRequest(message, rc_module) {} +bool CheckIfModuleTypeExistInCapabilities( + const smart_objects::SmartObject& rc_capabilities, + const std::string& module_type) { + LOG4CXX_AUTO_TRACE(logger_); + if (enums_value::kRadio == module_type && + !rc_capabilities.keyExists(strings::kradioControlCapabilities)) { + LOG4CXX_DEBUG(logger_, " Radio control capabilities not present"); + return false; + } + if (enums_value::kClimate == module_type && + !rc_capabilities.keyExists(strings::kclimateControlCapabilities)) { + LOG4CXX_DEBUG(logger_, " Climate control capabilities not present"); + return false; + } + + return true; +} + void GetInteriorVehicleDataRequest::Execute() { LOG4CXX_AUTO_TRACE(logger_); Json::Value request_params = MessageHelper::StringToValue(message_->json_message()); + const smart_objects::SmartObject* capabilities = + service()->GetRCCapabilities(); + if (capabilities && + !CheckIfModuleTypeExistInCapabilities(*capabilities, + ModuleType(request_params))) { + LOG4CXX_WARN(logger_, "Accessing not supported module data"); + SendResponse(false, + result_codes::kUnsupportedResource, + "Accessing not supported module data"); + return; + } if (HasRequestExcessiveSubscription(request_params)) { RemoveExcessiveSubscription(request_params); } diff --git a/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc b/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc index 5055146c80..e010cbb8b7 100644 --- a/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc +++ b/src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc @@ -137,17 +137,24 @@ bool CheckControlDataByCapabilities( bool CheckIfModuleDataExistInCapabilities( const smart_objects::SmartObject& rc_capabilities, const Json::Value& module_data) { + LOG4CXX_AUTO_TRACE(logger_); bool is_radio_data_valid = true; bool is_climate_data_valid = true; - if (IsMember(module_data, kRadioControlData) && - rc_capabilities.keyExists(strings::kradioControlCapabilities)) { + if (IsMember(module_data, kRadioControlData)) { + if (!rc_capabilities.keyExists(strings::kradioControlCapabilities)) { + LOG4CXX_DEBUG(logger_, " Radio control capabilities not present"); + return false; + } const smart_objects::SmartObject& radio_caps = rc_capabilities[strings::kradioControlCapabilities]; is_radio_data_valid = CheckControlDataByCapabilities( radio_caps, module_data[strings::kRadioControlData]); } - if (IsMember(module_data, kClimateControlData) && - rc_capabilities.keyExists(strings::kclimateControlCapabilities)) { + if (IsMember(module_data, kClimateControlData)) { + if (!rc_capabilities.keyExists(strings::kclimateControlCapabilities)) { + LOG4CXX_DEBUG(logger_, " Climate control capabilities not present"); + return false; + } const smart_objects::SmartObject& climate_caps = rc_capabilities[strings::kclimateControlCapabilities]; is_climate_data_valid = CheckControlDataByCapabilities( |