+/*\r
+ * drm-trusted client test utility\r
+ *\r
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.\r
+ *\r
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>\r
+ * Mahendra Kumar Prajapat <mahendra.p@samsung.com>\r
+ * Harsha Shekar <h.shekar@samsung.com>\r
+ *\r
+ *\r
+ * Licensed under the Apache License, Version 2.0 (the "License");\r
+ * you may not use this file except in compliance with the License.\r
+ * You may obtain a copy of the License at\r
+ *\r
+ * http://www.apache.org/licenses/LICENSE-2.0\r
+ *\r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ *\r
+ */\r
+\r
+/**\r
+ * @file test_drm_trusted_client.cpp\r
+ * @brief Test case implementation specific to DRM trusted Client APIs.\r
+ * @author Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @author Harsha Shekar (h.shekar@samsung.com)\r
+ * @version 0.1\r
+ * @history 0.1: First version of DRM trusted Client test utility.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <string.h>\r
+#include <stdlib.h>\r
+#include <memory.h>\r
+#include <stdarg.h>\r
+#include <sys/time.h>\r
+#include <sys/types.h>\r
+#include <time.h>\r
+#include <fcntl.h>\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+#include <sys/syscall.h>\r
+#include <linux/unistd.h>\r
+#include <unistd.h>\r
+#include <dirent.h>\r
+#include <pthread.h>\r
+#include <assert.h>\r
+\r
+#include "drm_trusted_client.h"\r
+\r
+#define drm_trusted_client_tid() (long int)syscall(__NR_gettid)\r
+#define DRM_TRUSTED_CLIENT_TEST_FILENAME(X) (strrchr((char*)(X), '/') ? (char*)(strrchr((char*)(X), '/') + 1) : ((char*)(X)) )\r
+\r
+#define DRM_TRUSTED_CLIENT_TEST_LOG(FMT, ARG...) do{\\r
+ fprintf(stderr,"[PID=%ld]:[TID=%ld]:[%s:%s:%d]:",(long int)getpid(),drm_trusted_client_tid(),DRM_TRUSTED_CLIENT_TEST_FILENAME(__FILE__),__func__,__LINE__); \\r
+ fprintf(stderr,FMT,##ARG); \\r
+ fprintf(stderr,"\n"); \\r
+ } while(0);\r
+\r
+#define DRM_TRUSTED_CLIENT_TEST_EXCEPTION(FMT, ARG...) do{\\r
+ fprintf(stderr,"[PID=%ld]:[TID=%ld]:[%s:%s:%d]:",(long int)getpid(),drm_trusted_client_tid(),DRM_TRUSTED_CLIENT_TEST_FILENAME(__FILE__),__func__,__LINE__); \\r
+ fprintf(stderr,"[ERROR]"FMT,##ARG); \\r
+ fprintf(stderr,"\n"); \\r
+ } while(0);\r
+\r
+static void drm_trusted_print_buffer(const char* info, unsigned char* buffer, unsigned int buflen)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("\n********* %s:buflen=%u buffer=%p ******** \n",info,buflen,buffer);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("********* %s:Start******** \n",info);\r
+ unsigned int i;\r
+ for(i=1;i<=buflen;i++)\r
+ {\r
+ fprintf(stderr,"0x%02X ",buffer[i-1]);\r
+ if((i%16 )==0) fprintf(stderr,"\n");\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("********* %s:End ******** \n",info);\r
+}\r
+\r
+enum {\r
+ DRM_TRUSTED_CLIENT_TEST_NONE,\r
+ DRM_TRUSTED_CLIENT_TEST_handle_request,\r
+ DRM_TRUSTED_CLIENT_TEST_consume_content,\r
+ DRM_TRUSTED_CLIENT_TEST_CONVERT,\r
+ DRM_TRUSTED_CLIENT_TEST_MAX\r
+\r
+};\r
+\r
+void test_drm_trusted_operation_cb(drm_trusted_user_operation_info_s *operation_info,\r
+ void *output_data)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Callback Hit:test_drm_trusted_operation_cb");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("operation_status=%d",operation_info->operation_status);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("operation_type=%d",operation_info->operation_type);\r
+}\r
+\r
+/* Statically allocate 10 MB\r
+1 KB = 1024 B\r
+1 MB = 1024 KB = 1024 * 1024\r
+10 MB = 10 * 1024 * 1024 B\r
+*/\r
+//#define MAX_OUT_BUFFER_LEN (10 * 1024 * 1024)\r
+#define MAX_OUT_BUFFER_LEN (10 * 1024)\r
+\r
+\r
+void _handle_container_drm_content(DRM_DECRYPT_HANDLE pHandle,\r
+ drm_trusted_file_type_e file_type)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p, file_type=%d",pHandle,file_type);\r
+ drm_trusted_payload_info_s read_input_data;\r
+ drm_trusted_read_decrypt_resp_data_s read_output_data;\r
+ unsigned char out_file_path[256]={0};\r
+ unsigned char *out_buffer = NULL;\r
+ FILE *fp_out=NULL;\r
+ int ret = -1;\r
+ unsigned int written_size = 0;\r
+\r
+ /* Allocate memory for Out Buffer */\r
+ out_buffer = (unsigned char*)malloc(MAX_OUT_BUFFER_LEN);\r
+ if (!out_buffer) {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Memory Allocation Error!!!");\r
+ return;\r
+ }\r
+\r
+ memset(&read_input_data,0x0,sizeof(drm_trusted_payload_info_s));\r
+ memset(&read_output_data,0x0,sizeof(drm_trusted_read_decrypt_resp_data_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter Output file name along with path where decrypted Data can be stored");\r
+ scanf("%s",out_file_path);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Output decrypted file=%s",out_file_path);\r
+\r
+ fp_out = fopen((const char*)out_file_path,"w+b");\r
+ if(NULL == fp_out){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("fopen failed:error=%s",strerror(errno));\r
+ goto ErrorExit;\r
+ }\r
+\r
+ /* Actually exact plain text length should be used.\r
+ * Plain text length can be obtained using drm_get_file_type */\r
+ read_input_data.payload_data = out_buffer;\r
+ read_input_data.payload_data_len = (unsigned int)MAX_OUT_BUFFER_LEN;\r
+ ret = drm_trusted_read_decrypt_session(pHandle,&read_input_data,\r
+ &read_output_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x Actual read_size=%u "\r
+ "Requested payload_data_len=%u",\r
+ ret,read_output_data.read_size,read_input_data.payload_data_len);\r
+\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_read_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+\r
+ if(read_output_data.read_size > 0){\r
+ written_size= fwrite(read_input_data.payload_data,1,\r
+ read_output_data.read_size,fp_out);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Actual written_size=%u "\r
+ "Requested written size=%u",\r
+ written_size,read_output_data.read_size);\r
+ }\r
+ fclose(fp_out);\r
+\r
+ ErrorExit:\r
+ if (out_buffer)\r
+ free(out_buffer);\r
+}\r
+\r
+void _handle_stream_drm_content(DRM_DECRYPT_HANDLE pHandle,\r
+ drm_trusted_file_type_e file_type)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p, file_type=%d",pHandle,file_type);\r
+\r
+ drm_trusted_payload_info_s read_input_data;\r
+ drm_trusted_read_decrypt_resp_data_s read_output_data;\r
+ int ret = -1;\r
+\r
+ memset(&read_input_data,0x0,sizeof(drm_trusted_payload_info_s));\r
+ memset(&read_output_data,0x0,sizeof(drm_trusted_read_decrypt_resp_data_s));\r
+\r
+ switch(file_type)\r
+ {\r
+ case DRM_TRUSTED_TYPE_PLAYREADY:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("PlayReady Content");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Extract PayloadData,PayloadDataSize,ReplicatedData,ReplicatedDataSize & ObjectOffset From ASF parser application for EACH Payload");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("For testing purpose, currently it is hard-coded");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("These data are taken from 1st payload of jazz_AAC_V4AES.pya");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("As seen from corresponding clear file jazz_AAC.asf, Output decrypted buffer should be");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("0x20 0x00 0x20 0x00 0x00 0x80 0x0E");\r
+ unsigned char expected_output[] = {0x20, 0x00, 0x20, 0x00, 0x00, 0x80, 0x0E};\r
+\r
+ unsigned char PayloadData[] = {0xE5, 0x08, 0x6E, 0xAE, 0x61, 0xDF, 0x49};\r
+ unsigned int PayloadDataSize = sizeof(PayloadData) / sizeof(PayloadData[0]);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Actual Replicated data is last 8 bytes of Replicated Data as seen from ASF viewer");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Thus ReplicatedDataSize will be 8 bytes");\r
+ unsigned char ReplicatedData[] = {0x14, 0x45, 0x0F, 0x0A, 0x28, 0x15, 0xBF, 0x42};\r
+ unsigned int ReplicatedDataSize = sizeof(ReplicatedData) / sizeof(ReplicatedData[0]);\r
+\r
+ /* Start Decryption */\r
+ drm_trusted_print_buffer("Before:InputBuffer:",PayloadData,PayloadDataSize);\r
+ read_input_data.media_offset = 0;\r
+ read_input_data.payload_data = PayloadData;\r
+ read_input_data.payload_data_len = PayloadDataSize;\r
+ read_input_data.payload_iv = ReplicatedData;\r
+ read_input_data.payload_iv_len = ReplicatedDataSize;\r
+\r
+ ret = drm_trusted_read_decrypt_session(pHandle,&read_input_data,\r
+ &read_output_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x Actual read_size=%u "\r
+ "Requested payload_data_len=%u",\r
+ ret,read_output_data.read_size,read_input_data.payload_data_len);\r
+\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_read_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+ drm_trusted_print_buffer("After:OutputBuffer:",read_input_data.payload_data,read_input_data.payload_data_len);\r
+\r
+ if(0 == memcmp(read_input_data.payload_data,expected_output,read_input_data.payload_data_len)){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Decrypt is successful for jazz_AAC_V4AES.pya");\r
+ }\r
+ }\r
+ break;\r
+\r
+ case DRM_TRUSTED_TYPE_DIVX:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DivX Content");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Hard-coded testing is not available for DivX Content");\r
+ }\r
+ break;\r
+\r
+ default:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "Unknown file_type=%d",file_type);\r
+\r
+ }\r
+}\r
+\r
+void _handle_read_data(DRM_DECRYPT_HANDLE pHandle,\r
+ drm_trusted_file_type_e file_type)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p, file_type=%d",pHandle,file_type);\r
+ switch(file_type)\r
+ {\r
+ case DRM_TRUSTED_TYPE_OMA_V1:\r
+ case DRM_TRUSTED_TYPE_OMA_V2:\r
+ case DRM_TRUSTED_TYPE_PLAYREADY_ENVELOPE:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Container Based DRM file");\r
+ _handle_container_drm_content(pHandle,file_type);\r
+ break;\r
+\r
+ case DRM_TRUSTED_TYPE_PLAYREADY:\r
+ case DRM_TRUSTED_TYPE_DIVX:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Stream Based DRM file");\r
+ _handle_stream_drm_content(pHandle,file_type);\r
+ break;\r
+\r
+ default:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "Unknown file_type=%d",file_type);\r
+ }\r
+}\r
+\r
+void _render_drm_content(drm_trusted_file_type_e file_type)\r
+{\r
+ /* Initialize variables & structures */\r
+ drm_trusted_open_decrypt_info_s open_input_data;\r
+ drm_trusted_open_decrypt_resp_data_s open_output_data;\r
+ drm_trusted_seek_decrypt_info_s seek_input_data;\r
+ drm_trusted_tell_decrypt_resp_data_s tell_output_data;\r
+ drm_trusted_set_consumption_state_info_s state_input_data;\r
+\r
+ DRM_DECRYPT_HANDLE pHandle = NULL;\r
+ int ret = -1;\r
+ drm_trusted_permission_type_e perm_type;\r
+ char file_path[256]={0};\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter DRM content name along with path");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Use jazz_AAC_V4AES.pya file if PlayReady decryption need to be tested");\r
+ scanf("%s",file_path);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file_path received=%s",file_path);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter permission type");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_NONE",DRM_TRUSTED_PERMISSION_TYPE_NONE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_ANY",DRM_TRUSTED_PERMISSION_TYPE_ANY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_PLAY",DRM_TRUSTED_PERMISSION_TYPE_PLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_COLLABORATIVE_PLAY",DRM_TRUSTED_PERMISSION_TYPE_COLLABORATIVE_PLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_DISPLAY",DRM_TRUSTED_PERMISSION_TYPE_DISPLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXECUTE",DRM_TRUSTED_PERMISSION_TYPE_EXECUTE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_PRINT",DRM_TRUSTED_PERMISSION_TYPE_PRINT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXPORT_COPY",DRM_TRUSTED_PERMISSION_TYPE_EXPORT_COPY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXPORT_MOVE",DRM_TRUSTED_PERMISSION_TYPE_EXPORT_MOVE);\r
+ scanf("%d", (int*)&perm_type);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("perm_type = %d file_path=%s",perm_type,file_path);\r
+\r
+ /* memset the structures */\r
+ memset(&open_input_data,0x0,sizeof(drm_trusted_open_decrypt_info_s));\r
+ memset(&open_output_data,0x0,sizeof(drm_trusted_open_decrypt_resp_data_s));\r
+ memset(&seek_input_data,0x0,sizeof( drm_trusted_seek_decrypt_info_s));\r
+ memset(&tell_output_data,0x0,sizeof(drm_trusted_tell_decrypt_resp_data_s));\r
+ memset(&state_input_data,0x0,sizeof(drm_trusted_set_consumption_state_info_s));\r
+\r
+ /* Enter Appropriate Inputs */\r
+ memcpy(open_input_data.filePath,file_path,strlen(file_path));\r
+ open_input_data.file_type = file_type;\r
+ open_input_data.permission = perm_type;\r
+ open_input_data.operation_callback.callback = test_drm_trusted_operation_cb;\r
+\r
+ /* Open Decrypt Session*/\r
+ ret = drm_trusted_open_decrypt_session(&open_input_data,&open_output_data,\r
+ &pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_open_decrypt_session Failed!!, ret=0x%x", ret);\r
+ return;\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("result_code = 0x%x",open_output_data.result_code);\r
+\r
+ /* Just for testing seek & tell APIs */\r
+ seek_input_data.offset = 0;\r
+ seek_input_data.seek_mode = DRM_SEEK_END; /* Set cursor to end */\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_seek_decrypt_session(pHandle,&seek_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_seek_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_tell_decrypt_session(pHandle,&tell_output_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_tell_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file-size = %u",tell_output_data.offset);\r
+\r
+ seek_input_data.offset = 0;\r
+ seek_input_data.seek_mode = DRM_SEEK_SET; /* Again set cursor to beginning */\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_seek_decrypt_session(pHandle,&seek_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_seek_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+\r
+ /* Before Read, Appropriate state MUST be SET */\r
+ state_input_data.state = DRM_CONSUMPTION_STARTED;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_set_decrypt_state(pHandle,&state_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_set_decrypt_state Failed!!, ret=0x%x", ret);\r
+ goto Err;\r
+ }\r
+\r
+ /* Handle READ / DECRYPT operation */\r
+ _handle_read_data(pHandle,file_type);\r
+\r
+ /* When rendering is stopped */\r
+ state_input_data.state = DRM_CONSUMPTION_STOPPED;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_set_decrypt_state(pHandle,&state_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_set_decrypt_state Failed!!, ret=0x%x", ret);\r
+ goto Err;\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_close_decrypt_session(&pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_close_decrypt_session Failed!!, ret=0x%x", ret);\r
+ return;\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SUCCESS");\r
+ return;\r
+\r
+Err:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Failed, ret=0x%x", ret);\r
+ drm_trusted_close_decrypt_session(&pHandle);\r
+}\r
+\r
+void _render_drm_oma_progressive_download_content(void)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Progressive Download scenario");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Hard-coded testing is not available for Progressive Download scenario");\r
+}\r
+\r
+void _render_drm_piff_content(void)\r
+{\r
+ /* Initialize variables & structures */\r
+ drm_trusted_open_decrypt_info_s open_input_data;\r
+ drm_trusted_open_decrypt_resp_data_s open_output_data;\r
+ drm_trusted_set_consumption_state_info_s state_input_data;\r
+\r
+ drm_trusted_payload_info_s read_input_data;\r
+ drm_trusted_read_decrypt_resp_data_s read_output_data;\r
+\r
+ memset(&read_input_data,0x0,sizeof(drm_trusted_payload_info_s));\r
+ memset(&read_output_data,0x0,sizeof(drm_trusted_read_decrypt_resp_data_s));\r
+\r
+ DRM_DECRYPT_HANDLE pHandle = NULL;\r
+ int ret = -1;\r
+ drm_trusted_permission_type_e perm_type;\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter permission type");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_NONE",DRM_TRUSTED_PERMISSION_TYPE_NONE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_ANY",DRM_TRUSTED_PERMISSION_TYPE_ANY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_PLAY",DRM_TRUSTED_PERMISSION_TYPE_PLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_COLLABORATIVE_PLAY",DRM_TRUSTED_PERMISSION_TYPE_COLLABORATIVE_PLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_DISPLAY",DRM_TRUSTED_PERMISSION_TYPE_DISPLAY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXECUTE",DRM_TRUSTED_PERMISSION_TYPE_EXECUTE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_PRINT",DRM_TRUSTED_PERMISSION_TYPE_PRINT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXPORT_COPY",DRM_TRUSTED_PERMISSION_TYPE_EXPORT_COPY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_PERMISSION_TYPE_EXPORT_MOVE",DRM_TRUSTED_PERMISSION_TYPE_EXPORT_MOVE);\r
+ scanf("%d", (int*)&perm_type);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("perm_type = %d",perm_type);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Sample Content => SuperSpeedway_720_230.ismv");\r
+\r
+ /* Content Header <.W.R.M.H.E.A.D.E.R. .x.m.l.n.s.=.".h.t.t.p.:././.s.c.h.e.m.a.s...m.i.c.r.o.s.o.f.t...c.o.m./.D.R.M./.2.0.0.7./.0.3./.P.l.a.y.R.e.a.d.y.H.e.a.d.e.r.". .v.e.r.s.i.o.n.=.".4...0...0...0.".>.\r
+ * <.D.A.T.A.>.\r
+ * <.P.R.O.T.E.C.T.I.N.F.O.>.\r
+ * <.K.E.Y.L.E.N.>.1.6.<./.K.E.Y.L.E.N.>.\r
+ * <.A.L.G.I.D.>.A.E.S.C.T.R.<./.A.L.G.I.D.>.\r
+ * <./.P.R.O.T.E.C.T.I.N.F.O.>.\r
+ * <.K.I.D.>.A.m.f.j.C.T.O.P.b.E.O.l.3.W.D./.5.m.c.e.c.A.=.=.<./.K.I.D.>.\r
+ * <.C.H.E.C.K.S.U.M.>.B.G.w.1.a.Y.Z.1.Y.X.M.=.<./.C.H.E.C.K.S.U.M.>.\r
+ * <.C.U.S.T.O.M.A.T.T.R.I.B.U.T.E.S.>.\r
+ * <.I.I.S._.D.R.M._.V.E.R.S.I.O.N.>.7...1...1.0.6.4...0.<./.I.I.S._.D.R.M._.V.E.R.S.I.O.N.>.\r
+ * <./.C.U.S.T.O.M.A.T.T.R.I.B.U.T.E.S.>.\r
+ * <.L.A._.U.R.L.>.h.t.t.p.:././.p.l.a.y.r.e.a.d.y...d.i.r.e.c.t.t.a.p.s...n.e.t./.p.r./.s.v.c./.r.i.g.h.t.s.m.a.n.a.g.e.r...a.s.m.x.<./.L.A._.U.R.L.>.\r
+ * <.D.S._.I.D.>.A.H.+.0.3.j.u.K.b.U.G.b.H.l.1.V./.Q.I.w.R.A.=.=.<./.D.S._.I.D.>.\r
+ * <./.D.A.T.A.>.\r
+ * <./.W.R.M.H.E.A.D.E.R.>... */\r
+\r
+ unsigned char ContentHeader[] ={0x3C,0x00,0x57,0x00,0x52,0x00,0x4D,0x00,0x48,0x00,0x45,0x00,0x41,0x00,0x44,0x00,0x45,0x00,0x52,0x00,0x20,0x00,0x78,0x00,0x6D,0x00,0x6C,0x00,0x6E,0x00,\r
+ 0x73,0x00,0x3D,0x00,0x22,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70,0x00,0x3A,0x00,0x2F,0x00,0x2F,0x00,0x73,0x00,0x63,0x00,0x68,0x00,0x65,0x00,0x6D,0x00,\r
+ 0x61,0x00,0x73,0x00,0x2E,0x00,0x6D,0x00,0x69,0x00,0x63,0x00,0x72,0x00,0x6F,0x00,0x73,0x00,0x6F,0x00,0x66,0x00,0x74,0x00,0x2E,0x00,0x63,0x00,0x6F,0x00,\r
+ 0x6D,0x00,0x2F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x2F,0x00,0x32,0x00,0x30,0x00,0x30,0x00,0x37,0x00,0x2F,0x00,0x30,0x00,0x33,0x00,0x2F,0x00,0x50,0x00,\r
+ 0x6C,0x00,0x61,0x00,0x79,0x00,0x52,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x79,0x00,0x48,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x22,0x00,\r
+ 0x20,0x00,0x76,0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x3D,0x00,0x22,0x00,0x34,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00,0x30,0x00,\r
+ 0x2E,0x00,0x30,0x00,0x22,0x00,0x3E,0x00,0x3C,0x00,0x44,0x00,0x41,0x00,0x54,0x00,0x41,0x00,0x3E,0x00,0x3C,0x00,0x50,0x00,0x52,0x00,0x4F,0x00,0x54,0x00,\r
+ 0x45,0x00,0x43,0x00,0x54,0x00,0x49,0x00,0x4E,0x00,0x46,0x00,0x4F,0x00,0x3E,0x00,0x3C,0x00,0x4B,0x00,0x45,0x00,0x59,0x00,0x4C,0x00,0x45,0x00,0x4E,0x00,\r
+ 0x3E,0x00,0x31,0x00,0x36,0x00,0x3C,0x00,0x2F,0x00,0x4B,0x00,0x45,0x00,0x59,0x00,0x4C,0x00,0x45,0x00,0x4E,0x00,0x3E,0x00,0x3C,0x00,0x41,0x00,0x4C,0x00,\r
+ 0x47,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x45,0x00,0x53,0x00,0x43,0x00,0x54,0x00,0x52,0x00,0x3C,0x00,0x2F,0x00,0x41,0x00,0x4C,0x00,0x47,0x00,\r
+ 0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x50,0x00,0x52,0x00,0x4F,0x00,0x54,0x00,0x45,0x00,0x43,0x00,0x54,0x00,0x49,0x00,0x4E,0x00,0x46,0x00,\r
+ 0x4F,0x00,0x3E,0x00,0x3C,0x00,0x4B,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x6D,0x00,0x66,0x00,0x6A,0x00,0x43,0x00,0x54,0x00,0x4F,0x00,0x50,0x00,\r
+ 0x62,0x00,0x45,0x00,0x4F,0x00,0x6C,0x00,0x33,0x00,0x57,0x00,0x44,0x00,0x2F,0x00,0x35,0x00,0x6D,0x00,0x63,0x00,0x65,0x00,0x63,0x00,0x41,0x00,0x3D,0x00,\r
+ 0x3D,0x00,0x3C,0x00,0x2F,0x00,0x4B,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x43,0x00,0x48,0x00,0x45,0x00,0x43,0x00,0x4B,0x00,0x53,0x00,0x55,0x00,\r
+ 0x4D,0x00,0x3E,0x00,0x42,0x00,0x47,0x00,0x77,0x00,0x31,0x00,0x61,0x00,0x59,0x00,0x5A,0x00,0x31,0x00,0x59,0x00,0x58,0x00,0x4D,0x00,0x3D,0x00,0x3C,0x00,\r
+ 0x2F,0x00,0x43,0x00,0x48,0x00,0x45,0x00,0x43,0x00,0x4B,0x00,0x53,0x00,0x55,0x00,0x4D,0x00,0x3E,0x00,0x3C,0x00,0x43,0x00,0x55,0x00,0x53,0x00,0x54,0x00,\r
+ 0x4F,0x00,0x4D,0x00,0x41,0x00,0x54,0x00,0x54,0x00,0x52,0x00,0x49,0x00,0x42,0x00,0x55,0x00,0x54,0x00,0x45,0x00,0x53,0x00,0x3E,0x00,0x3C,0x00,0x49,0x00,\r
+ 0x49,0x00,0x53,0x00,0x5F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x5F,0x00,0x56,0x00,0x45,0x00,0x52,0x00,0x53,0x00,0x49,0x00,0x4F,0x00,0x4E,0x00,0x3E,0x00,\r
+ 0x37,0x00,0x2E,0x00,0x31,0x00,0x2E,0x00,0x31,0x00,0x30,0x00,0x36,0x00,0x34,0x00,0x2E,0x00,0x30,0x00,0x3C,0x00,0x2F,0x00,0x49,0x00,0x49,0x00,0x53,0x00,\r
+ 0x5F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x5F,0x00,0x56,0x00,0x45,0x00,0x52,0x00,0x53,0x00,0x49,0x00,0x4F,0x00,0x4E,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,\r
+ 0x43,0x00,0x55,0x00,0x53,0x00,0x54,0x00,0x4F,0x00,0x4D,0x00,0x41,0x00,0x54,0x00,0x54,0x00,0x52,0x00,0x49,0x00,0x42,0x00,0x55,0x00,0x54,0x00,0x45,0x00,\r
+ 0x53,0x00,0x3E,0x00,0x3C,0x00,0x4C,0x00,0x41,0x00,0x5F,0x00,0x55,0x00,0x52,0x00,0x4C,0x00,0x3E,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70,0x00,0x3A,0x00,\r
+ 0x2F,0x00,0x2F,0x00,0x70,0x00,0x6C,0x00,0x61,0x00,0x79,0x00,0x72,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x79,0x00,0x2E,0x00,0x64,0x00,0x69,0x00,0x72,0x00,\r
+ 0x65,0x00,0x63,0x00,0x74,0x00,0x74,0x00,0x61,0x00,0x70,0x00,0x73,0x00,0x2E,0x00,0x6E,0x00,0x65,0x00,0x74,0x00,0x2F,0x00,0x70,0x00,0x72,0x00,0x2F,0x00,\r
+ 0x73,0x00,0x76,0x00,0x63,0x00,0x2F,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x73,0x00,0x6D,0x00,0x61,0x00,0x6E,0x00,0x61,0x00,0x67,0x00,\r
+ 0x65,0x00,0x72,0x00,0x2E,0x00,0x61,0x00,0x73,0x00,0x6D,0x00,0x78,0x00,0x3C,0x00,0x2F,0x00,0x4C,0x00,0x41,0x00,0x5F,0x00,0x55,0x00,0x52,0x00,0x4C,0x00,\r
+ 0x3E,0x00,0x3C,0x00,0x44,0x00,0x53,0x00,0x5F,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x48,0x00,0x2B,0x00,0x30,0x00,0x33,0x00,0x6A,0x00,0x75,0x00,\r
+ 0x4B,0x00,0x62,0x00,0x55,0x00,0x47,0x00,0x62,0x00,0x48,0x00,0x6C,0x00,0x31,0x00,0x56,0x00,0x2F,0x00,0x51,0x00,0x49,0x00,0x77,0x00,0x52,0x00,0x41,0x00,\r
+ 0x3D,0x00,0x3D,0x00,0x3C,0x00,0x2F,0x00,0x44,0x00,0x53,0x00,0x5F,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x44,0x00,0x41,0x00,0x54,0x00,\r
+ 0x41,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x57,0x00,0x52,0x00,0x4D,0x00,0x48,0x00,0x45,0x00,0x41,0x00,0x44,0x00,0x45,0x00,0x52,0x00,0x3E,0x00,0x00,0x00};\r
+\r
+ /* Enter Appropriate Inputs */\r
+ open_input_data.file_type = DRM_TRUSTED_TYPE_PIFF;\r
+ open_input_data.permission = perm_type;\r
+ open_input_data.operation_callback.callback = test_drm_trusted_operation_cb;\r
+ open_input_data.lic_header.header = ContentHeader;\r
+ open_input_data.lic_header.header_len = sizeof(ContentHeader);\r
+\r
+ /* Open Decrypt Session*/\r
+ ret = drm_trusted_open_decrypt_session(&open_input_data,&open_output_data,\r
+ &pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_open_decrypt_session Failed!!, ret=0x%x", ret);\r
+ return;\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("result_code = 0x%x",open_output_data.result_code);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Extract Payload and IV information and pass it through PIFF payload info");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Sample Payload - Encrypted");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("0xE8,0xC6,0xF8,0x49,0xF3,0x0E,0x52,0xFB,0xC5,0xFA,0xF1");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Corresponding Decrypted Payload");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("0x88,0x80,0x40,0x01,0x71,0xA3,0x7F,0xD9,0xEF,0xA7,0xF2");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Sample IV");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("0xF4,0xB3,0x10,0x77,0x75,0x3F,0x69,0x94");\r
+\r
+ unsigned char PayLoadData[] = {0xE8,0xC6,0xF8,0x49,0xF3,0x0E,0x52,0xFB,0xC5,0xFA,0xF1};\r
+ unsigned char InitVect[] = {0xF4,0xB3,0x10,0x77,0x75,0x3F,0x69,0x94};\r
+ unsigned char expected_output[] = {0x88,0x80,0x40,0x01,0x71,0xA3,0x7F,0xD9,0xEF,0xA7,0xF2};\r
+\r
+ /* Before Read, Appropriate state MUST be SET */\r
+ state_input_data.state = DRM_CONSUMPTION_STARTED;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_set_decrypt_state(pHandle,&state_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_set_decrypt_state Failed!!, ret=0x%x", ret);\r
+ goto Err;\r
+ }\r
+\r
+ /* Start Decryption */\r
+ read_input_data.media_offset = 0;\r
+ read_input_data.payload_data = PayLoadData;\r
+ read_input_data.payload_data_len = sizeof(PayLoadData)/sizeof(PayLoadData[0]);\r
+ read_input_data.payload_iv = InitVect;\r
+ read_input_data.payload_iv_len = sizeof(InitVect)/sizeof(InitVect[0]);\r
+ drm_trusted_print_buffer("Before:InputBuffer:",read_input_data.payload_data,read_input_data.payload_data_len);\r
+\r
+ ret = drm_trusted_read_decrypt_session(pHandle,&read_input_data,\r
+ &read_output_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x Actual read_size=%u "\r
+ "Requested payload_data_len=%u",\r
+ ret,read_output_data.read_size,read_input_data.payload_data_len);\r
+\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_read_decrypt_session Failed!!, ret=0x%x", ret);\r
+ }\r
+ drm_trusted_print_buffer("After:OutputBuffer:",read_input_data.payload_data,read_input_data.payload_data_len);\r
+\r
+ if(0 == memcmp(read_input_data.payload_data,expected_output,read_input_data.payload_data_len)){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Decrypt is successful for SuperSpeedway_720_230.ismv");\r
+ }\r
+\r
+ /* When rendering is stopped */\r
+ state_input_data.state = DRM_CONSUMPTION_STOPPED;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_set_decrypt_state(pHandle,&state_input_data);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_set_decrypt_state Failed!!, ret=0x%x", ret);\r
+ goto Err;\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+ ret = drm_trusted_close_decrypt_session(&pHandle);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_close_decrypt_session Failed!!, ret=0x%x", ret);\r
+ return;\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("pHandle = %p",pHandle);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SUCCESS");\r
+ return;\r
+\r
+Err:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Failed, ret=0x%x", ret);\r
+ drm_trusted_close_decrypt_session(&pHandle);\r
+}\r
+\r
+\r
+void test_consume_content(void)\r
+{\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Start");\r
+ drm_trusted_file_type_e file_type = DRM_TRUSTED_TYPE_UNDEFINED;\r
+\r
+ /* Enter simulation information */\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the file_type");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Application can know file_type by calling"\r
+ "drm_get_file_type");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_OMA_V1 \n",DRM_TRUSTED_TYPE_OMA_V1);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_OMA_V2 \n",DRM_TRUSTED_TYPE_OMA_V2);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_PLAYREADY \n",DRM_TRUSTED_TYPE_PLAYREADY);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_PLAYREADY_ENVELOPE \n",DRM_TRUSTED_TYPE_PLAYREADY_ENVELOPE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_DIVX \n",DRM_TRUSTED_TYPE_DIVX);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Application can know about OMA DRM Progressive download"\r
+ "when browser download OMA DD (Download descriptor)"\r
+ "In DD, there is field progressiveDownloadFlag"\r
+ "if progressiveDownloadFlag = true it means"\r
+ "the content MUST be rendering in progressive download mode.");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_OMA_PD \n",DRM_TRUSTED_TYPE_OMA_PD);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Application can know about PIFF / Smooth Streaming"\r
+ "when browser download Manifest file");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TYPE_PIFF \n",DRM_TRUSTED_TYPE_PIFF);\r
+\r
+ scanf("%d", (int*)&file_type);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file_type received=%d",file_type);\r
+\r
+ switch(file_type){\r
+ case DRM_TRUSTED_TYPE_OMA_V1:\r
+ case DRM_TRUSTED_TYPE_OMA_V2:\r
+ case DRM_TRUSTED_TYPE_PLAYREADY:\r
+ case DRM_TRUSTED_TYPE_PLAYREADY_ENVELOPE:\r
+ case DRM_TRUSTED_TYPE_DIVX:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Handle file based rendering");\r
+ _render_drm_content(file_type);\r
+ break;\r
+\r
+ case DRM_TRUSTED_TYPE_OMA_PD:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Handle OMA DRM Progressive download rendering");\r
+ _render_drm_oma_progressive_download_content();\r
+ break;\r
+\r
+ case DRM_TRUSTED_TYPE_PIFF:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Handle OMA DRM Progressive download rendering");\r
+ _render_drm_piff_content();\r
+ break;\r
+\r
+ default:\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("UnKnown file_type=%d",file_type);\r
+ return;\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Completed");\r
+}\r
+\r
+void test_convert(char* SourceDMfilePath, char* DestDCFfilepath)\r
+{\r
+ DRM_TRUSTED_CONVERT_HANDLE hConvert;\r
+ drm_trusted_opn_conv_info_s input;\r
+ drm_trusted_write_conv_info_s write_input;\r
+ drm_trusted_write_conv_resp_s output;\r
+\r
+ FILE *fp = NULL;\r
+ int FileSize=0;\r
+ unsigned char *buffer = NULL;\r
+ struct stat statbuf;\r
+ int readed_size = 0;\r
+ int ret = -1;\r
+\r
+ /* memset the structures */\r
+ memset(&hConvert, 0x0, sizeof(DRM_TRUSTED_CONVERT_HANDLE));\r
+ memset(&input, 0x0, sizeof(drm_trusted_opn_conv_info_s));\r
+ memset(&output, 0x0, sizeof(drm_trusted_write_conv_resp_s));\r
+ memset(&write_input, 0x0, sizeof(drm_trusted_opn_conv_info_s));\r
+ memset(&statbuf, 0x0, sizeof(struct stat));\r
+\r
+ memcpy(input.filePath,DestDCFfilepath,strlen(DestDCFfilepath));\r
+\r
+ input.install_RO = DRM_TRUSTED_FALSE;\r
+\r
+ ret = drm_trusted_open_convert(&input,&hConvert);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("drm_trusted_open_convert:ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_open_convert Failed!!, ret=0x%x", ret);\r
+ return;\r
+ }\r
+\r
+ fp = fopen(SourceDMfilePath, "r");\r
+ if (fp == NULL){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("fopen error:error=%s",strerror(errno));\r
+ goto err;\r
+ }\r
+\r
+ if(stat(SourceDMfilePath, &statbuf) == 0 ){\r
+ FileSize = (unsigned int)statbuf.st_size;\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("stat failed:error = %s",strerror(errno));\r
+ goto err;\r
+ }\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("FileSize=%d",FileSize);\r
+\r
+ if(0 == FileSize){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("%s is empty",SourceDMfilePath);\r
+ goto err;\r
+ }\r
+\r
+ buffer = (unsigned char *)malloc(FileSize + 1);\r
+ if(!buffer){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("malloc failed:error=%s",strerror(errno));\r
+ goto err;\r
+ }\r
+ memset(buffer, 0x0, FileSize+1);\r
+ readed_size = fread(buffer,1,FileSize,fp);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("read_size=%d FileSize=%d",readed_size,FileSize);\r
+ if(ferror(fp)){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("fread failed:error=%s",strerror(errno));\r
+ goto err;\r
+ }\r
+\r
+ buffer[FileSize] = '\0';\r
+ write_input.data_len = readed_size;\r
+ write_input.data = buffer;\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("data_len=%d",write_input.data_len);\r
+\r
+ ret = drm_trusted_write_convert(&write_input,&output,hConvert);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("drm_trusted_write_convert:ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_write_convert Failed!!, ret=0x%x", ret);\r
+ goto err;\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("bytes written=%u filesize=%d",output.write_size,FileSize);\r
+ if((unsigned int)FileSize != output.write_size){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Data is not written successfully");\r
+ goto err;\r
+ }\r
+\r
+ ret = drm_trusted_close_convert(&hConvert);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("drm_trusted_close_convert:ret = 0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS != ret){\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "drm_trusted_close_convert Failed!!, ret=0x%x", ret);\r
+ hConvert = NULL;\r
+ goto err;\r
+ }\r
+\r
+ fclose(fp);\r
+ free(buffer);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SUCCESS");\r
+ return;\r
+\r
+err:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Failed");\r
+ if(hConvert) drm_trusted_close_convert(&hConvert);\r
+ if(fp) fclose(fp);\r
+ if(buffer) free(buffer);\r
+ return;\r
+}\r
+\r
+int test_case(int option)\r
+{\r
+ char filePath[300] = {0,};\r
+ char distfilePath[300] = {0,};\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("option=[%d]", option);\r
+\r
+ switch (option) {\r
+ case DRM_TRUSTED_CLIENT_TEST_NONE:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_CLIENT_TEST_NONE start");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_CLIENT_TEST_NONE completed");\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_CLIENT_TEST_handle_request:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_CLIENT_TEST_handle_request start");\r
+ drm_trusted_request_type_e request_type = DRM_TRUSTED_REQ_TYPE_NONE;\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the request type to be processed");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_UPDATE_SECURE_CLK",DRM_TRUSTED_REQ_TYPE_UPDATE_SECURE_CLK);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_SET_SECURE_CLK",DRM_TRUSTED_REQ_TYPE_SET_SECURE_CLK);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_SET_TRANSACTION_TRACKING",DRM_TRUSTED_REQ_TYPE_SET_TRANSACTION_TRACKING);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_MASTER_RESET",DRM_TRUSTED_REQ_TYPE_MASTER_RESET);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_VERIFY_ENCRYPTED_CERT",DRM_TRUSTED_REQ_TYPE_VERIFY_ENCRYPTED_CERT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_CREATE_INIT_DB",DRM_TRUSTED_REQ_TYPE_CREATE_INIT_DB);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_REINSTALL_CERT",DRM_TRUSTED_REQ_TYPE_REINSTALL_CERT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_REMOVE_RO",DRM_TRUSTED_REQ_TYPE_REMOVE_RO);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_REMOVE_ALL_RO",DRM_TRUSTED_REQ_TYPE_REMOVE_ALL_RO);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_GO_RIGHTS_URL",DRM_TRUSTED_REQ_TYPE_GO_RIGHTS_URL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_PD_SET_DOWNLOAD_COMPLETE",DRM_TRUSTED_REQ_TYPE_PD_SET_DOWNLOAD_COMPLETE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_PD_GET_PARSE_STATUS_INFO",DRM_TRUSTED_REQ_TYPE_PD_GET_PARSE_STATUS_INFO);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_PIFF_GET_LICENSE",DRM_TRUSTED_REQ_TYPE_PIFF_GET_LICENSE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_SAPPS_DECRYPT_PACKAGE",DRM_TRUSTED_REQ_TYPE_SAPPS_DECRYPT_PACKAGE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG(" %d ==> DRM_TRUSTED_REQ_TYPE_SAPPS_CONSUME_LICENSE",DRM_TRUSTED_REQ_TYPE_SAPPS_CONSUME_LICENSE);\r
+ scanf("%d", (int*)&request_type);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("request_type received=%d",request_type);\r
+\r
+ switch(request_type) {\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_UPDATE_SECURE_CLK:\r
+ {\r
+ struct tm* tmst = NULL;\r
+ long int delta = 0, newtime = 0, oldtime = 0;\r
+ int ret = -1;\r
+ drm_trusted_update_sec_clk_info_s upd_clk_info = { 0, };\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter delta sec \n");\r
+ scanf("%ld",&delta);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("delta = %ld \n",delta);\r
+\r
+ oldtime = (long int)time(NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Old Local Time = %ld = %s \n",oldtime,ctime(&oldtime));\r
+\r
+ newtime = oldtime + delta;\r
+ tmst = localtime(&newtime);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("New Local Time = %ld = %s \n",newtime,asctime(tmst));\r
+\r
+ upd_clk_info.before = oldtime;\r
+ upd_clk_info.after = newtime;\r
+\r
+ ret = drm_trusted_handle_request(request_type,\r
+ (void *) &upd_clk_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Update Secure Clock Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "Update Secure Clock Failed!!, ret=0x%x", ret);\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SET_SECURE_CLK:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Set Secure Clock!!");\r
+ struct tm* tmst = NULL;\r
+ long int delta = 0, locatime = 0, securetime = 0;\r
+ int ret = -1;\r
+ drm_trusted_set_sec_clk_info_s sec_clk_info;\r
+ memset(&sec_clk_info, 0x00, sizeof(drm_trusted_set_sec_clk_info_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter delta sec \n");\r
+ scanf("%ld",&delta);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("delta = %ld \n",delta);\r
+\r
+ locatime = (long int)time(NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Current Local Time = %ld = %s \n",locatime,ctime(&locatime));\r
+\r
+ securetime = locatime + delta;\r
+ tmst = localtime(&securetime);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Current Secure Time = %ld = %s \n",\r
+ securetime, asctime(tmst));\r
+\r
+ memcpy(&sec_clk_info.secure_time, tmst, sizeof(struct tm));\r
+ sec_clk_info.source_type = DRM_TRUSTED_TS_NITZ;\r
+\r
+ ret = drm_trusted_handle_request(request_type,\r
+ (void *) &sec_clk_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Set Secure Clock Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "Set Secure Clock Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SET_TRANSACTION_TRACKING:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_set_transaction_trk_info_s trk_info;\r
+ int value = 0;\r
+\r
+ memset(&trk_info, 0x00, sizeof(drm_trusted_set_transaction_trk_info_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter 1 for tracking ON and 0 for OFF");\r
+ scanf("%d", &value);\r
+\r
+ if (1 == value) {\r
+ trk_info.tracking_on = DRM_TRUSTED_TRUE;\r
+ } else if (0 == value) {\r
+ trk_info.tracking_on = DRM_TRUSTED_FALSE;\r
+ } else {\r
+ trk_info.tracking_on = DRM_TRUSTED_UNKNOWN;\r
+ }\r
+\r
+ ret = drm_trusted_handle_request(request_type,\r
+ (void *) &trk_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Set Transaction Tracking Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION(\r
+ "Set Transaction Tracking Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_MASTER_RESET:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_MASTER_RESET");\r
+ ret = drm_trusted_handle_request(request_type,NULL,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS == ret){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("MASTER RESET Success");\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("MASTER RESET FAILED: ret=0x%x", ret);\r
+ }\r
+ }\r
+ break;\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_VERIFY_ENCRYPTED_CERT:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_VERIFY_ENCRYPTED_CERT");\r
+ ret = drm_trusted_handle_request(request_type,NULL,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+\r
+ if(DRM_TRUSTED_RETURN_SUCCESS == ret){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("verifying encrypted certificate Success");\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("verifying encrypted certificate FAILED: ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_CREATE_INIT_DB:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_CREATE_INIT_DB");\r
+ ret = drm_trusted_handle_request(request_type,NULL,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS == ret){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("CREATE_INIT_DB Success");\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("CREATE_INIT_DB FAILED: ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_REINSTALL_CERT:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_REINSTALL_CERT");\r
+ ret = drm_trusted_handle_request(request_type,NULL,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS == ret){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("REINSTALL_CERT Success");\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("REINSTALL_CERT FAILED: ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_REMOVE_RO:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_REMOVE_RO");\r
+ drm_trusted_remove_ro_info_s remove_ro_info;\r
+ memset(&remove_ro_info, 0x00, sizeof(drm_trusted_remove_ro_info_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the file path");\r
+ scanf("%s",remove_ro_info.filePath);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file path=%s",remove_ro_info.filePath);\r
+ ret = drm_trusted_handle_request(request_type,(void *)&remove_ro_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("REMOVE_RO Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("REMOVE_RO Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_REMOVE_ALL_RO:\r
+ {\r
+ int ret = -1;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_REQ_TYPE_REMOVE_ALL_RO");\r
+\r
+ ret = drm_trusted_handle_request(request_type,NULL,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+ if(DRM_TRUSTED_RETURN_SUCCESS == ret){\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("REMOVE_ALL_RO Success");\r
+ }else{\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("REMOVE_ALL_RO FAILED: ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_GO_RIGHTS_URL:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_go_rights_url_info_s rights_url_info;\r
+ memset(&rights_url_info, 0x00, sizeof(drm_trusted_go_rights_url_info_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the file path");\r
+ scanf("%s",rights_url_info.file_path);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter=%d => DRM_ROURL_METHOD_ROPAYLOAD",DRM_ROURL_METHOD_ROPAYLOAD);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter=%d => DRM_ROURL_METHOD_SILENT",DRM_ROURL_METHOD_SILENT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the RO URL Type");\r
+ scanf("%d",(int*)&(rights_url_info.rourl_type));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file_path=%s rourl_type=%d",rights_url_info.file_path,rights_url_info.rourl_type);\r
+ ret = drm_trusted_handle_request(request_type,(void *)&rights_url_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("GO_RIGHTS_URL Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("GO_RIGHTS_URL Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_PD_SET_DOWNLOAD_COMPLETE:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_pd_set_dld_comp_info_s download_cmp_info;\r
+ memset(&download_cmp_info, 0x00, sizeof(drm_trusted_pd_set_dld_comp_info_s));\r
+\r
+ ret = drm_trusted_handle_request(request_type,(void *)&download_cmp_info, NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("PD_SET_DOWNLOAD_COMPLETE Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("PD_SET_DOWNLOAD_COMPLETE Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_PD_GET_PARSE_STATUS_INFO:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_pd_parse_status_info_s info_status;\r
+ drm_trusted_pd_parse_status_resp_s resp_status;\r
+ memset(&info_status, 0x00, sizeof(drm_trusted_pd_parse_status_info_s));\r
+ memset(&resp_status, 0x00, sizeof(drm_trusted_pd_parse_status_resp_s));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter the file path");\r
+ scanf("%s",info_status.file_path);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("file_path=%s",info_status.file_path);\r
+\r
+ ret = drm_trusted_handle_request(request_type,(void *)&info_status, (void *)&resp_status);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("PD_GET_PARSE_STATUS_INFO Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("PD_GET_PARSE_STATUS_INFO Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_PIFF_GET_LICENSE:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_piff_get_license_info_s license_info;\r
+\r
+ /* Sample Content => SuperSpeedway_720_230.ismv */\r
+\r
+ /* Content Header <.W.R.M.H.E.A.D.E.R. .x.m.l.n.s.=.".h.t.t.p.:././.s.c.h.e.m.a.s...m.i.c.r.o.s.o.f.t...c.o.m./.D.R.M./.2.0.0.7./.0.3./.P.l.a.y.R.e.a.d.y.H.e.a.d.e.r.". .v.e.r.s.i.o.n.=.".4...0...0...0.".>.\r
+ * <.D.A.T.A.>.\r
+ * <.P.R.O.T.E.C.T.I.N.F.O.>.\r
+ * <.K.E.Y.L.E.N.>.1.6.<./.K.E.Y.L.E.N.>.\r
+ * <.A.L.G.I.D.>.A.E.S.C.T.R.<./.A.L.G.I.D.>.\r
+ * <./.P.R.O.T.E.C.T.I.N.F.O.>.\r
+ * <.K.I.D.>.A.m.f.j.C.T.O.P.b.E.O.l.3.W.D./.5.m.c.e.c.A.=.=.<./.K.I.D.>.\r
+ * <.C.H.E.C.K.S.U.M.>.B.G.w.1.a.Y.Z.1.Y.X.M.=.<./.C.H.E.C.K.S.U.M.>.\r
+ * <.C.U.S.T.O.M.A.T.T.R.I.B.U.T.E.S.>.\r
+ * <.I.I.S._.D.R.M._.V.E.R.S.I.O.N.>.7...1...1.0.6.4...0.<./.I.I.S._.D.R.M._.V.E.R.S.I.O.N.>.\r
+ * <./.C.U.S.T.O.M.A.T.T.R.I.B.U.T.E.S.>.\r
+ * <.L.A._.U.R.L.>.h.t.t.p.:././.p.l.a.y.r.e.a.d.y...d.i.r.e.c.t.t.a.p.s...n.e.t./.p.r./.s.v.c./.r.i.g.h.t.s.m.a.n.a.g.e.r...a.s.m.x.<./.L.A._.U.R.L.>.\r
+ * <.D.S._.I.D.>.A.H.+.0.3.j.u.K.b.U.G.b.H.l.1.V./.Q.I.w.R.A.=.=.<./.D.S._.I.D.>.\r
+ * <./.D.A.T.A.>.\r
+ * <./.W.R.M.H.E.A.D.E.R.>... */\r
+\r
+ unsigned char ContentHeader[] ={0x3C,0x00,0x57,0x00,0x52,0x00,0x4D,0x00,0x48,0x00,0x45,0x00,0x41,0x00,0x44,0x00,0x45,0x00,0x52,0x00,0x20,0x00,0x78,0x00,0x6D,0x00,0x6C,0x00,0x6E,0x00,\r
+ 0x73,0x00,0x3D,0x00,0x22,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70,0x00,0x3A,0x00,0x2F,0x00,0x2F,0x00,0x73,0x00,0x63,0x00,0x68,0x00,0x65,0x00,0x6D,0x00,\r
+ 0x61,0x00,0x73,0x00,0x2E,0x00,0x6D,0x00,0x69,0x00,0x63,0x00,0x72,0x00,0x6F,0x00,0x73,0x00,0x6F,0x00,0x66,0x00,0x74,0x00,0x2E,0x00,0x63,0x00,0x6F,0x00,\r
+ 0x6D,0x00,0x2F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x2F,0x00,0x32,0x00,0x30,0x00,0x30,0x00,0x37,0x00,0x2F,0x00,0x30,0x00,0x33,0x00,0x2F,0x00,0x50,0x00,\r
+ 0x6C,0x00,0x61,0x00,0x79,0x00,0x52,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x79,0x00,0x48,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x65,0x00,0x72,0x00,0x22,0x00,\r
+ 0x20,0x00,0x76,0x00,0x65,0x00,0x72,0x00,0x73,0x00,0x69,0x00,0x6F,0x00,0x6E,0x00,0x3D,0x00,0x22,0x00,0x34,0x00,0x2E,0x00,0x30,0x00,0x2E,0x00,0x30,0x00,\r
+ 0x2E,0x00,0x30,0x00,0x22,0x00,0x3E,0x00,0x3C,0x00,0x44,0x00,0x41,0x00,0x54,0x00,0x41,0x00,0x3E,0x00,0x3C,0x00,0x50,0x00,0x52,0x00,0x4F,0x00,0x54,0x00,\r
+ 0x45,0x00,0x43,0x00,0x54,0x00,0x49,0x00,0x4E,0x00,0x46,0x00,0x4F,0x00,0x3E,0x00,0x3C,0x00,0x4B,0x00,0x45,0x00,0x59,0x00,0x4C,0x00,0x45,0x00,0x4E,0x00,\r
+ 0x3E,0x00,0x31,0x00,0x36,0x00,0x3C,0x00,0x2F,0x00,0x4B,0x00,0x45,0x00,0x59,0x00,0x4C,0x00,0x45,0x00,0x4E,0x00,0x3E,0x00,0x3C,0x00,0x41,0x00,0x4C,0x00,\r
+ 0x47,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x45,0x00,0x53,0x00,0x43,0x00,0x54,0x00,0x52,0x00,0x3C,0x00,0x2F,0x00,0x41,0x00,0x4C,0x00,0x47,0x00,\r
+ 0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x50,0x00,0x52,0x00,0x4F,0x00,0x54,0x00,0x45,0x00,0x43,0x00,0x54,0x00,0x49,0x00,0x4E,0x00,0x46,0x00,\r
+ 0x4F,0x00,0x3E,0x00,0x3C,0x00,0x4B,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x6D,0x00,0x66,0x00,0x6A,0x00,0x43,0x00,0x54,0x00,0x4F,0x00,0x50,0x00,\r
+ 0x62,0x00,0x45,0x00,0x4F,0x00,0x6C,0x00,0x33,0x00,0x57,0x00,0x44,0x00,0x2F,0x00,0x35,0x00,0x6D,0x00,0x63,0x00,0x65,0x00,0x63,0x00,0x41,0x00,0x3D,0x00,\r
+ 0x3D,0x00,0x3C,0x00,0x2F,0x00,0x4B,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x43,0x00,0x48,0x00,0x45,0x00,0x43,0x00,0x4B,0x00,0x53,0x00,0x55,0x00,\r
+ 0x4D,0x00,0x3E,0x00,0x42,0x00,0x47,0x00,0x77,0x00,0x31,0x00,0x61,0x00,0x59,0x00,0x5A,0x00,0x31,0x00,0x59,0x00,0x58,0x00,0x4D,0x00,0x3D,0x00,0x3C,0x00,\r
+ 0x2F,0x00,0x43,0x00,0x48,0x00,0x45,0x00,0x43,0x00,0x4B,0x00,0x53,0x00,0x55,0x00,0x4D,0x00,0x3E,0x00,0x3C,0x00,0x43,0x00,0x55,0x00,0x53,0x00,0x54,0x00,\r
+ 0x4F,0x00,0x4D,0x00,0x41,0x00,0x54,0x00,0x54,0x00,0x52,0x00,0x49,0x00,0x42,0x00,0x55,0x00,0x54,0x00,0x45,0x00,0x53,0x00,0x3E,0x00,0x3C,0x00,0x49,0x00,\r
+ 0x49,0x00,0x53,0x00,0x5F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x5F,0x00,0x56,0x00,0x45,0x00,0x52,0x00,0x53,0x00,0x49,0x00,0x4F,0x00,0x4E,0x00,0x3E,0x00,\r
+ 0x37,0x00,0x2E,0x00,0x31,0x00,0x2E,0x00,0x31,0x00,0x30,0x00,0x36,0x00,0x34,0x00,0x2E,0x00,0x30,0x00,0x3C,0x00,0x2F,0x00,0x49,0x00,0x49,0x00,0x53,0x00,\r
+ 0x5F,0x00,0x44,0x00,0x52,0x00,0x4D,0x00,0x5F,0x00,0x56,0x00,0x45,0x00,0x52,0x00,0x53,0x00,0x49,0x00,0x4F,0x00,0x4E,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,\r
+ 0x43,0x00,0x55,0x00,0x53,0x00,0x54,0x00,0x4F,0x00,0x4D,0x00,0x41,0x00,0x54,0x00,0x54,0x00,0x52,0x00,0x49,0x00,0x42,0x00,0x55,0x00,0x54,0x00,0x45,0x00,\r
+ 0x53,0x00,0x3E,0x00,0x3C,0x00,0x4C,0x00,0x41,0x00,0x5F,0x00,0x55,0x00,0x52,0x00,0x4C,0x00,0x3E,0x00,0x68,0x00,0x74,0x00,0x74,0x00,0x70,0x00,0x3A,0x00,\r
+ 0x2F,0x00,0x2F,0x00,0x70,0x00,0x6C,0x00,0x61,0x00,0x79,0x00,0x72,0x00,0x65,0x00,0x61,0x00,0x64,0x00,0x79,0x00,0x2E,0x00,0x64,0x00,0x69,0x00,0x72,0x00,\r
+ 0x65,0x00,0x63,0x00,0x74,0x00,0x74,0x00,0x61,0x00,0x70,0x00,0x73,0x00,0x2E,0x00,0x6E,0x00,0x65,0x00,0x74,0x00,0x2F,0x00,0x70,0x00,0x72,0x00,0x2F,0x00,\r
+ 0x73,0x00,0x76,0x00,0x63,0x00,0x2F,0x00,0x72,0x00,0x69,0x00,0x67,0x00,0x68,0x00,0x74,0x00,0x73,0x00,0x6D,0x00,0x61,0x00,0x6E,0x00,0x61,0x00,0x67,0x00,\r
+ 0x65,0x00,0x72,0x00,0x2E,0x00,0x61,0x00,0x73,0x00,0x6D,0x00,0x78,0x00,0x3C,0x00,0x2F,0x00,0x4C,0x00,0x41,0x00,0x5F,0x00,0x55,0x00,0x52,0x00,0x4C,0x00,\r
+ 0x3E,0x00,0x3C,0x00,0x44,0x00,0x53,0x00,0x5F,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x41,0x00,0x48,0x00,0x2B,0x00,0x30,0x00,0x33,0x00,0x6A,0x00,0x75,0x00,\r
+ 0x4B,0x00,0x62,0x00,0x55,0x00,0x47,0x00,0x62,0x00,0x48,0x00,0x6C,0x00,0x31,0x00,0x56,0x00,0x2F,0x00,0x51,0x00,0x49,0x00,0x77,0x00,0x52,0x00,0x41,0x00,\r
+ 0x3D,0x00,0x3D,0x00,0x3C,0x00,0x2F,0x00,0x44,0x00,0x53,0x00,0x5F,0x00,0x49,0x00,0x44,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x44,0x00,0x41,0x00,0x54,0x00,\r
+ 0x41,0x00,0x3E,0x00,0x3C,0x00,0x2F,0x00,0x57,0x00,0x52,0x00,0x4D,0x00,0x48,0x00,0x45,0x00,0x41,0x00,0x44,0x00,0x45,0x00,0x52,0x00,0x3E,0x00,0x00,0x00};\r
+\r
+ memset(&license_info, 0x00, sizeof(drm_trusted_piff_get_license_info_s));\r
+\r
+ license_info.lic_header.header = (unsigned char*)ContentHeader;\r
+ license_info.lic_header.header_len = sizeof(ContentHeader);\r
+ ret = drm_trusted_handle_request(request_type,(void *)&license_info,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("PIFF_GET_LICENSE Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("PIFF_GET_LICENSE Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SAPPS_DECRYPT_PACKAGE:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_sapps_decrypt_package_info_s package_info;\r
+\r
+ memset(&package_info, 0x00, sizeof(drm_trusted_sapps_decrypt_package_info_s));\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter Samsung Apps DRM File Path");\r
+ scanf("%s",package_info.sadcf_filepath);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter Decrypted File Path");\r
+ scanf("%s",package_info.decrypt_filepath);\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SamsungAppsDRMFilePath=%s",package_info.sadcf_filepath);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Decrypted-FilePath=%s",package_info.decrypt_filepath);\r
+\r
+ ret = drm_trusted_handle_request(request_type,(void *)&package_info,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SAPPS_DECRYPT_PACKAGE Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("SAPPS_DECRYPT_PACKAGE Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SAPPS_CONSUME_LICENSE:\r
+ {\r
+ int ret = -1;\r
+ drm_trusted_sapps_consume_license_info_s cons_license_info;\r
+\r
+ memset(&cons_license_info, 0x00, sizeof(drm_trusted_sapps_consume_license_info_s));\r
+ ret = drm_trusted_handle_request(request_type,(void *)&cons_license_info,NULL);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+ if (DRM_TRUSTED_RETURN_SUCCESS == ret) {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SAPPS_CONSUME_LICENSE Success!!");\r
+ } else {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("SAPPS_CONSUME_LICENSE Failed!!, ret=0x%x", ret);\r
+ }\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SAPPS_GENERATE_PURCHASE_REQUEST:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Test-environment is not available:"\r
+ "DRM_TRUSTED_REQ_TYPE_SAPPS_GENERATE_PURCHASE_REQUEST");\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_REQ_TYPE_SAPPS_GENERATE_LICENSE_REQUEST:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Test-environment is not available:"\r
+ "DRM_TRUSTED_REQ_TYPE_SAPPS_GENERATE_LICENSE_REQUEST");\r
+ break;\r
+ }\r
+\r
+ default:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Invalid option!!");\r
+ break;\r
+ }\r
+\r
+ }\r
+\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_CLIENT_TEST_consume_content:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_CLIENT_TEST_consume_content");\r
+ test_consume_content();\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_CLIENT_TEST_CONVERT:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Your choice is DRM_TRUSTED_CLIENT_TEST_CONVERT");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter complete Source file path");\r
+ scanf("%s", filePath);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter complete Destination file path");\r
+ scanf("%s", distfilePath);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("test_convert: sourcefile=%s destfile=%s",filePath,distfilePath);\r
+ test_convert(filePath,distfilePath);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("test_convert finishes");\r
+ break;\r
+ }\r
+\r
+ case DRM_TRUSTED_CLIENT_TEST_MAX:\r
+ {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("DRM_TRUSTED_CLIENT_TEST_MAX");\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SUCCESS");\r
+ return 0;\r
+ }\r
+\r
+ default:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("Wrong choice=%d",option);\r
+ goto ERR;\r
+ }\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("SUCCESS");\r
+ return 1;\r
+\r
+ERR:\r
+ DRM_TRUSTED_CLIENT_TEST_EXCEPTION("test_case:Error:Exit from DRM CLIENT Test utility");\r
+ return 0;\r
+}\r
+\r
+int main(int argc, char* argv[])\r
+{\r
+ int pid = getpid();\r
+ int choice = DRM_TRUSTED_CLIENT_TEST_NONE;\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("main:pid=[%d]", pid);\r
+\r
+ do {\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("choice=%d -> DRM_TRUSTED_CLIENT_TEST_NONE",DRM_TRUSTED_CLIENT_TEST_NONE);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("choice=%d -> DRM_TRUSTED_CLIENT_TEST_handle_request",DRM_TRUSTED_CLIENT_TEST_handle_request);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("choice=%d -> DRM_TRUSTED_CLIENT_TEST_consume_content",DRM_TRUSTED_CLIENT_TEST_consume_content);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("choice=%d -> DRM_TRUSTED_CLIENT_TEST_CONVERT",DRM_TRUSTED_CLIENT_TEST_CONVERT);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("choice=%d -> Exit from TEST Script",DRM_TRUSTED_CLIENT_TEST_MAX);\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Enter Your choice:1 to %d:Use choice no-%d to exit the test-program",DRM_TRUSTED_CLIENT_TEST_MAX, DRM_TRUSTED_CLIENT_TEST_MAX);\r
+ scanf("%3d", &choice);\r
+ } while (1 == test_case(choice));\r
+\r
+ DRM_TRUSTED_CLIENT_TEST_LOG("Exiting process=[%d] from main", pid);\r
+ return 0;\r
+}\r