From 5ab5c1bd72912703b691e76abca96c47212c50c3 Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Thu, 26 Nov 2015 19:19:18 +0900 Subject: [PATCH] Add drm related apis ADDED: pkgmgr_client_generate_license_request pkgmgr_client_register_license pkgmgr_client_decrypt_package Change-Id: I92f97b457e04be5efae8e659ec052ad3d15d332b Signed-off-by: Sangyoon Jang --- client/include/package-manager.h | 53 ++++++++++++++++++++ client/src/pkgmgr.c | 106 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 159 insertions(+) diff --git a/client/include/package-manager.h b/client/include/package-manager.h index 8f975a4..2de8528 100644 --- a/client/include/package-manager.h +++ b/client/include/package-manager.h @@ -671,6 +671,59 @@ int pkgmgr_client_usr_clear_cache_dir(const char *pkgid, uid_t uid); */ int pkgmgr_client_clear_all_cache_dir(void); int pkgmgr_client_usr_clear_all_cache_dir(uid_t uid); + +/** + * @brief Generates request for getting license + * + * This API generates request for getting license.\n + * + * @remarks You must release @a req_data and @a license_url by yourself. + * @param[in] pc The pointer to pkgmgr_client instance + * @param[in] resp_data The response data string of the purchase request + * @param[out] req_data License request data + * @param[out] license_url License acquisition url data + * @return 0 if success, error code(<0) if fail\n + * @retval PKGMGR_R_OK success + * @retval PKGMGR_R_EINVAL invalid argument + * @retval PKGMGR_R_ECOMM communication error + * @retval PKGMGR_R_EPRIV privilege denied + * @retval PKGMGR_R_ESYSTEM severe system error + */ +int pkgmgr_client_generate_license_request(pkgmgr_client *pc, const char *resp_data, char **req_data, char **license_url); + +/** + * @brief Registers encrypted license + * + * This API registers encrypted license.\n + * + * @param[in] pc The pointer to pkgmgr_client instance + * @param[in] resp_data The response data string of the purchase request + * @return 0 if success, error code(<0) if fail\n + * @retval PKGMGR_R_OK success + * @retval PKGMGR_R_EINVAL invalid argument + * @retval PKGMGR_R_ECOMM communication error + * @retval PKGMGR_R_EPRIV privilege denied + * @retval PKGMGR_R_ESYSTEM severe system error + */ +int pkgmgr_client_register_license(pkgmgr_client *pc, const char *resp_data); + +/** + * @brief Decrypts contents which is encrypted + * + * This API decrypts contents which is encrypted.\n + * + * @param[in] pc The pointer to pkgmgr_client instance + * @param[in] drm_file_path The pointer to pkgmgr_client instance + * @param[in] decrypted_file_path The pointer to pkgmgr_client instance + * @return 0 if success, error code(<0) if fail\n + * @retval PKGMGR_R_OK success + * @retval PKGMGR_R_EINVAL invalid argument + * @retval PKGMGR_R_ECOMM communication error + * @retval PKGMGR_R_EPRIV privilege denied + * @retval PKGMGR_R_ESYSTEM severe system error + */ +int pkgmgr_client_decrypt_package(pkgmgr_client *pc, const char *drm_file_path, const char *decrypted_file_path); + /** @} */ diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index cd410c2..be8cef2 100644 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -1680,3 +1680,109 @@ API int pkgmgr_client_get_total_package_size_info(pkgmgr_client *pc, pkgmgr_tota { return pkgmgr_client_usr_get_package_size_info(pc, PKG_SIZE_INFO_TOTAL, (pkgmgr_pkg_size_info_receive_cb)event_cb, user_data, GLOBAL_USER); } + +API int pkgmgr_client_generate_license_request(pkgmgr_client *pc, + const char *resp_data, char **req_data, char **license_url) +{ + GVariant *result; + int ret; + char *data; + char *url; + pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc; + + if (pc == NULL || resp_data == NULL || req_data == NULL || + license_url == NULL) { + ERR("invalid parameter"); + return PKGMGR_R_EINVAL; + } + + if (mpc->ctype != PC_REQUEST) { + ERR("mpc->ctype is not PC_REQUEST"); + return PKGMGR_R_EINVAL; + } + + result = comm_client_request(mpc->info.request.cc, + "generate_license_request", + g_variant_new("(s)", resp_data)); + if (result == NULL) + return PKGMGR_R_ECOMM; + + g_variant_get(result, "(i&s&s)", &ret, &data, &url); + if (ret != PKGMGR_R_OK) { + ERR("generate_license_request failed: %d", ret); + g_variant_unref(result); + return ret; + } + + *req_data = strdup(data); + *license_url = strdup(url); + + g_variant_unref(result); + + return PKGMGR_R_OK; +} + +API int pkgmgr_client_register_license(pkgmgr_client *pc, const char *resp_data) +{ + GVariant *result; + int ret; + pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc; + + if (pc == NULL || resp_data == NULL) { + ERR("invalid parameter"); + return PKGMGR_R_EINVAL; + } + + if (mpc->ctype != PC_REQUEST) { + ERR("mpc->ctype is not PC_REQUEST"); + return PKGMGR_R_EINVAL; + } + + result = comm_client_request(mpc->info.request.cc, + "register_license", g_variant_new("(s)", resp_data)); + if (result == NULL) + return PKGMGR_R_ECOMM; + + g_variant_get(result, "(i)", &ret); + g_variant_unref(result); + if (ret != PKGMGR_R_OK) { + ERR("register license failed: %d", ret); + return ret; + } + + return PKGMGR_R_OK; +} + +API int pkgmgr_client_decrypt_package(pkgmgr_client *pc, + const char *drm_file_path, const char *decrypted_file_path) +{ + GVariant *result; + int ret; + pkgmgr_client_t *mpc = (pkgmgr_client_t *)pc; + + if (pc == NULL || drm_file_path == NULL || + decrypted_file_path == NULL) { + ERR("invalid parameter"); + return PKGMGR_R_EINVAL; + } + + if (mpc->ctype != PC_REQUEST) { + ERR("mpc->ctype is not PC_REQUEST"); + return PKGMGR_R_EINVAL; + } + + result = comm_client_request(mpc->info.request.cc, + "decrypt_package", g_variant_new("(ss)", + drm_file_path, decrypted_file_path)); + if (result == NULL) + return PKGMGR_R_ECOMM; + + g_variant_get(result, "(i)", &ret); + g_variant_unref(result); + if (ret != PKGMGR_R_OK) { + ERR("decrypt_package failed: %d", ret); + return ret; + } + + return PKGMGR_R_OK; +} -- 2.7.4