summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Kutsan <akutsan@luxoft.com>2017-08-14 12:59:20 +0300
committerAndrey Oleynik <aoleynik@luxoft.com>2017-08-16 22:56:22 +0300
commit7d051034794594f368a42c80ccd2e5ec7bbf9171 (patch)
treef68be8186135f7dfe1c815f4eb33ca210a7e64b8
parent9149eea9fb300cdf186b53a9345c036923831d4b (diff)
downloadsdl_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.cc29
-rw-r--r--src/components/remote_control/src/commands/set_interior_vehicle_data_request.cc15
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(