summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMaksym Ked <mked@luxoft.com>2019-06-06 14:33:33 +0300
committerMaksym Ked (GitHub) <mked@luxoft.com>2019-06-25 13:58:39 +0300
commit22f66211354f25d3ffcdcfeb58e9fac39ea8a9d7 (patch)
treee5a275d7dcf47cc65c9f45a66b2d23699397521b
parent932c8e819a4a73548d7c550ce5a26924fc2956bd (diff)
downloadsdl_core-22f66211354f25d3ffcdcfeb58e9fac39ea8a9d7.tar.gz
Extended logic adding encryption flag in message helper
-rw-r--r--src/components/application_manager/src/message_helper/message_helper.cc43
-rw-r--r--src/components/application_manager/src/policies/policy_handler.cc6
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;