aboutsummaryrefslogtreecommitdiffstats
path: root/src/policy_manager/policy_manager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/policy_manager/policy_manager.cpp')
-rw-r--r--src/policy_manager/policy_manager.cpp74
1 files changed, 59 insertions, 15 deletions
diff --git a/src/policy_manager/policy_manager.cpp b/src/policy_manager/policy_manager.cpp
index 3b0eac6..3ee9459 100644
--- a/src/policy_manager/policy_manager.cpp
+++ b/src/policy_manager/policy_manager.cpp
@@ -84,7 +84,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) {
}
// Get event from json_object
- const char* event = getStringFromJson(json_in, "event");
+ const char* event = this->getStringFromJson(json_in, "event");
int event_no = 0;
if (nullptr != event) {
// Convert name to number
@@ -93,7 +93,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) {
}
// Get role from json_object
- const char* role = getStringFromJson(json_in, "role");
+ const char* role = this->getStringFromJson(json_in, "role");
int category_no = 0;
if (nullptr != role) {
HMI_DEBUG("wm:pm", "role(%s)", role);
@@ -112,7 +112,7 @@ int PolicyManager::checkPolicy(json_object* json_in, json_object** json_out) {
}
// Get areat from json_object
- const char* area = getStringFromJson(json_in, "area");
+ const char* area = this->getStringFromJson(json_in, "area");
int area_no = 0;
if (nullptr != area) {
// Convert name to number
@@ -254,9 +254,9 @@ int PolicyManager::loadRoleDb() {
}
// Load role.db
- HMI_DEBUG("wm:pm", "file_name:%s", file_name.c_str());
- json_object* json_obj = json_object_from_file(file_name.c_str());
- if (nullptr == json_obj) {
+ json_object* json_obj;
+ int ret = this->inputJsonFilie(file_name.c_str(), &json_obj);
+ if (0 > ret) {
HMI_ERROR("wm:pm", "Could not open role.db, so use default role information");
json_obj = json_tokener_parse(kDefaultRoleDb);
}
@@ -328,6 +328,9 @@ int PolicyManager::loadRoleDb() {
return 0;
}
+// TODO:
+// This function will be removed because json_helper has same function.
+// json_helper should be library.
const char* PolicyManager::getStringFromJson(json_object* obj, const char* key) {
if ((nullptr == obj) || (nullptr == key)) {
HMI_ERROR("wm:pm", "Argument is nullptr!!!");
@@ -343,19 +346,60 @@ const char* PolicyManager::getStringFromJson(json_object* obj, const char* key)
return json_object_get_string(tmp);
}
-int PolicyManager::getIntFromJson(json_object* obj, const char* key) {
- if ((nullptr == obj) || (nullptr == key)) {
- HMI_ERROR("wm:pm", "Argument is nullptr!!!");
- return 0;
+// TODO:
+// This function will be removed because json_helper has same function.
+// json_helper should be library.
+int PolicyManager::inputJsonFilie(const char* file, json_object** obj) {
+ const int input_size = 128;
+ int ret = -1;
+
+ if ((nullptr == file) || (nullptr == obj)) {
+ HMI_ERROR("wm:jh", "Argument is nullptr!!!");
+ return ret;
}
- json_object* tmp;
- if (!json_object_object_get_ex(obj, key, &tmp)) {
- HMI_DEBUG("wm:pm", "Not found key \"%s\"", key);
- return 0;
+ HMI_DEBUG("wm:jh", "Input file: %s", file);
+
+ // Open json file
+ FILE *fp = fopen(file, "rb");
+ if (nullptr == fp) {
+ HMI_ERROR("wm:jh", "Could not open file");
+ return ret;
}
- return json_object_get_int(tmp);
+ // Parse file data
+ struct json_tokener *tokener = json_tokener_new();
+ enum json_tokener_error json_error;
+ char buffer[input_size];
+ int block_cnt = 1;
+ while (1) {
+ size_t len = fread(buffer, sizeof(char), input_size, fp);
+ *obj = json_tokener_parse_ex(tokener, buffer, len);
+ if (nullptr != *obj) {
+ HMI_DEBUG("wm:jh", "File input is success");
+ ret = 0;
+ break;
+ }
+
+ json_error = json_tokener_get_error(tokener);
+ if ((json_tokener_continue != json_error)
+ || (input_size > len)) {
+ HMI_ERROR("wm:jh", "Failed to parse file (byte:%d err:%s)",
+ (input_size * block_cnt), json_tokener_error_desc(json_error));
+ HMI_ERROR("wm:jh", "\n%s", buffer);
+ *obj = nullptr;
+ break;
+ }
+ block_cnt++;
+ }
+
+ // Close json file
+ fclose(fp);
+
+ // Free json_tokener
+ json_tokener_free(tokener);
+
+ return ret;
}
void PolicyManager::addStateToJson(