Add new APIs for register, unregister and get pkg update info 29/124529/11
authorJunghyun Yeon <jungh.yeon@samsung.com>
Tue, 11 Apr 2017 12:36:02 +0000 (21:36 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Wed, 19 Apr 2017 05:06:25 +0000 (14:06 +0900)
- Add new APIs for register, unregister and get update info of certain pkg
- Add new API for get update info of all pkgs
- Add new API for unregister update info of all pkgs

Change-Id: I4cc744ebc5e49e1e7dfc5252c8ac7b41e84be340
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
include/package_info.h
include/package_manager.h
src/package_info.c
src/package_manager.c

index 84a5f5d..9fd6a3b 100644 (file)
@@ -40,6 +40,11 @@ extern "C" {
  */
 typedef struct package_info_s *package_info_h;
 
+/**
+ * @brief The package update information handle.
+ * @since_tizen 4.0
+ */
+typedef struct package_update_info_s *package_update_info_h;
 
 /**
  * @brief Enumeration for storage type.
@@ -78,6 +83,27 @@ typedef enum {
        PACKAGE_INFO_DISTRIBUTOR2_SIGNER_CERT = 8,       /**< Distributor2 Signer Certificate*/
 } package_cert_type_e;
 
+/**
+ * @brief Enumeration for package update info type.
+ * @since_tizen 4.0
+ */
+typedef enum {
+       PACKAGE_UPDATEINFO_TYPE_NONE = 0,   /**< None type */
+       PACKAGE_UPDATEINFO_TYPE_FORCE,      /**< Force type */
+       PACKAGE_UPDATEINFO_TYPE_OPTIONAL    /**< Optional type */
+} package_update_info_type_e;
+
+/**
+ * @brief Called for each update information of all packages.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo   The application update information handle
+ * @param[in] user_data            The user data passed from the foreach function
+ * @return @c true to continue with the next iteration of the loop,
+ *         otherwise @c false to break out of the loop
+ * @pre package_info_updateinfo_foreach_updateinfo() will invoke this callback.
+ * @see package_info_updateinfo_foreach_updateinfo()
+ */
+typedef bool (*package_info_updateinfo_cb) (package_update_info_h package_updateinfo, void *user_data);
 
 /**
  * @brief Called to get the application ID once for each installed package.
@@ -450,6 +476,91 @@ int package_info_foreach_cert_info(package_info_h package_info, package_info_cer
  */
 int package_info_foreach_privilege_info(package_info_h package_info, package_info_privilege_info_cb callback, void *user_data);
 
+/**
+ * @brief Gets the package update information for the given package.
+ * @since_tizen 4.0
+ * @remarks You must release @a package_updateinfo using package_info_updateinfo_destroy().
+ * @param[in] pkgid                The ID of the package
+ * @param[out] package_updateinfo  The package update information for the given package ID
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE   The package is not installed
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          Database error occurred
+ * @see package_info_updateinfo_destroy()
+ */
+int package_info_updateinfo_create(const char *pkgid, package_update_info_h *package_updateinfo);
+
+/**
+ * @brief Gets the package name.
+ * @since_tizen 4.0
+ * @remarks You must release @a package using free().
+ * @param[in]  package_updateinfo The package update information
+ * @param[out] package            The package name
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          Internal I/O error occured
+ */
+int package_info_updateinfo_get_pkgid(package_update_info_h package_updateinfo, char **package);
+
+/**
+ * @brief Gets the update version of package.
+ * @since_tizen 4.0
+ * @remarks You must release @a version using free().
+ * @param[in]  package_updateinfo The package update information
+ * @param[out] version            The package update version
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          Internal I/O error occured
+ */
+int package_info_updateinfo_get_version(package_update_info_h package_updateinfo, char **version);
+
+/**
+ * @brief Gets the update type of package.
+ * @since_tizen 4.0
+ * @param[in]  package_updateinfo The package update information
+ * @param[out] type               The package update type
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          Internal I/O error occured
+ */
+int package_info_updateinfo_get_type(package_update_info_h package_updateinfo, package_update_info_type_e *type);
+
+/**
+ * @brief Destroys the package update information handle and releases all its resources.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo The package update information handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_info_updateinfo_create()
+ */
+int package_info_updateinfo_destroy(package_update_info_h package_updateinfo);
+
+/**
+ * @brief Retrieve update information of all packages and invoke callback for each of it.
+ * @since_tizen 4.0
+ * @param[in] callback     The iteration callback function
+ * @param[in] user_data    The user data to be passed to the callback function
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          I/O error
+ */
+int package_info_updateinfo_foreach_updateinfo(package_info_updateinfo_cb callback, void *user_data);
+
 
 /**
 * @}
index c592439..e5e2d48 100644 (file)
@@ -182,6 +182,11 @@ typedef enum {
        PACKAGE_MANAGER_STATUS_TYPE_GET_SIZE = 0x40,          /**< Get size status */
 } package_manager_status_type_e;
 
+/**
+ * @brief The Package manager update info request handle.
+ * @since_tizen 4.0
+ */
+typedef struct package_updateinfo_request_s *package_updateinfo_request_h;
 
 /**
  * @brief The Package manager handle.
@@ -1099,6 +1104,123 @@ int package_manager_request_move_with_cb(package_manager_request_h request,
                                                void *user_data,
                                                int *id);
 
+/**
+ * @platform
+ * @brief Creates a package update info request.
+ * @since_tizen 4.0
+ * @privlevel platform
+ * @privilege %http://tizen.org/privilege/packagemanager.admin
+ * @remarks You must release @a handle using package_manager_request_destroy().
+ * @param[out] package_updateinfo The package update info request handle that is newly created on success
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_PERMISSION_DENIED Permission denied
+ * @see package_manager_updateinfo_request_destroy()
+ */
+int package_manager_updateinfo_request_create(package_updateinfo_request_h *package_updateinfo);
+
+/**
+ * @brief Sets the package id to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo   The update info request handle
+ * @param[in] pkgid                The package id to be set
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_set_pkgid(package_updateinfo_request_h package_updateinfo, const char *pkgid);
+
+/**
+ * @brief Sets the package version to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo   The update info request handle
+ * @param[in] version              The package version to be set
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY     Out of memory
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_set_version(package_updateinfo_request_h package_updateinfo, const char *version);
+
+/**
+ * @brief Sets the package update type to the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo   The update info request handle
+ * @param[in] type                 The package update type to be set
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ * @see package_update_info_type
+ */
+int package_manager_updateinfo_set_type(package_updateinfo_request_h package_updateinfo, package_update_info_type_e type);
+
+/**
+ * @platform
+ * @brief Request to register package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo    The update info request handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR      Severe system error
+ * @see package_manager_updateinfo_request_create()
+ * @see package_manager_updateinfo_request_destroy()
+ */
+int package_manager_updateinfo_request_register(package_updateinfo_request_h package_updateinfo);
+
+/**
+ * @brief Destroys the package update info.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo    The update info request handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @see package_manager_updateinfo_request_create()
+ */
+int package_manager_updateinfo_request_destroy(package_updateinfo_request_h package_updateinfo);
+
+/**
+ * @platform
+ * @brief Request to unregister update info in platform for given package id.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo   The update info request handle
+ * @param[in] pkgid                The package id to request unregister update info
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR      Severe system error
+ */
+int package_manager_updateinfo_request_unregister(package_updateinfo_request_h package_updateinfo, const char *pkgid);
+
+/**
+ * @platform
+ * @brief Request to unregister update info of all packages in platform.
+ * @since_tizen 4.0
+ * @param[in] package_updateinfo    The update info request handle
+ * @return @c 0 on success,
+ *         otherwise a negative error value
+ * @retval #PACKAGE_MANAGER_ERROR_NONE              Successful
+ * @retval #PACKAGE_MANAGER_ERROR_INVALID_PARAMETER Invalid parameter
+ * @retval #PACKAGE_MANAGER_ERROR_IO_ERROR          I/O error
+ * @retval #PACKAGE_MANAGER_ERROR_SYSTEM_ERROR      Severe system error
+ */
+int package_manager_updateinfo_request_unregister_all(package_updateinfo_request_h package_updateinfo);
+
 
 /**
 * @}
index 6ecb6fa..bee38b8 100644 (file)
@@ -38,11 +38,48 @@ struct package_cert_info_s {
        pkgmgrinfo_certinfo_h pkgmgrinfo_certinfo;
 };
 
+typedef struct package_updateinfo_s {
+       pkgmgrinfo_updateinfo_h update_info;
+} package_updateinfo_s;
+
 typedef struct _foreach_app_context_ {
        package_info_app_cb callback;
        void *user_data;
 } foreach_app_context_s;
 
+typedef struct _foreach_updateinfo_ {
+       package_info_updateinfo_cb callback;
+       void *user_data;
+} foreach_updateinfo_context_s;
+
+static int package_info_foreach_updateinfo_cb(const pkgmgrinfo_updateinfo_h handle, void *user_data)
+{
+       foreach_updateinfo_context_s *foreach_updateinfo = user_data;
+       bool iteration_next;
+
+       if (handle == NULL || foreach_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+       iteration_next = foreach_updateinfo->callback(handle, foreach_updateinfo->user_data);
+       if (iteration_next == true)
+               return PMINFO_R_OK;
+       else
+               return PMINFO_R_ERROR;
+}
+
+static int package_info_updateinfo_convert_type(pkgmgrinfo_updateinfo_update_type type, package_update_info_type_e *converted_type)
+{
+       if (type == PMINFO_UPDATEINFO_NONE)
+               *converted_type = PACKAGE_UPDATEINFO_TYPE_NONE;
+       else if (type == PMINFO_UPDATEINFO_FORCE)
+               *converted_type = PACKAGE_UPDATEINFO_TYPE_FORCE;
+       else if (type == PMINFO_UPDATEINFO_OPTIONAL)
+               *converted_type = PACKAGE_UPDATEINFO_TYPE_OPTIONAL;
+       else
+               return -1;
+
+       return 0;
+}
+
 API int package_info_create(const char *package, package_info_h *package_info)
 {
        package_info_h package_info_created;
@@ -502,6 +539,136 @@ API int package_info_foreach_privilege_info(package_info_h package_info, package
        return ret;
 }
 
+API int package_info_updateinfo_create(const char *pkgid, package_update_info_h *package_updateinfo)
+{
+       int ret;
+       package_updateinfo_s *update_info;
+
+       if (pkgid == NULL || package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = calloc(1, sizeof(package_updateinfo_s));
+       if (update_info == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       ret = pkgmgrinfo_updateinfo_get_updateinfo(pkgid, &update_info->update_info);
+       if (ret == PMINFO_R_ENOENT) {
+               free(update_info);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_NO_SUCH_PACKAGE, __FUNCTION__, NULL);
+       } else if (ret == PMINFO_R_EINVAL) {
+               free(update_info);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+       } else if (ret == PMINFO_R_ERROR) {
+               free(update_info);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+       }
+
+       *package_updateinfo = update_info;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_pkgid(package_update_info_h package_updateinfo, char **package)
+{
+       int ret;
+       char *pkg_updateinfo_value = NULL;
+       char *pkgid_dup;
+       package_updateinfo_s *update_info;
+
+       if (package == NULL || package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (package_updateinfo_s *)package_updateinfo;
+       ret = pkgmgrinfo_updateinfo_get_pkgid(update_info->update_info, &pkg_updateinfo_value);
+       if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       pkgid_dup = strdup(pkg_updateinfo_value);
+       if (pkgid_dup == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       *package = pkgid_dup;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_version(package_update_info_h package_updateinfo, char **version)
+{
+       int ret;
+       char *pkg_updateinfo_value = NULL;
+       char *ver_dup;
+       package_updateinfo_s *update_info;
+
+       if (package_updateinfo == NULL || version == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (package_updateinfo_s *)package_updateinfo;
+       ret = pkgmgrinfo_updateinfo_get_version(update_info->update_info, &pkg_updateinfo_value);
+       if (ret != PMINFO_R_OK || pkg_updateinfo_value == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       ver_dup = strdup(pkg_updateinfo_value);
+       if (ver_dup == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       *version = ver_dup;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_get_type(package_update_info_h package_updateinfo, package_update_info_type_e *type)
+{
+       int ret;
+       pkgmgrinfo_updateinfo_update_type pkg_updateinfo_value;
+       package_update_info_type_e converted_type;
+       package_updateinfo_s *update_info;
+
+       if (package_updateinfo == NULL || type == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (package_updateinfo_s *)package_updateinfo;
+       ret = pkgmgrinfo_updateinfo_get_update_type(update_info->update_info, &pkg_updateinfo_value);
+       if (ret != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       ret = package_info_updateinfo_convert_type(pkg_updateinfo_value, &converted_type);
+       if (ret != 0)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       *type = converted_type;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_destroy(package_update_info_h package_updateinfo)
+{
+       package_updateinfo_s *update_info;
+
+       if (package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (package_updateinfo_s *)package_updateinfo;
+       pkgmgrinfo_updateinfo_destroy(update_info->update_info);
+       free(update_info);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_info_updateinfo_foreach_updateinfo(package_info_updateinfo_cb callback, void *user_data)
+{
+       int ret;
+
+       if (callback == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       foreach_updateinfo_context_s foreach_updateinfo = {
+               .callback = callback,
+               .user_data = user_data,
+       };
+
+       ret = pkgmgrinfo_updateinfo_foreach_updateinfo(package_info_foreach_updateinfo_cb, &foreach_updateinfo);
+       if (ret != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
 int package_info_create_with_pkginfo(pkgmgrinfo_pkginfo_h pkg_handle, package_info_h *package_info)
 {
        package_info_h pkg_info = NULL;
index 73534ec..b8390cd 100644 (file)
@@ -79,6 +79,11 @@ struct package_manager_filter_s {
        pkgmgrinfo_pkginfo_filter_h pkgmgrinfo_pkginfo_filter;
 };
 
+struct package_updateinfo_request_s {
+       pkgmgr_client *pc;
+       pkg_update_info_t *updateinfo_handle;
+};
+
 static int package_manager_request_new_id()
 {
        static int request_handle_id = 0;
@@ -1699,3 +1704,179 @@ API int package_size_info_get_external_app_size(package_size_info_h handle, long
        *ext_app_size = size_info->external_app_size;
        return PACKAGE_MANAGER_ERROR_NONE;
 }
+
+API int package_manager_updateinfo_set_pkgid(package_updateinfo_request_h package_updateinfo, const char *pkgid)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)package_updateinfo;
+       if (request->updateinfo_handle->pkgid)
+               free(request->updateinfo_handle->pkgid);
+       request->updateinfo_handle->pkgid = strdup(pkgid);
+       if (request->updateinfo_handle->pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_set_version(package_updateinfo_request_h package_updateinfo, const char *version)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)package_updateinfo;
+       if (request->updateinfo_handle->version)
+               free(request->updateinfo_handle->version);
+       request->updateinfo_handle->version = strdup(version);
+       if (request->updateinfo_handle->pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+static int package_manager_updateinfo_convert_property(package_update_info_type_e property, pkgmgr_updateinfo_type *converted_property)
+{
+       if (converted_property == NULL)
+               return -1;
+
+       if (property == PACKAGE_UPDATEINFO_TYPE_FORCE)
+               *converted_property = PM_UPDATEINFO_TYPE_FORCE;
+       else if (property == PACKAGE_UPDATEINFO_TYPE_OPTIONAL)
+               *converted_property = PM_UPDATEINFO_TYPE_OPTIONAL;
+       else if (property == PACKAGE_UPDATEINFO_TYPE_NONE)
+               *converted_property = PM_UPDATEINFO_TYPE_NONE;
+       else
+               return -1;
+
+       return 0;
+}
+
+API int package_manager_updateinfo_set_type(package_updateinfo_request_h package_updateinfo, package_update_info_type_e type)
+{
+       int retval;
+       pkgmgr_updateinfo_type converted_type;
+       struct package_updateinfo_request_s *request;
+
+       if (package_updateinfo == NULL || package_updateinfo->updateinfo_handle == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)package_updateinfo;
+       retval = package_manager_updateinfo_convert_property(type, &converted_type);
+       if (retval != 0)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request->updateinfo_handle->type = converted_type;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_destroy(package_updateinfo_request_h package_updateinfo)
+{
+       struct package_updateinfo_request_s *request;
+
+       if (package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = (struct package_updateinfo_request_s *)package_updateinfo;
+       if (request->pc)
+               pkgmgr_client_free(request->pc);
+
+       if (request->updateinfo_handle) {
+               if (request->updateinfo_handle->pkgid)
+                       free(request->updateinfo_handle->pkgid);
+               if (request->updateinfo_handle->version)
+                       free(request->updateinfo_handle->version);
+               free(request->updateinfo_handle);
+       }
+       free(request);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API  int package_manager_updateinfo_request_create(package_updateinfo_request_h *package_updateinfo)
+{
+       struct package_updateinfo_request_s *request;
+       pkg_update_info_t *update_info;
+
+       if (package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       request = calloc(1, sizeof(struct package_updateinfo_request_s));
+       if (request == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       request->pc = pkgmgr_client_new(PC_REQUEST);
+       if (request->pc == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+
+       update_info = calloc(1, sizeof(pkg_update_info_t));
+       if (update_info == NULL) {
+               pkgmgr_client_free(request->pc);
+               return package_manager_error(PACKAGE_MANAGER_ERROR_OUT_OF_MEMORY, __FUNCTION__, NULL);
+       }
+       request->updateinfo_handle = update_info;
+
+       *package_updateinfo = request;
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_register(package_updateinfo_request_h package_updateinfo)
+{
+       struct package_updateinfo_request_s *update_info;
+       int retval;
+
+       if (package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+       update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+
+       retval = pkgmgr_client_register_pkg_update_info(update_info->pc, update_info->updateinfo_handle);
+       if (retval == PKGMGR_R_EINVAL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister(package_updateinfo_request_h package_updateinfo, const char *pkgid)
+{
+       int retval;
+       struct package_updateinfo_request_s *update_info;
+
+       retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+       if (retval != PACKAGE_MANAGER_ERROR_NONE)
+               return retval;
+
+       if (package_updateinfo == NULL || pkgid == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+       retval = pkgmgr_client_unregister_pkg_update_info(update_info->pc, pkgid);
+       if (retval != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}
+
+API int package_manager_updateinfo_request_unregister_all(package_updateinfo_request_h package_updateinfo)
+{
+       int retval;
+       struct package_updateinfo_request_s *update_info;
+
+       retval = check_privilege(PRIVILEGE_PACKAGE_MANAGER_ADMIN);
+       if (retval != PACKAGE_MANAGER_ERROR_NONE)
+               return retval;
+
+       if (package_updateinfo == NULL)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_INVALID_PARAMETER, __FUNCTION__, NULL);
+
+       update_info = (struct package_updateinfo_request_s *)package_updateinfo;
+       retval = pkgmgr_client_unregister_all_pkg_update_info(update_info->pc);
+
+       if (retval != PMINFO_R_OK)
+               return package_manager_error(PACKAGE_MANAGER_ERROR_IO_ERROR, __FUNCTION__, NULL);
+
+       return PACKAGE_MANAGER_ERROR_NONE;
+}