From d65c9089d3dacc9c7c4b2c2e41cb52217660214b Mon Sep 17 00:00:00 2001 From: Mahendra Kumar Prajapat Date: Wed, 5 Sep 2012 17:34:31 +0530 Subject: [PATCH] Merged latest changes in Tizen 2.0 --- include/drm_client_types.h | 35 +++++++++++++++++++------- packaging/drm-client.spec | 2 +- service/drm_client.cpp | 12 +++++++++ service/drm_client_ipc.cpp | 50 ++++++++++++++++++++++++-------------- 4 files changed, 71 insertions(+), 28 deletions(-) diff --git a/include/drm_client_types.h b/include/drm_client_types.h index 97c7235..37f283f 100755 --- a/include/drm_client_types.h +++ b/include/drm_client_types.h @@ -507,7 +507,7 @@ typedef enum { /** * @enum drm_initiator_type - * @brief DRM Initiator type. + * @brief DRM Initiator type */ typedef enum { DRM_INITIATOR_TYPE_NONE = -1, @@ -517,6 +517,22 @@ typedef enum { DRM_INITIATOR_TYPE_LEAVE_DOMAIN } drm_initiator_type; +/** + * @enum drm_const_type_e + * @brief DRM constraint types + */ +typedef enum { + DRM_CONSTRAINT_TYPE_RENTAL = 0, + DRM_CONSTRAINT_TYPE_RENTAL_UNLIMITED, + DRM_CONSTRAINT_TYPE_PURCHASE, + DRM_CONSTRAINT_TYPE_BASE, + DRM_CONSTRAINT_TYPE_EXPIRED, + DRM_CONSTRAINT_TYPE_NOT_AUTHORIZED, + DRM_CONSTRAINT_TYPE_INVALID_DRM_VERSION, + DRM_CONSTRAINT_TYPE_UNKNOWN_TYPE, + DRM_CONSTRAINT_TYPE_GENERAL_ERROR +} drm_const_type_e; + /** * @struct drm_content_info_s * @brief DRM content info structure. @@ -589,14 +605,15 @@ typedef struct { * @brief DRM Constraint type structure. */ typedef struct { - int is_unlimited; /**< Unlimited constraints */ - int is_count; /**< Count constraint present/not present */ - int is_datetime; /**< Datetime constraint present/not present */ - int is_interval; /**< Interval constraint present/not present */ - int is_timedcount; /**< TimedCount constraint present/not present */ - int is_accumulated; /**< Accumulated constraint present/not present */ - int is_individual; /**< Individual constraint present/not present */ - int is_system; /**< System constraint present/not present */ + int is_unlimited; /**< Unlimited constraints */ + int is_count; /**< Count constraint present/not present */ + int is_datetime; /**< Datetime constraint present/not present */ + int is_interval; /**< Interval constraint present/not present */ + int is_timedcount; /**< TimedCount constraint present/not present */ + int is_accumulated; /**< Accumulated constraint present/not present */ + int is_individual; /**< Individual constraint present/not present */ + int is_system; /**< System constraint present/not present */ + drm_const_type_e constraint_type; /**< Divx constraint types */ } drm_constraint_type_s; /** diff --git a/packaging/drm-client.spec b/packaging/drm-client.spec index e2b722e..3ad8c00 100755 --- a/packaging/drm-client.spec +++ b/packaging/drm-client.spec @@ -1,6 +1,6 @@ Name: drm-client Summary: DRM client Package -Version: 0.0.26 +Version: 0.0.28 Release: 0 Group: TO_BE/FILLED_IN License: Apache diff --git a/service/drm_client.cpp b/service/drm_client.cpp index 9a74e03..7c2882f 100755 --- a/service/drm_client.cpp +++ b/service/drm_client.cpp @@ -1025,6 +1025,18 @@ EXPORT_API int drm_process_request(drm_request_type_e request_type, input, output); return DRM_RETURN_INVALID_ARG; } else { + + DRM_CLIENT_LOG("initiator_url[%s]", ((drm_initiator_info_s*)input)->initiator_url); + DRM_CLIENT_LOG("initiator_url_len[%u]", ((drm_initiator_info_s*)input)->initiator_url_len); + DRM_CLIENT_LOG("operation_callback.callback[%p]", ((drm_initiator_info_s*)input)->operation_callback.callback); + DRM_CLIENT_LOG("init_type[%d]", ((drm_initiator_info_s*)input)->init_type); + DRM_CLIENT_LOG("custom_data.app_id[%s]", ((drm_initiator_info_s*)input)->custom_data.app_id); + DRM_CLIENT_LOG("custom_data.user_guid[%s]", ((drm_initiator_info_s*)input)->custom_data.user_guid); + DRM_CLIENT_LOG("custom_data.device_id[%s]", ((drm_initiator_info_s*)input)->custom_data.device_id); + DRM_CLIENT_LOG("custom_data.order_id[%s]", ((drm_initiator_info_s*)input)->custom_data.order_id); + DRM_CLIENT_LOG("custom_data.service_id[%s]", ((drm_initiator_info_s*)input)->custom_data.service_id); + DRM_CLIENT_LOG("custom_data.account_id[%s]", ((drm_initiator_info_s*)input)->custom_data.account_id); + /* Copy the input to Request Structure */ memcpy(req_data.fixed_data.request_data, input, sizeof(drm_initiator_info_s)); diff --git a/service/drm_client_ipc.cpp b/service/drm_client_ipc.cpp index 8781311..ac31c13 100755 --- a/service/drm_client_ipc.cpp +++ b/service/drm_client_ipc.cpp @@ -27,6 +27,7 @@ * @brief DRM Client Inter process communication definitions. * @author Mahendra Kumar Prajapat (mahendra.p@samsung.com) * @author Harsha Shekar (h.shekar@samsung.com) + * @author Ravi S (ravi.cs@samsung.com) * @version 0.1 * @history 0.1: DRM Client Inter process communication definitions. */ @@ -175,7 +176,7 @@ static int __create_async_socket(drm_request_data_s *client_in) { struct sockaddr_un clientaddr; int temp_len_sock = 0; - unsigned int retval = 0; + int retval = 0; drm_result_e result = DRM_RETURN_SUCCESS; pthread_t async_thread = 0; int rv = 0; @@ -250,7 +251,7 @@ static int __get_socket(drm_request_data_s *client_in) { int fd; int temp_len_sock = 0; - unsigned int retval = 0; + int retval = 0; struct sockaddr_un clientaddr; static int num_clients = 0; @@ -281,21 +282,6 @@ static int __get_socket(drm_request_data_s *client_in) client_info.sync_sock_fd = fd; client_info.async_sock_fd = async_sockfd; - /* Store the callback on a thread basis to be handled for each client */ - if (((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback.callback) { - if (num_clients <= (DRM_MAX_CLIENT_SUPPORTED - 1)) { - DRM_CLIENT_LOG("num_clients = %d", num_clients); - client_cb_info[num_clients].client_id = client_info.client_id; - memcpy(&client_cb_info[num_clients].operation_callback, - &(((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback), - sizeof(drm_operation_cb_s)); - num_clients++; - } else { - DRM_CLIENT_EXCEPTION("Num of clients exceeded!!, num_clients = %d", num_clients); - goto ErrorExit; - } - } - DRM_CLIENT_LOG("Writing socket sockfd = %d size=%d",fd,sizeof(client_info)); DRM_CLIENT_LOG("client_info.client_id before send = %d", client_info.client_id); @@ -326,7 +312,7 @@ ErrorExit: */ int drm_client_comm(drm_request_data_s *client_in, drm_response_data_s *server_out) { - unsigned int retval = 0; + int retval = 0; drm_request_data_s send_data; drm_response_data_s recv_data; drm_result_e result = DRM_RETURN_SUCCESS; @@ -365,6 +351,34 @@ int drm_client_comm(drm_request_data_s *client_in, drm_response_data_s *server_o } } + /* Store the callback on a thread basis to be handled for each client */ + DRM_CLIENT_LOG("Callback = %p", ((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback.callback); + DRM_CLIENT_LOG("Client id = %d", client_info.client_id); + + if (((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback.callback) { + /* Callback present, store if not yet stored + * Loop through the list checking for client id if stored */ + int loop = 0; + for (; loop < DRM_MAX_CLIENT_SUPPORTED; loop++) { + if (client_cb_info[loop].client_id == client_info.client_id) { + DRM_CLIENT_LOG("Callback info already stored!!, client_id[%d] = %d", + loop, client_cb_info[loop].client_id); + break; + } else if (client_cb_info[loop].client_id == 0) { + DRM_CLIENT_LOG("No entry for cb yet, loop = %d", loop); + DRM_CLIENT_LOG("Empty structure, storing client callback here, id = %d", client_info.client_id); + client_cb_info[loop].client_id = client_info.client_id; + memcpy(&client_cb_info[loop].operation_callback, + &(((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback), + sizeof(drm_operation_cb_s)); + break; + } + } + if (DRM_MAX_CLIENT_SUPPORTED == loop) { + DRM_CLIENT_LOG("loop = %d, Maximum clients reached!!!", loop); + } + } + /* Copy the data received from the client into local */ memcpy(&send_data, client_in, sizeof(drm_request_data_s)); /* First write the static structures */ -- 2.34.1