summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorjacobkeeler <jacob.keeler@livioradio.com>2019-03-08 19:20:04 -0500
committerjacobkeeler <jacob.keeler@livioradio.com>2019-03-11 09:41:54 -0400
commitdbd96397d3c0ab94571868b084c0f66e3e4a3d7e (patch)
treedc36f8455cc6dbb5b4cb55fd385710715902a058
parent121f62b0ca53bcf6fdcb6ffb561261524b412ed2 (diff)
downloadsdl_core-dbd96397d3c0ab94571868b084c0f66e3e4a3d7e.tar.gz
Allow for unknown enum values when validating messages
-rw-r--r--src/components/application_manager/src/rpc_handler_impl.cc12
-rw-r--r--src/components/smart_objects/include/smart_objects/always_false_schema_item.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/always_true_schema_item.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/array_schema_item.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/default_shema_item.h12
-rw-r--r--src/components/smart_objects/include/smart_objects/enum_schema_item.h15
-rw-r--r--src/components/smart_objects/include/smart_objects/number_schema_item.h12
-rw-r--r--src/components/smart_objects/include/smart_objects/object_schema_item.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/schema_item.h3
-rw-r--r--src/components/smart_objects/include/smart_objects/smart_object.h3
-rw-r--r--src/components/smart_objects/include/smart_objects/smart_schema.h9
-rw-r--r--src/components/smart_objects/include/smart_objects/string_schema_item.h9
-rw-r--r--src/components/smart_objects/src/always_false_schema_item.cc3
-rw-r--r--src/components/smart_objects/src/always_true_schema_item.cc3
-rw-r--r--src/components/smart_objects/src/array_schema_item.cc6
-rw-r--r--src/components/smart_objects/src/object_schema_item.cc10
-rw-r--r--src/components/smart_objects/src/schema_item.cc3
-rw-r--r--src/components/smart_objects/src/smart_object.cc6
-rw-r--r--src/components/smart_objects/src/smart_schema.cc6
-rw-r--r--src/components/smart_objects/src/string_schema_item.cc3
20 files changed, 91 insertions, 60 deletions
diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc
index 6374e2a955..449ff0eceb 100644
--- a/src/components/application_manager/src/rpc_handler_impl.cc
+++ b/src/components/application_manager/src/rpc_handler_impl.cc
@@ -319,9 +319,8 @@ bool RPCHandlerImpl::ConvertMessageToSO(
if (!conversion_result ||
!mobile_so_factory().attachSchema(
output, remove_unknown_parameters, msg_version) ||
- ((output.validate(&report, msg_version) !=
- smart_objects::errors::OK &&
- remove_unknown_parameters))) {
+ output.validate(&report, msg_version, !remove_unknown_parameters) !=
+ smart_objects::errors::OK) {
LOG4CXX_WARN(logger_,
"Failed to parse string to smart object with API version "
<< msg_version.toString() << " : "
@@ -387,10 +386,11 @@ bool RPCHandlerImpl::ConvertMessageToSO(
}
rpc::ValidationReport report("RPC");
-
- if (output.validate(&report) != smart_objects::errors::OK) {
+ utils::SemanticVersion empty_version;
+ if (output.validate(&report, empty_version, !remove_unknown_parameters) !=
+ smart_objects::errors::OK) {
LOG4CXX_ERROR(logger_,
- "Incorrect parameter from HMI"
+ "Incorrect parameter from HMI - "
<< rpc::PrettyFormat(report));
output.erase(strings::msg_params);
diff --git a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
index bfa39af10a..5e635d049b 100644
--- a/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/always_false_schema_item.h
@@ -55,10 +55,11 @@ class CAlwaysFalseSchemaItem : public ISchemaItem {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
private:
CAlwaysFalseSchemaItem();
diff --git a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
index 4750c280e5..efa208833a 100644
--- a/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/always_true_schema_item.h
@@ -55,10 +55,11 @@ class CAlwaysTrueSchemaItem : public ISchemaItem {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
private:
CAlwaysTrueSchemaItem();
diff --git a/src/components/smart_objects/include/smart_objects/array_schema_item.h b/src/components/smart_objects/include/smart_objects/array_schema_item.h
index b365a48638..3f2e22849d 100644
--- a/src/components/smart_objects/include/smart_objects/array_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/array_schema_item.h
@@ -70,10 +70,11 @@ class CArraySchemaItem : public ISchemaItem {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
/**
* @brief Apply schema.
diff --git a/src/components/smart_objects/include/smart_objects/default_shema_item.h b/src/components/smart_objects/include/smart_objects/default_shema_item.h
index 5978fcb282..f86bd81f71 100644
--- a/src/components/smart_objects/include/smart_objects/default_shema_item.h
+++ b/src/components/smart_objects/include/smart_objects/default_shema_item.h
@@ -55,10 +55,11 @@ class CDefaultSchemaItem : public ISchemaItem {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
/**
* @brief Set default value to an object.
@@ -105,7 +106,8 @@ template <typename Type>
errors::eType CDefaultSchemaItem<Type>::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (getSmartType() != Object.getType()) {
std::string validation_info = "Incorrect type, expected: " +
SmartObject::typeToString(getSmartType()) +
diff --git a/src/components/smart_objects/include/smart_objects/enum_schema_item.h b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
index dfa0a4baeb..2067859d88 100644
--- a/src/components/smart_objects/include/smart_objects/enum_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/enum_schema_item.h
@@ -110,10 +110,11 @@ class TEnumSchemaItem : public CDefaultSchemaItem<EnumType> {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
/**
* @brief Return the correct history signature based on message version.
* @param signatures Vector reference of enums history items.
@@ -310,10 +311,14 @@ template <typename EnumType>
errors::eType TEnumSchemaItem<EnumType>::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (SmartType_Integer != Object.getType()) {
std::string validation_info;
if (SmartType_String == Object.getType()) {
+ if (allow_unknown_parameters) {
+ return errors::OK;
+ }
validation_info = "Invalid enum value: " + Object.asString();
} else {
validation_info = "Incorrect type, expected: " +
diff --git a/src/components/smart_objects/include/smart_objects/number_schema_item.h b/src/components/smart_objects/include/smart_objects/number_schema_item.h
index 6481605daf..0c6c657026 100644
--- a/src/components/smart_objects/include/smart_objects/number_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/number_schema_item.h
@@ -72,10 +72,11 @@ class TNumberSchemaItem : public CDefaultSchemaItem<NumberType> {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
private:
/**
@@ -137,7 +138,8 @@ template <typename NumberType>
errors::eType TNumberSchemaItem<NumberType>::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (!isValidNumberType(Object.getType())) {
SmartType expectedType = (typeid(double) == typeid(Object.getType()))
? SmartType_Double
diff --git a/src/components/smart_objects/include/smart_objects/object_schema_item.h b/src/components/smart_objects/include/smart_objects/object_schema_item.h
index 27937ee17c..3f452c08cc 100644
--- a/src/components/smart_objects/include/smart_objects/object_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/object_schema_item.h
@@ -111,10 +111,11 @@ class CObjectSchemaItem : public ISchemaItem {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
/**
* @brief Apply schema.
* @param Object Object to apply schema.
diff --git a/src/components/smart_objects/include/smart_objects/schema_item.h b/src/components/smart_objects/include/smart_objects/schema_item.h
index 0c1b3f75b8..644d03728f 100644
--- a/src/components/smart_objects/include/smart_objects/schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/schema_item.h
@@ -64,7 +64,8 @@ class ISchemaItem {
virtual errors::eType validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion = utils::SemanticVersion());
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false);
/**
* @brief Set default value to an object.
diff --git a/src/components/smart_objects/include/smart_objects/smart_object.h b/src/components/smart_objects/include/smart_objects/smart_object.h
index 2abc221972..c1c1983e81 100644
--- a/src/components/smart_objects/include/smart_objects/smart_object.h
+++ b/src/components/smart_objects/include/smart_objects/smart_object.h
@@ -680,7 +680,8 @@ class SmartObject FINAL {
*/
errors::eType validate(
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion = utils::SemanticVersion());
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false);
/**
* @brief Sets new schema
diff --git a/src/components/smart_objects/include/smart_objects/smart_schema.h b/src/components/smart_objects/include/smart_objects/smart_schema.h
index 41737fed25..d9ef7ae418 100644
--- a/src/components/smart_objects/include/smart_objects/smart_schema.h
+++ b/src/components/smart_objects/include/smart_objects/smart_schema.h
@@ -68,10 +68,11 @@ class CSmartSchema FINAL {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& messageVersion =
- utils::SemanticVersion()) const;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& messageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) const;
/**
* @brief Set new root schema item.
diff --git a/src/components/smart_objects/include/smart_objects/string_schema_item.h b/src/components/smart_objects/include/smart_objects/string_schema_item.h
index 5b37db584d..678097b838 100644
--- a/src/components/smart_objects/include/smart_objects/string_schema_item.h
+++ b/src/components/smart_objects/include/smart_objects/string_schema_item.h
@@ -67,10 +67,11 @@ class CStringSchemaItem : public CDefaultSchemaItem<std::string> {
* @param MessageVersion to check mobile RPC version against RPC Spec History
* @return ns_smart_objects::errors::eType
**/
- errors::eType validate(const SmartObject& Object,
- rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion =
- utils::SemanticVersion()) OVERRIDE;
+ errors::eType validate(
+ const SmartObject& Object,
+ rpc::ValidationReport* report__,
+ const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(),
+ const bool allow_unknown_parameters = false) OVERRIDE;
private:
/**
diff --git a/src/components/smart_objects/src/always_false_schema_item.cc b/src/components/smart_objects/src/always_false_schema_item.cc
index ca247eed09..62ae6549b9 100644
--- a/src/components/smart_objects/src/always_false_schema_item.cc
+++ b/src/components/smart_objects/src/always_false_schema_item.cc
@@ -44,7 +44,8 @@ std::shared_ptr<CAlwaysFalseSchemaItem> CAlwaysFalseSchemaItem::create() {
errors::eType CAlwaysFalseSchemaItem::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
report__->set_validation_info("Generic error");
return errors::ERROR;
}
diff --git a/src/components/smart_objects/src/always_true_schema_item.cc b/src/components/smart_objects/src/always_true_schema_item.cc
index 983733165c..9421654900 100644
--- a/src/components/smart_objects/src/always_true_schema_item.cc
+++ b/src/components/smart_objects/src/always_true_schema_item.cc
@@ -42,7 +42,8 @@ std::shared_ptr<CAlwaysTrueSchemaItem> CAlwaysTrueSchemaItem::create() {
errors::eType CAlwaysTrueSchemaItem::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
return errors::OK;
}
diff --git a/src/components/smart_objects/src/array_schema_item.cc b/src/components/smart_objects/src/array_schema_item.cc
index be5fc2b83a..0b616db692 100644
--- a/src/components/smart_objects/src/array_schema_item.cc
+++ b/src/components/smart_objects/src/array_schema_item.cc
@@ -45,7 +45,8 @@ std::shared_ptr<CArraySchemaItem> CArraySchemaItem::create(
errors::eType CArraySchemaItem::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (SmartType_Array != Object.getType()) {
std::string validation_info = "Incorrect type, expected: " +
SmartObject::typeToString(SmartType_Array) +
@@ -80,7 +81,8 @@ errors::eType CArraySchemaItem::validate(
const errors::eType result =
mElementSchemaItem->validate(Object.getElement(i),
&report__->ReportSubobject(strVal.str()),
- MessageVersion);
+ MessageVersion,
+ allow_unknown_parameters);
if (errors::OK != result) {
return result;
}
diff --git a/src/components/smart_objects/src/object_schema_item.cc b/src/components/smart_objects/src/object_schema_item.cc
index b32757db7a..382ae93e6d 100644
--- a/src/components/smart_objects/src/object_schema_item.cc
+++ b/src/components/smart_objects/src/object_schema_item.cc
@@ -110,7 +110,8 @@ std::shared_ptr<CObjectSchemaItem> CObjectSchemaItem::create(
errors::eType CObjectSchemaItem::validate(
const SmartObject& object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (SmartType_Map != object.getType()) {
std::string validation_info = "Incorrect type, expected: " +
SmartObject::typeToString(SmartType_Map) +
@@ -142,8 +143,11 @@ errors::eType CObjectSchemaItem::validate(
errors::eType result = errors::OK;
// Check if MessageVersion matches schema version
- result = correct_member.mSchemaItem->validate(
- field, &report__->ReportSubobject(key), MessageVersion);
+ result =
+ correct_member.mSchemaItem->validate(field,
+ &report__->ReportSubobject(key),
+ MessageVersion,
+ allow_unknown_parameters);
if (errors::OK != result) {
return result;
}
diff --git a/src/components/smart_objects/src/schema_item.cc b/src/components/smart_objects/src/schema_item.cc
index fbab17f32d..f116cae708 100644
--- a/src/components/smart_objects/src/schema_item.cc
+++ b/src/components/smart_objects/src/schema_item.cc
@@ -38,7 +38,8 @@ namespace ns_smart_objects {
errors::eType ISchemaItem::validate(
const SmartObject& object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
return errors::ERROR;
}
diff --git a/src/components/smart_objects/src/smart_object.cc b/src/components/smart_objects/src/smart_object.cc
index 3235dd619e..d58310ec95 100644
--- a/src/components/smart_objects/src/smart_object.cc
+++ b/src/components/smart_objects/src/smart_object.cc
@@ -878,8 +878,10 @@ bool SmartObject::isValid() const {
errors::eType SmartObject::validate(
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
- return m_schema.validate(*this, report__, MessageVersion);
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
+ return m_schema.validate(
+ *this, report__, MessageVersion, allow_unknown_parameters);
}
void SmartObject::setSchema(const CSmartSchema& schema) {
diff --git a/src/components/smart_objects/src/smart_schema.cc b/src/components/smart_objects/src/smart_schema.cc
index dc0f1cbe31..062bb18c8c 100644
--- a/src/components/smart_objects/src/smart_schema.cc
+++ b/src/components/smart_objects/src/smart_schema.cc
@@ -43,8 +43,10 @@ CSmartSchema::CSmartSchema(const ISchemaItemPtr SchemaItem)
errors::eType CSmartSchema::validate(
const SmartObject& object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) const {
- return mSchemaItem->validate(object, report__, MessageVersion);
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) const {
+ return mSchemaItem->validate(
+ object, report__, MessageVersion, allow_unknown_parameters);
}
void CSmartSchema::setSchemaItem(const ISchemaItemPtr schemaItem) {
diff --git a/src/components/smart_objects/src/string_schema_item.cc b/src/components/smart_objects/src/string_schema_item.cc
index 0288ad85e8..7331dd1340 100644
--- a/src/components/smart_objects/src/string_schema_item.cc
+++ b/src/components/smart_objects/src/string_schema_item.cc
@@ -49,7 +49,8 @@ std::shared_ptr<CStringSchemaItem> CStringSchemaItem::create(
errors::eType CStringSchemaItem::validate(
const SmartObject& Object,
rpc::ValidationReport* report__,
- const utils::SemanticVersion& MessageVersion) {
+ const utils::SemanticVersion& MessageVersion,
+ const bool allow_unknown_parameters) {
if (SmartType_String != Object.getType()) {
std::string validation_info = "Incorrect type, expected: " +
SmartObject::typeToString(SmartType_String) +