diff options
-rw-r--r-- | src/components/application_manager/src/message_helper/message_helper.cc | 43 | ||||
-rw-r--r-- | src/components/application_manager/src/policies/policy_handler.cc | 6 |
2 files changed, 43 insertions, 6 deletions
diff --git a/src/components/application_manager/src/message_helper/message_helper.cc b/src/components/application_manager/src/message_helper/message_helper.cc index 30dd34a7f7..4a2e528f3c 100644 --- a/src/components/application_manager/src/message_helper/message_helper.cc +++ b/src/components/application_manager/src/message_helper/message_helper.cc @@ -2432,6 +2432,42 @@ void MessageHelper::SendOnPermissionsChangeNotification( policy::Permissions::const_iterator it_permissions = permissions.begin(); policy::Permissions::const_iterator it_permissions_end = permissions.end(); + using policy::EncryptionRequired; + auto permission_item_encryption_flag_state = + [](const EncryptionRequired& app_flag, + const EncryptionRequired& groups_flag) -> EncryptionRequired { + enum EncryptionFlagState { TRUE, FALSE, MISSING }; + auto enum_from_optional_bool = [](const EncryptionRequired& flag) { + if (!flag.is_initialized()) { + return MISSING; + } + return *flag ? TRUE : FALSE; + }; + + typedef std::pair<EncryptionFlagState, EncryptionFlagState> + EnctyptionStatePair; + typedef std::map<EnctyptionStatePair, EncryptionRequired> + PermissionItemEncryptionTable; + static PermissionItemEncryptionTable encryption_state_table = { + {{TRUE, TRUE}, EncryptionRequired(true)}, + {{TRUE, FALSE}, EncryptionRequired()}, + {{TRUE, MISSING}, EncryptionRequired()}, + {{FALSE, TRUE}, EncryptionRequired()}, + {{FALSE, FALSE}, EncryptionRequired()}, + {{FALSE, MISSING}, EncryptionRequired()}, + {{MISSING, TRUE}, EncryptionRequired(true)}, + {{MISSING, FALSE}, EncryptionRequired()}, + {{MISSING, MISSING}, EncryptionRequired()}, + }; + const auto app_flag_state = enum_from_optional_bool(app_flag); + const auto groups_flag_state = enum_from_optional_bool(groups_flag); + auto it = encryption_state_table.find( + EnctyptionStatePair(app_flag_state, groups_flag_state)); + DCHECK_OR_RETURN(it != encryption_state_table.end(), + EncryptionRequired()); + return it->second; + }; + for (size_t index_pi = 0; it_permissions != it_permissions_end; ++it_permissions, ++index_pi) { permissions_item_array[index_pi] = @@ -2442,9 +2478,10 @@ void MessageHelper::SendOnPermissionsChangeNotification( permission_item["rpcName"] = (*it_permissions).first; const policy::RpcPermissions& rpc_permissions = (*it_permissions).second; - - if (rpc_permissions.require_encryption.is_initialized()) { - const bool require_encryption = *rpc_permissions.require_encryption; + auto item_require_encryption = permission_item_encryption_flag_state( + encryprion_required, rpc_permissions.require_encryption); + if (item_require_encryption.is_initialized()) { + const bool require_encryption = *item_require_encryption; permission_item[strings::requireEncryption] = require_encryption; } diff --git a/src/components/application_manager/src/policies/policy_handler.cc b/src/components/application_manager/src/policies/policy_handler.cc index ce05b80efb..82129f68b2 100644 --- a/src/components/application_manager/src/policies/policy_handler.cc +++ b/src/components/application_manager/src/policies/policy_handler.cc @@ -493,6 +493,7 @@ void PolicyHandler::OnAppPermissionConsent( void PolicyHandler::OnDeviceConsentChanged(const std::string& device_id, const bool is_allowed) { + LOG4CXX_AUTO_TRACE(logger_); POLICY_LIB_CHECK_VOID(); connection_handler::DeviceHandle device_handle; if (!application_manager_.connection_handler().GetDeviceID(device_id, @@ -975,9 +976,8 @@ void PolicyHandler::OnPendingPermissionChange( logger_, "PolicyHandler::OnPendingPermissionChange for " << policy_app_id); POLICY_LIB_CHECK_VOID(); - ApplicationSharedPtr app = - application_manager_.application_by_policy_id(policy_app_id); - if (app.use_count() == 0) { + auto app = application_manager_.application_by_policy_id(policy_app_id); + if (!app) { LOG4CXX_WARN(logger_, "No app found for " << policy_app_id << " policy app id."); return; |