From dbd96397d3c0ab94571868b084c0f66e3e4a3d7e Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Fri, 8 Mar 2019 19:20:04 -0500 Subject: Allow for unknown enum values when validating messages --- .../application_manager/src/rpc_handler_impl.cc | 12 ++++++------ .../include/smart_objects/always_false_schema_item.h | 9 +++++---- .../include/smart_objects/always_true_schema_item.h | 9 +++++---- .../include/smart_objects/array_schema_item.h | 9 +++++---- .../include/smart_objects/default_shema_item.h | 12 +++++++----- .../include/smart_objects/enum_schema_item.h | 15 ++++++++++----- .../include/smart_objects/number_schema_item.h | 12 +++++++----- .../include/smart_objects/object_schema_item.h | 9 +++++---- .../smart_objects/include/smart_objects/schema_item.h | 3 ++- .../smart_objects/include/smart_objects/smart_object.h | 3 ++- .../smart_objects/include/smart_objects/smart_schema.h | 9 +++++---- .../include/smart_objects/string_schema_item.h | 9 +++++---- .../smart_objects/src/always_false_schema_item.cc | 3 ++- .../smart_objects/src/always_true_schema_item.cc | 3 ++- src/components/smart_objects/src/array_schema_item.cc | 6 ++++-- src/components/smart_objects/src/object_schema_item.cc | 10 +++++++--- src/components/smart_objects/src/schema_item.cc | 3 ++- src/components/smart_objects/src/smart_object.cc | 6 ++++-- src/components/smart_objects/src/smart_schema.cc | 6 ++++-- src/components/smart_objects/src/string_schema_item.cc | 3 ++- 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 errors::eType CDefaultSchemaItem::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 { * @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 errors::eType TEnumSchemaItem::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 { * @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 errors::eType TNumberSchemaItem::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 { * @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::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::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::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::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::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) + -- cgit v1.2.1 From 30c31d0b35961079e7b84cec74e1418a9af8451a Mon Sep 17 00:00:00 2001 From: JackLivio Date: Mon, 11 Mar 2019 16:20:12 -0400 Subject: Fix onAppServiceData from mobile --- .../src/commands/mobile/on_app_service_data_notification_from_mobile.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification_from_mobile.cc b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification_from_mobile.cc index 1328e128d4..7bb62d298d 100644 --- a/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification_from_mobile.cc +++ b/src/components/application_manager/rpc_plugins/app_service_rpc_plugin/src/commands/mobile/on_app_service_data_notification_from_mobile.cc @@ -61,7 +61,7 @@ void OnAppServiceDataNotificationFromMobile::Run() { MessageHelper::PrintSmartObject(*message_); std::string service_type = - (*message_)[strings::msg_params][strings::app_service_manifest] + (*message_)[strings::msg_params][strings::service_data] [strings::service_type].asString(); ApplicationSharedPtr app = application_manager_.application(connection_key()); -- cgit v1.2.1 From a3084a207c4593d38502e57531105846267057a1 Mon Sep 17 00:00:00 2001 From: Shobhit Adlakha Date: Tue, 12 Mar 2019 14:19:58 -0400 Subject: Validating forwarded and App Service RPC requests (#2837) * Created validate param and seperate function for Validating RPC SmartObject * Moved validate rpc smart object function to rpc handler interface * Addressed review comments * Addressed review comments --- .../include/application_manager/rpc_handler_impl.h | 8 ++++- .../application_manager/src/rpc_handler_impl.cc | 37 ++++++++++++++++------ .../application_manager/src/rpc_passing_handler.cc | 36 +++++++++++++++++++-- .../include/application_manager/rpc_handler.h | 5 +++ 4 files changed, 73 insertions(+), 13 deletions(-) diff --git a/src/components/application_manager/include/application_manager/rpc_handler_impl.h b/src/components/application_manager/include/application_manager/rpc_handler_impl.h index b7e74c5ab3..489bcd21fd 100644 --- a/src/components/application_manager/include/application_manager/rpc_handler_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_handler_impl.h @@ -154,12 +154,18 @@ class RPCHandlerImpl : public RPCHandler, ns_smart_device_link::ns_smart_objects::SmartObject& output, utils::SemanticVersion& message_version); + bool ValidateRpcSO(smart_objects::SmartObject* message, + utils::SemanticVersion& msg_version, + rpc::ValidationReport& report_out, + bool remove_unknown_params) OVERRIDE; + private: void ProcessMessageFromMobile(const std::shared_ptr message); void ProcessMessageFromHMI(const std::shared_ptr message); bool ConvertMessageToSO(const Message& message, smart_objects::SmartObject& output, - const bool remove_unknown_parameters = true); + const bool remove_unknown_parameters = true, + const bool validate_params = true); std::shared_ptr ConvertRawMsgToMessage( const ::protocol_handler::RawMessagePtr message); hmi_apis::HMI_API& hmi_so_factory(); diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc index 6374e2a955..65d5d713e8 100644 --- a/src/components/application_manager/src/rpc_handler_impl.cc +++ b/src/components/application_manager/src/rpc_handler_impl.cc @@ -85,7 +85,7 @@ void RPCHandlerImpl::ProcessMessageFromMobile( } if (!ConvertMessageToSO( - *message, *so_from_mobile, remove_unknown_parameters)) { + *message, *so_from_mobile, remove_unknown_parameters, !rpc_passing)) { LOG4CXX_ERROR(logger_, "Cannot create smart object from message"); return; } @@ -106,7 +106,7 @@ void RPCHandlerImpl::ProcessMessageFromMobile( commands::Command::SOURCE_MOBILE, message_type)) { // Since PassThrough failed, refiltering the message - if (!ConvertMessageToSO(*message, *so_from_mobile, true)) { + if (!ConvertMessageToSO(*message, *so_from_mobile, true, true)) { LOG4CXX_ERROR(logger_, "Cannot create smart object from message"); return; } @@ -283,7 +283,8 @@ void RPCHandlerImpl::GetMessageVersion( bool RPCHandlerImpl::ConvertMessageToSO( const Message& message, ns_smart_device_link::ns_smart_objects::SmartObject& output, - const bool remove_unknown_parameters) { + const bool remove_unknown_parameters, + const bool validate_params) { LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_DEBUG(logger_, "\t\t\tMessage to convert: protocol " @@ -303,6 +304,7 @@ bool RPCHandlerImpl::ConvertMessageToSO( message.type(), message.correlation_id()); + smart_objects::SmartObject* so_ptr = (conversion_result) ? &output : NULL; rpc::ValidationReport report("RPC"); // Attach RPC version to SmartObject if it does not exist yet. @@ -316,12 +318,9 @@ bool RPCHandlerImpl::ConvertMessageToSO( GetMessageVersion(output, msg_version); } - 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))) { + if (validate_params && + !ValidateRpcSO( + so_ptr, msg_version, report, remove_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object with API version " << msg_version.toString() << " : " @@ -338,8 +337,10 @@ bool RPCHandlerImpl::ConvertMessageToSO( rpc::PrettyFormat(report); app_manager_.GetRPCService().ManageMobileCommand( response, commands::Command::SOURCE_SDL); + return false; } + LOG4CXX_DEBUG(logger_, "Convertion result for sdl object is true function_id " << output[jhs::S_PARAMS][jhs::S_FUNCTION_ID].asInt()); @@ -388,7 +389,8 @@ bool RPCHandlerImpl::ConvertMessageToSO( rpc::ValidationReport report("RPC"); - if (output.validate(&report) != smart_objects::errors::OK) { + if (validate_params && + output.validate(&report) != smart_objects::errors::OK) { LOG4CXX_ERROR(logger_, "Incorrect parameter from HMI" << rpc::PrettyFormat(report)); @@ -449,6 +451,21 @@ bool RPCHandlerImpl::ConvertMessageToSO( return true; } +bool RPCHandlerImpl::ValidateRpcSO(smart_objects::SmartObject* message, + utils::SemanticVersion& msg_version, + rpc::ValidationReport& report_out, + bool remove_unknown_params) { + if (!message || + !mobile_so_factory().attachSchema( + *message, remove_unknown_params, msg_version) || + (message->validate(&report_out, msg_version) != + smart_objects::errors::OK)) { + LOG4CXX_WARN(logger_, "Failed to parse string to smart object"); + return false; + } + return true; +} + std::shared_ptr RPCHandlerImpl::ConvertRawMsgToMessage( const protocol_handler::RawMessagePtr message) { LOG4CXX_AUTO_TRACE(logger_); diff --git a/src/components/application_manager/src/rpc_passing_handler.cc b/src/components/application_manager/src/rpc_passing_handler.cc index 560418e910..165b1f43ba 100644 --- a/src/components/application_manager/src/rpc_passing_handler.cc +++ b/src/components/application_manager/src/rpc_passing_handler.cc @@ -38,6 +38,7 @@ #include "application_manager/application.h" #include "application_manager/application_manager.h" #include "application_manager/rpc_passing_handler.h" +#include "application_manager/rpc_handler.h" #include "application_manager/commands/command_impl.h" #include "application_manager/message_helper.h" #include "application_manager/smart_object_keys.h" @@ -145,8 +146,12 @@ bool RPCPassingHandler::RPCPassThrough(smart_objects::SmartObject rpc_message) { } rpc_request_queue_lock_.Release(); RemoveRequestTimer(correlation_id); - auto result_code = static_cast( - rpc_message[strings::msg_params][strings::result_code].asInt()); + + mobile_apis::Result::eType result_code; + smart_objects::EnumConversionHelper:: + StringToEnum( + rpc_message[strings::msg_params][strings::result_code].asString(), + &result_code); if (result_code == mobile_apis::Result::UNSUPPORTED_REQUEST) { LOG4CXX_DEBUG(logger_, "Service sent UNSUPPORTED_REQUEST"); @@ -228,6 +233,33 @@ void RPCPassingHandler::ForwardRequestToCore(uint32_t correlation_id) { std::make_shared(message); rpc_request_queue.erase(correlation_id); rpc_request_queue_lock_.Release(); + + // Validate rpc message before forwarding to core + rpc::ValidationReport report("RPC"); + uint32_t connection_key = + message[strings::params][strings::connection_key].asUInt(); + int32_t function_id = message[strings::params][strings::function_id].asInt(); + auto app_ptr = app_manager_.application(connection_key); + utils::SemanticVersion msg_version(0, 0, 0); + if (app_ptr) { + msg_version = app_ptr->msg_version(); + } + + if (!app_manager_.GetRPCHandler().ValidateRpcSO( + &message, msg_version, report, true)) { + std::shared_ptr response( + MessageHelper::CreateNegativeResponse( + connection_key, + function_id, + correlation_id, + mobile_apis::Result::INVALID_DATA)); + + (*response)[strings::msg_params][strings::info] = rpc::PrettyFormat(report); + app_manager_.GetRPCService().ManageMobileCommand( + response, commands::Command::SOURCE_SDL); + return; + } + app_manager_.GetRPCService().ManageMobileCommand( result, commands::Command::SOURCE_MOBILE); } diff --git a/src/components/include/application_manager/rpc_handler.h b/src/components/include/application_manager/rpc_handler.h index 9b6428f32d..a64ef44dfb 100644 --- a/src/components/include/application_manager/rpc_handler.h +++ b/src/components/include/application_manager/rpc_handler.h @@ -52,6 +52,11 @@ class RPCHandler #endif // TELEMETRY_MONITOR { public: + virtual bool ValidateRpcSO(smart_objects::SmartObject* message, + utils::SemanticVersion& msg_version, + rpc::ValidationReport& report_out, + bool remove_unknown_params) = 0; + virtual ~RPCHandler() {} }; -- cgit v1.2.1 From f94e7c768ce4fede9f02d63a8f24efaec255bc32 Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Tue, 12 Mar 2019 15:36:48 -0400 Subject: Rename `allow_unknown_parameters` in SO files --- .../smart_objects/include/smart_objects/always_false_schema_item.h | 2 +- .../smart_objects/include/smart_objects/always_true_schema_item.h | 2 +- .../smart_objects/include/smart_objects/array_schema_item.h | 2 +- .../smart_objects/include/smart_objects/default_shema_item.h | 4 ++-- .../smart_objects/include/smart_objects/enum_schema_item.h | 6 +++--- .../smart_objects/include/smart_objects/number_schema_item.h | 4 ++-- .../smart_objects/include/smart_objects/object_schema_item.h | 2 +- src/components/smart_objects/include/smart_objects/schema_item.h | 2 +- src/components/smart_objects/include/smart_objects/smart_object.h | 2 +- src/components/smart_objects/include/smart_objects/smart_schema.h | 2 +- .../smart_objects/include/smart_objects/string_schema_item.h | 2 +- src/components/smart_objects/src/always_false_schema_item.cc | 2 +- src/components/smart_objects/src/always_true_schema_item.cc | 2 +- src/components/smart_objects/src/array_schema_item.cc | 4 ++-- src/components/smart_objects/src/object_schema_item.cc | 4 ++-- src/components/smart_objects/src/schema_item.cc | 2 +- src/components/smart_objects/src/smart_object.cc | 4 ++-- src/components/smart_objects/src/smart_schema.cc | 4 ++-- src/components/smart_objects/src/string_schema_item.cc | 2 +- 19 files changed, 27 insertions(+), 27 deletions(-) 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 5e635d049b..c88c4e697a 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 @@ -59,7 +59,7 @@ class CAlwaysFalseSchemaItem : public ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = 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 efa208833a..0cd3d15452 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 @@ -59,7 +59,7 @@ class CAlwaysTrueSchemaItem : public ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = 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 3f2e22849d..427d209020 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 @@ -74,7 +74,7 @@ class CArraySchemaItem : public ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = 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 f86bd81f71..b07c668e97 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 @@ -59,7 +59,7 @@ class CDefaultSchemaItem : public ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = false) OVERRIDE; /** * @brief Set default value to an object. @@ -107,7 +107,7 @@ errors::eType CDefaultSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { 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 2067859d88..02e10b5603 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 @@ -114,7 +114,7 @@ class TEnumSchemaItem : public CDefaultSchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = false) OVERRIDE; /** * @brief Return the correct history signature based on message version. * @param signatures Vector reference of enums history items. @@ -312,11 +312,11 @@ errors::eType TEnumSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { if (SmartType_Integer != Object.getType()) { std::string validation_info; if (SmartType_String == Object.getType()) { - if (allow_unknown_parameters) { + if (allow_unknown_enums) { return errors::OK; } validation_info = "Invalid enum value: " + Object.asString(); 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 0c6c657026..041f7ecd52 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 @@ -76,7 +76,7 @@ class TNumberSchemaItem : public CDefaultSchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = false) OVERRIDE; private: /** @@ -139,7 +139,7 @@ errors::eType TNumberSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { 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 3f452c08cc..cacda792bf 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 @@ -115,7 +115,7 @@ class CObjectSchemaItem : public ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = 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 644d03728f..585e312c1a 100644 --- a/src/components/smart_objects/include/smart_objects/schema_item.h +++ b/src/components/smart_objects/include/smart_objects/schema_item.h @@ -65,7 +65,7 @@ class ISchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false); + const bool allow_unknown_enums = 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 c1c1983e81..d4db14d33f 100644 --- a/src/components/smart_objects/include/smart_objects/smart_object.h +++ b/src/components/smart_objects/include/smart_objects/smart_object.h @@ -681,7 +681,7 @@ class SmartObject FINAL { errors::eType validate( rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false); + const bool allow_unknown_enums = 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 d9ef7ae418..072b3c0b7e 100644 --- a/src/components/smart_objects/include/smart_objects/smart_schema.h +++ b/src/components/smart_objects/include/smart_objects/smart_schema.h @@ -72,7 +72,7 @@ class CSmartSchema FINAL { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& messageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) const; + const bool allow_unknown_enums = 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 678097b838..5f95ca0389 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 @@ -71,7 +71,7 @@ class CStringSchemaItem : public CDefaultSchemaItem { const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion = utils::SemanticVersion(), - const bool allow_unknown_parameters = false) OVERRIDE; + const bool allow_unknown_enums = 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 62ae6549b9..4f8f4584af 100644 --- a/src/components/smart_objects/src/always_false_schema_item.cc +++ b/src/components/smart_objects/src/always_false_schema_item.cc @@ -45,7 +45,7 @@ errors::eType CAlwaysFalseSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { 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 9421654900..855bfef2a0 100644 --- a/src/components/smart_objects/src/always_true_schema_item.cc +++ b/src/components/smart_objects/src/always_true_schema_item.cc @@ -43,7 +43,7 @@ errors::eType CAlwaysTrueSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { 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 0b616db692..1671a97644 100644 --- a/src/components/smart_objects/src/array_schema_item.cc +++ b/src/components/smart_objects/src/array_schema_item.cc @@ -46,7 +46,7 @@ errors::eType CArraySchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { if (SmartType_Array != Object.getType()) { std::string validation_info = "Incorrect type, expected: " + SmartObject::typeToString(SmartType_Array) + @@ -82,7 +82,7 @@ errors::eType CArraySchemaItem::validate( mElementSchemaItem->validate(Object.getElement(i), &report__->ReportSubobject(strVal.str()), MessageVersion, - allow_unknown_parameters); + allow_unknown_enums); 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 382ae93e6d..21d2316e48 100644 --- a/src/components/smart_objects/src/object_schema_item.cc +++ b/src/components/smart_objects/src/object_schema_item.cc @@ -111,7 +111,7 @@ errors::eType CObjectSchemaItem::validate( const SmartObject& object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { if (SmartType_Map != object.getType()) { std::string validation_info = "Incorrect type, expected: " + SmartObject::typeToString(SmartType_Map) + @@ -147,7 +147,7 @@ errors::eType CObjectSchemaItem::validate( correct_member.mSchemaItem->validate(field, &report__->ReportSubobject(key), MessageVersion, - allow_unknown_parameters); + allow_unknown_enums); 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 f116cae708..8c40e2c7bd 100644 --- a/src/components/smart_objects/src/schema_item.cc +++ b/src/components/smart_objects/src/schema_item.cc @@ -39,7 +39,7 @@ errors::eType ISchemaItem::validate( const SmartObject& object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { return errors::ERROR; } diff --git a/src/components/smart_objects/src/smart_object.cc b/src/components/smart_objects/src/smart_object.cc index d58310ec95..ef5dc787be 100644 --- a/src/components/smart_objects/src/smart_object.cc +++ b/src/components/smart_objects/src/smart_object.cc @@ -879,9 +879,9 @@ bool SmartObject::isValid() const { errors::eType SmartObject::validate( rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { return m_schema.validate( - *this, report__, MessageVersion, allow_unknown_parameters); + *this, report__, MessageVersion, allow_unknown_enums); } 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 062bb18c8c..4ab5e5ff23 100644 --- a/src/components/smart_objects/src/smart_schema.cc +++ b/src/components/smart_objects/src/smart_schema.cc @@ -44,9 +44,9 @@ errors::eType CSmartSchema::validate( const SmartObject& object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) const { + const bool allow_unknown_enums) const { return mSchemaItem->validate( - object, report__, MessageVersion, allow_unknown_parameters); + object, report__, MessageVersion, allow_unknown_enums); } 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 7331dd1340..e2ebde1861 100644 --- a/src/components/smart_objects/src/string_schema_item.cc +++ b/src/components/smart_objects/src/string_schema_item.cc @@ -50,7 +50,7 @@ errors::eType CStringSchemaItem::validate( const SmartObject& Object, rpc::ValidationReport* report__, const utils::SemanticVersion& MessageVersion, - const bool allow_unknown_parameters) { + const bool allow_unknown_enums) { if (SmartType_String != Object.getType()) { std::string validation_info = "Incorrect type, expected: " + SmartObject::typeToString(SmartType_String) + -- cgit v1.2.1 From a83aac5c4e094e02e0aa777bb2ae097a2b0b6de9 Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Tue, 12 Mar 2019 15:45:09 -0400 Subject: Rename `remove_unknown_parameters` to `allow_unknown_parameters` --- .../application_manager/application_manager_impl.h | 2 +- .../include/application_manager/rpc_handler_impl.h | 4 +-- .../include/application_manager/rpc_service_impl.h | 2 +- .../src/application_manager_impl.cc | 2 +- .../application_manager/src/rpc_handler_impl.cc | 29 +++++++++++----------- .../application_manager/src/rpc_passing_handler.cc | 2 +- .../application_manager/src/rpc_service_impl.cc | 22 ++++++++-------- .../include/application_manager/rpc_handler.h | 2 +- 8 files changed, 33 insertions(+), 32 deletions(-) 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 27be913cd5..007b3433f0 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 @@ -1149,7 +1149,7 @@ class ApplicationManagerImpl bool ConvertSOtoMessage(const smart_objects::SmartObject& message, Message& output, - const bool remove_unknown_parameters = true); + const bool allow_unknown_parameters = false); template void PrepareApplicationListSO(ApplicationList app_list, diff --git a/src/components/application_manager/include/application_manager/rpc_handler_impl.h b/src/components/application_manager/include/application_manager/rpc_handler_impl.h index 489bcd21fd..0f2cb46cae 100644 --- a/src/components/application_manager/include/application_manager/rpc_handler_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_handler_impl.h @@ -157,14 +157,14 @@ class RPCHandlerImpl : public RPCHandler, bool ValidateRpcSO(smart_objects::SmartObject* message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, - bool remove_unknown_params) OVERRIDE; + bool allow_unknown_parameters) OVERRIDE; private: void ProcessMessageFromMobile(const std::shared_ptr message); void ProcessMessageFromHMI(const std::shared_ptr message); bool ConvertMessageToSO(const Message& message, smart_objects::SmartObject& output, - const bool remove_unknown_parameters = true, + const bool allow_unknown_parameters = false, const bool validate_params = true); std::shared_ptr ConvertRawMsgToMessage( const ::protocol_handler::RawMessagePtr message); diff --git a/src/components/application_manager/include/application_manager/rpc_service_impl.h b/src/components/application_manager/include/application_manager/rpc_service_impl.h index 848e9645e7..516b8abb8b 100644 --- a/src/components/application_manager/include/application_manager/rpc_service_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_service_impl.h @@ -132,7 +132,7 @@ class RPCServiceImpl : public RPCService, private: bool ConvertSOtoMessage(const smart_objects::SmartObject& message, Message& output, - const bool remove_unknown_parameters = true); + const bool allow_unknown_parameters = false); hmi_apis::HMI_API& hmi_so_factory(); mobile_apis::MOBILE_API& mobile_so_factory(); diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 9d16c366d5..581551c3ac 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2268,7 +2268,7 @@ bool ApplicationManagerImpl::Stop() { bool ApplicationManagerImpl::ConvertSOtoMessage( const smart_objects::SmartObject& message, Message& output, - const bool remove_unknown_parameters) { + const bool allow_unknown_parameters) { LOG4CXX_AUTO_TRACE(logger_); if (smart_objects::SmartType_Null == message.getType() || diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc index 8911e746a6..9063728d66 100644 --- a/src/components/application_manager/src/rpc_handler_impl.cc +++ b/src/components/application_manager/src/rpc_handler_impl.cc @@ -65,7 +65,7 @@ void RPCHandlerImpl::ProcessMessageFromMobile( #endif // TELEMETRY_MONITOR smart_objects::SmartObjectSPtr so_from_mobile = std::make_shared(); - bool remove_unknown_parameters = true; + bool allow_unknown_parameters = false; DCHECK_OR_RETURN_VOID(so_from_mobile); if (!so_from_mobile) { LOG4CXX_ERROR(logger_, "Null pointer"); @@ -81,11 +81,11 @@ void RPCHandlerImpl::ProcessMessageFromMobile( LOG4CXX_DEBUG(logger_, "Allowing unknown parameters for request function " << message->function_id()); - remove_unknown_parameters = false; + allow_unknown_parameters = true; } if (!ConvertMessageToSO( - *message, *so_from_mobile, remove_unknown_parameters, !rpc_passing)) { + *message, *so_from_mobile, allow_unknown_parameters, !rpc_passing)) { LOG4CXX_ERROR(logger_, "Cannot create smart object from message"); return; } @@ -106,7 +106,7 @@ void RPCHandlerImpl::ProcessMessageFromMobile( commands::Command::SOURCE_MOBILE, message_type)) { // Since PassThrough failed, refiltering the message - if (!ConvertMessageToSO(*message, *so_from_mobile, true, true)) { + if (!ConvertMessageToSO(*message, *so_from_mobile)) { LOG4CXX_ERROR(logger_, "Cannot create smart object from message"); return; } @@ -134,7 +134,7 @@ void RPCHandlerImpl::ProcessMessageFromHMI( LOG4CXX_AUTO_TRACE(logger_); smart_objects::SmartObjectSPtr smart_object = std::make_shared(); - bool remove_unknown_parameters = true; + bool allow_unknown_parameters = false; if (!smart_object) { LOG4CXX_ERROR(logger_, "Null pointer"); return; @@ -152,10 +152,10 @@ void RPCHandlerImpl::ProcessMessageFromHMI( logger_, "Allowing unknown parameters for request function " << converted_result[jhs::S_PARAMS][jhs::S_FUNCTION_ID].asInt()); - remove_unknown_parameters = false; + allow_unknown_parameters = true; } - if (!ConvertMessageToSO(*message, *smart_object, remove_unknown_parameters)) { + if (!ConvertMessageToSO(*message, *smart_object, allow_unknown_parameters)) { if (application_manager::MessageType::kResponse == (*smart_object)[strings::params][strings::message_type].asInt()) { (*smart_object).erase(strings::msg_params); @@ -283,7 +283,7 @@ void RPCHandlerImpl::GetMessageVersion( bool RPCHandlerImpl::ConvertMessageToSO( const Message& message, ns_smart_device_link::ns_smart_objects::SmartObject& output, - const bool remove_unknown_parameters, + const bool allow_unknown_parameters, const bool validate_params) { LOG4CXX_AUTO_TRACE(logger_); LOG4CXX_DEBUG(logger_, @@ -320,7 +320,7 @@ bool RPCHandlerImpl::ConvertMessageToSO( if (validate_params && !ValidateRpcSO( - so_ptr, msg_version, report, remove_unknown_parameters)) { + so_ptr, msg_version, report, allow_unknown_parameters))) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object with API version " << msg_version.toString() << " : " @@ -388,10 +388,11 @@ bool RPCHandlerImpl::ConvertMessageToSO( } rpc::ValidationReport report("RPC"); + utils::SemanticVersion empty_version; if (validate_params && - output.validate(&report, empty_version, !remove_unknown_parameters) != - smart_objects::errors::OK) { + output.validate(&report, empty_version, allow_unknown_parameters) != + smart_objects::errors::OK) { LOG4CXX_ERROR(logger_, "Incorrect parameter from HMI - " << rpc::PrettyFormat(report)); @@ -455,11 +456,11 @@ bool RPCHandlerImpl::ConvertMessageToSO( bool RPCHandlerImpl::ValidateRpcSO(smart_objects::SmartObject* message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, - bool remove_unknown_params) { + bool allow_unknown_parameters) { if (!message || !mobile_so_factory().attachSchema( - *message, remove_unknown_params, msg_version) || - output.validate(&report_out, msg_version, !remove_unknown_parameters) != + *message, !allow_unknown_parameters, msg_version) || + message->validate(&report_out, msg_version, allow_unknown_parameters) != smart_objects::errors::OK) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object"); return false; diff --git a/src/components/application_manager/src/rpc_passing_handler.cc b/src/components/application_manager/src/rpc_passing_handler.cc index 165b1f43ba..f3db361de3 100644 --- a/src/components/application_manager/src/rpc_passing_handler.cc +++ b/src/components/application_manager/src/rpc_passing_handler.cc @@ -246,7 +246,7 @@ void RPCPassingHandler::ForwardRequestToCore(uint32_t correlation_id) { } if (!app_manager_.GetRPCHandler().ValidateRpcSO( - &message, msg_version, report, true)) { + &message, msg_version, report, false)) { std::shared_ptr response( MessageHelper::CreateNegativeResponse( connection_key, diff --git a/src/components/application_manager/src/rpc_service_impl.cc b/src/components/application_manager/src/rpc_service_impl.cc index d8329ba8cf..dfb5839764 100644 --- a/src/components/application_manager/src/rpc_service_impl.cc +++ b/src/components/application_manager/src/rpc_service_impl.cc @@ -388,7 +388,7 @@ void RPCServiceImpl::SendMessageToMobile( const bool is_result_code_exists = (*message)[strings::msg_params].keyExists(strings::result_code); - bool remove_unknown_parameters = true; + bool allow_unknown_parameters = false; if (!app) { LOG4CXX_ERROR(logger_, "No application associated with connection key"); @@ -431,7 +431,7 @@ void RPCServiceImpl::SendMessageToMobile( LOG4CXX_DEBUG(logger_, "Allowing unknown parameters for response function " << function_id); - remove_unknown_parameters = false; + allow_unknown_parameters = true; } if (rpc_passing && @@ -441,10 +441,10 @@ void RPCServiceImpl::SendMessageToMobile( (*message)[jhs::S_PARAMS][jhs::S_CORRELATION_ID].asUInt(), commands::Command::CommandSource::SOURCE_SDL, (*message)[jhs::S_PARAMS][jhs::S_MESSAGE_TYPE].asInt())) { - remove_unknown_parameters = true; + allow_unknown_parameters = false; } if (!ConvertSOtoMessage( - (*message), (*message_to_send), remove_unknown_parameters)) { + (*message), (*message_to_send), allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Can't send msg to Mobile: failed to create string"); return; } @@ -523,7 +523,7 @@ void RPCServiceImpl::SendMessageToHMI( return; } - bool remove_unknown_parameters = true; + bool allow_unknown_parameters = false; // SmartObject |message| has no way to declare priority for now std::shared_ptr message_to_send( new Message(protocol_handler::MessagePriority::kDefault)); @@ -543,11 +543,11 @@ void RPCServiceImpl::SendMessageToHMI( "Allowing unknown parameters for response function " << (*message)[jhs::S_PARAMS][jhs::S_FUNCTION_ID].asInt()); - remove_unknown_parameters = false; + allow_unknown_parameters = true; } if (!ConvertSOtoMessage( - *message, *message_to_send, remove_unknown_parameters)) { + *message, *message_to_send, allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Cannot send message to HMI: failed to create string"); return; @@ -605,7 +605,7 @@ void RPCServiceImpl::set_hmi_message_handler( bool RPCServiceImpl::ConvertSOtoMessage( const ns_smart_device_link::ns_smart_objects::SmartObject& message, Message& output, - const bool remove_unknown_parameters) { + const bool allow_unknown_parameters) { LOG4CXX_AUTO_TRACE(logger_); if (smart_objects::SmartType_Null == message.getType() || @@ -631,7 +631,7 @@ bool RPCServiceImpl::ConvertSOtoMessage( case 0: { if (protocol_version == 1) { if (!formatters::CFormatterJsonSDLRPCv1::toString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } @@ -639,7 +639,7 @@ bool RPCServiceImpl::ConvertSOtoMessage( protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_1); } else { if (!formatters::CFormatterJsonSDLRPCv2::toString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } @@ -652,7 +652,7 @@ bool RPCServiceImpl::ConvertSOtoMessage( } case 1: { if (!formatters::FormatterJsonRpc::ToString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } diff --git a/src/components/include/application_manager/rpc_handler.h b/src/components/include/application_manager/rpc_handler.h index a64ef44dfb..3652c77342 100644 --- a/src/components/include/application_manager/rpc_handler.h +++ b/src/components/include/application_manager/rpc_handler.h @@ -55,7 +55,7 @@ class RPCHandler virtual bool ValidateRpcSO(smart_objects::SmartObject* message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, - bool remove_unknown_params) = 0; + bool allow_unknown_parameters) = 0; virtual ~RPCHandler() {} }; -- cgit v1.2.1 From e64899c5733f64b154ea42ebbd8f33585c55c704 Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Tue, 12 Mar 2019 15:50:15 -0400 Subject: Change `message` in ValidateRpcSO to reference --- .../include/application_manager/rpc_handler_impl.h | 2 +- .../application_manager/src/application_manager_impl.cc | 6 +++--- .../application_manager/src/rpc_handler_impl.cc | 17 ++++++++--------- .../application_manager/src/rpc_passing_handler.cc | 2 +- .../include/application_manager/rpc_handler.h | 2 +- 5 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/components/application_manager/include/application_manager/rpc_handler_impl.h b/src/components/application_manager/include/application_manager/rpc_handler_impl.h index 0f2cb46cae..e1dc9e6c5d 100644 --- a/src/components/application_manager/include/application_manager/rpc_handler_impl.h +++ b/src/components/application_manager/include/application_manager/rpc_handler_impl.h @@ -154,7 +154,7 @@ class RPCHandlerImpl : public RPCHandler, ns_smart_device_link::ns_smart_objects::SmartObject& output, utils::SemanticVersion& message_version); - bool ValidateRpcSO(smart_objects::SmartObject* message, + bool ValidateRpcSO(smart_objects::SmartObject& message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, bool allow_unknown_parameters) OVERRIDE; diff --git a/src/components/application_manager/src/application_manager_impl.cc b/src/components/application_manager/src/application_manager_impl.cc index 581551c3ac..701bb339a1 100644 --- a/src/components/application_manager/src/application_manager_impl.cc +++ b/src/components/application_manager/src/application_manager_impl.cc @@ -2294,7 +2294,7 @@ bool ApplicationManagerImpl::ConvertSOtoMessage( case 0: { if (protocol_version == 1) { if (!formatters::CFormatterJsonSDLRPCv1::toString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } @@ -2302,7 +2302,7 @@ bool ApplicationManagerImpl::ConvertSOtoMessage( protocol_handler::MajorProtocolVersion::PROTOCOL_VERSION_1); } else { if (!formatters::CFormatterJsonSDLRPCv2::toString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } @@ -2315,7 +2315,7 @@ bool ApplicationManagerImpl::ConvertSOtoMessage( } case 1: { if (!formatters::FormatterJsonRpc::ToString( - message, output_string, remove_unknown_parameters)) { + message, output_string, !allow_unknown_parameters)) { LOG4CXX_WARN(logger_, "Failed to serialize smart object"); return false; } diff --git a/src/components/application_manager/src/rpc_handler_impl.cc b/src/components/application_manager/src/rpc_handler_impl.cc index 9063728d66..2574da5fb5 100644 --- a/src/components/application_manager/src/rpc_handler_impl.cc +++ b/src/components/application_manager/src/rpc_handler_impl.cc @@ -304,7 +304,6 @@ bool RPCHandlerImpl::ConvertMessageToSO( message.type(), message.correlation_id()); - smart_objects::SmartObject* so_ptr = (conversion_result) ? &output : NULL; rpc::ValidationReport report("RPC"); // Attach RPC version to SmartObject if it does not exist yet. @@ -318,9 +317,10 @@ bool RPCHandlerImpl::ConvertMessageToSO( GetMessageVersion(output, msg_version); } - if (validate_params && - !ValidateRpcSO( - so_ptr, msg_version, report, allow_unknown_parameters))) { + if (!conversion_result || + (validate_params && + !ValidateRpcSO( + output, msg_version, report, allow_unknown_parameters))) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object with API version " << msg_version.toString() << " : " @@ -453,14 +453,13 @@ bool RPCHandlerImpl::ConvertMessageToSO( return true; } -bool RPCHandlerImpl::ValidateRpcSO(smart_objects::SmartObject* message, +bool RPCHandlerImpl::ValidateRpcSO(smart_objects::SmartObject& message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, bool allow_unknown_parameters) { - if (!message || - !mobile_so_factory().attachSchema( - *message, !allow_unknown_parameters, msg_version) || - message->validate(&report_out, msg_version, allow_unknown_parameters) != + if (!mobile_so_factory().attachSchema( + message, !allow_unknown_parameters, msg_version) || + message.validate(&report_out, msg_version, allow_unknown_parameters) != smart_objects::errors::OK) { LOG4CXX_WARN(logger_, "Failed to parse string to smart object"); return false; diff --git a/src/components/application_manager/src/rpc_passing_handler.cc b/src/components/application_manager/src/rpc_passing_handler.cc index f3db361de3..8d93659a27 100644 --- a/src/components/application_manager/src/rpc_passing_handler.cc +++ b/src/components/application_manager/src/rpc_passing_handler.cc @@ -246,7 +246,7 @@ void RPCPassingHandler::ForwardRequestToCore(uint32_t correlation_id) { } if (!app_manager_.GetRPCHandler().ValidateRpcSO( - &message, msg_version, report, false)) { + message, msg_version, report, false)) { std::shared_ptr response( MessageHelper::CreateNegativeResponse( connection_key, diff --git a/src/components/include/application_manager/rpc_handler.h b/src/components/include/application_manager/rpc_handler.h index 3652c77342..2ada9e7901 100644 --- a/src/components/include/application_manager/rpc_handler.h +++ b/src/components/include/application_manager/rpc_handler.h @@ -52,7 +52,7 @@ class RPCHandler #endif // TELEMETRY_MONITOR { public: - virtual bool ValidateRpcSO(smart_objects::SmartObject* message, + virtual bool ValidateRpcSO(smart_objects::SmartObject& message, utils::SemanticVersion& msg_version, rpc::ValidationReport& report_out, bool allow_unknown_parameters) = 0; -- cgit v1.2.1 From 1eb4ec400d357987bcab8628c017f78372363c5b Mon Sep 17 00:00:00 2001 From: jacobkeeler Date: Tue, 12 Mar 2019 16:56:13 -0400 Subject: Add description to allow_unknown_enums --- .../smart_objects/include/smart_objects/always_false_schema_item.h | 4 ++++ .../smart_objects/include/smart_objects/always_true_schema_item.h | 4 ++++ .../smart_objects/include/smart_objects/array_schema_item.h | 4 ++++ .../smart_objects/include/smart_objects/default_shema_item.h | 4 ++++ .../smart_objects/include/smart_objects/enum_schema_item.h | 4 ++++ .../smart_objects/include/smart_objects/number_schema_item.h | 4 ++++ .../smart_objects/include/smart_objects/object_schema_item.h | 4 ++++ src/components/smart_objects/include/smart_objects/schema_item.h | 6 +++++- src/components/smart_objects/include/smart_objects/smart_object.h | 4 ++++ src/components/smart_objects/include/smart_objects/smart_schema.h | 4 ++++ .../smart_objects/include/smart_objects/string_schema_item.h | 4 ++++ 11 files changed, 45 insertions(+), 1 deletion(-) 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 c88c4e697a..05c53ec582 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 @@ -53,6 +53,10 @@ class CAlwaysFalseSchemaItem : public ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 0cd3d15452..a2d305d0f9 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 @@ -53,6 +53,10 @@ class CAlwaysTrueSchemaItem : public ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 427d209020..7706b6e091 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 @@ -68,6 +68,10 @@ class CArraySchemaItem : public ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 b07c668e97..beeeaac81f 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 @@ -53,6 +53,10 @@ class CDefaultSchemaItem : public ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 02e10b5603..2a27f765d2 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 @@ -108,6 +108,10 @@ class TEnumSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 041f7ecd52..b3e227e0f1 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 @@ -70,6 +70,10 @@ class TNumberSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 cacda792bf..7b57792c1e 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 @@ -109,6 +109,10 @@ class CObjectSchemaItem : public ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 585e312c1a..fa5f6d3adc 100644 --- a/src/components/smart_objects/include/smart_objects/schema_item.h +++ b/src/components/smart_objects/include/smart_objects/schema_item.h @@ -58,7 +58,11 @@ class ISchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * message if an error occurs - * @param MessageVersion to check mobile RPC version against RPC Spec Histor + * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ virtual errors::eType validate( 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 d4db14d33f..b862d25a17 100644 --- a/src/components/smart_objects/include/smart_objects/smart_object.h +++ b/src/components/smart_objects/include/smart_objects/smart_object.h @@ -676,6 +676,10 @@ class SmartObject FINAL { * * @param report__ object for reporting errors during validation * @param messageVersion of the mobile app to check against RPC Spec Schema + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return Result of validation. */ errors::eType validate( 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 072b3c0b7e..ece2696539 100644 --- a/src/components/smart_objects/include/smart_objects/smart_schema.h +++ b/src/components/smart_objects/include/smart_objects/smart_schema.h @@ -66,6 +66,10 @@ class CSmartSchema FINAL { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( 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 5f95ca0389..7104ff47a9 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 @@ -65,6 +65,10 @@ class CStringSchemaItem : public CDefaultSchemaItem { * @param Object Object to validate. * @param report__ object for reporting errors during validation * @param MessageVersion to check mobile RPC version against RPC Spec History + * @param allow_unknown_enums + * false - unknown enum values (left as string values after applySchema) + * will be considered invalid. + * true - such values will be considered valid. * @return ns_smart_objects::errors::eType **/ errors::eType validate( -- cgit v1.2.1