Add drm related apis 38/52738/2
authorSangyoon Jang <s89.jang@samsung.com>
Thu, 26 Nov 2015 10:19:18 +0000 (19:19 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Mon, 30 Nov 2015 08:22:07 +0000 (00:22 -0800)
ADDED:
 pkgmgr_client_generate_license_request
 pkgmgr_client_register_license
 pkgmgr_client_decrypt_package

Change-Id: I92f97b457e04be5efae8e659ec052ad3d15d332b
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
client/include/package-manager.h
client/src/pkgmgr.c

index 8f975a4..2de8528 100644 (file)
@@ -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);
+
 /** @} */
 
 
index cd410c2..be8cef2 100644 (file)
@@ -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;
+}