diff options
Diffstat (limited to 'src/policy_manager/policy_manager.cpp')
-rw-r--r-- | src/policy_manager/policy_manager.cpp | 74 |
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( |