// Get file length
fseek(m_input_file, 0, SEEK_END);
const size_t in_file_size = ftell(m_input_file);
- fseek(m_input_file, 0, SEEK_SET);
+ int res = fseek(m_input_file, 0, SEEK_SET);
+ if (0 != res) {
+ return LogAndCreateResult(ErrorCode::UNKNOWN_ERR, "Reading input file failed",
+ ("fseek failed with error! [%d]", res));
+ }
- LoggerD("Source file: [%s] size: %d - %s", src_file_path.c_str(), in_file_size,
+ LoggerD("Source file: [%s] size: %zu - %s", src_file_path.c_str(), in_file_size,
bytesToReadableString(in_file_size).c_str());
cur_afentry->setSize(in_file_size);
common::Instance::PostMessage(data->_instance, event.serialize().c_str());
}
- void PPMInstance::ResponseMultipleCallback(ppm_call_cause_e cause, const ppm_request_result_e *result,
- const char** privileges, size_t privileges_count, void* user_data) {
++void PPMInstance::ResponseMultipleCallback(ppm_call_cause_e cause,
++ const ppm_request_result_e* result,
++ const char** privileges, size_t privileges_count,
++ void* user_data) {
+ ScopeLogger();
+
+ std::unique_ptr<ResponseCallbackData> data{static_cast<ResponseCallbackData*>(user_data)};
+
+ picojson::value event = picojson::value(picojson::object());
+ picojson::object& obj = event.get<picojson::object>();
+
+ obj.insert(std::make_pair("callbackId", picojson::value(data->callbackId)));
+
+ if (PRIVACY_PRIVILEGE_MANAGER_CALL_CAUSE_ANSWER == cause) {
+ picojson::value result_array = picojson::value(picojson::array());
+ picojson::array& array_obj = result_array.get<picojson::array>();
+
+ for (size_t i = 0; i < privileges_count; i++) {
+ picojson::value result_elem = picojson::value(picojson::object());
+ picojson::object& obj = result_elem.get<picojson::object>();
+ obj["privilege"] = picojson::value(privileges[i]);
+ obj["result"] = picojson::value(CheckRequestResultToString(result[i]));
+ array_obj.push_back(result_elem);
+ }
+ obj.insert(std::make_pair("result", result_array));
+ } else {
+ LogAndReportError(
+ common::PlatformResult(common::ErrorCode::ABORT_ERR, "Get callback data failed"), &obj);
+ }
+
+ common::Instance::PostMessage(data->_instance, event.serialize().c_str());
+}
+
void PPMInstance::checkPermission(const picojson::value& args, picojson::object& out) {
ScopeLogger();
const std::string& privilege = args.get("privilege").get<std::string>();
ReportSuccess(out);
}
- int ret =
- ppm_request_permissions(privilege_array.data(), size, ResponseMultipleCallback, static_cast<void*>(user_data));
+void PPMInstance::requestPermissions(const picojson::value& args, picojson::object& out) {
+ ScopeLogger();
+
+ const double callback_id = args.get("callbackId").get<double>();
+
+ const picojson::array& privileges = args.get("privileges").get<picojson::array>();
+ unsigned int size = static_cast<int>(privileges.size());
+
+ std::vector<const char*> privilege_array;
+ size_t i = 0;
+
+ for (auto iter = privileges.begin(); iter != privileges.end(); ++iter, ++i) {
+ privilege_array.push_back(iter->get<std::string>().c_str());
+ }
+
+ ResponseCallbackData* user_data{new ResponseCallbackData()};
+ user_data->_instance = this;
+ user_data->callbackId = callback_id;
+
++ int ret = ppm_request_permissions(privilege_array.data(), size, ResponseMultipleCallback,
++ static_cast<void*>(user_data));
+
+ if (PRIVACY_PRIVILEGE_MANAGER_ERROR_NONE != ret) {
+ LogAndReportError(convertError(ret), &out,
+ ("checkPermission error: %d (%s)", ret, get_error_message(ret)));
+ return;
+ }
+
+ ReportSuccess(out);
+}
+
} // namespace ppm
} // namespace extension
virtual ~PPMInstance();
private:
- void checkPermission(const picojson::value& args, picojson::object& out);\
+ void checkPermission(const picojson::value& args, picojson::object& out);
+ void checkPermissions(const picojson::value& args, picojson::object& out);
void requestPermission(const picojson::value& args, picojson::object& out);
+ void requestPermissions(const picojson::value& args, picojson::object& out);
static common::PlatformResult convertError(int err, const std::string& message = "");
static std::string CheckResultToString(ppm_check_result_e result);
static std::string CheckRequestResultToString(ppm_request_result_e result);
static void ResponseCallback(ppm_call_cause_e cause, ppm_request_result_e result,
const char* privilege, void* user_data);
- const char** privileges, size_t privileges_count,
- void* user_data);
+ static void ResponseMultipleCallback(ppm_call_cause_e cause, const ppm_request_result_e* result,
++ const char** privileges, size_t privileges_count,
++ void* user_data);
};
} // namespace ppm