Tizen 2.1 base
authorJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:51:25 +0000 (01:51 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:51:25 +0000 (01:51 +0900)
34 files changed:
AUTHORS [new file with mode: 0755]
CMakeLists.txt [new file with mode: 0755]
LICENSE [new file with mode: 0755]
TC/build.sh [new file with mode: 0755]
TC/execute.sh [new file with mode: 0755]
TC/tet_code [new file with mode: 0755]
TC/tet_scen [new file with mode: 0755]
TC/tetbuild.cfg [new file with mode: 0755]
TC/tetclean.cfg [new file with mode: 0755]
TC/tetexec.cfg [new file with mode: 0755]
TC/unit/Makefile [new file with mode: 0755]
TC/unit/drmcontentsdef.h [new file with mode: 0755]
TC/unit/tc_gen.sh [new file with mode: 0755]
TC/unit/tslist [new file with mode: 0755]
TC/unit/utc_MODULE_API_func.c.in [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_constraint_info_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_content_info_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_data_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_file_info_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_file_type_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_get_license_status_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_is_action_allowed_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_is_drm_file_func.c [new file with mode: 0755]
TC/unit/utc_drmclient_drm_process_request_func.c [new file with mode: 0755]
drm-client.pc.in [new file with mode: 0755]
include/drm_client.h [new file with mode: 0755]
include/drm_client_ipc.h [new file with mode: 0755]
include/drm_client_log.h [new file with mode: 0755]
include/drm_client_types.h [new file with mode: 0755]
packaging/drm-client.spec [new file with mode: 0755]
service/drm_client.cpp [new file with mode: 0755]
service/drm_client_ipc.cpp [new file with mode: 0755]
test/Makefile [new file with mode: 0755]
test/test_drm_client.cpp [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100755 (executable)
index 0000000..e1c9411
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+Mahendra Kumar Prajapat <mahendra.p@samsung.com>\r
+Harsha Shekar <h.shekar@samsung.com>
\ No newline at end of file
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..591fefe
--- /dev/null
@@ -0,0 +1,55 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)\r
+PROJECT(drm-client CXX)\r
+\r
+#Verbose\r
+#SET(CMAKE_VERBOSE_MAKEFILE ON)\r
+\r
+# Message\r
+#MESSAGE("FLAGS: ${CMAKE_C_FLAGS}")\r
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})\r
+SET(LIBDIR ${PREFIX}/lib)\r
+SET(INCLUDEDIR ${PREFIX}/include)\r
+SET(VERSION 0.0.1)\r
+\r
+SET(SRCS\r
+       service/drm_client.cpp\r
+       service/drm_client_ipc.cpp\r
+)\r
+\r
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)\r
+\r
+SET(extapi "-fvisibility=hidden")\r
+SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${extapi}")\r
+\r
+#SET(DEBUG "-Wall -Werror -ggdb3 -fno-omit-frame-pointer -rdynamic -fno-optimize-sibling-calls -fstack-protector-all")\r
+#SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${DEBUG}")\r
+\r
+INCLUDE(FindPkgConfig)\r
+pkg_check_modules(exppkgs REQUIRED dlog capi-base-common glib-2.0)\r
+\r
+FOREACH(flag ${exppkgs_CFLAGS})\r
+       SET(EXTRA_CXXFLAGS "${EXTRA_CXXFLAGS} ${flag}")\r
+ENDFOREACH(flag)\r
+\r
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${EXTRA_CXXFLAGS}")\r
+ADD_LIBRARY(${PROJECT_NAME} SHARED ${SRCS})\r
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} "-ldl" )\r
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${exppkgs_LDFLAGS})\r
+SET_TARGET_PROPERTIES(\r
+       drm-client\r
+       PROPERTIES\r
+       SOVERSION 0\r
+       VERSION 0.0.1\r
+)\r
+\r
+FIND_PROGRAM(UNAME NAMES uname)\r
+EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH")\r
+IF("${ARCH}" STREQUAL "arm")\r
+       ADD_DEFINITIONS("-DTARGET")\r
+       MESSAGE("add -DTARGET")\r
+ENDIF("${ARCH}" STREQUAL "arm")\r
+\r
+CONFIGURE_FILE(${PROJECT_NAME}.pc.in ${PROJECT_NAME}.pc)\r
+INSTALL(FILES ${PROJECT_NAME}.pc DESTINATION lib/pkgconfig)\r
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION lib)\r
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION /usr/include/drm-client/)\r
diff --git a/LICENSE b/LICENSE
new file mode 100755 (executable)
index 0000000..a06208b
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,204 @@
+Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/TC/build.sh b/TC/build.sh
new file mode 100755 (executable)
index 0000000..c2e3d7a
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#Modify path to local TETware folder
+export TET_INSTALL_PATH=/path/to/TETware
+if [ ! -d "$TET_INSTALL_PATH" ]; then
+       echo "TET_INSTALL_PATH = $TET_INSTALL_PATH doesn't exist"
+       echo "Modify this script build.sh with tetware directory"
+       exit
+fi
+
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+export TET_ROOT=$TET_TARGET_PATH
+
+export TET_SUITE_ROOT=`pwd`
+#FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+#HTML_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.html
+#JOURNAL_RESULT=$RESULT_DIR/build-tar-result-$FILE_NAME_EXTENSION.journal
+
+DATE=$(date +'%Y.%m.%d_%H.%M')
+HTML_RESULT=$RESULT_DIR/drm_tc_build_result_$DATE.html
+JOURNAL_RESULT=$RESULT_DIR/drm_tc_build_result_$DATE.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -c -p ./
+tcc -b -j $JOURNAL_RESULT -p ./
+
+# Log Levels
+# LOG_LEVEL=3 prints only tet_infoline
+# LOG_LEVEL=7 prints only tet_infoline & tet_printf
+LOG_LEVEL=7
+grw -c $LOG_LEVEL -f chtml -o $HTML_RESULT $JOURNAL_RESULT
+
+# Copy the results outside drm-client
+echo "Copy the results outside drm-client & in folder drm_tc_results_client"
+mkdir -p ../../drm_tc_results_client
+cp $RESULT_DIR/drm_tc_build_result_$DATE.html ../../drm_tc_results_client/
diff --git a/TC/execute.sh b/TC/execute.sh
new file mode 100755 (executable)
index 0000000..916b893
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+
+#Modify path to TETware folder on target
+export TET_INSTALL_PATH=/path/to/TETware
+if [ ! -d "$TET_INSTALL_PATH" ]; then
+       echo "TET_INSTALL_PATH = $TET_INSTALL_PATH doesn't exist"
+       echo "Modify this script execute.sh with tetware directory"
+       exit
+fi
+
+export TET_TARGET_PATH=$TET_INSTALL_PATH/tetware-target
+export PATH=$TET_TARGET_PATH/bin:$PATH
+export LD_LIBRARY_PATH=$TET_TARGET_PATH/lib/tet3:$LD_LIBRARY_PATH
+
+export TET_ROOT=$TET_TARGET_PATH
+
+export TET_SUITE_ROOT=`pwd`
+#FILE_NAME_EXTENSION=`date +%s`
+
+RESULT_DIR=results
+#HTML_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.html
+#JOURNAL_RESULT=$RESULT_DIR/exec-tar-result-$FILE_NAME_EXTENSION.journal
+
+DATE=$(date +'%Y.%m.%d_%H.%M')
+HTML_RESULT=$RESULT_DIR/drm_tc_execute_result_$DATE.html
+JOURNAL_RESULT=$RESULT_DIR/drm_tc_execute_result_$DATE.journal
+
+mkdir -p $RESULT_DIR
+
+tcc -e -j $JOURNAL_RESULT -p ./
+
+# Log Levels
+# LOG_LEVEL=3 prints only tet_infoline
+# LOG_LEVEL=7 prints only tet_infoline & tet_printf
+LOG_LEVEL=7
+grw -c $LOG_LEVEL -f chtml -o $HTML_RESULT $JOURNAL_RESULT
+
+# Copy the results outside drm-client
+echo "Copy the results outside drm-client & in folder drm_tc_results_client"
+mkdir -p ../../drm_tc_results_client
+cp $RESULT_DIR/drm_tc_execute_result_$DATE.html ../../drm_tc_results_client/
diff --git a/TC/tet_code b/TC/tet_code
new file mode 100755 (executable)
index 0000000..a2cf6c1
--- /dev/null
@@ -0,0 +1,12 @@
+# TET reserved codes
+0 "PASS"
+1 "FAIL"
+2 "UNRESOLVED"
+3 "NOTINUSE"
+4 "UNSUPPORTED"
+5 "UNTESTED"
+6 "UNINITIATED"
+7 "NORESULT"
+
+# Test suite additional codes
+33 "INSPECT"
diff --git a/TC/tet_scen b/TC/tet_scen
new file mode 100755 (executable)
index 0000000..43cbc9b
--- /dev/null
@@ -0,0 +1,7 @@
+all
+       ^TEST
+##### Scenarios for TEST #####
+
+# Test scenario
+TEST
+       :include:/unit/tslist
diff --git a/TC/tetbuild.cfg b/TC/tetbuild.cfg
new file mode 100755 (executable)
index 0000000..6192c78
--- /dev/null
@@ -0,0 +1,3 @@
+TET_OUTPUT_CAPTURE=False
+TET_BUILD_TOOL=make
+TET_PASS_TC_NAME=True
diff --git a/TC/tetclean.cfg b/TC/tetclean.cfg
new file mode 100755 (executable)
index 0000000..c66eda4
--- /dev/null
@@ -0,0 +1,2 @@
+TET_OUTPUT_CAPTURE=False
+TET_CLEAN_TOOL=make clean
diff --git a/TC/tetexec.cfg b/TC/tetexec.cfg
new file mode 100755 (executable)
index 0000000..0d9d39a
--- /dev/null
@@ -0,0 +1 @@
+TET_OUTPUT_CAPTURE=False
diff --git a/TC/unit/Makefile b/TC/unit/Makefile
new file mode 100755 (executable)
index 0000000..39bd791
--- /dev/null
@@ -0,0 +1,30 @@
+CC ?= gcc
+
+TARGETS =      utc_drmclient_drm_is_drm_file_func \
+                       utc_drmclient_drm_process_request_func \
+                       utc_drmclient_drm_get_file_type_func \
+                       utc_drmclient_drm_get_license_status_func \
+                       utc_drmclient_drm_get_content_info_func \
+                       utc_drmclient_drm_get_file_info_func \
+                       utc_drmclient_drm_get_constraint_info_func \
+                       utc_drmclient_drm_is_action_allowed_func \
+                       utc_drmclient_drm_get_data_func
+
+PKGS = drm-client
+
+LDFLAGS = `pkg-config --libs $(PKGS)`
+LDFLAGS += $(TET_ROOT)/lib/tet3/tcm_s.o
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -ltcm_s
+LDFLAGS += -L$(TET_ROOT)/lib/tet3 -lapi_s
+
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`
+CFLAGS += -I$(TET_ROOT)/inc/tet3
+CFLAGS += -Wall
+
+all: $(TARGETS)
+
+$(TARGETS): %: %.c
+       $(CC) -o $@ $< $(CFLAGS) $(LDFLAGS)
+
+clean:
+       rm -rf $(TARGETS) ../results ../tet_tmp_dir
diff --git a/TC/unit/drmcontentsdef.h b/TC/unit/drmcontentsdef.h
new file mode 100755 (executable)
index 0000000..c28f405
--- /dev/null
@@ -0,0 +1,153 @@
+/*\r
+ *  drm-client TCs\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
+ * 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               drmcontentsdef.h\r
+ * @brief       DRM TC Content MACROs.\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: DRM TC Content MACROs\r
+ */\r
+\r
+#ifndef __DRM_CONTENTS_DEF_H__\r
+#define __DRM_CONTENTS_DEF_H__\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /*__cplusplus */\r
+\r
+#include "drm_client.h"\r
+\r
+#define FILE_PATH_MAX_SIZE (256)\r
+/* Modify path to local tc_data on target */\r
+#define DRM_CONTENT_PATH "/path/to/tc_data"\r
+\r
+/*\r
+ * Valid File paths\r
+ */\r
+#define FILE_PATH_VALID_FILE_OMA_1     DRM_CONTENT_PATH"/flourish_count5.dcf"\r
+#define FILE_PATH_VALID_FILE_OMA_2     DRM_CONTENT_PATH"/download.jpg.dm-849344490.odf"\r
+#define FILE_PATH_VALID_FILE_OMA_3     DRM_CONTENT_PATH"/4931_D2_AacpMetaDummy.o4a"\r
+#define FILE_PATH_VALID_FILE_OMA_4     DRM_CONTENT_PATH"/4941_D2_VideoH264AACDummy.o4v"\r
+#define FILE_PATH_VALID_FILE_OMA_5     DRM_CONTENT_PATH"/barimage_interval.dcf"\r
+#define FILE_PATH_VALID_FILE_OMA_6     DRM_CONTENT_PATH"/MonkeyMadness_startend_time.dcf"\r
+#define FILE_PATH_VALID_FILE_OMA_7     DRM_CONTENT_PATH"/pbarimage_timedcount.dcf"\r
+#define FILE_PATH_VALID_FILE_OMA_8     DRM_CONTENT_PATH"/cupcake_play.dcf"\r
+\r
+/*\r
+ * This file will be generated as a part of DM to DCF conversion test-case\r
+ */\r
+#define FILE_PATH_VALID_FILE_OMA_9     DRM_CONTENT_PATH"/image_cd.dcf"\r
+\r
+#define FILE_PATH_VALID_FILE_OMA_10    DRM_CONTENT_PATH"/3001_D1_Aac.dcf"\r
+\r
+#define FILE_PATH_VALID_FILE_OMA_11    DRM_CONTENT_PATH"/temp/flourish_count5.dcf"\r
+\r
+/*\r
+ * This file will be generated as a part of DM to DCF conversion test-case\r
+ */\r
+#define FILE_PATH_VALID_FILE_OMA_12    DRM_CONTENT_PATH"/1202_F1_Jpg.dcf"\r
+\r
+\r
+#define FILE_PATH_VALID_FILE_PR_1      DRM_CONTENT_PATH"/Jazz_Audio_OPLs0.pya"\r
+#define FILE_PATH_VALID_FILE_PR_2      DRM_CONTENT_PATH"/MD_h264_V4AES.pyv"\r
+#define FILE_PATH_VALID_FILE_PR_3      DRM_CONTENT_PATH"/ExpirationAudio1.pya"\r
+\r
+#define FILE_PATH_VALID_FILE_PR_ENV_1  DRM_CONTENT_PATH"/krishna.eny"\r
+#define FILE_PATH_VALID_FILE_PR_ENV_2  DRM_CONTENT_PATH"/jazz_audio_opls0.pye"\r
+\r
+\r
+#define FILE_PATH_VALID_FILE_DIVX_1            DRM_CONTENT_PATH"/V19_HD720p10_ICT_00.avi"\r
+\r
+/*\r
+ * Invalid File paths\r
+ */\r
+#define INVALID_POINTER_OBJECT                 NULL\r
+#define FILE_PATH_INVALID_FILE_NULL            NULL\r
+#define FILE_PATH_INVALID_FILE_EMPTY   ""\r
+\r
+#define FILE_PATH_INVALID_FILE_OMA_1   DRM_CONTENT_PATH"/flourish_count5.dr"\r
+#define FILE_PATH_INVALID_FILE_OMA_2   DRM_CONTENT_PATH"/Flower1.jpg"\r
+#define FILE_PATH_INVALID_FILE_OMA_3   DRM_CONTENT_PATH"/image_cd.dm"\r
+\r
+#define FILE_PATH_INVALID_FILE_PR_1            DRM_CONTENT_PATH"/clr_jazz_AAC.asf"\r
+#define FILE_PATH_INVALID_FILE_PR_2            DRM_CONTENT_PATH"/jazz.wma"\r
+\r
+#define FILE_PATH_INVALID_FILE_PR_ENV_1                DRM_CONTENT_PATH"/krishna.jpg"\r
+\r
+#define FILE_PATH_INVALID_FILE_DIVX_1          DRM_CONTENT_PATH"/sine_wave.avi"\r
+\r
+/** Valid RO file paths\r
+ *\r
+ */\r
+#define FILE_PATH_VALID_RO_FILE_OMA_1  DRM_CONTENT_PATH"/flourish_count5.dr"\r
+#define FILE_PATH_VALID_RO_FILE_OMA_2  DRM_CONTENT_PATH"/3001_D1_Aac_3Counts.drc"\r
+\r
+/** Invalid RO file paths\r
+ *\r
+ */\r
+#define FILE_PATH_INVALID_RO_FILE_OMA_1        DRM_CONTENT_PATH"/flourish_count5.dcf"\r
+\r
+/*\r
+ * Valid License Initiators\r
+ */\r
+/* Jazz_Audio_OPLs0.pya */\r
+#define LICENSE_INITIATOR_VALID_PR_FILE                        "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=ZVXWl75xFUOdCY/tO8bLCA==&type=license&content=http://131.107.149.211/pr/media/1044/Jazz_Audio_OPLs0.pya"\r
+\r
+/* DomainTestVideo1.pyv */\r
+#define LICENSE_INITIATOR_VALID_PR_FILE_1                      "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=ybubwBx/XUidiUX3zdMRTg==&type=license&content=http://131.107.149.211/pr/media/1044/DomainTestVideo1.pyv"\r
+\r
+/* DomainTestVideo1.pyv */\r
+#define JOIN_DOMAIN_INITIATOR_VALID_PR_FILE_1          "http://playready.directtaps.net/pr/initiator.aspx?p=0&type=JOIN"\r
+\r
+/* DomainTestVideo1.pyv */\r
+#define LEAVE_DOMAIN_INITIATOR_VALID_PR_FILE_1         "http://playready.directtaps.net/pr/initiator.aspx?p=0&type=LEAVE"\r
+\r
+/* DomainTestVideo1.pyv */\r
+#define METERING_INITIATOR_VALID_PR_FILE_1                     "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=ybubwBx/XUidiUX3zdMRTg==&type=metering&content=http://131.107.149.211/pr/media/1044/DomainTestVideo1.pyv"\r
+\r
+/* ExpirationAudio1.pya */\r
+#define LICENSE_INITIATOR_VALID_PR_FILE_2                      "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=qTNJyCKLmUCdGpx1ZHQ0Aw==&type=license&content=http://131.107.149.211/pr/media/1044/ExpirationAudio1.pya"\r
+\r
+/* MD_h264_V4AES.pyv */\r
+#define LICENSE_INITIATOR_VALID_PR_FILE_3                      "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=ewIUg21KrEecS3qu8m9EMQ==&type=license&content=http://131.107.149.211/pr/media/1044/MD_h264_V4AES.pyv"\r
+\r
+/* jazz_wma_Domain_No_Copy.pya */\r
+#define LICENSE_INITIATOR_VALID_PR_FILE_4                      "http://playready.directtaps.net/pr/initiator.aspx?p=1&contentid=fXZukDZR4kKMOIbSE+MuPg==&type=license&content=http://131.107.149.211/pr/media/1207/jazz_wma_Domain_No_Copy.pya"\r
+\r
+/*\r
+ * Invalid License Initiators\r
+ */\r
+#define INVALID_LICENSE_INITIATOR_PR_FILE_1                    "http://playready.directtaps.net/prxx/initiatorxxxx.aspx?p=0&contentid=ZVXWl75xFUOdCY/tO8bLCA==&type=license&content=http://131.107.149.211/pr/media/1044/Jazz_Audio_OPLs0.pya"\r
+#define INVALID_JOIN_DOMAIN_INITIATOR_1                                "http://playready.directtaps.net/prxx/initiatorxxxx.aspx?p=0&type=JOIN"\r
+#define INVALID_LEAVE_DOMAIN_INITIATOR_1                       "http://playready.directtaps.net/prxx/initiatorxxxx.aspx?p=0&type=LEAVE"\r
+#define INVALID_METERING_INITIATOR_1                           "http://playready.directtaps.net/prxx/initiatorxxxx.aspx?p=0&contentid=ybubwBx/XUidiUX3zdMRTg==&type=metering&content=http://131.107.149.211/pr/media/1044/DomainTestVideo1.pyv"\r
+#define INVALID_LICENSE_INITIATOR_PR_FILE_2                    "http://playready.directtaps.net/pr/initiator.aspx?p=0&contentid=ZVXWl75xFUOdCY/tO8bLCA==&type=license&content=http://131.107.149.211/prxx/media/1044/Jazz_Audio_OPLs0xxxx.pya"\r
+\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif /* __DRM_CONTENTS_DEF_H__ */\r
diff --git a/TC/unit/tc_gen.sh b/TC/unit/tc_gen.sh
new file mode 100755 (executable)
index 0000000..54f482d
--- /dev/null
@@ -0,0 +1,28 @@
+#!/bin/sh
+
+TMPSTR=$0
+SCRIPT=${TMPSTR##*/}
+
+if [ $# -lt 2 ]; then
+       echo "Usage) $SCRIPT module_name api_name"
+       exit 1
+fi
+
+MODULE=$1
+API=$2
+TEMPLATE=utc_MODULE_API_func.c.in
+TESTCASE=utc_${MODULE}_${API}_func
+
+sed -e '
+       s^@API@^'"$API"'^g
+       s^@MODULE@^'"$MODULE"'^g
+       ' $TEMPLATE > $TESTCASE.c
+
+if [ ! -e "$TESTCASE.c" ]; then
+       echo "Failed"
+       exit 1
+fi
+echo "Testcase file is $TESTCASE.c"
+echo "Done"
+echo "please put \"$TESTCASE\" as Target in Makefile"
+echo "please put \"/unit/$TESTCASE\" in tslist"
diff --git a/TC/unit/tslist b/TC/unit/tslist
new file mode 100755 (executable)
index 0000000..e88f788
--- /dev/null
@@ -0,0 +1,9 @@
+/unit/utc_drmclient_drm_is_drm_file_func
+/unit/utc_drmclient_drm_process_request_func
+/unit/utc_drmclient_drm_get_file_type_func
+/unit/utc_drmclient_drm_get_license_status_func
+/unit/utc_drmclient_drm_get_content_info_func
+/unit/utc_drmclient_drm_get_file_info_func
+/unit/utc_drmclient_drm_get_constraint_info_func
+/unit/utc_drmclient_drm_is_action_allowed_func
+/unit/utc_drmclient_drm_get_data_func
diff --git a/TC/unit/utc_MODULE_API_func.c.in b/TC/unit/utc_MODULE_API_func.c.in
new file mode 100755 (executable)
index 0000000..5edf1b7
--- /dev/null
@@ -0,0 +1,67 @@
+#include <tet_api.h>
+#include "pkgname.h"
+
+static void startup(void);
+static void cleanup(void);
+
+void (*tet_startup)(void) = startup;
+void (*tet_cleanup)(void) = cleanup;
+
+static void utc_@MODULE@_@API@_func_01(void);
+static void utc_@MODULE@_@API@_func_02(void);
+
+enum {
+       POSITIVE_TC_IDX = 0x01,
+       NEGATIVE_TC_IDX,
+};
+
+struct tet_testlist tet_testlist[] = {
+       { utc_@MODULE@_@API@_func_01, POSITIVE_TC_IDX },
+       { utc_@MODULE@_@API@_func_02, NEGATIVE_TC_IDX },
+};
+
+static int pid;
+
+static void startup(void)
+{
+}
+
+static void cleanup(void)
+{
+}
+
+/**
+ * @brief Positive test case of @API@()
+ */
+static void utc_@MODULE@_@API@_func_01(void)
+{
+       int r = 0;
+       char buf[MAX_LOCAL_BUFSZ];
+       
+       r = @API@(...);
+
+       if (r<0) {
+               tet_infoline("@API@() failed in positive test case");
+               tet_result(TET_FAIL);
+               return;
+       }
+       tet_result(TET_PASS);
+}
+
+/**
+ * @brief Negative test case of ug_init @API@()
+ */
+static void utc_@MODULE@_@API@_func_02(void)
+{
+       int r = 0;
+       char buf[MAX_LOCAL_BUFSZ];
+
+       r = @API@(...);
+
+       if (r>=0) {
+               tet_infoline("@API@() failed in negative test case");
+               tet_result(TET_FAIL);
+               return;
+       }
+       tet_result(TET_PASS);
+}
diff --git a/TC/unit/utc_drmclient_drm_get_constraint_info_func.c b/TC/unit/utc_drmclient_drm_get_constraint_info_func.c
new file mode 100755 (executable)
index 0000000..de08d33
--- /dev/null
@@ -0,0 +1,1051 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_constraint_info_func.c\r
+ * @brief       TETware unit testing functions for drm_get_constraint_info.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_constraint_info_func_01(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_02(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_03(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_04(void);\r
+/* Disabled below test-cases due to network & other dependencies */\r
+#if 0\r
+static void utc_drmclient_drm_get_constraint_info_func_05(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_06(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_07(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_08(void);\r
+#endif\r
+static void utc_drmclient_drm_get_constraint_info_func_09(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_10(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_11(void);\r
+static void utc_drmclient_drm_get_constraint_info_func_12(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_constraint_info_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_04, POSITIVE_TC_IDX },\r
+       /* Disabled below test-cases due to network & other dependencies */\r
+#if 0\r
+       { utc_drmclient_drm_get_constraint_info_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_08, POSITIVE_TC_IDX },\r
+#endif\r
+       { utc_drmclient_drm_get_constraint_info_func_09, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_10, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_11, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_constraint_info_func_12, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_constraint_info:Test started");\r
+       tet_infoline("OMA DRM Content should be registered");\r
+       tet_infoline("RO must be installed to get valid constraint information");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_constraint_info:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_DISPLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_5);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_5);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_5);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_EXECUTE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_6);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_6);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_6);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_8);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_8);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_8);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/* Disabled below test-cases due to network & other dependencies */\r
+#if 0\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_1);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_2);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_3);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_3);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_3);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_DIVX_1);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               tet_printf("Unlimited:for permission=%d",perm_type);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               tet_printf("Accumulated Constraint is present");\r
+                               tet_printf("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               tet_printf("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               tet_printf("Count Constraint is present");\r
+                               tet_printf("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               tet_printf("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               tet_printf("DATETIME Constraint is present");\r
+                               tet_printf("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               tet_printf("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               tet_printf("INDIVIDUAL Constraint is present");\r
+                               tet_printf("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               tet_printf("INTERVAL Constraint is present");\r
+                               tet_printf("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               tet_printf("SYSTEM Constraint is present");\r
+                               tet_printf("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               tet_printf("TIMED-COUNT Constraint is present");\r
+                               tet_printf("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               tet_printf("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               tet_printf("timed_count_timer=%d",\r
+                                                                               constraint_info.timed_count_timer);\r
+                       }\r
+\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+#endif\r
+/**\r
+ * @brief Negative test case of drm_get_constraint_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_constraint_info_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+\r
+       ret = drm_get_constraint_info(FILE_PATH_INVALID_FILE_NULL,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_constraint_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_constraint_info_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_constraint_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_constraint_info_func_11(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_constraint_info()\r
+ */\r
+static void utc_drmclient_drm_get_constraint_info_func_12(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_constraint_info_s constraint_info;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_DISPLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_7);\r
+\r
+       ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+       if(DRM_RETURN_SUCCESS != ret ){\r
+                       /* pbarimage_timedcount.dr RO is in wrong format */\r
+                       /* Thus it will fail */\r
+                       tet_infoline("drm_get_constraint_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_7);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_constraint_info");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_7);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_get_content_info_func.c b/TC/unit/utc_drmclient_drm_get_content_info_func.c
new file mode 100755 (executable)
index 0000000..0f01cd7
--- /dev/null
@@ -0,0 +1,281 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_content_info_func.c\r
+ * @brief       TETware unit testing functions for drm_get_content_info.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_content_info_func_01(void);\r
+static void utc_drmclient_drm_get_content_info_func_02(void);\r
+static void utc_drmclient_drm_get_content_info_func_03(void);\r
+static void utc_drmclient_drm_get_content_info_func_04(void);\r
+static void utc_drmclient_drm_get_content_info_func_05(void);\r
+static void utc_drmclient_drm_get_content_info_func_06(void);\r
+static void utc_drmclient_drm_get_content_info_func_07(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_content_info_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_05, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_06, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_content_info_func_07, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_content_info:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_content_info:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_content_info()\r
+ */\r
+static void utc_drmclient_drm_get_content_info_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_content_info(file_path,&content_info);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if('\0' != content_info.author[0]) tet_printf("author=%s",content_info.author);\r
+                       if('\0' != content_info.copyright[0]) tet_printf("copyright=%s",content_info.copyright);\r
+                       if('\0' != content_info.description[0]) tet_printf("description=%s",content_info.description);\r
+                       if('\0' != content_info.icon_uri[0]) tet_printf("icon_uri=%s",content_info.icon_uri);\r
+                       if('\0' != content_info.info_url[0]) tet_printf("info_url=%s",content_info.info_url);\r
+                       if('\0' != content_info.content_url[0]) tet_printf("content_url=%s",content_info.content_url);\r
+                       if('\0' != content_info.rights_url[0]) tet_printf("rights_url=%s",content_info.rights_url);\r
+                       if('\0' != content_info.title[0]) tet_printf("title=%s",content_info.title);\r
+                       if('\0' != content_info.mime_type[0]) tet_printf("mime_type=%s",content_info.mime_type);\r
+                       if('\0' != content_info.content_id[0]) tet_printf("content_id=%s",content_info.content_id);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_content_info()\r
+ */\r
+static void utc_drmclient_drm_get_content_info_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_content_info(file_path,&content_info);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if('\0' != content_info.author[0]) tet_printf("author=%s",content_info.author);\r
+                       if('\0' != content_info.copyright[0]) tet_printf("copyright=%s",content_info.copyright);\r
+                       if('\0' != content_info.description[0]) tet_printf("description=%s",content_info.description);\r
+                       if('\0' != content_info.icon_uri[0]) tet_printf("icon_uri=%s",content_info.icon_uri);\r
+                       if('\0' != content_info.info_url[0]) tet_printf("info_url=%s",content_info.info_url);\r
+                       if('\0' != content_info.content_url[0]) tet_printf("content_url=%s",content_info.content_url);\r
+                       if('\0' != content_info.rights_url[0]) tet_printf("rights_url=%s",content_info.rights_url);\r
+                       if('\0' != content_info.title[0]) tet_printf("title=%s",content_info.title);\r
+                       if('\0' != content_info.mime_type[0]) tet_printf("mime_type=%s",content_info.mime_type);\r
+                       if('\0' != content_info.content_id[0]) tet_printf("content_id=%s",content_info.content_id);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_content_info()\r
+ */\r
+static void utc_drmclient_drm_get_content_info_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_content_info(file_path,&content_info);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if('\0' != content_info.author[0]) tet_printf("author=%s",content_info.author);\r
+                       if('\0' != content_info.copyright[0]) tet_printf("copyright=%s",content_info.copyright);\r
+                       if('\0' != content_info.description[0]) tet_printf("description=%s",content_info.description);\r
+                       if('\0' != content_info.icon_uri[0]) tet_printf("icon_uri=%s",content_info.icon_uri);\r
+                       if('\0' != content_info.info_url[0]) tet_printf("info_url=%s",content_info.info_url);\r
+                       if('\0' != content_info.content_url[0]) tet_printf("content_url=%s",content_info.content_url);\r
+                       if('\0' != content_info.rights_url[0]) tet_printf("rights_url=%s",content_info.rights_url);\r
+                       if('\0' != content_info.title[0]) tet_printf("title=%s",content_info.title);\r
+                       if('\0' != content_info.mime_type[0]) tet_printf("mime_type=%s",content_info.mime_type);\r
+                       if('\0' != content_info.content_id[0]) tet_printf("content_id=%s",content_info.content_id);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_content_info()\r
+ */\r
+static void utc_drmclient_drm_get_content_info_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_get_content_info(file_path,&content_info);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       if('\0' != content_info.author[0]) tet_printf("author=%s",content_info.author);\r
+                       if('\0' != content_info.copyright[0]) tet_printf("copyright=%s",content_info.copyright);\r
+                       if('\0' != content_info.description[0]) tet_printf("description=%s",content_info.description);\r
+                       if('\0' != content_info.icon_uri[0]) tet_printf("icon_uri=%s",content_info.icon_uri);\r
+                       if('\0' != content_info.info_url[0]) tet_printf("info_url=%s",content_info.info_url);\r
+                       if('\0' != content_info.content_url[0]) tet_printf("content_url=%s",content_info.content_url);\r
+                       if('\0' != content_info.rights_url[0]) tet_printf("rights_url=%s",content_info.rights_url);\r
+                       if('\0' != content_info.title[0]) tet_printf("title=%s",content_info.title);\r
+                       if('\0' != content_info.mime_type[0]) tet_printf("mime_type=%s",content_info.mime_type);\r
+                       if('\0' != content_info.content_id[0]) tet_printf("content_id=%s",content_info.content_id);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_content_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_content_info_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+\r
+       ret = drm_get_content_info(FILE_PATH_INVALID_FILE_NULL,&content_info);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_content_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_content_info_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_content_info_s content_info;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       ret = drm_get_content_info(file_path,&content_info);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_content_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_content_info_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+\r
+       ret = drm_get_content_info(file_path,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_content_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_content_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret =%d",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_get_data_func.c b/TC/unit/utc_drmclient_drm_get_data_func.c
new file mode 100755 (executable)
index 0000000..687e35a
--- /dev/null
@@ -0,0 +1,445 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_data_func.c\r
+ * @brief       TETware unit testing functions for drm_get_data.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_data_func_01(void);\r
+static void utc_drmclient_drm_get_data_func_02(void);\r
+static void utc_drmclient_drm_get_data_func_03(void);\r
+static void utc_drmclient_drm_get_data_func_04(void);\r
+static void utc_drmclient_drm_get_data_func_05(void);\r
+static void utc_drmclient_drm_get_data_func_06(void);\r
+static void utc_drmclient_drm_get_data_func_07(void);\r
+static void utc_drmclient_drm_get_data_func_08(void);\r
+static void utc_drmclient_drm_get_data_func_09(void);\r
+static void utc_drmclient_drm_get_data_func_10(void);\r
+static void utc_drmclient_drm_get_data_func_11(void);\r
+static void utc_drmclient_drm_get_data_func_12(void);\r
+static void utc_drmclient_drm_get_data_func_13(void);\r
+static void utc_drmclient_drm_get_data_func_14(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_data_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_02, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_03, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_04, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_06, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_08, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_09, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_10, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_11, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_12, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_13, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_data_func_14, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_data:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_data:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_01(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_SECURE_CLOCK;\r
+       drm_secure_clock_data_s secure_clock_info={0};\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_SECURE_CLOCK");\r
+       ret = drm_get_data(data_type,NULL,(void*)&secure_clock_info);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret\r
+                       && 1 == secure_clock_info.is_secure_clock_set){\r
+               tet_printf("Secure Clock is SET:ret=0x%x",ret);\r
+               tet_printf("Secure Time:"\r
+                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                               secure_clock_info.secure_clock.tm_year,\r
+                               secure_clock_info.secure_clock.tm_mon,\r
+                               secure_clock_info.secure_clock.tm_mday,\r
+                               secure_clock_info.secure_clock.tm_hour,\r
+                               secure_clock_info.secure_clock.tm_min,\r
+                               secure_clock_info.secure_clock.tm_sec);\r
+               tet_result(TET_PASS);\r
+       }else if(DRM_RETURN_SUCCESS == ret\r
+                       && 0 == secure_clock_info.is_secure_clock_set){\r
+               tet_printf("Secure Clock is NOT SET:ret=0x%x",ret);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Secure Clock Retrieval FAILED:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_02(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_NONE;\r
+       drm_secure_clock_data_s secure_clock_info={0};\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_SECURE_CLOCK");\r
+       ret = drm_get_data(data_type,NULL,(void*)&secure_clock_info);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret\r
+                       && 1 == secure_clock_info.is_secure_clock_set){\r
+               tet_printf("Secure Clock is SET:ret=0x%x",ret);\r
+               tet_printf("Secure Time:"\r
+                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                               secure_clock_info.secure_clock.tm_year,\r
+                               secure_clock_info.secure_clock.tm_mon,\r
+                               secure_clock_info.secure_clock.tm_mday,\r
+                               secure_clock_info.secure_clock.tm_hour,\r
+                               secure_clock_info.secure_clock.tm_min,\r
+                               secure_clock_info.secure_clock.tm_sec);\r
+               tet_result(TET_FAIL);\r
+       }else if(DRM_RETURN_SUCCESS == ret\r
+                       && 0 == secure_clock_info.is_secure_clock_set){\r
+               tet_printf("Secure Clock is NOT SET:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Passing Invalid data_type=%d",data_type);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_03(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_SECURE_CLOCK;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_SECURE_CLOCK");\r
+       ret = drm_get_data(data_type,NULL,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Returned Success:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Passing Invalid output parameter");\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_04(void)\r
+{\r
+       drm_data_type_e data_type=DRM_DATA_TYPE_NONE;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_SECURE_CLOCK");\r
+       ret = drm_get_data(data_type,NULL,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Returned Success:ret=0x%x data_type=%d",ret,data_type);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Passing Invalid data_type=%d",data_type);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_05(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       int transtrk_flag = 0;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG");\r
+       ret = drm_get_data(data_type, NULL, (void*)&transtrk_flag);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("transtrk_flag = %d", transtrk_flag);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("Get Transaction Tracking Flag failed!!, "\r
+                               "ret = 0x%x", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_06(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf ("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG");\r
+       ret = drm_get_data(data_type, NULL,NULL);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Returned Success");\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("Invalid output:ret = 0x%x", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_07(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_ID");\r
+       drm_transaction_id_info_s transaction_id_info;\r
+       memset(&transaction_id_info,0x0,sizeof(drm_transaction_id_info_s));\r
+\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_data(data_type,(void*)file_path,(void*)&transaction_id_info);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Transaction ID Length =%d file_path=%s",\r
+                               transaction_id_info.tr_id_len,file_path);\r
+               if(0 != transaction_id_info.tr_id_len){\r
+                       tet_printf("Transaction ID  =%s",\r
+                                       transaction_id_info.tr_id);\r
+               }\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Transaction ID Retrieval FAILED:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_08(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_ID");\r
+       drm_transaction_id_info_s transaction_id_info;\r
+       memset(&transaction_id_info,0x0,sizeof(drm_transaction_id_info_s));\r
+\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_EMPTY);\r
+\r
+       ret = drm_get_data(data_type,(void*)file_path,(void*)&transaction_id_info);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Transaction ID Length =%d file_path=%s",\r
+                               transaction_id_info.tr_id_len,file_path);\r
+               if(0 != transaction_id_info.tr_id_len){\r
+                       tet_printf("Transaction ID  =%s",\r
+                                       transaction_id_info.tr_id);\r
+               }\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid Input:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_09(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_ID");\r
+\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_data(data_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Returned Success:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid Output:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_10(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_TRANSACTION_TRACKING_ID");\r
+       drm_transaction_id_info_s transaction_id_info;\r
+       memset(&transaction_id_info,0x0,sizeof(drm_transaction_id_info_s));\r
+\r
+       ret = drm_get_data(data_type,NULL,(void*)&transaction_id_info);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Returned Success:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid Input:ret=0x%x",ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_11(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_DIVX_REGISTRATION_CODE;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_DIVX_REGISTRATION_CODE");\r
+\r
+       drm_code_info_s reg_code_info;\r
+       memset(&reg_code_info,0x0,sizeof(drm_code_info_s));\r
+\r
+       ret = drm_get_data(data_type, NULL, (void*) &reg_code_info);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Code Length = %d", reg_code_info.code_len);\r
+               if (0 != reg_code_info.code_len) {\r
+                       tet_printf("Code = %s", reg_code_info.code);\r
+               }\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("Divx Registration Code Retrieval failed!!");\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_12(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_DIVX_REGISTRATION_CODE;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_DIVX_REGISTRATION_CODE");\r
+\r
+       ret = drm_get_data(data_type, NULL,NULL);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Success:ret=0x%x", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("Invalid output:ret=0x%x", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_13(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE");\r
+\r
+       drm_code_info_s dereg_code_info;\r
+       memset(&dereg_code_info,0x0,sizeof(drm_code_info_s));\r
+       ret = drm_get_data(data_type, NULL, (void*) &dereg_code_info);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Code Length = %d", dereg_code_info.code_len);\r
+               if (0 != dereg_code_info.code_len) {\r
+                       tet_printf("Code = %s", dereg_code_info.code);\r
+               }\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("Divx Deregistration Code Retrieval failed!!");\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_data()\r
+ */\r
+static void utc_drmclient_drm_get_data_func_14(void)\r
+{\r
+       drm_data_type_e data_type = DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE;\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+\r
+       tet_printf("Testing:DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE");\r
+\r
+       ret = drm_get_data(data_type, NULL,NULL);\r
+       tet_printf("ret=0x%x", ret);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Success:ret=0x%x", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("Invalid output:ret=0x%x", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_get_file_info_func.c b/TC/unit/utc_drmclient_drm_get_file_info_func.c
new file mode 100755 (executable)
index 0000000..1b00e81
--- /dev/null
@@ -0,0 +1,354 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_file_info_func.c\r
+ * @brief       TETware unit testing functions for drm_get_file_info.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_file_info_func_01(void);\r
+static void utc_drmclient_drm_get_file_info_func_02(void);\r
+static void utc_drmclient_drm_get_file_info_func_03(void);\r
+static void utc_drmclient_drm_get_file_info_func_04(void);\r
+static void utc_drmclient_drm_get_file_info_func_05(void);\r
+static void utc_drmclient_drm_get_file_info_func_06(void);\r
+static void utc_drmclient_drm_get_file_info_func_07(void);\r
+static void utc_drmclient_drm_get_file_info_func_08(void);\r
+static void utc_drmclient_drm_get_file_info_func_09(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_file_info_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_07, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_08, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_info_func_09, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_file_info:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_file_info:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_info()\r
+ */\r
+static void utc_drmclient_drm_get_file_info_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               tet_printf("method=%d",fileInfo.oma_info.method);\r
+                               tet_printf("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               tet_printf("PlayReady Envelope File");\r
+                               tet_printf("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               tet_printf("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               tet_printf("Other DRM File=%s",file_path);\r
+                       }\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path=%s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_info_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+\r
+       ret = drm_get_file_info(FILE_PATH_INVALID_FILE_NULL,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_info_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_info_s fileInfo;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_EMPTY);\r
+\r
+       ret = drm_get_file_info(file_path,&fileInfo);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_info()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_info_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_get_file_info(file_path,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_info PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_info FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_get_file_type_func.c b/TC/unit/utc_drmclient_drm_get_file_type_func.c
new file mode 100755 (executable)
index 0000000..0af3a9d
--- /dev/null
@@ -0,0 +1,534 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_file_type_func.c\r
+ * @brief       TETware unit testing functions for drm_get_file_type.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_file_type_func_01(void);\r
+static void utc_drmclient_drm_get_file_type_func_02(void);\r
+static void utc_drmclient_drm_get_file_type_func_03(void);\r
+static void utc_drmclient_drm_get_file_type_func_04(void);\r
+static void utc_drmclient_drm_get_file_type_func_05(void);\r
+static void utc_drmclient_drm_get_file_type_func_06(void);\r
+static void utc_drmclient_drm_get_file_type_func_07(void);\r
+static void utc_drmclient_drm_get_file_type_func_08(void);\r
+static void utc_drmclient_drm_get_file_type_func_09(void);\r
+static void utc_drmclient_drm_get_file_type_func_10(void);\r
+static void utc_drmclient_drm_get_file_type_func_11(void);\r
+static void utc_drmclient_drm_get_file_type_func_12(void);\r
+static void utc_drmclient_drm_get_file_type_func_13(void);\r
+static void utc_drmclient_drm_get_file_type_func_14(void);\r
+static void utc_drmclient_drm_get_file_type_func_15(void);\r
+static void utc_drmclient_drm_get_file_type_func_16(void);\r
+static void utc_drmclient_drm_get_file_type_func_17(void);\r
+static void utc_drmclient_drm_get_file_type_func_18(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_file_type_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_08, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_09, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_10, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_11, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_12, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_13, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_14, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_15, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_16, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_17, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_file_type_func_18, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_file_type:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_file_type:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_OMA_V1 == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_OMA_V2 == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_OMA_V2 == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_OMA_V2 == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_PLAYREADY == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_2);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_PLAYREADY == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_PLAYREADY_ENVELOPE == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_PLAYREADY_ENVELOPE == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_file_type()\r
+ */\r
+static void utc_drmclient_drm_get_file_type_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_DIVX_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_DIVX == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+\r
+       ret = drm_get_file_type(FILE_PATH_INVALID_FILE_NULL,&file_type);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_11(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_12(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_13(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_14(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_15(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_16(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_2);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_17(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_get_file_type(file_path,&file_type);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TYPE_UNDEFINED == file_type){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_file_type()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_file_type_func_18(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_get_file_type(file_path,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_file_type PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_file_type FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x file_type=%d",ret,file_type);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_get_license_status_func.c b/TC/unit/utc_drmclient_drm_get_license_status_func.c
new file mode 100755 (executable)
index 0000000..045ef7f
--- /dev/null
@@ -0,0 +1,333 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_get_license_status_func.c\r
+ * @brief       TETware unit testing functions for drm_get_license_status.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_get_license_status_func_01(void);\r
+static void utc_drmclient_drm_get_license_status_func_02(void);\r
+static void utc_drmclient_drm_get_license_status_func_03(void);\r
+static void utc_drmclient_drm_get_license_status_func_04(void);\r
+static void utc_drmclient_drm_get_license_status_func_05(void);\r
+static void utc_drmclient_drm_get_license_status_func_06(void);\r
+static void utc_drmclient_drm_get_license_status_func_07(void);\r
+static void utc_drmclient_drm_get_license_status_func_08(void);\r
+static void utc_drmclient_drm_get_license_status_func_09(void);\r
+static void utc_drmclient_drm_get_license_status_func_10(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_get_license_status_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_07, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_08, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_09, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_get_license_status_func_10, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_get_license_status:Test started");\r
+       tet_infoline("OMA DRM Content should be registered");\r
+       tet_infoline("RO must be installed to get valid License status");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_get_license_status:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_DISPLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_1);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_get_license_status()\r
+ */\r
+static void utc_drmclient_drm_get_license_status_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_PLAY;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_2);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS == ret ){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_license_status()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_license_status_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_NONE;\r
+\r
+       ret = drm_get_license_status(FILE_PATH_INVALID_FILE_NULL,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_license_status()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_license_status_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_NONE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_license_status()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_license_status_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_NONE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_get_license_status()\r
+ */\r
+\r
+static void utc_drmclient_drm_get_license_status_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+       drm_permission_type_e perm_type = DRM_PERMISSION_TYPE_NONE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_2);\r
+\r
+       ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_get_license_status PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_get_license_status FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x license_status=%d",ret,license_status);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_is_action_allowed_func.c b/TC/unit/utc_drmclient_drm_is_action_allowed_func.c
new file mode 100755 (executable)
index 0000000..e5d26c5
--- /dev/null
@@ -0,0 +1,358 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_is_action_allowed_func.c\r
+ * @brief       TETware unit testing functions for drm_is_action_allowed.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_is_action_allowed_func_01(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_02(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_03(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_04(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_05(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_06(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_07(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_08(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_09(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_10(void);\r
+static void utc_drmclient_drm_is_action_allowed_func_11(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_is_action_allowed_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_08, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_09, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_10, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_action_allowed_func_11, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_is_action_allowed:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_is_action_allowed:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_9);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_9);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_9);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_HAS_VALID_SETAS_STATUS;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       action_data.data = (int)DRM_SETAS_RINGTONE;\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_allowed){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_HAS_VALID_SETAS_STATUS;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_8);\r
+       action_data.data= (int)DRM_SETAS_RINGTONE;\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_8);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_8);\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_DEVICE_ACTIVATED;\r
+\r
+       ret = drm_is_action_allowed(action,NULL,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_VALID_SECURE_CLOCK;\r
+\r
+       ret = drm_is_action_allowed(action,NULL,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_action_allowed()\r
+ */\r
+static void utc_drmclient_drm_is_action_allowed_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+\r
+       ret = drm_is_action_allowed(action,NULL,&is_allowed);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("ret = 0x%x is_allowed=%d",ret,is_allowed);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_action_allowed()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_action_allowed_func_11(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;\r
+       drm_action_allowed_data_s action_data;\r
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+       snprintf(action_data.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_is_action_allowed(action,&action_data,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_is_action_allowed PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_action_allowed FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_is_drm_file_func.c b/TC/unit/utc_drmclient_drm_is_drm_file_func.c
new file mode 100755 (executable)
index 0000000..78b7c91
--- /dev/null
@@ -0,0 +1,561 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_is_drm_file_func.c\r
+ * @brief       TETware unit testing functions for drm_is_drm_file.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <tet_api.h>\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_01(void);\r
+static void utc_drmclient_drm_is_drm_file_func_02(void);\r
+static void utc_drmclient_drm_is_drm_file_func_03(void);\r
+static void utc_drmclient_drm_is_drm_file_func_04(void);\r
+static void utc_drmclient_drm_is_drm_file_func_05(void);\r
+static void utc_drmclient_drm_is_drm_file_func_06(void);\r
+static void utc_drmclient_drm_is_drm_file_func_07(void);\r
+static void utc_drmclient_drm_is_drm_file_func_08(void);\r
+static void utc_drmclient_drm_is_drm_file_func_09(void);\r
+static void utc_drmclient_drm_is_drm_file_func_10(void);\r
+static void utc_drmclient_drm_is_drm_file_func_11(void);\r
+static void utc_drmclient_drm_is_drm_file_func_12(void);\r
+static void utc_drmclient_drm_is_drm_file_func_13(void);\r
+static void utc_drmclient_drm_is_drm_file_func_14(void);\r
+static void utc_drmclient_drm_is_drm_file_func_15(void);\r
+static void utc_drmclient_drm_is_drm_file_func_16(void);\r
+static void utc_drmclient_drm_is_drm_file_func_17(void);\r
+static void utc_drmclient_drm_is_drm_file_func_18(void);\r
+static void utc_drmclient_drm_is_drm_file_func_19(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_is_drm_file_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_03, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_04, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_05, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_08, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_09, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_10, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_11, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_12, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_13, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_14, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_15, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_16, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_17, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_18, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_is_drm_file_func_19, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_is_drm_file:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_is_drm_file:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_02(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_2);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_3);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_4);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_OMA_4);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_2);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_07(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_PR_ENV_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_is_drm_file()\r
+ */\r
+static void utc_drmclient_drm_is_drm_file_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_DIVX_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_VALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+\r
+       ret = drm_is_drm_file(FILE_PATH_INVALID_FILE_NULL,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_NULL);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_11(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_EMPTY);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_12(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_13(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_2);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_14(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_OMA_3);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_OMA_3);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_15(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_16(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_2);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_2);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_17(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_PR_ENV_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_18(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+\r
+       ret = drm_is_drm_file(file_path,&is_drm_file);\r
+       if(DRM_RETURN_SUCCESS == ret && DRM_FALSE == is_drm_file){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_is_drm_file()\r
+ */\r
+\r
+static void utc_drmclient_drm_is_drm_file_func_19(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR ;\r
+       drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+\r
+       ret = drm_is_drm_file(file_path,INVALID_POINTER_OBJECT);\r
+       if(DRM_RETURN_SUCCESS != ret){\r
+                       tet_infoline("drm_is_drm_file PASS!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_PASS);\r
+       }else{\r
+                       tet_infoline("drm_is_drm_file FAIL!!!");\r
+                       tet_printf ("file_path checked is %s",FILE_PATH_INVALID_FILE_DIVX_1);\r
+                       tet_printf ("ret = 0x%x is_drm_file=%d",ret,is_drm_file);\r
+                       tet_result(TET_FAIL);\r
+       }\r
+}\r
diff --git a/TC/unit/utc_drmclient_drm_process_request_func.c b/TC/unit/utc_drmclient_drm_process_request_func.c
new file mode 100755 (executable)
index 0000000..6c9afe5
--- /dev/null
@@ -0,0 +1,1287 @@
+/*\r
+ * drm-client TCs\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               utc_drmclient_drm_process_request_func.c\r
+ * @brief       TETware unit testing functions for drm_process_request.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: Initial draft\r
+ */\r
+\r
+#include <sys/types.h>\r
+#include <sys/stat.h>\r
+\r
+#include <tet_api.h>\r
+\r
+#include "drmcontentsdef.h"\r
+\r
+static void startup(void);\r
+static void cleanup(void);\r
+\r
+void (*tet_startup)(void) = startup;\r
+void (*tet_cleanup)(void) = cleanup;\r
+\r
+static void utc_drmclient_drm_process_request_func_01(void);\r
+static void utc_drmclient_drm_process_request_func_02(void);\r
+static void utc_drmclient_drm_process_request_func_03(void);\r
+static void utc_drmclient_drm_process_request_func_04(void);\r
+static void utc_drmclient_drm_process_request_func_05(void);\r
+static void utc_drmclient_drm_process_request_func_06(void);\r
+static void utc_drmclient_drm_process_request_func_07(void);\r
+static void utc_drmclient_drm_process_request_func_08(void);\r
+static void utc_drmclient_drm_process_request_func_09(void);\r
+static void utc_drmclient_drm_process_request_func_10(void);\r
+static void utc_drmclient_drm_process_request_func_11(void);\r
+static void utc_drmclient_drm_process_request_func_12(void);\r
+static void utc_drmclient_drm_process_request_func_13(void);\r
+static void utc_drmclient_drm_process_request_func_14(void);\r
+static void utc_drmclient_drm_process_request_func_15(void);\r
+static void utc_drmclient_drm_process_request_func_16(void);\r
+static void utc_drmclient_drm_process_request_func_17(void);\r
+static void utc_drmclient_drm_process_request_func_18(void);\r
+static void utc_drmclient_drm_process_request_func_19(void);\r
+static void utc_drmclient_drm_process_request_func_20(void);\r
+static void utc_drmclient_drm_process_request_func_21(void);\r
+static void utc_drmclient_drm_process_request_func_22(void);\r
+static void utc_drmclient_drm_process_request_func_23(void);\r
+static void utc_drmclient_drm_process_request_func_24(void);\r
+static void utc_drmclient_drm_process_request_func_25(void);\r
+static void utc_drmclient_drm_process_request_func_26(void);\r
+static void utc_drmclient_drm_process_request_func_27(void);\r
+static void utc_drmclient_drm_process_request_func_28(void);\r
+static void utc_drmclient_drm_process_request_func_29(void);\r
+static void utc_drmclient_drm_process_request_func_30(void);\r
+static void utc_drmclient_drm_process_request_func_31(void);\r
+static void utc_drmclient_drm_process_request_func_32(void);\r
+static void utc_drmclient_drm_process_request_func_33(void);\r
+static void utc_drmclient_drm_process_request_func_34(void);\r
+static void utc_drmclient_drm_process_request_func_35(void);\r
+static void utc_drmclient_drm_process_request_func_36(void);\r
+static void utc_drmclient_drm_process_request_func_37(void);\r
+static void utc_drmclient_drm_process_request_func_38(void);\r
+static void utc_drmclient_drm_process_request_func_39(void);\r
+\r
+enum {\r
+       POSITIVE_TC_IDX = 0x01,\r
+       NEGATIVE_TC_IDX,\r
+};\r
+\r
+struct tet_testlist tet_testlist[] = {\r
+       { utc_drmclient_drm_process_request_func_01, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_02, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_03, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_04, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_05, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_06, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_07, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_08, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_09, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_10, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_11, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_12, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_13, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_14, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_15, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_16, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_17, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_18, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_19, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_20, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_21, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_22, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_23, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_24, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_25, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_26, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_27, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_28, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_29, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_30, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_31, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_32, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_33, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_34, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_35, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_36, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_37, NEGATIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_38, POSITIVE_TC_IDX },\r
+       { utc_drmclient_drm_process_request_func_39, NEGATIVE_TC_IDX },\r
+       { NULL, 0 }\r
+};\r
+\r
+static void startup(void)\r
+{\r
+       tet_infoline("drm_process_request:Test started");\r
+}\r
+\r
+static void cleanup(void)\r
+{\r
+       tet_infoline("drm_process_request:Test completed");\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_01(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_FILE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_REGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%s",\r
+                               file_path);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Register FAILED:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_02(void)\r
+{\r
+       /** This is duplication of\r
+        * test-case utc_drmclient_drm_process_request_func_01\r
+        * This test-case is added to ensure proper behavior if same content is\r
+        * registered 2 times.\r
+        */\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_FILE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_REGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%s",\r
+                               file_path);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Register FAILED:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_03(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_NONE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_NONE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%s",\r
+                               file_path);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid request_type=%d ret=0x%x file_path=%s",\r
+                               request_type,ret,file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_04(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_FILE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%s",\r
+                               file_path);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid file_path: ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_05(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_FILE;\r
+       char *file_path = NULL;\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%p",\r
+                               file_path);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid file_path: ret=0x%x file_path=%p",\r
+                               ret,file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_06(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE;\r
+       drm_unregister_info_s unregister_info;\r
+       memset(&unregister_info,0x0,sizeof(drm_unregister_info_s));\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_FILE");\r
+       snprintf(unregister_info.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       unregister_info.remove_license = 1;\r
+\r
+       ret = drm_process_request(request_type,(void*)&unregister_info,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Un-register success:file_path=%s",\r
+                               unregister_info.file_path);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Un-register FAILED:ret=0x%x "\r
+                               "file_path=%s",ret,unregister_info.file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_07(void)\r
+{\r
+       /** This is duplication of\r
+        * test-case utc_drmclient_drm_process_request_func_06\r
+        * This test-case is added to ensure proper behavior if same content is\r
+        * unregistered 2 times.\r
+        */\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE;\r
+       drm_unregister_info_s unregister_info;\r
+       memset(&unregister_info,0x0,sizeof(drm_unregister_info_s));\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_FILE");\r
+       snprintf(unregister_info.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       unregister_info.remove_license = 0;\r
+\r
+       ret = drm_process_request(request_type,(void*)&unregister_info,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Un-register success:file_path=%s",\r
+                               unregister_info.file_path);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Un-register FAILED:ret=0x%x "\r
+                               "file_path=%s",ret,unregister_info.file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_08(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE;\r
+       drm_unregister_info_s unregister_info;\r
+       memset(&unregister_info,0x0,sizeof(drm_unregister_info_s));\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_FILE");\r
+       snprintf(unregister_info.file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_INVALID_FILE_EMPTY);\r
+       unregister_info.remove_license = 0;\r
+\r
+       ret = drm_process_request(request_type,(void*)&unregister_info,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Un-register success:file_path=%s",\r
+                               unregister_info.file_path);\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid file path:ret=0x%x "\r
+                               "file_path=%s",ret,unregister_info.file_path);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_09(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE;\r
+\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Un-register success");\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid input:ret=0x%x",ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_10(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_LICENSE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_LICENSE");\r
+\r
+       drm_register_lic_info_s lic_req_info;\r
+       drm_register_lic_resp_s lic_resp_info;\r
+\r
+       memset(&lic_req_info,0x0,sizeof(drm_register_lic_info_s));\r
+       memset(&lic_resp_info,0x0,sizeof(drm_register_lic_resp_s));\r
+\r
+       struct stat stat_buf = { 0 };\r
+       FILE *fp = NULL;\r
+       unsigned int read_len=0;\r
+       char *tempPath = NULL;\r
+\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_RO_FILE_OMA_1);\r
+\r
+       if (0 == stat(file_path, &stat_buf)) {\r
+               lic_req_info.lic_data_len = stat_buf.st_size;\r
+               tet_printf("file_path=%s file_size=%u",file_path,\r
+                               lic_req_info.lic_data_len);\r
+       } else {\r
+               tet_printf("stat failed:error=%s file_path=%s",\r
+                               strerror(errno),file_path);\r
+               tet_result(TET_FAIL);\r
+               return;\r
+       }\r
+\r
+       fp = fopen(file_path,"r");\r
+       if(NULL == fp){\r
+               tet_printf("fopen failed:error=%s file_path=%s",\r
+                               strerror(errno),file_path);\r
+               tet_result(TET_FAIL);\r
+               return;\r
+       }\r
+\r
+       memset(lic_req_info.lic_data,0x0,sizeof(lic_req_info.lic_data));\r
+       read_len = fread(lic_req_info.lic_data,1,lic_req_info.lic_data_len,fp);\r
+       tet_printf("read_len=%u lic_req_info.lic_data_len=%u",\r
+                       read_len,lic_req_info.lic_data_len);\r
+\r
+       fclose(fp);\r
+\r
+       tempPath = strrchr((char *)file_path, '.');\r
+       if(strncmp(tempPath, ".dr", 2) == 0\r
+               || strncmp(tempPath, ".drc", 3) == 0){\r
+               tet_printf("DRM v1 License file");\r
+\r
+               lic_req_info.lic_version = DRM_OMA_DRMV1_RIGHTS;\r
+               lic_req_info.roap_init_src = DRM_ROAP_INIT_FROM_UNKNOWN;\r
+               lic_req_info.operation_callback.callback = NULL;\r
+\r
+               ret = drm_process_request(request_type,(void*)&lic_req_info,\r
+                               (void*)&lic_resp_info);\r
+               tet_printf("ret=0x%x",ret);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_printf("Register License success");\r
+                       tet_printf("CID=%s",lic_resp_info.cid);\r
+                       tet_result(TET_PASS);\r
+               }else{\r
+                       tet_printf("Register License FAILED:"\r
+                                       "ret=0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+               }\r
+       }else{\r
+               tet_printf("Not a License file:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_11(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_LICENSE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_LICENSE");\r
+\r
+       drm_register_lic_info_s lic_req_info;\r
+       drm_register_lic_resp_s lic_resp_info;\r
+\r
+       memset(&lic_req_info,0x0,sizeof(drm_register_lic_info_s));\r
+       memset(&lic_resp_info,0x0,sizeof(drm_register_lic_resp_s));\r
+\r
+       struct stat stat_buf = { 0 };\r
+       FILE *fp = NULL;\r
+       unsigned int read_len=0;\r
+       char *tempPath = NULL;\r
+\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_RO_FILE_OMA_2);\r
+\r
+       if (0 == stat(file_path, &stat_buf)) {\r
+               lic_req_info.lic_data_len = stat_buf.st_size;\r
+               tet_printf("file_path=%s file_size=%u",file_path,\r
+                               lic_req_info.lic_data_len);\r
+       } else {\r
+               tet_printf("stat failed:error=%s file_path=%s",\r
+                               strerror(errno),file_path);\r
+               tet_result(TET_FAIL);\r
+               return;\r
+       }\r
+\r
+       fp = fopen(file_path,"r");\r
+       if(NULL == fp){\r
+               tet_printf("fopen failed:error=%s file_path=%s",\r
+                               strerror(errno),file_path);\r
+               tet_result(TET_FAIL);\r
+               return;\r
+       }\r
+\r
+       memset(lic_req_info.lic_data,0x0,sizeof(lic_req_info.lic_data));\r
+       read_len = fread(lic_req_info.lic_data,1,lic_req_info.lic_data_len,fp);\r
+       tet_printf("read_len=%u lic_req_info.lic_data_len=%u",\r
+                       read_len,lic_req_info.lic_data_len);\r
+\r
+       fclose(fp);\r
+\r
+       tempPath = strrchr((char *)file_path, '.');\r
+       if(strncmp(tempPath, ".dr", 2) == 0\r
+               || strncmp(tempPath, ".drc", 3) == 0){\r
+               tet_printf("DRM v1 License file");\r
+\r
+               lic_req_info.lic_version = DRM_OMA_DRMV1_RIGHTS;\r
+               lic_req_info.roap_init_src = DRM_ROAP_INIT_FROM_UNKNOWN;\r
+               lic_req_info.operation_callback.callback = NULL;\r
+\r
+               ret = drm_process_request(request_type,(void*)&lic_req_info,\r
+                               (void*)&lic_resp_info);\r
+               tet_printf("ret=0x%x",ret);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       tet_printf("Register License success");\r
+                       tet_printf("CID=%s",lic_resp_info.cid);\r
+                       tet_result(TET_PASS);\r
+               }else{\r
+                       tet_printf("Register License FAILED:"\r
+                                       "ret=0x%x",ret);\r
+                       tet_result(TET_FAIL);\r
+               }\r
+       }else{\r
+               tet_printf("Not a License file:ret=0x%x",ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_12(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_LICENSE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_LICENSE");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register License success");\r
+               tet_result(TET_FAIL);\r
+       }else{\r
+               tet_printf("Invalid input and output ret=0x%x",ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ * @remark     Content is un-registered as a part of\r
+ *                     utc_drmclient_drm_process_request_func_06\r
+ *                     and utc_drmclient_drm_process_request_func_07.\r
+ *                     Thus re-registering the content.\r
+ */\r
+static void utc_drmclient_drm_process_request_func_13(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_FILE;\r
+       char file_path[FILE_PATH_MAX_SIZE] = {0,};\r
+\r
+       snprintf(file_path,FILE_PATH_MAX_SIZE, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_REGISTER_FILE");\r
+\r
+       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+       tet_printf("ret=0x%x",ret);\r
+       if(DRM_RETURN_SUCCESS == ret){\r
+               tet_printf("Register success:file_path=%s",\r
+                               file_path);\r
+               tet_result(TET_PASS);\r
+       }else{\r
+               tet_printf("Register FAILED:ret=0x%x file_path=%s",\r
+                               ret,file_path);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_14(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       LICENSE_INITIATOR_VALID_PR_FILE);\r
+\r
+       tet_printf ("Source Initiator URL=%s",LICENSE_INITIATOR_VALID_PR_FILE);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(LICENSE_INITIATOR_VALID_PR_FILE));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               /**\r
+                * As this TC depends on network connectivity,\r
+                * Thus making it TET_PASS\r
+                */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_15(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       LICENSE_INITIATOR_VALID_PR_FILE_1);\r
+\r
+       tet_printf ("Source Initiator URL=%s",LICENSE_INITIATOR_VALID_PR_FILE_1);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(LICENSE_INITIATOR_VALID_PR_FILE_1));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               /**\r
+                * As this TC depends on network connectivity,\r
+                * Thus making it TET_PASS\r
+                */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_16(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       JOIN_DOMAIN_INITIATOR_VALID_PR_FILE_1);\r
+\r
+       tet_printf ("Source Initiator URL=%s",JOIN_DOMAIN_INITIATOR_VALID_PR_FILE_1);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(JOIN_DOMAIN_INITIATOR_VALID_PR_FILE_1));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               /**\r
+                * As this TC depends on network connectivity,\r
+                * Thus making it TET_PASS\r
+                */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_17(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       LEAVE_DOMAIN_INITIATOR_VALID_PR_FILE_1);\r
+\r
+       tet_printf ("Source Initiator URL=%s",LEAVE_DOMAIN_INITIATOR_VALID_PR_FILE_1);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(LEAVE_DOMAIN_INITIATOR_VALID_PR_FILE_1));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               /**\r
+                * As this TC depends on network connectivity,\r
+                * Thus making it TET_PASS\r
+                */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_18(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       METERING_INITIATOR_VALID_PR_FILE_1);\r
+\r
+       tet_printf ("Source Initiator URL=%s",METERING_INITIATOR_VALID_PR_FILE_1);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(METERING_INITIATOR_VALID_PR_FILE_1));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               /**\r
+                * As this TC depends on network connectivity,\r
+                * Thus making it TET_PASS\r
+                */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_19(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       drm_initiator_info_s initiator_info;\r
+       drm_web_server_resp_data_s ws_resp_data;\r
+\r
+       memset(&initiator_info,0x0,sizeof(drm_initiator_info_s));\r
+       memset(&ws_resp_data,0x0,sizeof(drm_web_server_resp_data_s));\r
+\r
+       snprintf(initiator_info.initiator_url,DRM_MAX_LEN_INITIATOR_URL, "%s",\r
+                       INVALID_LICENSE_INITIATOR_PR_FILE_1);\r
+\r
+       tet_printf ("Source Initiator URL=%s",INVALID_LICENSE_INITIATOR_PR_FILE_1);\r
+       tet_printf ("Destination Initiator URL=%s",initiator_info.initiator_url);\r
+\r
+       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+       initiator_info.operation_callback.callback = NULL;\r
+\r
+       tet_printf ("Source Initiator URL Length=%u",strlen(INVALID_LICENSE_INITIATOR_PR_FILE_1));\r
+       tet_printf ("Destination Initiator URL Length=%u",strlen(initiator_info.initiator_url));\r
+\r
+       ret = drm_process_request(request_type, (void*)&initiator_info,\r
+                       (void*)&ws_resp_data);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Server Error Code = %d",\r
+                               ws_resp_data.result_code);\r
+               tet_printf("Content URL = %s",\r
+                               ws_resp_data.content_url);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_20(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL;\r
+       tet_printf ("Testing:DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("Success:ret = 0x%x", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("Invalid input-output:ret = 0x%x", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_21(void)\r
+{\r
+       int ret = DRM_RETURN_SUCCESS;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES");\r
+\r
+       /*\r
+        * Disabled this test-case because all contents will be unregistered\r
+        * Thus it will interfer with other TCs\r
+        */\r
+#if 0\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES;\r
+       ret = drm_process_request(request_type, NULL,NULL);\r
+#endif\r
+\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_22(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_INSERT_EXT_MEMORY;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_INSERT_EXT_MEMORY");\r
+\r
+       ret = drm_process_request(request_type, NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_23(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY");\r
+\r
+       ret = drm_process_request(request_type, NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_24(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE");\r
+\r
+       drm_submit_roap_message_info_s message_info;\r
+       memset(&message_info,0x0,sizeof(drm_submit_roap_message_info_s));\r
+\r
+       ret = drm_process_request(request_type,(void *)&message_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               /**\r
+               * As this TC depends on network connectivity,\r
+               * Thus making it TET_PASS\r
+           */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_25(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_26(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT");\r
+\r
+       drm_submit_roap_user_consent_info_s user_consent_info;\r
+       memset(&user_consent_info,0x0,sizeof(drm_submit_roap_user_consent_info_s));\r
+\r
+       ret = drm_process_request(request_type,(void *)&user_consent_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               /**\r
+               * As this TC depends on network connectivity,\r
+               * Thus making it TET_PASS\r
+           */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_27(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_28(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_HTTP_USER_CANCEL;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_HTTP_USER_CANCEL");\r
+\r
+       drm_http_user_cancel_info_s user_cancel_info;\r
+       memset(&user_cancel_info,0x0,sizeof(drm_http_user_cancel_info_s));\r
+\r
+       ret = drm_process_request(request_type,(void *)&user_cancel_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               /**\r
+               * As this TC depends on network connectivity,\r
+               * Thus making it TET_PASS\r
+           */\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_29(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_HTTP_USER_CANCEL;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_HTTP_USER_CANCEL");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_30(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_COPY_FILE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_COPY_FILE");\r
+\r
+       drm_register_copy_file_info_s copy_file_info;\r
+       memset(&copy_file_info,0x0,sizeof(drm_register_copy_file_info_s));\r
+\r
+       snprintf(copy_file_info.src_file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       snprintf(copy_file_info.dest_file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_11);\r
+       tet_printf("Src file=%s",copy_file_info.src_file_path);\r
+       tet_printf("Dst file=%s",copy_file_info.dest_file_path);\r
+\r
+       ret = drm_process_request(request_type,(void *)&copy_file_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_31(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_COPY_FILE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_COPY_FILE");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_32(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_MOVE_FILE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_MOVE_FILE");\r
+\r
+       drm_register_copy_file_info_s copy_file_info;\r
+       memset(&copy_file_info,0x0,sizeof(drm_register_copy_file_info_s));\r
+\r
+       snprintf(copy_file_info.src_file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_1);\r
+       snprintf(copy_file_info.dest_file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_11);\r
+       tet_printf("Src file=%s",copy_file_info.src_file_path);\r
+       tet_printf("Dst file=%s",copy_file_info.dest_file_path);\r
+\r
+       ret = drm_process_request(request_type,(void *)&copy_file_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_33(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_MOVE_FILE;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_MOVE_FILE");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_34(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_INSERT_EXT_MEMORY;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_INSERT_EXT_MEMORY");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_35(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_36(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_SETAS;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_SETAS");\r
+\r
+       drm_register_setas_info_s setas_info;\r
+       memset(&setas_info,0x0,sizeof(drm_register_setas_info_s));\r
+\r
+       drm_register_setas_resp_data_s resp_info;\r
+       memset(&resp_info, 0x0, sizeof(drm_register_setas_resp_data_s));\r
+\r
+       snprintf(setas_info.file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_12);\r
+       tet_printf("file_path=%s",setas_info.file_path);\r
+\r
+       setas_info.setas_cat = DRM_SETAS_WALLPAPER;\r
+\r
+       ret = drm_process_request(request_type, (void *) &setas_info, (void *) &resp_info);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_37(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_REGISTER_SETAS;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_REGISTER_SETAS");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Positive test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_38(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_SETAS;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_SETAS");\r
+\r
+       drm_unregister_setas_info_s setas_info;\r
+       memset(&setas_info,0x0,sizeof(drm_unregister_setas_info_s));\r
+\r
+       snprintf(setas_info.file_path,256, "%s",FILE_PATH_VALID_FILE_OMA_12);\r
+       tet_printf("file_path=%s",setas_info.file_path);\r
+\r
+       setas_info.setas_cat = DRM_SETAS_WALLPAPER;\r
+\r
+       ret = drm_process_request(request_type,(void *)&setas_info,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_PASS);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_FAIL);\r
+       }\r
+}\r
+\r
+/**\r
+ * @brief      Negative test case of drm_process_request()\r
+ */\r
+static void utc_drmclient_drm_process_request_func_39(void)\r
+{\r
+       int ret = DRM_RETURN_INTERNAL_ERROR;\r
+       drm_request_type_e request_type = DRM_REQUEST_TYPE_UNREGISTER_SETAS;\r
+       tet_printf("Testing:DRM_REQUEST_TYPE_UNREGISTER_SETAS");\r
+\r
+       ret = drm_process_request(request_type,NULL,NULL);\r
+       if (DRM_RETURN_SUCCESS == ret) {\r
+               tet_printf("ret = 0x%x SUCCESS", ret);\r
+               tet_result(TET_FAIL);\r
+       } else {\r
+               tet_printf("ret = 0x%x FAILED", ret);\r
+               tet_result(TET_PASS);\r
+       }\r
+}\r
diff --git a/drm-client.pc.in b/drm-client.pc.in
new file mode 100755 (executable)
index 0000000..d0143dd
--- /dev/null
@@ -0,0 +1,6 @@
+Name: drm-client
+Description: DRM client Package
+Version: @VERSION@
+Requires: dlog capi-base-common glib-2.0
+Libs: -L@LIBDIR@ -ldrm-client
+Cflags: -I@INCLUDEDIR@/drm-client
diff --git a/include/drm_client.h b/include/drm_client.h
new file mode 100755 (executable)
index 0000000..d2d4003
--- /dev/null
@@ -0,0 +1,319 @@
+/*
+ *  drm-client
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *                     Mahendra Kumar Prajapat <mahendra.p@samsung.com>
+ *                     Harsha Shekar <h.shekar@samsung.com>
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file               drm_client.h
+ * @brief       DRM Client API declaration header file.
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)
+ * @author      Harsha Shekar (h.shekar@samsung.com)
+ * @version     0.1
+ * @history     0.1: DRM Client API Declarations
+ */
+
+#ifndef __DRM_CLIENT_H__
+#define __DRM_CLIENT_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /*__cplusplus */
+
+#include "drm_client_types.h"
+
+/**
+ * @defgroup DRMCLIENT drm-client
+ * @{
+ */
+
+/**
+ * @}
+ */
+
+/**
+ * @addtogroup DRMCLIENT
+ * @{
+ */
+
+/**
+ *  An application can check that a file is DRM file
+ *  (OMA DRM, PlayReady, DivX etc.)
+ *
+ * @param[in]  file_path               Specifies the pointer points a DRM file path.
+ * @param[out] is_drm_file     DRM_TRUE if the input file is a DRM file
+ *                                                             else DRM_FALSE.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ *
+ * @remarks
+ * @see
+ * @since       0.1
+ */
+int drm_is_drm_file(const char *file_path, drm_bool_type_e *is_drm_file);
+
+/**
+ *  An application can get DRM file type of the file that is
+ *  specified in file_path
+ *
+ * @param[in]  file_path       Specifies the pointer points a DRM file path.
+ * @param[out] file_type       DRM file type.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_get_file_type(const char *file_path, drm_file_type_e *file_type);
+
+/**
+ * An application can check that a DRM file has valid license or not.
+ *
+ * @param[in]  file_path               DRM file path.
+ * @param[in]  perm_type               Enumeration type of permission.
+ * @param[out] license_status  license status.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_get_license_status(const char *file_path,
+               drm_permission_type_e perm_type,
+               drm_license_status_e *license_status);
+
+/**
+ * An application can get DRM Content information for the file
+ * specified in file_path.
+ *
+ * @param[in]  file_path               DRM file path.
+ * @param[out] content_info    Content information.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_get_content_info(const char *file_path,
+               drm_content_info_s *content_info);
+
+/**
+ * An application can get file information of a DRM file.
+ *
+ * @param[in]  file_path               DRM file path.
+ * @param[out] fileInfo                DRM file info.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_get_file_info(const char *file_path, drm_file_info_s *file_info);
+
+/**
+ * An application can get constraints associated with
+ * given permission & given file
+ *
+ * @param[in]  file_path                       DRM file path.
+ * @param[in]  perm_type                       Enumeration type of permission.
+ * @param[out] constraint_info         Constraint info.
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_get_constraint_info(const char *file_path,
+               drm_permission_type_e perm_type,
+               drm_constraint_info_s *constraint_info);
+
+/**
+ * An application can check the feasibility of actions to be
+ * performed based on the type of DRM file.
+ *
+ * @param[in]  action                          Action to be taken.
+ * @param[in]  action_data             Data needed to check action
+ *                                                                     allowed operation
+ * @param[out] is_allowed                      DRM_TRUE if action is allowed
+ *                                                                     else DRM_FALSE
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks
+ * @see
+ * @since              0.1
+ */
+int drm_is_action_allowed(drm_action_type_e action,
+               drm_action_allowed_data_s *action_data,
+               drm_bool_type_e *is_allowed);
+
+
+/**
+ * An application can get the requested data from DRM.
+ *
+ * @param[in]  data_type       Data types as per enum drm_data_type_e.
+ * @param[in]  input           Pointer to appropriate structure as per data_type.
+ * @param[out] output          Output data. Pointer to appropriate structure as
+ *                                                     per data_type.
+ *
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks            Please typecast to appropriate data structures
+ *                             as per data types.
+ *
+ *                             if data_type = DRM_DATA_TYPE_SECURE_CLOCK
+ *                             then input type: input = NULL
+ *                             and output type: output = pointer to struct
+ *                             drm_secure_clock_data_s
+ *
+ *                             if data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG
+ *                             then input type: input = NULL
+ *                             and output type: output = pointer to int
+ *
+ *                             if data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID
+ *                             then input type: input = pointer to file path (const char)
+ *                             and output type: output = pointer to struct
+ *                             drm_transaction_id_info_s
+ *
+ *                             if data_type = DRM_DATA_TYPE_DIVX_REGISTRATION_CODE
+ *                             then input type: input = NULL
+ *                             and output type: output = pointer to struct drm_code_info_s
+ *
+ *                             if data_type = DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE
+ *                             then input type: input = NULL
+ *                             and output type: output = pointer to struct drm_code_info_s
+ *
+ * @see
+ * @since              0.1
+ */
+int drm_get_data(drm_data_type_e data_type, void *input, void *output);
+
+/**
+ * An application can do particular request to DRM.
+ *
+ * @param[in]  request_type    Request types as per enum drm_request_type_e.
+ * @param[in]  input                   Pointer to appropriate structure as per
+ *                                                             request_type.
+ * @param[out] output                  Output data. Pointer to appropriate structure as
+ *                                                             per request_type.
+ *
+ * @return             0 on success, else a negative error value
+ * @retval             DRM_RETURN_SUCCESS on success
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error
+ * @remarks            Please typecast to appropriate data structures
+ *                             as per data types.
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_FILE
+ *                             then input type: input = pointer to const char (file_path)
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE
+ *                             then input type: input = pointer to struct drm_unregister_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES
+ *                             then input type: input = NULL
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_LICENSE
+ *                             then input type: input = pointer to
+ *                             struct drm_register_lic_info_s.
+ *                             and output type: output = pointer to
+ *                             struct drm_register_lic_resp_s.
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL
+ *                             then input type: input = pointer to struct drm_initiator_info_s
+ *                             and output type: output = pointer to struct drm_web_server_resp_data_s
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE
+ *                             then input type: input = pointer to struct drm_submit_roap_message_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT
+ *                             then input type: input = pointer to struct drm_submit_roap_user_consent_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_HTTP_USER_CANCEL
+ *                             then input type: input = pointer to struct drm_http_user_cancel_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_COPY_FILE
+ *                             then input type: input = pointer to struct drm_register_copy_file_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_MOVE_FILE
+ *                             then input type: input = pointer to struct drm_register_copy_file_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_INSERT_EXT_MEMORY
+ *                             then input type: input = NULL
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY
+ *                             then input type: input = NULL
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_SETAS
+ *                             then input type: input = pointer to struct drm_register_setas_info_s
+ *                             and output type: output = NULL
+ *
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_SETAS
+ *                             then input type: input = pointer to struct drm_unregister_setas_info_s
+ *                             and output type: output = NULL
+ *
+ * @see
+ * @since              0.1
+ */
+int drm_process_request(drm_request_type_e request_type,
+               void *input, void *output);
+
+
+/**
+ * @}
+ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /*__DRM_CLIENT_H__ */
diff --git a/include/drm_client_ipc.h b/include/drm_client_ipc.h
new file mode 100755 (executable)
index 0000000..46cc60d
--- /dev/null
@@ -0,0 +1,264 @@
+/*\r
+ *  drm-client\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               drm_client_ipc.h\r
+ * @brief       DRM Client Inter process communication declarations.\r
+ * @author      Harsha Shekar (h.shekar@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: DRM Client Inter process communication declarations.\r
+ */\r
+\r
+#ifndef __DRM_CLIENT_IPC_H__\r
+#define __DRM_CLIENT_IPC_H__\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /*__cplusplus */\r
+\r
+#include "drm_client_types.h"\r
+\r
+/*\r
+ * DRM Socket Path\r
+ */\r
+#define        DRM_SOCK_PATH           "/tmp/DrmSocket"\r
+\r
+/*\r
+ * Maximum Size of Cookie\r
+ */\r
+#define        DRM_MAX_LEN_COOKIE              (20)\r
+\r
+/**\r
+* Maximum Request Data length\r
+*/\r
+#define DRM_MAX_REQUEST_DATA_LENGTH            (4096)\r
+\r
+/**\r
+* Maximum Response Data length\r
+*/\r
+#define DRM_MAX_RESPONSE_DATA_LENGTH   (4096)\r
+\r
+/**\r
+* Maximum number of Data Items\r
+*/\r
+#define DRM_MAX_DATA_ITEMS_NUM (5)\r
+\r
+/**\r
+* Maximum Read/Write Chunk Size\r
+*/\r
+#define DRM_MAX_CHUNK_SIZE (10 * 1024)\r
+\r
+/**\r
+* Maximum concurrent clients supported\r
+*/\r
+#define DRM_MAX_CLIENT_SUPPORTED 10\r
+\r
+/**\r
+* Maximum callback data size\r
+*/\r
+#define DRM_MAX_CB_DATA_SIZE 256\r
+\r
+\r
+\r
+/**\r
+ * @enum drm_request_api_e\r
+ * @brief DRM API names.\r
+ */\r
+typedef enum {\r
+       DRM_API_NONE,                           /**< For initialization purpose */\r
+       DRM_IS_DRM_FILE,                        /**< Is DRM file */\r
+       DRM_GET_FILE_TYPE,                      /**< Get DRM file type */\r
+       DRM_GET_LICENSE_STATUS,         /**< Get License Status */\r
+       DRM_GET_CONTENT_INFO,           /**< Get Content Information */\r
+       DRM_GET_FILE_INFO,                      /**< Get DRM file Information */\r
+       DRM_GET_CONSTRAINT_INFO,        /**< Get Constraint Information */\r
+       DRM_IS_ACTION_ALLOWED,          /**< Is Action allowed */\r
+       DRM_GET_DATA,                           /**< Get Data */\r
+       DRM_PROCESS_REQUEST,            /**< Process Request */\r
+       DRM_API_MAX                                     /**< Max enum value */\r
+} drm_request_api_e;\r
+\r
+/**\r
+ * @struct drm_client_cb_data_s\r
+ * @brief DRM operation callback information structure\r
+ * with additional information.\r
+ */\r
+typedef struct\r
+{\r
+       /** Client Id */\r
+       int client_id;\r
+\r
+       /** Callback operation info */\r
+       drm_user_operation_info_s callback_operation_info;\r
+\r
+       /** Callback user data */\r
+       char call_bk_data[DRM_MAX_CB_DATA_SIZE];\r
+} drm_client_cb_data_s;\r
+\r
+/**\r
+ * @struct     drm_client_cb_info_s\r
+ * @brief      Client Callback info.\r
+ * @remark     Stores details about Registered client callbacks\r
+ */\r
+typedef struct {\r
+\r
+       /** Client Id */\r
+       int client_id;\r
+\r
+       /** Callback */\r
+       drm_operation_cb_s operation_callback;\r
+} drm_client_cb_info_s;\r
+\r
+/**\r
+ * @struct     drm_client_info_s\r
+ * @brief      Client Information structure.\r
+ * @remark     It can be used to track drm clients.\r
+ */\r
+typedef struct {\r
+\r
+       /** Client Id */\r
+       int client_id;\r
+\r
+       /** Process Id */\r
+       int p_id;\r
+\r
+       /** Thread Id */\r
+       int thread_id;\r
+\r
+       /** Sync Socket */\r
+       int sync_sock_fd;\r
+\r
+       /** Async Socket */\r
+       int async_sock_fd;\r
+} drm_client_info_s;\r
+\r
+/**\r
+ * @struct drm_req_fixed_data_s\r
+ * @brief DRM input parameter(request) fixed data structure.\r
+ */\r
+typedef struct {\r
+\r
+       /* Client Request Type */\r
+       drm_request_api_e api_name;\r
+\r
+       /* Permission type */\r
+       drm_permission_type_e permission_type;\r
+\r
+       /* Action type */\r
+       drm_action_type_e action;\r
+\r
+       /* Request Data Type */\r
+       drm_data_type_e data_type;\r
+\r
+       /* Process Request Type */\r
+       drm_request_type_e request_type;\r
+\r
+       /* Client specific Information */\r
+       drm_client_info_s client_info;\r
+\r
+       /** No of data items(Pointers) */\r
+       unsigned int num_data_items;\r
+\r
+       /** Length of each data item */\r
+       unsigned int data_length[DRM_MAX_DATA_ITEMS_NUM];\r
+\r
+       /* Request Data */\r
+       char request_data[DRM_MAX_REQUEST_DATA_LENGTH];\r
+\r
+}drm_req_fixed_data_s;\r
+\r
+/**\r
+ * @struct drm_request_data_s\r
+ * @brief DRM input parameter(request) structure.\r
+ */\r
+typedef struct {\r
+\r
+       /** Fixed Data */\r
+       drm_req_fixed_data_s fixed_data;\r
+\r
+       /** Array of individual data items */\r
+       char *data_items[DRM_MAX_DATA_ITEMS_NUM];\r
+\r
+} drm_request_data_s;\r
+\r
+/**\r
+ * @struct drm_resp_fixed_data_s\r
+ * @brief DRM output parameter(response) fixed data structure.\r
+ */\r
+typedef struct {\r
+\r
+       /* Response Result */\r
+       drm_result_e resp_result;\r
+\r
+       /* Bool value */\r
+       drm_bool_type_e bool_val;\r
+\r
+       /* file type */\r
+       drm_file_type_e file_type;\r
+\r
+       /* License Status */\r
+       drm_license_status_e lic_status;\r
+\r
+       /** No of data items(Pointers) */\r
+       unsigned int num_data_items;\r
+\r
+       /** Length of each data item */\r
+       unsigned int data_length[DRM_MAX_DATA_ITEMS_NUM];\r
+\r
+       /* Response Data */\r
+       char response_data[DRM_MAX_RESPONSE_DATA_LENGTH];\r
+\r
+} drm_resp_fixed_data_s;\r
+\r
+/**\r
+ * @struct drm_response_data_s\r
+ * @brief DRM output parameter(response) structure.\r
+ */\r
+typedef struct {\r
+\r
+       /** Fixed Data */\r
+       drm_resp_fixed_data_s fixed_data;\r
+\r
+       /** Array of individual data items */\r
+       char *data_items[DRM_MAX_DATA_ITEMS_NUM];\r
+\r
+} drm_response_data_s;\r
+\r
+/**\r
+ *  This API is used to send a request to the Server to call corresponding API\r
+ *\r
+ * @param[in]  client_in       Carries the input parameters of Client API to Server\r
+ * @param[out] server_out      Carries the output parameters of Client API from Server\r
+ * @return             0 on success & other values on failure\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+int drm_client_comm(drm_request_data_s *client_in, drm_response_data_s *server_out);\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif /*__DRM_CLIENT_IPC_H__ */\r
diff --git a/include/drm_client_log.h b/include/drm_client_log.h
new file mode 100755 (executable)
index 0000000..63f0a81
--- /dev/null
@@ -0,0 +1,100 @@
+/*
+ *  drm-client
+ *
+ * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
+ *
+ * Contact: Hakjoo Ko <hakjoo.ko@samsung.com>
+ *                     Mahendra Kumar Prajapat <mahendra.p@samsung.com>
+ *                     Harsha Shekar <h.shekar@samsung.com>
+ *
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+/**
+ * @file               drm_client_log.h
+ * @brief       DRM Client log specific file.
+ * @author      Harsha Shekar (h.shekar@samsung.com)
+ * @version     0.1
+ * @history     0.1: DRM LOG definitions.
+ */
+
+#ifndef __DRM_CLIENT_LOG_H__
+#define __DRM_CLIENT_LOG_H__
+
+#ifdef __cplusplus
+extern "C" {
+#endif /*__cplusplus */
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/syscall.h>
+#include <linux/unistd.h>
+#include <unistd.h>
+#include <string.h>
+
+#define drmclientgettid() (long int)syscall(__NR_gettid)
+#define DRM_CLIENT_FILENAME(X)   (strrchr((char *)(X), '/') ? (char *)(strrchr((char*)(X), '/') + 1) : ((char *)(X)))
+
+/*
+ * Enable this flag to use internal logging mechanism
+ */
+//#define __DRM_CLIENT_USE_INTERNAL_LOGGING__
+
+#ifdef __DRM_CLIENT_USE_INTERNAL_LOGGING__
+
+/* Use internal logging mechanism */
+extern const char *__progname;
+
+#define        DRM_CLIENT_LOG(FMT, ARG...)     do{ \
+       fprintf(stderr, "\n [EXE name=%s]:[PID=%ld]:[TID=%ld]:[%s:%s:%d]:", __progname, (long int)getpid(), drmclientgettid(), DRM_CLIENT_FILENAME(__FILE__), __func__, __LINE__);      \
+       fprintf(stderr, FMT, ##ARG); \
+       fprintf(stderr,"\n"); \
+       }while(0);
+
+#define        DRM_CLIENT_EXCEPTION(FMT, ARG...)       do{ \
+       fprintf(stderr, "\n [EXE name=%s]:[PID=%ld]:[TID=%ld]:[%s:%s:%d]:[DRM-ERROR-CLIENT]:", __progname, (long int)getpid(), drmclientgettid(), DRM_CLIENT_FILENAME(__FILE__), __func__, __LINE__);   \
+       fprintf(stderr, FMT, ##ARG); \
+       fprintf(stderr,"\n"); \
+       }while(0);
+
+#define DRM_CLIENT_FRQ_LOG DRM_CLIENT_LOG
+
+#else  /*__DRM_CLIENT_USE_INTERNAL_LOGGING__ */
+
+/* Use DLOG logging mechanism */
+#include "dlog.h"
+
+/* DRM Client layer debug messages*/
+#define TAG_DRM_CLIENT "DRM_CLIENT"
+
+/* DLOG Level
+DEBUG  Debug message. - always compiled into application, but not logged at run time by default on release mode. on debug mode, this message will be logged at run time.
+INFO  Information message - Normal operational messages. above of this priority will always be logged.
+WARN  Warning messages - not an error, but indication that an error will occur if action is not taken
+ERROR  Error message - indicate error.
+*/
+
+/* Client layer related logs */
+#define DRM_CLIENT_LOG(FMT, ARG...)                                    SLOG(LOG_INFO,  TAG_DRM_CLIENT, "[PID=%ld]:[TID=%ld]:[%s:%s:%d]:"FMT, (long int)getpid(), drmclientgettid(), DRM_CLIENT_FILENAME(__FILE__), __func__, __LINE__,  ##ARG);
+#define DRM_CLIENT_FRQ_LOG(FMT, ARG...)                        SLOG(LOG_DEBUG, TAG_DRM_CLIENT, "[PID=%ld]:[TID=%ld]:[%s:%s:%d]:"FMT, (long int)getpid(), drmclientgettid(), DRM_CLIENT_FILENAME(__FILE__), __func__, __LINE__, ##ARG);
+#define DRM_CLIENT_EXCEPTION(FMT, ARG...)                      SLOG(LOG_ERROR, TAG_DRM_CLIENT, "[PID=%ld]:[TID=%ld]:[%s:%s:%d]:[DRM-ERROR-CLIENT]"FMT"\n", (long int)getpid(), drmclientgettid(), DRM_CLIENT_FILENAME(__FILE__), __func__, __LINE__, ##ARG);
+
+#endif /* __DRM_CLIENT_USE_INTERNAL_LOGGING__ */
+
+#ifdef __cplusplus
+}
+#endif /* __cplusplus */
+
+#endif /* __DRM_CLIENT_LOG_H__*/
diff --git a/include/drm_client_types.h b/include/drm_client_types.h
new file mode 100755 (executable)
index 0000000..40664b4
--- /dev/null
@@ -0,0 +1,1097 @@
+/*\r
+ * drm-client\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               drm_client_types.h\r
+ * @brief       DRM Client API macros, structures & enum declaration file.\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 Client API macros,\r
+ *                             structures & enum declarations.\r
+ */\r
+\r
+#ifndef __DRM_CLIENT_TYPES_H__\r
+#define __DRM_CLIENT_TYPES_H__\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif /*__cplusplus */\r
+\r
+#include "tizen_error.h"\r
+#include <time.h>\r
+#include <stdio.h>\r
+\r
+\r
+/******************************************************************/\r
+\r
+/*\r
+ * Maximum Length of Author field\r
+ */\r
+#define DRM_MAX_LEN_AUTHOR             (64)\r
+\r
+/*\r
+ * Maximum Length of Copyright field\r
+ */\r
+#define DRM_MAX_LEN_COPYRIGHT  (64)\r
+\r
+/*\r
+ * Maximum Length of Description field\r
+ */\r
+#define DRM_MAX_LEN_DESCRIPTION (256)\r
+\r
+/*\r
+ * Maximum Length of Icon URI field\r
+ */\r
+#define DRM_MAX_LEN_ICON_URI   (256)\r
+\r
+/*\r
+ * Maximum Length of Info URL field\r
+ */\r
+#define DRM_MAX_LEN_INFO_URL   (256)\r
+\r
+/*\r
+ * Maximum Length of Content URL field\r
+ */\r
+#define DRM_MAX_LEN_CONTENT_URL (512)\r
+\r
+/*\r
+ * Maximum Length of Rights URL field\r
+ */\r
+#define DRM_MAX_LEN_RIGHTS_URL         (256)\r
+\r
+/*\r
+ * Maximum Length of Title field\r
+ */\r
+#define DRM_MAX_LEN_TITLE              (256)\r
+\r
+/*\r
+ * Maximum Length of MIME (Content Type) field\r
+ */\r
+#define DRM_MAX_LEN_MIME               (64)\r
+\r
+/*\r
+ * Maximum Length of Content ID field\r
+ */\r
+#define DRM_MAX_LEN_CID                (256)\r
+\r
+/*\r
+ * Maximum Length of Individual Identity field\r
+ */\r
+#define DRM_MAX_LEN_INDIVIDUAL_IDENTITY (64)\r
+\r
+/*\r
+ * Maximum Length of System Identity field\r
+ */\r
+#define DRM_MAX_LEN_SYSTEM_IDENTITY    (64)\r
+\r
+/*\r
+ * Maximum Length of original filename for PlayReady envelope\r
+ */\r
+#define DRM_MAX_LEN_FILEPATH   (256)\r
+\r
+/**\r
+* Maximum length of Transaction ID of the DCF\r
+*/\r
+#define DRM_MAX_SIZE_TRANSACTION_ID            (17)\r
+\r
+/**\r
+* Maximum length of DivX code (Registration / De-registration code )\r
+*/\r
+#define DRM_MAX_SIZE_DIVX_CODE         (16)\r
+\r
+/**\r
+* Maximum length of License Data\r
+*/\r
+#define DRM_MAX_LEN_LICENSE_DATA       (3000)\r
+\r
+/**\r
+* Maximum length of Initiator URL\r
+*/\r
+#define DRM_MAX_LEN_INITIATOR_URL      (512)\r
+\r
+/**\r
+* Maximum length of IP Address\r
+*/\r
+#define DRM_MAX_LEN_IP_ADDR            (64)\r
+\r
+/*\r
+ * Max length of APP ID\r
+ */\r
+#define DRM_MAX_LEN_APP_ID             (15)\r
+\r
+/*\r
+ * Max length of User ID\r
+ */\r
+#define DRM_MAX_LEN_USER_GUID  (15)\r
+\r
+/*\r
+ * Max length of Device ID\r
+ */\r
+#define DRM_MAX_LEN_DEVICE_ID  (15)\r
+\r
+/*\r
+ * Max length of Order ID\r
+ */\r
+#define DRM_MAX_LEN_ORDER_ID   (23)\r
+\r
+/*\r
+ * Max length of Service ID\r
+ */\r
+#define DRM_MAX_LEN_SERVICE_ID (31)\r
+\r
+/*\r
+ * Max length of Account ID\r
+ */\r
+#define DRM_MAX_LEN_ACCOUNT_ID         (31)\r
+\r
+/****************************************************************/\r
+\r
+/**\r
+ * @enum drm_result_e\r
+ * @brief DRM Return values.\r
+ */\r
+typedef enum {\r
+       /**< Success */\r
+       DRM_RETURN_SUCCESS = 0,\r
+       /**< Invalid Argument */\r
+       DRM_RETURN_INVALID_ARG = TIZEN_ERROR_INVALID_PARAMETER,\r
+       /**< Insufficient Memory */\r
+       DRM_RETURN_INSUFFICIENT_MEMORY = TIZEN_ERROR_OUT_OF_MEMORY,\r
+       /**< Parsing Error */\r
+       DRM_RETURN_PARSING_ERROR = TIZEN_ERROR_DRM_CLASS | 0x01,\r
+       /**< DB Error */\r
+       DRM_RETURN_DB_ERROR = TIZEN_ERROR_DRM_CLASS | 0x02,\r
+       /**< File Error */\r
+       DRM_RETURN_FILE_ERROR = TIZEN_ERROR_DRM_CLASS | 0x03,\r
+       /**< Communication Error */\r
+       DRM_RETURN_COMMUNICATION_ERROR = TIZEN_ERROR_DRM_CLASS | 0x04,\r
+       /**< OPL Error */\r
+       DRM_RETURN_OPL_ERROR = TIZEN_ERROR_DRM_CLASS | 0x05,\r
+       /**< Internal Error */\r
+       DRM_RETURN_INTERNAL_ERROR = TIZEN_ERROR_UNKNOWN\r
+} drm_result_e;\r
+\r
+/**\r
+ * @enum drm_bool_type_e\r
+ * @brief DRM Bool values.\r
+ */\r
+typedef enum {\r
+       DRM_FALSE = 0,                       /**< false */\r
+       DRM_TRUE = 1,                        /**< true */\r
+       DRM_UNKNOWN = 0xFFFFFFFF             /**< error */\r
+} drm_bool_type_e;\r
+\r
+/**\r
+ * @enum drm_file_type_e\r
+ * @brief DRM file types.\r
+ */\r
+typedef enum {\r
+       DRM_TYPE_UNDEFINED,                             /**< For initialization purpose */\r
+       DRM_TYPE_OMA_V1,                                /**< OMA DRM v1 file */\r
+       DRM_TYPE_OMA_V2,                                /**< OMA DRM v2 file */\r
+       DRM_TYPE_PLAYREADY,                             /**< PlayReady file */\r
+       DRM_TYPE_PLAYREADY_ENVELOPE,    /**< PlayReady Envelope file */\r
+       DRM_TYPE_DIVX,                                  /**< DivX file */\r
+       DRM_TYPE_OMA_PD,                                /**< Progressive Download file */\r
+       DRM_TYPE_PIFF,                                  /**< PIFF file */\r
+       DRM_TYPE_SAPPS                                  /**< Samsung Apps */\r
+} drm_file_type_e;\r
+\r
+/**\r
+ * @enum drm_permission_type_e\r
+ * @brief DRM Permission types.\r
+ */\r
+typedef enum {\r
+       DRM_PERMISSION_TYPE_NONE,                               /**< For initialization purpose */\r
+       DRM_PERMISSION_TYPE_ANY,                                /**< Any permission */\r
+       DRM_PERMISSION_TYPE_PLAY,                               /**< Play Permission */\r
+       DRM_PERMISSION_TYPE_COLLABORATIVE_PLAY, /**< Collaborative Play\r
+                                                                                       (e.g gaming application) */\r
+\r
+       DRM_PERMISSION_TYPE_DISPLAY,                    /**< Display Permission */\r
+       DRM_PERMISSION_TYPE_EXECUTE,                    /**< Execute Permission */\r
+       DRM_PERMISSION_TYPE_PRINT,                              /**< Print Permission */\r
+       DRM_PERMISSION_TYPE_EXPORT_COPY,                /**< Export-copy permission */\r
+       DRM_PERMISSION_TYPE_EXPORT_MOVE                 /**< Export-move permission */\r
+} drm_permission_type_e;\r
+\r
+/**\r
+ * @enum drm_license_status_e\r
+ * @brief DRM License status.\r
+ */\r
+typedef enum {\r
+       DRM_LICENSE_STATUS_UNDEFINED,   /**< For initialization purpose */\r
+       DRM_LICENSE_STATUS_VALID,               /**< Valid License */\r
+       DRM_LICENSE_STATUS_FUTURE_USE,  /**< License for future use */\r
+       DRM_LICENSE_STATUS_EXPIRED,             /**< Expired License */\r
+       DRM_LICENSE_STATUS_NO_LICENSE,  /**< No License */\r
+} drm_license_status_e;\r
+\r
+/**\r
+ * @enum drm_action_type_e\r
+ * @brief DRM Action types.\r
+ */\r
+typedef enum {\r
+       DRM_ACTION_UNDEFINED,           /**< for initialization purpose */\r
+       DRM_IS_FORWARDING_ALLOWED,      /**< if a file can be forwarded */\r
+       DRM_HAS_VALID_SETAS_STATUS,     /**< if a file can be SETAS */\r
+       DRM_IS_DEVICE_ACTIVATED,                /**< if a device is DIVX activated */\r
+       DRM_IS_VALID_SECURE_CLOCK       /**< if Secure Clock is set */\r
+} drm_action_type_e;\r
+\r
+/**\r
+ * @enum drm_method_type_e\r
+ * @brief DRM method types.\r
+ */\r
+typedef enum {\r
+       DRM_METHOD_TYPE_UNDEFINED,                      /**< For initialization purpose */\r
+       DRM_METHOD_TYPE_FORWARD_LOCK,           /**< OMA DRM forward lock */\r
+       DRM_METHOD_TYPE_COMBINED_DELIVERY,      /**< OMA DRM Combined Delivery */\r
+       DRM_METHOD_TYPE_SEPARATE_DELIVERY       /**< OMA DRM Separate Delivery\r
+                                                                               & OMA DRM v2 */\r
+}drm_method_type_e;\r
+\r
+/**\r
+ * @enum drm_rights_version_e\r
+ * @brief DRM Rights Version.\r
+ */\r
+typedef enum {\r
+       DRM_OMA_DRMV1_RIGHTS,           /**< OMA DRM v1 */\r
+       DRM_OMA_DRMV2_RIGHTS,           /**< OMA DRM v2 */\r
+       DRM_UNDEFINED_RIGHTS = 3                /**< dummy */\r
+} drm_rights_version_e;\r
+\r
+/**\r
+ * @enum drm_constraint_identity_type_e\r
+ * @brief DRM Constraint Identity type.\r
+ */\r
+typedef enum {\r
+       DRM_CONSTRAINT_IDENTITY_TYPE_NONE,              /**< For initialization */\r
+       DRM_CONSTRAINT_IDENTITY_TYPE_IMEI,              /**< IMEI */\r
+       DRM_CONSTRAINT_IDENTITY_TYPE_IMSI,              /**< IMSI */\r
+       DRM_CONSTRAINT_IDENTITY_TYPE_MSISDN,    /**< MS-ISDN */\r
+       DRM_CONSTRAINT_IDENTITY_TYPE_WIM                /**< WIM\r
+                                                                                       (Wireless/WAP Identity Module ) */\r
+} drm_constraint_identity_type_e;\r
+\r
+/**\r
+ * @enum drm_setas_category_e\r
+ * @brief DRM SETAS type.\r
+ */\r
+typedef enum {\r
+       DRM_SETAS_NONE = -1,                    /**< No set as operation */\r
+       DRM_SETAS_WALLPAPER = 0,                /**< Set As Wallpaper */\r
+       DRM_SETAS_RINGTONE = 2,                 /**< Set As Ringtone */\r
+} drm_setas_category_e;\r
+\r
+/**\r
+ * @enum drm_data_type_e\r
+ * @brief DRM Requested Data types.\r
+ */\r
+typedef enum {\r
+       /* For initialization purpose */\r
+       DRM_DATA_TYPE_NONE = -1,\r
+\r
+       /* Secure Clock Information */\r
+       DRM_DATA_TYPE_SECURE_CLOCK = 0,\r
+\r
+       /* Transaction Tracking flag status information */\r
+       DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG,\r
+\r
+       /* Transaction Tracking ID information */\r
+       DRM_DATA_TYPE_TRANSACTION_TRACKING_ID,\r
+\r
+       /* DivX Registration Code information */\r
+       DRM_DATA_TYPE_DIVX_REGISTRATION_CODE,\r
+\r
+       /* DivX De-registration Code information */\r
+       DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE,\r
+} drm_data_type_e;\r
+\r
+/**\r
+ * @enum drm_request_type_e\r
+ * @brief DRM Request types.\r
+ */\r
+typedef enum {\r
+       /* For initialization purpose */\r
+       DRM_REQUEST_TYPE_NONE = -1,\r
+\r
+       /* Request to Register DRM file in DB */\r
+       DRM_REQUEST_TYPE_REGISTER_FILE = 0,\r
+\r
+       /* Request to Un-register DRM file from DB */\r
+       DRM_REQUEST_TYPE_UNREGISTER_FILE,\r
+\r
+       /* Request to Un-register All DRM files from DB */\r
+       DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES,\r
+\r
+       /* Request to Register / install License into DB */\r
+       DRM_REQUEST_TYPE_REGISTER_LICENSE,\r
+\r
+       /* Request to start Initiator processing for PlayReady */\r
+       DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL,\r
+\r
+       /* Submit Roap Message */\r
+       DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE,\r
+\r
+       /* Submit Roap User Consent */\r
+       DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT,\r
+\r
+       /* HTTP User Cancel */\r
+       DRM_REQUEST_TYPE_HTTP_USER_CANCEL,\r
+\r
+       /* Register Copy File */\r
+       DRM_REQUEST_TYPE_REGISTER_COPY_FILE,\r
+\r
+       /* Register Move File */\r
+       DRM_REQUEST_TYPE_REGISTER_MOVE_FILE,\r
+\r
+       /* Insert External Memory */\r
+       DRM_REQUEST_TYPE_INSERT_EXT_MEMORY,\r
+\r
+       /* Extract External Memory */\r
+       DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY,\r
+\r
+       /* Register SetAs */\r
+       DRM_REQUEST_TYPE_REGISTER_SETAS,\r
+\r
+       /* Unregister SetAs */\r
+       DRM_REQUEST_TYPE_UNREGISTER_SETAS\r
+\r
+} drm_request_type_e;\r
+\r
+/**\r
+ * @enum drm_roap_init_src_e\r
+ * @brief DRM ROAP initialization source.\r
+ */\r
+typedef enum{\r
+       /**< dummy */\r
+   DRM_ROAP_INIT_FROM_UNKNOWN,\r
+\r
+   /**< roap is initialized from browser*/\r
+   DRM_ROAP_INIT_FROM_BROWSER,\r
+\r
+   /**< roap is initialized from DRM content */\r
+   DRM_ROAP_INIT_FROM_CONTENT,\r
+\r
+   /**< roap is initialized from WAPPUSH */\r
+   DRM_ROAP_INIT_FROM_WAPPUSH\r
+} drm_roap_init_src_e;\r
+\r
+/**\r
+ * @enum       drm_operation_type_e\r
+ * @brief      DRM operation type.\r
+ */\r
+typedef enum {\r
+       /* License Acquisition Operation */\r
+       DRM_OPERATION_TYPE_LICENSE_ACQ,\r
+\r
+       /* Join Domain Operation */\r
+       DRM_OPERATION_TYPE_JOIN_DOMAIN,\r
+\r
+       /* Leave Domain Operation */\r
+       DRM_OPERATION_TYPE_LEAVE_DOMAIN,\r
+\r
+       /* Metering Operation */\r
+       DRM_OPERATION_TYPE_METERING_INFO,\r
+\r
+       /* Unknown Operation type */\r
+       DRM_OPERATION_TYPE_UNKNOWN\r
+} drm_operation_type_e;\r
+\r
+/**\r
+ * @enum       drm_operation_status_e\r
+ * @brief      DRM operation status.\r
+ */\r
+typedef enum {\r
+       /** DRM operation is started */\r
+       DRM_OPERATION_STATUS_STARTED,\r
+\r
+       /** DRM operation is in Progress */\r
+       DRM_OPERATION_STATUS_INPROGRESS,\r
+\r
+       /** DRM operation is Completed */\r
+       DRM_OPERATION_STATUS_COMPLETED,\r
+\r
+       /** During DRM operation, additional operation is to be performed */\r
+       DRM_OPERATION_STATUS_ADDITIONAL_INFO,\r
+       /*Operation is canceled*/\r
+       DRM_OPERATION_STATUS_CANCELED,\r
+       /** An error occurred with respect to DRM operation */\r
+       DRM_OPERATION_STATUS_ERROR\r
+} drm_operation_status_e;\r
+\r
+/**\r
+ * @enum drm_web_server_result_code_e\r
+ * @brief DRM Return values.\r
+ */\r
+typedef enum {\r
+       /** No server Error */\r
+       DRM_RESULT_CODE_NONE,\r
+\r
+       /** Device Certificate is revoked.\r
+        * User shall be informed that their device needs to be updated.\r
+        */\r
+       DRM_RESULT_CODE_DEVCERT_REVOKED,\r
+\r
+       /** Indicates a server problem.Device shall silently retry 3 times.\r
+        *  If failure persists, user shall be informed about a server failure\r
+        *  and to try again later\r
+        */\r
+       DRM_RESULT_CODE_INTERNAL_ERROR,\r
+\r
+       /** Means an invalid protocol message.\r
+        * This shall never happen unless there's been a "man in the middle"\r
+        * attack. Device shall perform a retry.\r
+        */\r
+       DRM_RESULT_CODE_INVALID_MESSAGE,\r
+\r
+       /** Means that the device limit has been reached for this domain and\r
+        * therefore the device cannot join this Domain.\r
+        * The application on the device shall provide the appropriate\r
+        * response to the end user.\r
+        */\r
+       DRM_RESULT_CODE_DEVICE_LIMIT_REACHED,\r
+\r
+       /** Indicates that the device shall join a Domain and then\r
+        * retry license acquisition.\r
+        */\r
+       DRM_RESULT_CODE_DOMAIN_REQUIRED,\r
+\r
+       /** Indicates that the device shall renew the Domain Certificate\r
+        * for this Domain. The device shall join Domain and then retry\r
+        * license acquisition.\r
+        */\r
+       DRM_RESULT_CODE_RENEW_DOMAIN,\r
+\r
+       /** Device shall leave Domain */\r
+       DRM_RESULT_CODE_NOT_A_MEMBER,\r
+\r
+       /** Means that device is not using correct protocol, most likely\r
+        * because server has been updated since device was manufactured.\r
+        * The device shall notify user to check for updates or fail gracefully.\r
+        */\r
+       DRM_RESULT_CODE_PROTOCOL_VERSION_MISMATCH,\r
+\r
+       /** User shall always be authenticated before making license acquisitions.\r
+        *  If this error happens, device shall notify user to contact\r
+        *  customer service.\r
+        */\r
+       DRM_RESULT_CODE_UNKNOWN_ACCOUNTID,\r
+\r
+       /** Device shall follow redirect. */\r
+       DRM_RESULT_CODE_PROTOCOL_REDIRECT,\r
+\r
+       /** Service specific Server errors */\r
+       DRM_RESULT_CODE_SERVICE_SPECIFIC,\r
+} drm_web_server_result_code_e;\r
+\r
+/**\r
+ * @enum drm_initiator_type\r
+ * @brief DRM Initiator type\r
+ */\r
+typedef enum {\r
+       DRM_INITIATOR_TYPE_NONE = -1,\r
+                       DRM_INITIATOR_TYPE_INITIATOR_URL,\r
+                       DRM_INITIATOR_TYPE_LICENSE_ACQ,\r
+                       DRM_INITIATOR_TYPE_JOIN_DOMAIN,\r
+                       DRM_INITIATOR_TYPE_LEAVE_DOMAIN,\r
+                       DRM_INITIATOR_TYPE_METERING_INFO\r
+} drm_initiator_type;\r
+\r
+/**\r
+ * @enum drm_const_type_e\r
+ * @brief DRM constraint types\r
+ */\r
+typedef enum {\r
+       DRM_CONSTRAINT_TYPE_RENTAL = 0,\r
+       DRM_CONSTRAINT_TYPE_RENTAL_UNLIMITED,\r
+       DRM_CONSTRAINT_TYPE_PURCHASE,\r
+       DRM_CONSTRAINT_TYPE_BASE,\r
+       DRM_CONSTRAINT_TYPE_EXPIRED,\r
+       DRM_CONSTRAINT_TYPE_NOT_AUTHORIZED,\r
+       DRM_CONSTRAINT_TYPE_INVALID_DRM_VERSION,\r
+       DRM_CONSTRAINT_TYPE_UNKNOWN_TYPE,\r
+       DRM_CONSTRAINT_TYPE_GENERAL_ERROR\r
+} drm_const_type_e;\r
+\r
+/**\r
+ * @struct drm_content_info_s\r
+ * @brief DRM content info structure.\r
+ */\r
+typedef struct {\r
+       /**< Author of original content */\r
+       char author[DRM_MAX_LEN_AUTHOR];\r
+\r
+       /**< Copyright information */\r
+       char copyright[DRM_MAX_LEN_COPYRIGHT];\r
+\r
+       /**< Content information */\r
+       char description[DRM_MAX_LEN_DESCRIPTION];\r
+\r
+       char icon_uri[DRM_MAX_LEN_ICON_URI];                    /**< Icon URI */\r
+       char info_url[DRM_MAX_LEN_INFO_URL];                    /**< Information URL */\r
+       char content_url[DRM_MAX_LEN_CONTENT_URL];      /**< Content URL */\r
+       char rights_url[DRM_MAX_LEN_RIGHTS_URL];                /**< Rights URL */\r
+       char title[DRM_MAX_LEN_TITLE];                          /**< Content Title */\r
+\r
+       /**< Original MIME type */\r
+       char mime_type[DRM_MAX_LEN_MIME];\r
+       char content_id[DRM_MAX_LEN_CID];                       /**< Content ID */\r
+\r
+} drm_content_info_s;\r
+\r
+/**\r
+ * @struct drm_file_oma_info_s\r
+ * @brief DRM (OMA)file info structure.\r
+ */\r
+typedef struct {\r
+       drm_rights_version_e version;   /**< OMA DRM Rights Version */\r
+       drm_method_type_e method;               /**< OMA DRM Method type */\r
+}drm_file_oma_info_s;\r
+\r
+/**\r
+ * @struct drm_file_pr_env_info_s\r
+ * @brief DRM (PlayReady Envelope)file info structure.\r
+ */\r
+typedef struct {\r
+       /**< Original content file name inside Playready - Envelope Contents */\r
+       char org_file_name[DRM_MAX_LEN_FILEPATH];\r
+\r
+       /**< Original content file size inside Playready - Envelope Contents */\r
+       unsigned int org_file_size;\r
+}drm_file_pr_env_info_s;\r
+\r
+/**\r
+ * @struct drm_file_sapps_info_s\r
+ * @brief DRM (SAPPS)file info structure.\r
+ */\r
+typedef struct {\r
+       char content_id[DRM_MAX_LEN_CID];                       /**< Content ID */\r
+       char rights_url[DRM_MAX_LEN_RIGHTS_URL];        /**< Rights URL */\r
+} drm_file_sapps_info_s;\r
+\r
+/**\r
+ * @struct drm_file_info_s\r
+ * @brief DRM file info structure.\r
+ */\r
+typedef struct {\r
+       drm_file_oma_info_s oma_info;           /**< OMA DRM file info */\r
+       drm_file_pr_env_info_s pr_env_info;     /**< PlayReady\r
+                                                                                               Envelope file info */\r
+       drm_file_sapps_info_s sapps_info;       /**< SAPPS file info */\r
+} drm_file_info_s;\r
+\r
+/**\r
+ * @struct drm_constraint_type_s\r
+ * @brief DRM Constraint type structure.\r
+ */\r
+typedef struct {\r
+       int is_unlimited;                                 /**< Unlimited constraints */\r
+       int is_count;                                     /**< Count constraint present/not present */\r
+       int is_datetime;                                  /**< Datetime constraint present/not present */\r
+       int is_interval;                                  /**< Interval constraint present/not present */\r
+       int is_timedcount;                                /**< TimedCount constraint present/not present */\r
+       int is_accumulated;                               /**< Accumulated constraint present/not present */\r
+       int is_individual;                                /**< Individual constraint present/not present */\r
+       int is_system;                                    /**< System constraint present/not present */\r
+       drm_const_type_e constraint_type;         /**< Divx constraint types */\r
+} drm_constraint_type_s;\r
+\r
+/**\r
+ * @struct drm_constraint_info_s\r
+ * @brief DRM Constraint info structure.\r
+ */\r
+typedef struct {\r
+\r
+       /**< Constraint type*/\r
+       drm_constraint_type_s const_type;\r
+\r
+       /**< Original Count */\r
+       int original_count;\r
+\r
+       /**< Remaining Count */\r
+       int remaining_count;\r
+\r
+       /**< Start Time */\r
+       /*\r
+        * As per definition of struct tm:-\r
+        * int    tm_sec   seconds [0,61]\r
+        * int    tm_min   minutes [0,59]\r
+        * int    tm_hour  hour [0,23]\r
+        * int    tm_mday  day of month [1,31]\r
+        * int    tm_mon   month of year [0,11]\r
+        * int    tm_year  years since 1900\r
+        * int    tm_wday  day of week [0,6] (Sunday = 0)\r
+        * int    tm_yday  day of year [0,365]\r
+        * int    tm_isdst daylight savings flag\r
+        *\r
+        */\r
+\r
+       /* if tm_year = 109 then it means actual year = 109 + 1900 = 2009\r
+        * if tm_mon = 0 then it means actual month = 0 + 1 = 1 = January\r
+        * if tm_mon = 1 then it means actual month = 1 + 1 = 2 = Feb\r
+        * Other parameters doesn't need any manipulation\r
+        * if tm_mday = 5 then it means day of the month = 5\r
+        */\r
+       struct tm start_time;\r
+\r
+       /**< End time */\r
+       /*\r
+        * As per definition of struct tm:-\r
+        * int    tm_sec   seconds [0,61]\r
+        * int    tm_min   minutes [0,59]\r
+        * int    tm_hour  hour [0,23]\r
+        * int    tm_mday  day of month [1,31]\r
+        * int    tm_mon   month of year [0,11]\r
+        * int    tm_year  years since 1900\r
+        * int    tm_wday  day of week [0,6] (Sunday = 0)\r
+        * int    tm_yday  day of year [0,365]\r
+        * int    tm_isdst daylight savings flag\r
+        *\r
+        */\r
+\r
+       /* if tm_year = 109 then it means actual year = 109 + 1900 = 2009\r
+        * if tm_mon = 0 then it means actual month = 0 + 1 = 1 = January\r
+        * if tm_mon = 1 then it means actual month = 1 + 1 = 2 = Feb\r
+        * Other parameters doesn't need any manipulation\r
+        * if tm_mday = 5 then it means day of the month = 5\r
+        */\r
+       struct tm end_time;\r
+\r
+       /**< Interval Time */\r
+       /*\r
+        * In interval time calculation, no need to manipulate it.\r
+        * e.g if tm_year = 109 then it means actual year = 109.\r
+        * It means license constraint says that content can be consumed in 109 years.\r
+        *\r
+        * e.g:-\r
+        * tm_year = 1\r
+        * tm_mon = 0\r
+        * tm_mday = 0\r
+        * tm_hour = 1\r
+        * tm_min = 10\r
+        * tm_sec = 40\r
+        *\r
+        * It means content has validity for 1 year, 1 hour, 1 minute & 40 seconds.\r
+        */\r
+       struct tm interval_time;\r
+\r
+       /**< Timed original count */\r
+       int timed_original_count;\r
+\r
+       /**< Timed Remaining count */\r
+       int timed_remaining_count;\r
+\r
+       /**< Timer attribute of Timed-count constraint */\r
+       int timed_count_timer;\r
+\r
+       /**< Accumulated original time in seconds */\r
+       int accumulated_original_seconds;\r
+\r
+       /**< Accumulated remaining time in seconds */\r
+       int accumulated_remaining_seconds;\r
+\r
+       /**< individual identity type */\r
+       drm_constraint_identity_type_e individual_identity_type;\r
+\r
+       /**< individual identity */\r
+       char individual_id[DRM_MAX_LEN_INDIVIDUAL_IDENTITY];\r
+\r
+       /**< system identity type */\r
+       drm_constraint_identity_type_e system_identity_type;\r
+\r
+       /**< system identity */\r
+       char system_id[DRM_MAX_LEN_SYSTEM_IDENTITY];\r
+} drm_constraint_info_s;\r
+\r
+/**\r
+* @struct drm_action_allowed_data_s\r
+* @brief DRM Action Allowed structure.\r
+*/\r
+typedef struct {\r
+       /**< File Path */\r
+       char file_path[DRM_MAX_LEN_FILEPATH];\r
+       /**< Additional input data */\r
+       int data;\r
+}drm_action_allowed_data_s;\r
+\r
+/**\r
+* @struct drm_secure_clock_data_s\r
+* @brief DRM secure clock data structure.\r
+*/\r
+typedef struct {\r
+       /** Flag to inform whether secure clock is SET or NOT SET\r
+        * is_secure_clock_set = 0 => Secure clock NOT SET.\r
+        * is_secure_clock_set = 1 => Secure clock is SET.\r
+        */\r
+       int is_secure_clock_set;\r
+\r
+       /** Secure clock data */\r
+       struct tm secure_clock;\r
+}drm_secure_clock_data_s;\r
+\r
+/**\r
+ * @struct drm_transaction_id_info_s\r
+ * @brief DRM Transaction tracking ID structure.\r
+ */\r
+typedef struct {\r
+       /* transaction ID value*/\r
+       char tr_id[DRM_MAX_SIZE_TRANSACTION_ID];\r
+\r
+       /*\r
+        * length of Transaction ID string.\r
+        * The value zero(0) indicates that transaction id is not available\r
+        */\r
+       unsigned int tr_id_len;\r
+}drm_transaction_id_info_s;\r
+\r
+/**\r
+ * @struct drm_code_info_s\r
+ * @brief DRM DivX (Registration / De-registration)Code information structure.\r
+ */\r
+typedef struct {\r
+       /** Code */\r
+       char code[DRM_MAX_SIZE_DIVX_CODE];\r
+\r
+       /**\r
+        * length of Code.\r
+        * The value zero(0) indicates that Code is not available.\r
+        */\r
+       unsigned int code_len;\r
+}drm_code_info_s;\r
+\r
+/**\r
+ * @struct drm_unregister_info_s\r
+ * @brief DRM Unregister Information structure.\r
+ */\r
+typedef struct {\r
+       /** file path to be unregistered */\r
+       char file_path[DRM_MAX_LEN_FILEPATH];\r
+\r
+       /*\r
+        * Flag to inform whether license also need to be removed\r
+        * remove_license = 0 => Do not remove License.\r
+        * remove_license = 1 => Remove License.\r
+        */\r
+       int remove_license;\r
+}drm_unregister_info_s;\r
+\r
+/**\r
+ * @struct     drm_user_operation_info_s\r
+ * @brief      DRM operation information structure.\r
+ */\r
+typedef struct {\r
+       /** Type of OPERATION */\r
+       drm_operation_type_e operation_type;\r
+\r
+       /** Status of OPERATION */\r
+       drm_operation_status_e operation_status;\r
+} drm_user_operation_info_s;\r
+\r
+/**\r
+ * Function pointer to handle DRM operation notifications\r
+ *\r
+ * @param[out] operation_info  operation information .\r
+ * @param[out] output_data             Output data specific to operation.\r
+ * @return             None\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+typedef void (*drm_operation_cb)(drm_user_operation_info_s *operation_info,\r
+               void *output_data);\r
+\r
+/**\r
+ * @struct     drm_operation_cb_s\r
+ * @brief      DRM Operation callback structure.\r
+ * @remark     Currently one member but new callback can be added depending on\r
+ *                     requirements.\r
+ */\r
+typedef struct {\r
+       /** Callback */\r
+       drm_operation_cb callback;\r
+}drm_operation_cb_s;\r
+\r
+/**\r
+ * @struct drm_register_lic_info_s\r
+ * @brief DRM License register Information structure.\r
+ */\r
+typedef struct {\r
+       /** Pointer to license buffer data */\r
+       unsigned char lic_data[DRM_MAX_LEN_LICENSE_DATA];\r
+\r
+       /** license buffer data length */\r
+       unsigned int lic_data_len;\r
+\r
+       /** license version (OMA DRM v1 or OMA DRM v2) */\r
+       drm_rights_version_e lic_version;\r
+\r
+       /** Source of ROAP Initialization */\r
+       drm_roap_init_src_e roap_init_src;\r
+\r
+       /** Callback for status update */\r
+       drm_operation_cb_s operation_callback;\r
+}drm_register_lic_info_s;\r
+\r
+/**\r
+ * @struct drm_register_lic_resp_s\r
+ * @brief DRM License register Output parameter.\r
+ */\r
+typedef struct {\r
+\r
+       /** Content ID */\r
+       char cid[DRM_MAX_LEN_CID];\r
+\r
+}drm_register_lic_resp_s;\r
+\r
+/**\r
+ * @struct     drm_custom_data_info_s\r
+ * @brief      DRM Custom Data Information.\r
+ */\r
+typedef struct {\r
+       char app_id[DRM_MAX_LEN_APP_ID + 1];                    /** App ID */\r
+       char user_guid[DRM_MAX_LEN_USER_GUID +1];       /** User GID */\r
+       char device_id[DRM_MAX_LEN_DEVICE_ID + 1];              /** Device ID */\r
+       char order_id[DRM_MAX_LEN_ORDER_ID + 1];                        /** Order ID */\r
+       char service_id[DRM_MAX_LEN_SERVICE_ID + 1];            /** Service ID */\r
+       char account_id[DRM_MAX_LEN_ACCOUNT_ID + 1];            /** Account ID */\r
+} drm_custom_data_info_s;\r
+\r
+/**\r
+ * @struct drm_initiator_info_s\r
+ * @brief DRM License Initiator Information structure.\r
+ */\r
+typedef struct {\r
+       /** Pointer to Initiator URL */\r
+       char initiator_url[DRM_MAX_LEN_INITIATOR_URL];\r
+\r
+       /** Initiator URL length */\r
+       unsigned int initiator_url_len;\r
+\r
+       /** Callback for status update */\r
+       drm_operation_cb_s operation_callback;\r
+\r
+       /** Initiator Type */\r
+       drm_initiator_type init_type;\r
+\r
+       /** Custom Data */\r
+       drm_custom_data_info_s custom_data;\r
+}drm_initiator_info_s;\r
+\r
+/**\r
+ * @struct     drm_web_server_resp_data_s\r
+ * @brief      DRM Web Server Response Data After submitting Initiator URL Information.\r
+ */\r
+typedef struct {\r
+    /** Content URL. Application can download content using this URL if available*/\r
+       char content_url[DRM_MAX_LEN_CONTENT_URL];\r
+\r
+       /** Server Result Code */\r
+       drm_web_server_result_code_e result_code;\r
+} drm_web_server_resp_data_s;\r
+\r
+/**\r
+ * Function pointer to handle DRM Roap Notifications\r
+ *\r
+ * @param[out] cbParam                         Parameter\r
+ * @param[out] appSessionData          Application Session Data\r
+ * @param[out] agentSessionData        DRM Agent Session Data\r
+ * @return             None\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+typedef void (*drm_roap_service_cb) (void *cbParam,    /**<parameter */\r
+                                              void *appSessionData,   /**<application session data */\r
+                                              void *agentSessionData   /**<DRM agent session data */\r
+           );\r
+\r
+/**\r
+* Type Definition Template\r
+*/\r
+typedef drm_roap_service_cb drm_roap_notify_cb;\r
+/**\r
+* Type Definition Template\r
+*/\r
+typedef drm_roap_service_cb drm_roap_consent_cb;\r
+/**\r
+* Type Definition Template\r
+*/\r
+typedef drm_roap_service_cb drm_roap_result_cb;\r
+\r
+/**\r
+ * @struct     drm_roap_notification_cb_s\r
+ * @brief      DRM Roap Notification callback structure.\r
+ */\r
+typedef struct {\r
+       drm_roap_notify_cb progressNotify;                                  /** Progress Notify */\r
+       drm_roap_consent_cb userConsent;                                    /** User Consent */\r
+       drm_roap_result_cb roapResult;                                  /** Roap Result */\r
+} drm_roap_notification_cb_s;\r
+\r
+/**\r
+ * Function pointer to handle Start of Content download\r
+ *\r
+ * @param[out] appSessionData  App Session Data.\r
+ * @return             int\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+typedef int (*drm_content_start_download_cb) (void *appSessionData);\r
+\r
+/**\r
+ * Function pointer to handle Progress of ODF download\r
+ *\r
+ * @param[out] pData                   Data\r
+ * @param[out] DataLen                 Data length\r
+ * @param[out] appSessionData  App Session Data.\r
+ * @return             int\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+typedef int (*drm_content_progress_download_cb) (const void *pData,\r
+                                                   unsigned int DataLen,\r
+                                                   void *appSessionData);\r
+\r
+/**\r
+ * Function pointer to handle Start of ODF download\r
+ *\r
+ * @param[out] appSessionData  App Session Data.\r
+ * @return             int\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+typedef int (*drm_content_finish_download_cb) (void *appSessionData);\r
+\r
+/**\r
+ * @struct     drm_roap_notification_cb_s\r
+ * @brief      DRM Roap Notification callback structure.\r
+ */\r
+typedef struct {\r
+       drm_content_start_download_cb start_download_cb;                /** Start Download */\r
+       drm_content_progress_download_cb progress_download_cb;  /** Progress Download */\r
+       drm_content_finish_download_cb finish_download_cb;              /** Finish Download */\r
+} drm_content_download_cb_s;\r
+\r
+/**\r
+ * @struct     drm_appsession_datatype_s\r
+ * @brief      DRM Application Session Datatype structure.\r
+ */\r
+typedef struct {\r
+       int profileID;                                                                                  /** Profile ID */\r
+       int is_progressive_download;                                                    /** Is Progressive Download */\r
+       char pProxyAddress[DRM_MAX_LEN_IP_ADDR];                                /** Proxy Address */\r
+       drm_content_download_cb_s content_download_cb;                                  /** Content Download callback */\r
+       unsigned int size_pData;                                                                /** Size of additional data */\r
+       void *pData;                                                                                    /** Additional Data */\r
+} drm_appsession_datatype_s;\r
+\r
+/**\r
+ * @struct     drm_submit_roap_message_info_s\r
+ * @brief      DRM Submit Roap Message Info\r
+ */\r
+typedef struct {\r
+    unsigned char* buffer;                                             /** Buffer that contains Trigger of PDU data */\r
+    unsigned int buff_size;                                            /** Buffer size */\r
+    drm_roap_notification_cb_s roap_notify;            /** Roap Notification callback */\r
+    drm_roap_init_src_e roap_initiator;                        /** Roap Initiator */\r
+    drm_appsession_datatype_s app_session_data;        /** App Session Data */\r
+} drm_submit_roap_message_info_s;\r
+\r
+/**\r
+ * @struct     drm_submit_roap_user_content_info_s\r
+ * @brief      DRM Submit Roap User Consent Info\r
+ */\r
+typedef struct {\r
+       drm_bool_type_e bConsent;                                       /** Result of User Consent */\r
+\r
+       drm_bool_type_e bAddToTrustedWhiteList;         /** Result of User Consent */\r
+\r
+       unsigned int size_agentdata;                            /** Size of Agent Data */\r
+\r
+       /** Specifies the pointer points to a ROAP session information that is used by DRM.\r
+        *  Must deliver agentData received through Callback completely intact\r
+        */\r
+       void *agentdata;\r
+} drm_submit_roap_user_consent_info_s;\r
+\r
+/**\r
+ * @struct     drm_http_user_cancel_info_s\r
+ * @brief      DRM HTTP User Cancel Info\r
+ */\r
+typedef struct {\r
+       unsigned int size_app_session_data;     /** Size of App Session Data */\r
+       void *app_session_data;                         /** App Session Data */\r
+} drm_http_user_cancel_info_s;\r
+\r
+/**\r
+ * @struct     drm_register_copy_file_info_s\r
+ * @brief      DRM Register Copy file Info.\r
+ */\r
+typedef struct {\r
+       char src_file_path[DRM_MAX_LEN_FILEPATH];       /** Source File Path */\r
+       char dest_file_path[DRM_MAX_LEN_FILEPATH];      /** Destination File Path */\r
+} drm_register_copy_file_info_s;\r
+\r
+/**\r
+ * @struct     drm_register_move_file_info_s\r
+ * @brief      DRM Register Move file Info.\r
+ */\r
+typedef struct {\r
+       char src_file_path[DRM_MAX_LEN_FILEPATH];       /** Source File Path */\r
+       char dest_file_path[DRM_MAX_LEN_FILEPATH];      /** Destination File Path */\r
+} drm_register_move_file_info_s;\r
+\r
+/**\r
+ * @struct     drm_register_setas_info_s\r
+ * @brief      DRM Register SetAs Info.\r
+ */\r
+typedef struct {\r
+       char file_path[DRM_MAX_LEN_FILEPATH];   /** Source File Path */\r
+       drm_setas_category_e setas_cat;                 /** SetAs Category */\r
+} drm_register_setas_info_s;\r
+\r
+/**\r
+ * @struct     drm_register_setas_resp_data_s\r
+ * @brief      DRM Stack Response Data containing the GMT expiry\r
+ *             time corresponding to a given content\r
+ */\r
+typedef struct {\r
+       struct tm       time_expiry;                                            /** Expiry time*/\r
+} drm_register_setas_resp_data_s;\r
+\r
+/**\r
+ * @struct     drm_unregister_setas_info_s\r
+ * @brief      DRM Unregister SetAs Info.\r
+ */\r
+typedef struct {\r
+       char file_path[DRM_MAX_LEN_FILEPATH];   /** Source File Path */\r
+       drm_setas_category_e setas_cat;                 /** SetAs Category */\r
+} drm_unregister_setas_info_s;\r
+\r
+#ifdef __cplusplus\r
+}\r
+#endif /* __cplusplus */\r
+\r
+#endif /*__DRM_CLIENT_TYPES_H__ */\r
diff --git a/packaging/drm-client.spec b/packaging/drm-client.spec
new file mode 100755 (executable)
index 0000000..517dde3
--- /dev/null
@@ -0,0 +1,55 @@
+Name:       drm-client
+Summary:    DRM client Package
+Version:    0.0.30
+Release:    0
+Group:      TO_BE/FILLED_IN
+License:    Apache
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  pkgconfig(dlog)
+BuildRequires:  pkgconfig(capi-base-common)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  cmake
+
+%description
+DRM client library (Shared Object)
+
+
+%package devel
+Summary:    Development files for %{name}
+Group:      Development/Libraries
+Requires:   %{name} = %{version}-%{release}
+%description devel
+Development files for %{name}
+
+%prep
+%setup -q
+
+%build
+cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix}
+
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+%files
+%defattr(-,root,root,-)
+%{_libdir}/*.so.*
+
+%files devel
+%defattr(-,root,root,-)
+%{_includedir}/drm-client/*
+%{_libdir}/*.so
+%{_libdir}/pkgconfig/drm-client.pc
+
+%clean
+rm -rf CMakeCache.txt
+rm -rf CMakeFiles
+rm -rf cmake_install.cmake
+rm -rf Makefile
+rm -rf install_manifest.txt
+rm -rf *.pc
+rm -rf documentation.list
+
+rm -rf libdrm-client.so libdrm-client.so.0 libdrm-client.so.0.0.1
diff --git a/service/drm_client.cpp b/service/drm_client.cpp
new file mode 100755 (executable)
index 0000000..86685db
--- /dev/null
@@ -0,0 +1,1426 @@
+/*\r
+ * drm-client\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
+/**\r
+ * @file               drm_client.cpp\r
+ * @brief       DRM Client API defintions.\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 Client API Definitions.\r
+ */\r
+\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <malloc.h>\r
+\r
+#include "drm_client.h"\r
+#include "drm_client_ipc.h"\r
+#include "drm_client_log.h"\r
+//#include "security-server.h"\r
+\r
+#include <glib.h>\r
+\r
+#ifndef EXPORT_API\r
+#define EXPORT_API __attribute__((visibility("default")))\r
+#endif\r
+\r
+\r
+\r
+/**\r
+ *  Private function\r
+ *\r
+ *\r
+ * @param[in]  file_path               Specifies the pointer points a DRM file path.\r
+ * @return             This function returns DRM file type.\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+static drm_file_type_e _drm_client_get_file_type(const char* file_path);\r
+\r
+/**\r
+ *  An application can check that a file is DRM file\r
+ *  (OMA DRM, PlayReady, DivX etc.)\r
+ *\r
+ * @param[in]  file_path               Specifies the pointer points a DRM file path.\r
+ * @param[out] is_drm_file     DRM_TRUE if the input file is a DRM file\r
+ *                                                             else DRM_FALSE.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ *\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+EXPORT_API int drm_is_drm_file(const char *file_path,\r
+               drm_bool_type_e *is_drm_file)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s", (!file_path) ? NULL:file_path);\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+       int ret_cpy = 0;\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !is_drm_file) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, is_drm_file = %p",\r
+                               file_path, is_drm_file);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       file_type = _drm_client_get_file_type(file_path);\r
+\r
+       switch (file_type) {\r
+       case DRM_TYPE_OMA_V1:\r
+       case DRM_TYPE_OMA_V2:\r
+       case DRM_TYPE_PLAYREADY:\r
+       case DRM_TYPE_PLAYREADY_ENVELOPE:\r
+               /* All the above 4 cases correspond to a file being DRM file! */\r
+               DRM_CLIENT_LOG("file_type = %d", file_type);\r
+               *is_drm_file = DRM_TRUE;\r
+               break;\r
+\r
+       case DRM_TYPE_DIVX: {\r
+\r
+               /* memset the structures */\r
+               memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+               memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+               /* In this case, further analysis of headers required to identify DRM file */\r
+               /* Contact the server to perform operations */\r
+\r
+               /* Store the input parameters to the Request Data structure to be sent to server */\r
+               if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data, file_path,\r
+                               DRM_MAX_LEN_FILEPATH)) >= DRM_MAX_LEN_FILEPATH) {\r
+                       DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                                       file_path, strlen(file_path), ret_cpy);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+\r
+               /* Tell the server which API to be used */\r
+               req_data.fixed_data.api_name = DRM_IS_DRM_FILE;\r
+\r
+               /* Call the Client Communication API */\r
+               if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+                       DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+                       return DRM_RETURN_COMMUNICATION_ERROR;\r
+               }\r
+\r
+               /* Copy the response obtained from the server into the output parameter */\r
+               if (resp_data.fixed_data.resp_result != 0) {\r
+                       DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                                       resp_data.fixed_data.resp_result);\r
+                       *is_drm_file = DRM_FALSE;\r
+                       goto ErrorExit;\r
+               } else {\r
+                       DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+                       *is_drm_file = resp_data.fixed_data.bool_val;\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case DRM_TYPE_UNDEFINED:\r
+               DRM_CLIENT_LOG("file_type = %d", file_type);\r
+               *is_drm_file = DRM_FALSE;\r
+               break;\r
+\r
+       default:\r
+               DRM_CLIENT_EXCEPTION("Undefined file type!!");\r
+               *is_drm_file = DRM_FALSE;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("Exit:Success!!, is_drm_file = %d",\r
+                       *is_drm_file);\r
+       return DRM_RETURN_SUCCESS;\r
+\r
+ErrorExit:\r
+       DRM_CLIENT_EXCEPTION("Exit:failed!!, is_drm_file = %d",\r
+                       *is_drm_file);\r
+       return DRM_RETURN_INTERNAL_ERROR;\r
+\r
+}\r
+\r
+/**\r
+ *  An application can get DRM file type of the file that is\r
+ *  specified in file_path\r
+ *\r
+ * @param[in]  file_path       Specifies the pointer points a DRM file path.\r
+ * @param[out] file_type       DRM file type.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_file_type(const char *file_path, drm_file_type_e *file_type)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s", (!file_path) ? NULL:file_path);\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !file_type) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, file_type = %p",\r
+                               file_path, file_type);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       *file_type = _drm_client_get_file_type(file_path);\r
+       DRM_CLIENT_LOG("Exit:Success!! file_type = %d", *file_type);\r
+       return DRM_RETURN_SUCCESS;\r
+}\r
+\r
+/**\r
+ * An application can check that a DRM file has valid license or not.\r
+ *\r
+ * @param[in]  file_path               DRM file path.\r
+ * @param[in]  perm_type               Enumeration type of permission.\r
+ * @param[out] license_status  license status.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_license_status(const char *file_path,\r
+               drm_permission_type_e perm_type,\r
+               drm_license_status_e *license_status)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s, perm_type = %d",\r
+                       (!file_path) ? NULL:file_path, perm_type);\r
+\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !license_status) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, license_status = %p",\r
+                               file_path, license_status);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       /* Store the input parameters to the Request Data structure to be sent to server */\r
+       if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data, file_path,\r
+                       DRM_MAX_LEN_FILEPATH)) >= DRM_MAX_LEN_FILEPATH) {\r
+               DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                               file_path, strlen(file_path), ret_cpy);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       req_data.fixed_data.permission_type = perm_type;\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_GET_LICENSE_STATUS;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+               *license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+               *license_status = resp_data.fixed_data.lic_status;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("*license_status = %d", *license_status);\r
+\r
+ErrorExit:\r
+       if (result != DRM_RETURN_SUCCESS) {\r
+               DRM_CLIENT_EXCEPTION("Exit:failed!!, result = 0x%x", result);\r
+       } else {\r
+               DRM_CLIENT_LOG("Exit:Success!!, result = 0x%x", result);\r
+       }\r
+\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can get DRM Content information for the file\r
+ * specified in file_path.\r
+ *\r
+ * @param[in]  file_path               DRM file path.\r
+ * @param[out] content_info    Content information.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_content_info(const char *file_path,\r
+               drm_content_info_s *content_info)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s", (!file_path) ? NULL:file_path);\r
+\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !content_info) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, content_info = %p",\r
+                               file_path, content_info);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       /* memset the output structure */\r
+       memset(content_info, 0x00, sizeof(drm_content_info_s));\r
+\r
+       /* Store the input parameters to the Request Data structure to be sent to server */\r
+       if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data, file_path,\r
+                       DRM_MAX_LEN_FILEPATH)) >= DRM_MAX_LEN_FILEPATH) {\r
+               DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                               file_path, strlen(file_path), ret_cpy);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_GET_CONTENT_INFO;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+               memset(content_info, 0x00, sizeof(drm_content_info_s));\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+               memcpy(content_info, &resp_data.fixed_data.response_data, sizeof(drm_content_info_s));\r
+       }\r
+\r
+       DRM_CLIENT_LOG("content_info->author = %s", content_info->author);\r
+       DRM_CLIENT_LOG("content_info->content_id = %s", content_info->content_id);\r
+       DRM_CLIENT_LOG("content_info->content_url = %s", content_info->content_url);\r
+       DRM_CLIENT_LOG("content_info->copyright = %s", content_info->copyright);\r
+       DRM_CLIENT_LOG("content_info->description = %s", content_info->description);\r
+       DRM_CLIENT_LOG("content_info->icon_uri = %s", content_info->icon_uri);\r
+       DRM_CLIENT_LOG("content_info->info_url = %s", content_info->info_url);\r
+       DRM_CLIENT_LOG("content_info->mime_type = %s", content_info->mime_type);\r
+       DRM_CLIENT_LOG("content_info->rights_url = %s", content_info->rights_url);\r
+       DRM_CLIENT_LOG("content_info->title = %s", content_info->title);\r
+\r
+ErrorExit:\r
+if (result != DRM_RETURN_SUCCESS) {\r
+               DRM_CLIENT_EXCEPTION("Exit:failed!!, result = 0x%x", result);\r
+       } else {\r
+               DRM_CLIENT_LOG("Exit:Success!!, result = 0x%x", result);\r
+       }\r
+\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can get file information of a DRM file.\r
+ *\r
+ * @param[in]  file_path               DRM file path.\r
+ * @param[out] fileInfo                DRM file info.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_file_info(const char *file_path,\r
+               drm_file_info_s *fileInfo)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s", (!file_path) ? NULL:file_path);\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !fileInfo) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, fileInfo = %p",\r
+                               file_path, fileInfo);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("file_path = %s", file_path);\r
+\r
+       /* memset the output structure */\r
+       memset(fileInfo, 0x00, sizeof(drm_file_info_s));\r
+\r
+       /* Store the input parameters to the Request Data structure to be sent to server */\r
+       if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data, file_path,\r
+                       DRM_MAX_LEN_FILEPATH)) >= DRM_MAX_LEN_FILEPATH) {\r
+               DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                               file_path, strlen(file_path), ret_cpy);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_GET_FILE_INFO;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+               memset(fileInfo, 0x00, sizeof(drm_file_info_s));\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+               memcpy(fileInfo, &resp_data.fixed_data.response_data, sizeof(drm_file_info_s));\r
+       }\r
+\r
+       DRM_CLIENT_LOG("fileInfo->oma_info.method = %d", fileInfo->oma_info.method);\r
+       DRM_CLIENT_LOG("fileInfo->oma_info.version = %d", fileInfo->oma_info.version);\r
+\r
+ErrorExit:\r
+       if (result != DRM_RETURN_SUCCESS) {\r
+               DRM_CLIENT_EXCEPTION("Exit:failed!!, result = 0x%x", result);\r
+       } else {\r
+               DRM_CLIENT_LOG("Exit:Success!!, result = 0x%x", result);\r
+       }\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can get constraints associated with\r
+ * given permission & given file\r
+ *\r
+ * @param[in]  file_path                       DRM file path.\r
+ * @param[in]  perm_type                       Enumeration type of permission.\r
+ * @param[out] constraint_info         Constraint info.\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_constraint_info(const char *file_path,\r
+               drm_permission_type_e perm_type,\r
+               drm_constraint_info_s *constraint_info)\r
+{\r
+       DRM_CLIENT_LOG("Enter: file_path = %s, perm_type = %d",\r
+                       (!file_path) ? NULL:file_path, perm_type);\r
+\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check input parameters */\r
+       if (!file_path || '\0' == file_path[0] || !constraint_info) {\r
+               DRM_CLIENT_EXCEPTION("Invalid Arg!!, file_path = %p, constraint_info = %p",\r
+                               file_path, constraint_info);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("file_path = %s, perm_type = %d", file_path, perm_type);\r
+\r
+       /* memset the output structure */\r
+       memset(constraint_info, 0x00, sizeof(drm_constraint_info_s));\r
+\r
+       /* Store the input parameters to the Request Data structure to be sent to server */\r
+       if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data, file_path,\r
+                       DRM_MAX_LEN_FILEPATH)) >= DRM_MAX_LEN_FILEPATH) {\r
+               DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                               file_path, strlen(file_path), ret_cpy);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+       req_data.fixed_data.permission_type = perm_type;\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_GET_CONSTRAINT_INFO;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+               memset(constraint_info, 0x00, sizeof(drm_constraint_info_s));\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+               memcpy(constraint_info, &resp_data.fixed_data.response_data, sizeof(drm_constraint_info_s));\r
+       }\r
+\r
+ErrorExit:\r
+       if (result != DRM_RETURN_SUCCESS) {\r
+               DRM_CLIENT_EXCEPTION("Exit:failed!!, result = 0x%x", result);\r
+       } else {\r
+               DRM_CLIENT_LOG("Exit:Success!!, result = 0x%x", result);\r
+       }\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can check the feasibility of actions to be\r
+ * performed based on the type of DRM file.\r
+ *\r
+ * @param[in]  action                          Action to be taken.\r
+ * @param[in]  action_data             Data needed to check action\r
+ *                                                                     allowed operation\r
+ * @param[out] is_allowed                      DRM_TRUE if action is allowed\r
+ *                                                                     else DRM_FALSE\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_is_action_allowed(drm_action_type_e action,\r
+               drm_action_allowed_data_s *action_data,\r
+               drm_bool_type_e *is_allowed)\r
+{\r
+       DRM_CLIENT_LOG("Enter: action = %d, action_data = %p", action, action_data);\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check input parameters based on action type */\r
+       switch(action){\r
+       case DRM_IS_FORWARDING_ALLOWED:\r
+       case DRM_HAS_VALID_SETAS_STATUS:\r
+       {\r
+               /* Check input parameters */\r
+               if ((strlen(action_data->file_path)<=0) || !is_allowed) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid Arg!!, action_data->file_path = %p,"\r
+                                       " is_allowed = %p", action_data->file_path, is_allowed);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+               DRM_CLIENT_LOG("action_data->file_path = %s, action = %d, data = %d",\r
+                               action_data->file_path, action, action_data->data);\r
+\r
+               /* Copy the input parameters to the Request structure */\r
+               req_data.fixed_data.action = action;\r
+               memcpy(req_data.fixed_data.request_data, action_data,\r
+                               sizeof(drm_action_allowed_data_s));\r
+               break;\r
+       }\r
+\r
+       case DRM_IS_DEVICE_ACTIVATED:\r
+       case DRM_IS_VALID_SECURE_CLOCK:\r
+       {\r
+               /* Check input parameters */\r
+               if (!is_allowed) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid Arg!!,is_allowed = %p",is_allowed);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+\r
+               /* Copy the input parameters to the Request structure */\r
+               req_data.fixed_data.action = action;\r
+               break;\r
+       }\r
+\r
+       default:\r
+               DRM_CLIENT_EXCEPTION("Invalid action type=%d",action);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_IS_ACTION_ALLOWED;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+               *is_allowed = DRM_FALSE;\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+               *is_allowed = resp_data.fixed_data.bool_val;\r
+       }\r
+\r
+ErrorExit:\r
+       if (result != DRM_RETURN_SUCCESS) {\r
+               DRM_CLIENT_EXCEPTION("Exit:failed!!, result = 0x%x", result);\r
+       } else {\r
+               DRM_CLIENT_LOG("Exit:Success!!, result = 0x%x", result);\r
+       }\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can get the requested data from DRM.\r
+ *\r
+ * @param[in]  data_type       Data types as per enum drm_data_type_e.\r
+ * @param[in]  input           Pointer to appropriate structure as per data_type.\r
+ * @param[out] output          Output data. Pointer to appropriate structure as\r
+ *                                                     per data_type.\r
+ *\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks            Please typecast to appropriate data structures\r
+ *                             as per data types.\r
+ *\r
+ *                             if data_type = DRM_DATA_TYPE_SECURE_CLOCK\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = pointer to struct\r
+ *                             drm_secure_clock_data_s\r
+ *\r
+ *                             if data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = pointer to int\r
+ *\r
+ *                             if data_type = DRM_DATA_TYPE_TRANSACTION_TRACKING_ID\r
+ *                             then input type: input = pointer to file path (const char)\r
+ *                             and output type: output = pointer to struct\r
+ *                             drm_transaction_id_info_s\r
+ *\r
+ *                             if data_type = DRM_DATA_TYPE_DIVX_REGISTRATION_CODE\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = pointer to struct drm_code_info_s\r
+ *\r
+ *                             if data_type = DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = pointer to struct drm_code_info_s\r
+ *\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_get_data(drm_data_type_e data_type, void *input, void *output)\r
+{\r
+       DRM_CLIENT_LOG("Enter: data_type = %d, input = %p, output = %p",\r
+                       data_type, input, output);\r
+       /* Local Variables */\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       /* Check Input & Output Parameters and fill the Request data */\r
+       switch (data_type) {\r
+       case DRM_DATA_TYPE_SECURE_CLOCK:\r
+       case DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG:\r
+       case DRM_DATA_TYPE_DIVX_REGISTRATION_CODE:\r
+       case DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE:\r
+               if (!output) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid arguments!!, output = %p", output);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+               break;\r
+       case DRM_DATA_TYPE_TRANSACTION_TRACKING_ID: {\r
+               if (!input || ((char*)input)[0] == '\0' || !output) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid arguments!!, input = %p, output = %p",\r
+                                       input, output);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+\r
+               /* Copy the input parameter to be sent as Request Data */\r
+               if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data,\r
+                               (const gchar*) input, DRM_MAX_LEN_FILEPATH))\r
+                               >= DRM_MAX_LEN_FILEPATH) {\r
+                       DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                                       (const char*)input, strlen(((const char*)input)), ret_cpy);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               }\r
+       }\r
+               break;\r
+       default:\r
+               DRM_CLIENT_EXCEPTION("Invalid argument, data_type = %d", data_type);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("data_type=%d input=%p output=%p", data_type, input, output);\r
+\r
+       /* Fill other parameters to be sent */\r
+       req_data.fixed_data.data_type = data_type;\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_GET_DATA;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+\r
+               /* Store the response result to the output based on the request data type */\r
+               switch (data_type) {\r
+\r
+               case DRM_DATA_TYPE_SECURE_CLOCK: {\r
+                       drm_secure_clock_data_s sec_clk_data = { 0, };\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&sec_clk_data, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_secure_clock_data_s));\r
+                       DRM_CLIENT_LOG("sec_clk_data.is_secure_clock_set = %d",\r
+                                       sec_clk_data.is_secure_clock_set);\r
+                       DRM_CLIENT_LOG("Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       sec_clk_data.secure_clock.tm_year,\r
+                                       sec_clk_data.secure_clock.tm_mon,\r
+                                       sec_clk_data.secure_clock.tm_mday,\r
+                                       sec_clk_data.secure_clock.tm_hour,\r
+                                       sec_clk_data.secure_clock.tm_min,\r
+                                       sec_clk_data.secure_clock.tm_sec);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &sec_clk_data, sizeof(drm_secure_clock_data_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG: {\r
+\r
+                       int transtrack_flag = 0;\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&transtrack_flag, resp_data.fixed_data.response_data, sizeof(int));\r
+                       DRM_CLIENT_LOG("transtrack_flag = %d", transtrack_flag);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &transtrack_flag, sizeof(int));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_DATA_TYPE_TRANSACTION_TRACKING_ID: {\r
+                       drm_transaction_id_info_s transid_info;\r
+                       memset(&transid_info,0,sizeof(transid_info));\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&transid_info, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_transaction_id_info_s));\r
+                       DRM_CLIENT_LOG("transid_info.tr_id = %s", transid_info.tr_id);\r
+                       DRM_CLIENT_LOG("transid_info.tr_id_len = %d",\r
+                                       transid_info.tr_id_len)\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &transid_info, sizeof(drm_transaction_id_info_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_DATA_TYPE_DIVX_REGISTRATION_CODE: {\r
+\r
+                       drm_code_info_s registration_info;\r
+                       memset(&registration_info,0,sizeof(registration_info));\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&registration_info, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_code_info_s));\r
+                       DRM_CLIENT_LOG("registration_info.code = %s",\r
+                                       registration_info.code);\r
+                       DRM_CLIENT_LOG("registration_info.code_len = %d",\r
+                                       registration_info.code_len);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &registration_info, sizeof(drm_code_info_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE: {\r
+\r
+                       drm_code_info_s deregis_info;\r
+                       memset(&deregis_info,0,sizeof(deregis_info));\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&deregis_info, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_code_info_s));\r
+                       DRM_CLIENT_LOG("deregis_info.code = %s",\r
+                                       deregis_info.code);\r
+                       DRM_CLIENT_LOG("deregis_info.code_len = %d",\r
+                                       deregis_info.code_len);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &deregis_info, sizeof(drm_code_info_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               }\r
+\r
+       }\r
+\r
+       /* Success */\r
+       DRM_CLIENT_LOG("Exit:Success:result=0x%x",result);\r
+       return result;\r
+\r
+ErrorExit:\r
+       /* Failure */\r
+       DRM_CLIENT_EXCEPTION("Exit:failed:result=0x%x",result);\r
+       return result;\r
+}\r
+\r
+/**\r
+ * An application can do particular request to DRM.\r
+ *\r
+ * @param[in]  request_type    Request types as per enum drm_request_type_e.\r
+ * @param[in]  input                   Pointer to appropriate structure as per\r
+ *                                                             request_type.\r
+ * @param[out] output                  Output data. Pointer to appropriate structure as\r
+ *                                                             per request_type.\r
+ *\r
+ * @return             0 on success, else a negative error value\r
+ * @retval             DRM_RETURN_SUCCESS on success\r
+ * @retval             DRM_RETURN_INVALID_ARG if arguments are invalid\r
+ * @retval             DRM_RETURN_COMMUNICATION_ERROR if socket error\r
+ * @retval             DRM_RETURN_INTERNAL_ERROR if operation error\r
+ * @remarks            Please typecast to appropriate data structures\r
+ *                             as per data types.\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_FILE\r
+ *                             then input type: input = pointer to const char (file_path)\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_FILE\r
+ *                             then input type: input = pointer to struct drm_unregister_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_LICENSE\r
+ *                             then input type: input = pointer to\r
+ *                             struct drm_register_lic_info_s.\r
+ *                             and output type: output = pointer to\r
+ *                             struct drm_register_lic_resp_s.\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL\r
+ *                             then input type: input = pointer to struct drm_initiator_info_s\r
+ *                             and output type: output = pointer to struct drm_web_server_resp_data_s\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE\r
+ *                             then input type: input = pointer to struct drm_submit_roap_message_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT\r
+ *                             then input type: input = pointer to struct drm_submit_roap_user_consent_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_HTTP_USER_CANCEL\r
+ *                             then input type: input = pointer to struct drm_http_user_cancel_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_COPY_FILE\r
+ *                             then input type: input = pointer to struct drm_register_copy_file_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_MOVE_FILE\r
+ *                             then input type: input = pointer to struct drm_register_copy_file_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_INSERT_EXT_MEMORY\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY\r
+ *                             then input type: input = NULL\r
+ *                             and output type: output = NULL\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_REGISTER_SETAS\r
+ *                             then input type: input = pointer to struct drm_register_setas_info_s\r
+ *                             and output type: output = pointer to the struct drm_register_setas_resp_data_s\r
+ *\r
+ *                             if request_type = DRM_REQUEST_TYPE_UNREGISTER_SETAS\r
+ *                             then input type: input = pointer to struct drm_unregister_setas_info_s\r
+ *                             and output type: output = NULL\r
+ *\r
+ * @see\r
+ * @since              0.1\r
+ */\r
+EXPORT_API int drm_process_request(drm_request_type_e request_type,\r
+               void *input, void *output)\r
+{\r
+       DRM_CLIENT_LOG("Enter: request_type = %d, input = %p, output = %p",\r
+                       request_type, input, output);\r
+       /* Local Variables */\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       drm_request_data_s req_data;\r
+       drm_response_data_s resp_data;\r
+       int ret_comm = 0;\r
+       int ret_cpy = 0;\r
+\r
+       /* memset the structures */\r
+       memset(&req_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&resp_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       DRM_CLIENT_LOG("request_type = %d", request_type);\r
+\r
+       /* Check Input & Output Parameters */\r
+       switch (request_type) {\r
+       case DRM_REQUEST_TYPE_REGISTER_FILE: {\r
+               if (!input || ((char*)input)[0] == '\0') {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+                       /* Copy the input to Request Structure */\r
+                       if ((ret_cpy = g_strlcpy(req_data.fixed_data.request_data,\r
+                                       (const gchar*) input, DRM_MAX_LEN_FILEPATH))\r
+                                       >= DRM_MAX_LEN_FILEPATH) {\r
+                               DRM_CLIENT_EXCEPTION("file_path = %s, filepath_len = %d, ret_cpy = %d",\r
+                                               (const char*)input, strlen(((const char*)input)), ret_cpy);\r
+                               return DRM_RETURN_INVALID_ARG;\r
+                       }\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_UNREGISTER_FILE: {\r
+               if (!input || ((char*)input)[0] == '\0') {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input, sizeof(drm_unregister_info_s));\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES: {\r
+               DRM_CLIENT_LOG("No parameters required!");\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_REGISTER_LICENSE: {\r
+               if (!input || ((char*)input)[0] == '\0' || !output) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p, output = %p",\r
+                                       input, output);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_register_lic_info_s));\r
+\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL: {\r
+               if (!input || ((char*)input)[0] == '\0' || !output) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p, output = %p",\r
+                                       input, output);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       DRM_CLIENT_LOG("initiator_url[%s]", ((drm_initiator_info_s*)input)->initiator_url);\r
+                       DRM_CLIENT_LOG("initiator_url_len[%u]", ((drm_initiator_info_s*)input)->initiator_url_len);\r
+                       DRM_CLIENT_LOG("operation_callback.callback[%p]", ((drm_initiator_info_s*)input)->operation_callback.callback);\r
+                       DRM_CLIENT_LOG("init_type[%d]", ((drm_initiator_info_s*)input)->init_type);\r
+                       DRM_CLIENT_LOG("custom_data.app_id[%s]", ((drm_initiator_info_s*)input)->custom_data.app_id);\r
+                       DRM_CLIENT_LOG("custom_data.user_guid[%s]", ((drm_initiator_info_s*)input)->custom_data.user_guid);\r
+                       DRM_CLIENT_LOG("custom_data.device_id[%s]", ((drm_initiator_info_s*)input)->custom_data.device_id);\r
+                       DRM_CLIENT_LOG("custom_data.order_id[%s]", ((drm_initiator_info_s*)input)->custom_data.order_id);\r
+                       DRM_CLIENT_LOG("custom_data.service_id[%s]", ((drm_initiator_info_s*)input)->custom_data.service_id);\r
+                       DRM_CLIENT_LOG("custom_data.account_id[%s]", ((drm_initiator_info_s*)input)->custom_data.account_id);\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_initiator_info_s));\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE: {\r
+\r
+               if (!input\r
+                       || (!((drm_submit_roap_message_info_s*) input)->buffer)\r
+                       || (((drm_submit_roap_message_info_s*) input)->buffer[0] == '\0')\r
+                       || (((drm_submit_roap_message_info_s*) input)->buff_size == 0)) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_submit_roap_message_info_s));\r
+\r
+                       /* Number of additional data items to be sent */\r
+                       if ((((drm_submit_roap_message_info_s*) input)->app_session_data.pData)\r
+                               && (((drm_submit_roap_message_info_s*) input)->app_session_data.size_pData != 0)) {\r
+                               req_data.fixed_data.num_data_items = 2;\r
+                       } else {\r
+                               req_data.fixed_data.num_data_items = 1;\r
+                       }\r
+\r
+                       /* Fill details pertaining to additional pointers to be sent */\r
+                       req_data.fixed_data.data_length[0] =\r
+                                       ((drm_submit_roap_message_info_s*) input)->buff_size;\r
+\r
+                       /* Allocate memory for data items */\r
+                       req_data.data_items[0] = (char*) malloc(\r
+                                       req_data.fixed_data.data_length[0]);\r
+                       if (!req_data.data_items[0]) {\r
+                               DRM_CLIENT_EXCEPTION("Memory Allocation Error!, Buf = %p",\r
+                                               req_data.data_items[0]);\r
+                               result = DRM_RETURN_INSUFFICIENT_MEMORY;\r
+                               goto ErrorExit;\r
+                       }\r
+\r
+                       /* Copy the buffer into data items */\r
+                       memcpy(req_data.data_items[0],\r
+                                       ((drm_submit_roap_message_info_s*) input)->buffer,\r
+                                       ((drm_submit_roap_message_info_s*) input)->buff_size);\r
+\r
+                       if (2 == req_data.fixed_data.num_data_items) {\r
+                               req_data.fixed_data.data_length[1] =\r
+                                               ((drm_submit_roap_message_info_s*) input)->app_session_data.size_pData;\r
+\r
+                               req_data.data_items[1] = (char*) malloc(\r
+                                               req_data.fixed_data.data_length[1]);\r
+                               if (!req_data.data_items[1]) {\r
+                                       DRM_CLIENT_EXCEPTION("Memory Allocation Error!, Buf = %p",\r
+                                                       req_data.data_items[1]);\r
+                                       result = DRM_RETURN_INSUFFICIENT_MEMORY;\r
+                                       goto ErrorExit;\r
+                               }\r
+\r
+                               /* Copy the Additional data */\r
+                               memcpy( req_data.data_items[1],\r
+                                               ((drm_submit_roap_message_info_s*) input)->app_session_data.pData,\r
+                                               ((drm_submit_roap_message_info_s*) input)->app_session_data.size_pData);\r
+                       }\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT: {\r
+\r
+               if (!input\r
+                       || (!((drm_submit_roap_user_consent_info_s*) input)->agentdata)\r
+                       || (((drm_submit_roap_user_consent_info_s*) input)->size_agentdata == 0)) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_submit_roap_user_consent_info_s));\r
+\r
+                       /* Number of additional data items to be sent */\r
+                       req_data.fixed_data.num_data_items = 1;\r
+\r
+                       /* Fill details pertaining to additional pointers to be sent */\r
+                       req_data.fixed_data.data_length[0] =\r
+                                       ((drm_submit_roap_user_consent_info_s*) input)->size_agentdata;\r
+\r
+                       /* Allocate memory for data items */\r
+                       req_data.data_items[0] = (char*) malloc(\r
+                                       req_data.fixed_data.data_length[0]);\r
+                       if (!req_data.data_items[0]) {\r
+                               DRM_CLIENT_EXCEPTION("Memory Allocation Error!, Buf = %p",\r
+                                               req_data.data_items[0]);\r
+                               result = DRM_RETURN_INSUFFICIENT_MEMORY;\r
+                               goto ErrorExit;\r
+                       }\r
+\r
+                       /* Copy the buffer into data items */\r
+                       memcpy(req_data.data_items[0],\r
+                                  ((drm_submit_roap_user_consent_info_s*) input)->agentdata,\r
+                                  ((drm_submit_roap_user_consent_info_s*) input)->size_agentdata);\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_HTTP_USER_CANCEL: {\r
+\r
+               if (!input\r
+                       || (!((drm_http_user_cancel_info_s*) input)->app_session_data)\r
+                       || (((drm_http_user_cancel_info_s*) input)->size_app_session_data == 0)) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_http_user_cancel_info_s));\r
+\r
+                       /* Number of additional data items to be sent */\r
+                       req_data.fixed_data.num_data_items = 1;\r
+\r
+                       /* Fill details pertaining to additional pointers to be sent */\r
+                       req_data.fixed_data.data_length[0] =\r
+                                       ((drm_http_user_cancel_info_s*) input)->size_app_session_data;\r
+\r
+                       /* Allocate memory for data items */\r
+                       req_data.data_items[0] = (char*) malloc(\r
+                                       req_data.fixed_data.data_length[0]);\r
+                       if (!req_data.data_items[0]) {\r
+                               DRM_CLIENT_EXCEPTION("Memory Allocation Error!, Buf = %p",\r
+                                               req_data.data_items[0]);\r
+                               result = DRM_RETURN_INSUFFICIENT_MEMORY;\r
+                               goto ErrorExit;\r
+                       }\r
+\r
+                       /* Copy the buffer into data items */\r
+                       memcpy(req_data.data_items[0],\r
+                                       ((drm_http_user_cancel_info_s*) input)->app_session_data,\r
+                                       ((drm_http_user_cancel_info_s*) input)->size_app_session_data);\r
+\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_REGISTER_COPY_FILE: {\r
+\r
+               if (!input\r
+                               || (((drm_register_copy_file_info_s*) input)->src_file_path[0] == '\0')\r
+                               || (((drm_register_copy_file_info_s*) input)->dest_file_path[0] == '\0')) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_register_copy_file_info_s));\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_REGISTER_MOVE_FILE: {\r
+\r
+               if (!input\r
+                               || (((drm_register_move_file_info_s*) input)->src_file_path[0] == '\0')\r
+                               || (((drm_register_move_file_info_s*) input)->dest_file_path[0] == '\0')) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_register_move_file_info_s));\r
+               }\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_INSERT_EXT_MEMORY:\r
+       case DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY:\r
+               DRM_CLIENT_LOG("No parameters to check!!");\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_REGISTER_SETAS: {\r
+\r
+               if (!input\r
+                       || (((drm_register_setas_info_s*) input)->file_path[0] == '\0')) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_register_setas_info_s));\r
+               }\r
+\r
+       }\r
+               break;\r
+\r
+       case DRM_REQUEST_TYPE_UNREGISTER_SETAS: {\r
+\r
+               if (!input\r
+                               || (((drm_unregister_setas_info_s*) input)->file_path[0] == '\0')) {\r
+                       DRM_CLIENT_EXCEPTION("Invalid argument!!, input = %p", input);\r
+                       return DRM_RETURN_INVALID_ARG;\r
+               } else {\r
+                       /* Copy the input to Request Structure */\r
+                       memcpy(req_data.fixed_data.request_data, input,\r
+                                       sizeof(drm_unregister_setas_info_s));\r
+               }\r
+       }\r
+               break;\r
+\r
+       default:\r
+               DRM_CLIENT_EXCEPTION("Invalid Argument! request_type = %d",\r
+                               request_type);\r
+               return DRM_RETURN_INVALID_ARG;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("input=%p output=%p", input, output);\r
+\r
+       /* Fill other parameters to be sent */\r
+       req_data.fixed_data.request_type = request_type;\r
+\r
+       /* Tell the server which API to be used */\r
+       req_data.fixed_data.api_name = DRM_PROCESS_REQUEST;\r
+\r
+       /* Send Data to DRM server */\r
+       /* Call the Client Communication API */\r
+       if ((ret_comm = drm_client_comm(&req_data, &resp_data)) != 0) {\r
+               DRM_CLIENT_EXCEPTION("drm_client_comm error!!, ret_comm = %d", ret_comm);\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+\r
+       /* Copy the response obtained from the server into the output parameter */\r
+       if (resp_data.fixed_data.resp_result != 0) {\r
+               DRM_CLIENT_EXCEPTION("Error returned from server!!, resp_data.fixed_data.resp_result = 0x%x",\r
+                               resp_data.fixed_data.resp_result);\r
+\r
+               result = resp_data.fixed_data.resp_result;\r
+               goto ErrorExit;\r
+       } else {\r
+               DRM_CLIENT_LOG("resp_data.fixed_data.resp_result = 0x%x", resp_data.fixed_data.resp_result);\r
+\r
+               /* Store the response result to the output based on the Request type */\r
+               switch (request_type) {\r
+               case DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL: {\r
+\r
+                       drm_web_server_resp_data_s ws_resp_data;\r
+                       memset(&ws_resp_data,0,sizeof(ws_resp_data));\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&ws_resp_data, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_web_server_resp_data_s));\r
+                       DRM_CLIENT_LOG("ws_resp_data.fixed_data.content_url = %s",\r
+                                       ws_resp_data.content_url);\r
+                       DRM_CLIENT_LOG("ws_resp_data.result_code = 0x%x",\r
+                                       ws_resp_data.result_code);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &ws_resp_data, sizeof(drm_web_server_resp_data_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_LICENSE: {\r
+\r
+                       drm_register_lic_resp_s lic_resp;\r
+                       memset(&lic_resp,0,sizeof(lic_resp));\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&lic_resp, resp_data.fixed_data.response_data,\r
+                                       sizeof(drm_register_lic_resp_s));\r
+                       DRM_CLIENT_LOG("lic_resp.cid = %s", lic_resp.cid);\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &lic_resp, sizeof(drm_register_lic_resp_s));\r
+\r
+               }\r
+                       break;\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_SETAS: {\r
+\r
+                       DRM_CLIENT_LOG("Register Setas Successful");\r
+                       drm_register_setas_resp_data_s setas_resp = { 0, };\r
+\r
+                       /* Copy from response data into local structure */\r
+                       memcpy(&setas_resp, resp_data.fixed_data.response_data,\r
+                       sizeof(drm_register_setas_resp_data_s));\r
+\r
+                       /* Now copy into output parameter */\r
+                       memcpy(output, &setas_resp, sizeof(drm_register_setas_resp_data_s));\r
+               }\r
+                       break;\r
+               case DRM_REQUEST_TYPE_REGISTER_FILE:\r
+               case DRM_REQUEST_TYPE_UNREGISTER_FILE:\r
+               case DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES:\r
+               case DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE:\r
+               case DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT:\r
+               case DRM_REQUEST_TYPE_HTTP_USER_CANCEL:\r
+               case DRM_REQUEST_TYPE_REGISTER_COPY_FILE:\r
+               case DRM_REQUEST_TYPE_REGISTER_MOVE_FILE:\r
+               case DRM_REQUEST_TYPE_INSERT_EXT_MEMORY:\r
+               case DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY:\r
+               case DRM_REQUEST_TYPE_UNREGISTER_SETAS:\r
+                       DRM_CLIENT_LOG("No output parameters to be handled!!");\r
+                       break;\r
+\r
+               }\r
+       }\r
+\r
+\r
+ErrorExit:\r
+\r
+       /* Free Request Data memory */\r
+       for (unsigned int i = 0; i < req_data.fixed_data.num_data_items; i++) {\r
+               if (req_data.data_items[i])\r
+                       free(req_data.data_items[i]);\r
+       }\r
+\r
+       /* Free Response Data memory */\r
+       for (unsigned int i = 0; i < resp_data.fixed_data.num_data_items; i++) {\r
+               if (resp_data.data_items[i])\r
+                       free(resp_data.data_items[i]);\r
+       }\r
+\r
+       DRM_CLIENT_LOG("Result[0x%x]", result);\r
+\r
+       return result;\r
+}\r
+\r
+/**\r
+ *  Private function\r
+ *\r
+ *\r
+ * @param[in]  file_path               Specifies the pointer points a DRM file path.\r
+ * @return             This function returns DRM file type.\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+static drm_file_type_e _drm_client_get_file_type(const char* file_path)\r
+{\r
+       char *p = NULL;\r
+       p = (char *) strrchr(file_path, '.');\r
+       if (!p) {\r
+               DRM_CLIENT_EXCEPTION("Invalid file_path!, file_path = %s", file_path);\r
+               return DRM_TYPE_UNDEFINED;\r
+       }\r
+\r
+       DRM_CLIENT_LOG("file_path=[%s], p=[0x%x]", file_path, p);\r
+\r
+       if (p && ((strncasecmp(p, ".dcf", 4) == 0))) {\r
+\r
+               DRM_CLIENT_LOG("OMA DRM V1 File: file_path=%s p=%s", file_path, p);\r
+               return DRM_TYPE_OMA_V1;\r
+\r
+       } else if (p &&  ((strncasecmp(p, ".odf", 4) == 0)\r
+                       || (strncasecmp(p, ".o4a", 4) == 0)\r
+                       || (strncasecmp(p, ".o4v", 4) == 0))) {\r
+\r
+               DRM_CLIENT_LOG("OMA DRM V2 File: file_path=%s p=%s", file_path, p);\r
+               return DRM_TYPE_OMA_V2;\r
+\r
+       } else if ((p && ((strncasecmp(p, ".pya", 4) == 0)\r
+                       || (strncasecmp(p, ".pyv", 4) == 0)))) {\r
+\r
+               DRM_CLIENT_LOG("PlayReady File: file_path=%s p=%s", file_path, p);\r
+               return DRM_TYPE_PLAYREADY;\r
+\r
+       } else if (p && ((strncasecmp(p, ".eny", 4) == 0)\r
+                       || (strncasecmp(p, ".pye", 4) == 0)\r
+                       || (strncasecmp(p, ".jue", 4) == 0)))   {\r
+\r
+               DRM_CLIENT_LOG("PlayReady Envelope File: file_path=%s p=%s", file_path, p);\r
+               return DRM_TYPE_PLAYREADY_ENVELOPE;\r
+\r
+       } else if (p && ((strncasecmp(p, ".avi", 4) == 0)\r
+                       || (strncasecmp(p, ".divx", 5) == 0))) {\r
+\r
+               DRM_CLIENT_LOG("DivX DRM File: file_path=%s p=%s", file_path, p);\r
+               return DRM_TYPE_DIVX;\r
+\r
+       } else {\r
+               DRM_CLIENT_LOG("NON DRM file=%s", file_path);\r
+               return DRM_TYPE_UNDEFINED;\r
+       }\r
+}\r
diff --git a/service/drm_client_ipc.cpp b/service/drm_client_ipc.cpp
new file mode 100755 (executable)
index 0000000..1967e45
--- /dev/null
@@ -0,0 +1,552 @@
+/*\r
+ *  drm-client\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               drm_client_ipc.cpp\r
+ * @brief       DRM Client Inter process communication definitions.\r
+ * @author      Mahendra Kumar Prajapat (mahendra.p@samsung.com)\r
+ * @author      Harsha Shekar (h.shekar@samsung.com)\r
+ * @author      Ravi S (ravi.cs@samsung.com)\r
+ * @version     0.1\r
+ * @history     0.1: DRM Client Inter process communication definitions.\r
+ */\r
+\r
+#include <stdio.h>\r
+#include <stdlib.h>\r
+#include <string.h>\r
+#include <unistd.h>\r
+#include <sys/stat.h>\r
+#include <sys/un.h>\r
+#include <sys/types.h>\r
+#include <sys/socket.h>\r
+#include <errno.h>\r
+#include <pthread.h>\r
+#include <signal.h>\r
+\r
+#include "drm_client_ipc.h"\r
+#include "drm_client_log.h"\r
+\r
+\r
+/**\r
+ * @brief Sync socket fd on a thread basis\r
+ */\r
+static __thread int sockfd = -1;\r
+\r
+/**\r
+ * @brief Client info on a thread basis\r
+ */\r
+static __thread drm_client_info_s client_info;\r
+\r
+/**\r
+ * @brief Async socket fd on a process basis\r
+ */\r
+static int async_sockfd = -1;\r
+\r
+/**\r
+ * @brief Storing the registered callbacks\r
+ */\r
+static drm_client_cb_info_s client_cb_info[DRM_MAX_CLIENT_SUPPORTED];\r
+\r
+/**\r
+ * @brief Mutex to serialise async socket per process\r
+ */\r
+pthread_mutex_t async_mutex = PTHREAD_MUTEX_INITIALIZER;\r
+\r
+/**\r
+ * Library load time constructor\r
+ */\r
+void __drm_client_lib_load_constructor (void) __attribute__((constructor));\r
+\r
+/**\r
+ * Library load time constructor\r
+ */\r
+void __drm_client_lib_unload_destructor (void) __attribute__((destructor));\r
+\r
+\r
+/**\r
+ * Constructor for library load time\r
+ *\r
+ *\r
+ * @param              void\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+void __drm_client_lib_load_constructor(void)\r
+{\r
+       DRM_CLIENT_LOG("libdrm-client.so.0 loaded!!!");\r
+}\r
+\r
+/**\r
+ * Destructor for library unload time\r
+ *\r
+ *\r
+ * @param              void\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+void __drm_client_lib_unload_destructor(void)\r
+{\r
+       DRM_CLIENT_LOG("libdrm-client.so.0 unloaded!!!");\r
+\r
+       /* Close the sockets */\r
+       DRM_CLIENT_LOG("Closing sockets!!");\r
+       if (sockfd >= 0) {\r
+               close(sockfd);\r
+               sockfd = -1;\r
+       }\r
+       if (async_sockfd >= 0) {\r
+               close(async_sockfd);\r
+               async_sockfd = -1;\r
+       }\r
+       DRM_CLIENT_LOG("Closed sockets!!");\r
+}\r
+\r
+/**\r
+ *  Private function\r
+ *\r
+ *\r
+ * @param[in]  callinfo        Callback information\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+void __search_client_info_cb(drm_client_cb_data_s* callinfo)\r
+{\r
+       int i = 0;\r
+       for (i = 0; i < DRM_MAX_CLIENT_SUPPORTED; i++) {\r
+\r
+               DRM_CLIENT_LOG("client_cb_info[i].client_id = %d", client_cb_info[i].client_id);\r
+               DRM_CLIENT_LOG("callinfo->client_id = %d", callinfo->client_id);\r
+\r
+               if (client_cb_info[i].client_id == callinfo->client_id) {\r
+                       if (client_cb_info[i].operation_callback.callback) {\r
+\r
+                               client_cb_info[i].operation_callback.callback(\r
+                                               &callinfo->callback_operation_info,\r
+                                               &callinfo->call_bk_data);\r
+                       } else {\r
+                               DRM_CLIENT_EXCEPTION("Callback function is NULL here!!!!");\r
+                       }\r
+                       /* Callback found, return from here */\r
+                       return;\r
+               }\r
+       }\r
+\r
+       if (DRM_MAX_CLIENT_SUPPORTED == i) {\r
+               /* Client information for the process not yet stored */\r
+               DRM_CLIENT_EXCEPTION("Callback information not stored!!, i = %d", i);\r
+               return;\r
+       }\r
+}\r
+\r
+/**\r
+ *  Private function\r
+ *     Thread handler\r
+ *\r
+ * @param[in]  thread_arg      Thread argument\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+void *client_async_cb_handler(void *thread_arg) {\r
+       drm_client_cb_data_s callinfo;\r
+       int retval = 0, result = 0;\r
+\r
+       /* This Async thread will be running for the entire process alive time\r
+        * to handle all the async related operations sent from the server\r
+        */\r
+       while (1) {\r
+               memset(&callinfo, 0x00, sizeof(drm_client_cb_data_s));\r
+               retval = read(async_sockfd, &callinfo, sizeof(drm_client_cb_data_s));\r
+               if (0 == retval) {\r
+                       DRM_CLIENT_LOG("Read returns 0!, retval = %d", retval);\r
+                       DRM_CLIENT_LOG("Server end closed!!!!");\r
+                       /* Since server end closes\r
+                        * async socket creation needs to be done again\r
+                        */\r
+                       goto ErrorExit;\r
+               } else if (retval < 0 || retval < sizeof(drm_client_cb_data_s)) {\r
+                       DRM_CLIENT_EXCEPTION(\r
+                                       " Async call_back read error!!, retval = %d, error = %s",\r
+                                       retval, strerror(errno));\r
+               }\r
+\r
+               DRM_CLIENT_LOG(\r
+                               "Calling application  call back function from client, retval = %d",\r
+                               retval);\r
+               /* Search the client cb info from the received client_id and call corresponding handler */\r
+               __search_client_info_cb(&callinfo);\r
+       }\r
+\r
+ErrorExit:\r
+       pthread_mutex_lock(&async_mutex);\r
+       if (async_sockfd >= 0) {\r
+               close(async_sockfd);\r
+               async_sockfd = -1;\r
+       }\r
+       pthread_mutex_unlock(&async_mutex);\r
+       return NULL;\r
+}\r
+\r
+\r
+\r
+/**\r
+ *  Private function\r
+ *     Create Async socket\r
+ *\r
+ * @param[in]  client_in       Client request data\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+static int  __create_async_socket(drm_request_data_s *client_in)\r
+{\r
+       struct sockaddr_un clientaddr;\r
+       int temp_len_sock = 0;\r
+       int retval = 0;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       pthread_t async_thread = 0;\r
+       int rv = 0;\r
+       /* Create a Async socket */\r
+       if ((async_sockfd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0)\r
+       {\r
+               DRM_CLIENT_EXCEPTION("socket error!!, async_sockfd = %d, error = %s",async_sockfd, strerror(errno));\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG(" async_sockfd created successful , async_sockfd = %d",async_sockfd);\r
+\r
+       temp_len_sock = strlen(DRM_SOCK_PATH);\r
+       memset(&clientaddr, 0x00, sizeof(clientaddr));\r
+       clientaddr.sun_family = AF_UNIX;\r
+       memcpy(clientaddr.sun_path, DRM_SOCK_PATH, temp_len_sock);\r
+       clientaddr.sun_path[temp_len_sock] = '\0';\r
+\r
+       /* connect to the server, on same server SOCK_PATH */\r
+       if ((retval = connect(async_sockfd, (struct sockaddr*) &clientaddr,sizeof(clientaddr))) < 0)\r
+       {\r
+               DRM_CLIENT_EXCEPTION("Async socket connect error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("async_sockfd Connection success retval=%d ", retval);\r
+\r
+       /* Store the necessary information into the client info and send to server */\r
+       client_info.p_id = getpid();\r
+       client_info.thread_id = pthread_self();\r
+       client_info.client_id = client_info.p_id + client_info.thread_id;\r
+       DRM_CLIENT_LOG("Client_id = %d", client_info.client_id);\r
+       client_info.sync_sock_fd = -1;\r
+       client_info.async_sock_fd = async_sockfd;\r
+\r
+       /* Send the server */\r
+       if ((retval = write(async_sockfd, (char*) &client_info,sizeof(client_info))) < 0|| retval < sizeof(client_info))\r
+       {\r
+               DRM_CLIENT_EXCEPTION("Async write error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("async_sockfd Sent info to server");\r
+\r
+       /* Separate thread is created to handle async callback handling */\r
+       rv = pthread_create(&async_thread, NULL, client_async_cb_handler, NULL);\r
+       if (rv != 0) {\r
+               DRM_CLIENT_EXCEPTION("pthread_create creation failed for Async socket");\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("pthread_create success = [%d]", async_thread);\r
+       DRM_CLIENT_LOG("Async socket create success");\r
+       return 1;\r
+\r
+ErrorExit:\r
+       /* Prevent: 35135 [h.shekar]*/\r
+       if(async_sockfd >= 0) {\r
+               close(async_sockfd);\r
+               async_sockfd = -1;\r
+       }\r
+       return 0;\r
+}\r
+\r
+/**\r
+ *  Private function\r
+ *     Create Sync socket\r
+ *\r
+ * @param[in]  client_in       Client request data\r
+ * @return             void\r
+ * @remarks\r
+ * @see\r
+ * @since       0.1\r
+ */\r
+static int __get_socket(drm_request_data_s *client_in)\r
+{\r
+       int fd;\r
+       int temp_len_sock = 0;\r
+       int retval = 0;\r
+       struct sockaddr_un clientaddr;\r
+       static int num_clients = 0;\r
+\r
+       if ((fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {\r
+               DRM_CLIENT_EXCEPTION("sockfd socket create error!!, sockfd = %d, error = %s",fd, strerror(errno));\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG(" sockfd created successful , sockfd = %d",fd);\r
+\r
+       /* Set parameters to be used in connect */\r
+       temp_len_sock = strlen(DRM_SOCK_PATH);\r
+       memset(&clientaddr, 0x00, sizeof(clientaddr));\r
+       clientaddr.sun_family = AF_UNIX;\r
+       memcpy(clientaddr.sun_path, DRM_SOCK_PATH, temp_len_sock);\r
+       clientaddr.sun_path[temp_len_sock] = '\0';\r
+\r
+       if ((retval = connect(fd, (struct sockaddr*)&clientaddr,sizeof(clientaddr))) < 0)\r
+       {\r
+               DRM_CLIENT_EXCEPTION("connect error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("sync socket is created sockfd = %d retval = %d",fd,retval);\r
+\r
+       client_info.p_id = getpid();\r
+       client_info.thread_id = pthread_self();\r
+       client_info.client_id = client_info.p_id + client_info.thread_id;\r
+       DRM_CLIENT_LOG("Client_id = %d", client_info.client_id);\r
+       client_info.sync_sock_fd = fd;\r
+       client_info.async_sock_fd = async_sockfd;\r
+\r
+       DRM_CLIENT_LOG("Writing socket sockfd = %d size=%d",fd,sizeof(client_info));\r
+\r
+       DRM_CLIENT_LOG("client_info.client_id before send = %d", client_info.client_id);\r
+       if ((retval = write(fd, (char*) &client_info,sizeof(client_info))) < 0 || retval < sizeof(client_info))\r
+       {\r
+               DRM_CLIENT_EXCEPTION("write error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("Written socket sockfd = %d retval=%d",fd,retval);\r
+       return fd;\r
+\r
+ErrorExit:\r
+\r
+       /* Prevent: 35135 [h.shekar]*/\r
+       if (fd >= 0)\r
+               close(fd);\r
+\r
+       return -1;\r
+}\r
+\r
+/**\r
+ *  This API is used to send a request to the Server to call corresponding API\r
+ *\r
+ * @param[in]  client_in       Carries the input parameters of Client API to Server\r
+ * @param[out] server_out      Carries the output parameters of Client API from Server\r
+ * @return             0 on success & other values on failure\r
+ * @remarks\r
+ * @see\r
+ * @since 0.1\r
+ */\r
+int drm_client_comm(drm_request_data_s *client_in, drm_response_data_s *server_out)\r
+{\r
+       int retval = 0;\r
+       drm_request_data_s send_data;\r
+       drm_response_data_s recv_data;\r
+       drm_result_e result = DRM_RETURN_SUCCESS;\r
+       unsigned int offset = 0;\r
+       unsigned int bytes_write = DRM_MAX_CHUNK_SIZE;\r
+       unsigned int bytes_read = DRM_MAX_CHUNK_SIZE;\r
+\r
+       /* memset the structures */\r
+       memset(&send_data, 0x0, sizeof(drm_request_data_s));\r
+       memset(&recv_data, 0x0, sizeof(drm_response_data_s));\r
+\r
+       DRM_CLIENT_LOG("drm_client_comm in");\r
+\r
+       /* Create Async socket if not created already for this process */\r
+       pthread_mutex_lock(&async_mutex);\r
+       if (-1 == async_sockfd) {\r
+               DRM_CLIENT_LOG("Creating async socket for current process!!");\r
+               if(!__create_async_socket(client_in))\r
+               {\r
+                       DRM_CLIENT_EXCEPTION("__create_async_socket returned error");\r
+                       pthread_mutex_unlock(&async_mutex);\r
+                       goto ErrorExit;\r
+               }\r
+       }\r
+       pthread_mutex_unlock(&async_mutex);\r
+\r
+       /* Create Sync Socket on a per thread basis */\r
+       if (-1 == sockfd) {\r
+               DRM_CLIENT_LOG("initial sockfd = %d", sockfd);\r
+               sockfd = __get_socket(client_in);\r
+               DRM_CLIENT_LOG("after get_socket sockfd = %d", sockfd);\r
+               if (sockfd < 0) {\r
+                       DRM_CLIENT_EXCEPTION("get_socket failed sockfd = %d", sockfd);\r
+                       result = DRM_RETURN_COMMUNICATION_ERROR;\r
+                       goto ErrorExit;\r
+               }\r
+       }\r
+\r
+       /* Store the callback on a thread basis to be handled for each client */\r
+       DRM_CLIENT_LOG("Callback = %p", ((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback.callback);\r
+       DRM_CLIENT_LOG("Client id = %d", client_info.client_id);\r
+\r
+       if (((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback.callback) {\r
+               /* Callback present, store if not yet stored\r
+                * Loop through the list checking for client id if stored */\r
+               int loop = 0;\r
+               for (; loop < DRM_MAX_CLIENT_SUPPORTED; loop++) {\r
+                       if (client_cb_info[loop].client_id == client_info.client_id) {\r
+                               DRM_CLIENT_LOG("Callback info already stored!!, client_id[%d] = %d",\r
+                                               loop, client_cb_info[loop].client_id);\r
+                               break;\r
+                       } else if (client_cb_info[loop].client_id == 0) {\r
+                               DRM_CLIENT_LOG("No entry for cb yet, loop = %d", loop);\r
+                               DRM_CLIENT_LOG("Empty structure, storing client callback here, id = %d", client_info.client_id);\r
+                               client_cb_info[loop].client_id = client_info.client_id;\r
+                               memcpy(&client_cb_info[loop].operation_callback,\r
+                                               &(((drm_initiator_info_s*) (client_in->fixed_data.request_data))->operation_callback),\r
+                                               sizeof(drm_operation_cb_s));\r
+                               break;\r
+                       }\r
+               }\r
+               if (DRM_MAX_CLIENT_SUPPORTED == loop) {\r
+                       DRM_CLIENT_LOG("loop = %d, Maximum clients reached!!!", loop);\r
+               }\r
+       }\r
+\r
+       /* Copy the data received from the client into local */\r
+       memcpy(&send_data, client_in, sizeof(drm_request_data_s));\r
+       /* First write the static structures */\r
+       DRM_CLIENT_LOG("Writing socket sockfd = %d size=%d",sockfd,sizeof(drm_req_fixed_data_s));\r
+       if ((retval = write(sockfd, (char*) &send_data.fixed_data,sizeof(drm_req_fixed_data_s))) < 0|| retval < sizeof(drm_req_fixed_data_s))\r
+       {\r
+               DRM_CLIENT_EXCEPTION("write error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("Written socket sockfd = %d retval=%d",sockfd,retval);\r
+\r
+       /* Now send the additional data items if any */\r
+       if (send_data.fixed_data.num_data_items > 0) {\r
+               for (unsigned int i = 0; i < send_data.fixed_data.num_data_items; i++)\r
+               {\r
+                       if (send_data.fixed_data.data_length[i] > DRM_MAX_CHUNK_SIZE)\r
+                       {\r
+                               while (bytes_write > 0)\r
+                               {\r
+                                       DRM_CLIENT_LOG("Writing socket sockfd = %d size=%d",sockfd,bytes_write);\r
+                                       if ((retval = write(sockfd,(void*)(send_data.data_items[i] + offset), bytes_write)) < 0 || retval < bytes_write)\r
+                                       {\r
+                                               DRM_CLIENT_EXCEPTION("write error!!, retval = %d, error = %s",retval, strerror(errno));\r
+                                               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+                                               goto ErrorExit;\r
+                                       }\r
+                                       DRM_CLIENT_LOG("Written socket sockfd = %d retval=%d",sockfd,retval);\r
+                                       offset += DRM_MAX_CHUNK_SIZE;\r
+                                       bytes_write = (int)(send_data.fixed_data.data_length[i] - offset) > (int)DRM_MAX_CHUNK_SIZE ? DRM_MAX_CHUNK_SIZE :(int)(send_data.fixed_data.data_length[i] - offset);\r
+                                       DRM_CLIENT_LOG("offset = %d, bytes_write = %d", offset, bytes_write);\r
+                               }\r
+                               bytes_write = DRM_MAX_CHUNK_SIZE;\r
+                       }\r
+                       else\r
+                       {\r
+                               DRM_CLIENT_LOG("Writing socket sockfd = %d size=%d",sockfd,send_data.fixed_data.data_length[i]);\r
+                               if ((retval = write(sockfd, send_data.data_items[i], send_data.fixed_data.data_length[i])) < 0 || retval < send_data.fixed_data.data_length[i])\r
+                               {\r
+                                       DRM_CLIENT_EXCEPTION("write error!!, retval = %d, error = %s",retval, strerror(errno));\r
+                                       result = DRM_RETURN_COMMUNICATION_ERROR;\r
+                                       goto ErrorExit;\r
+                               }\r
+                               DRM_CLIENT_LOG("Written socket sockfd = %d retval=%d",sockfd,retval);\r
+                       }\r
+               }\r
+       }\r
+       /* Set offset to be used again */\r
+       offset = 0;\r
+       /* Read the fixed data into the receive structure */\r
+       DRM_CLIENT_LOG("Reading socket sockfd = %d size=%d",sockfd,sizeof(drm_resp_fixed_data_s));\r
+       if ((retval = read(sockfd, (char*) &recv_data.fixed_data,sizeof(drm_resp_fixed_data_s))) < 0 || retval < sizeof(drm_resp_fixed_data_s))\r
+       {\r
+               DRM_CLIENT_EXCEPTION("read error!!, retval = %d, error = %s",retval, strerror(errno));\r
+               result = DRM_RETURN_COMMUNICATION_ERROR;\r
+               goto ErrorExit;\r
+       }\r
+       DRM_CLIENT_LOG("Read socket sockfd = %d retval=%d",sockfd,retval);\r
+       if (recv_data.fixed_data.num_data_items > 0) {\r
+               for (unsigned int loop = 0; loop < recv_data.fixed_data.num_data_items; loop++)\r
+               {\r
+                       /* Allocate memory for the data items */\r
+                       recv_data.data_items[loop] = (char*) malloc(recv_data.fixed_data.data_length[loop]);\r
+                       if (!recv_data.data_items[loop]) {\r
+                               DRM_CLIENT_EXCEPTION("Memory Allocation Error!, buf = %p",recv_data.data_items[loop]);\r
+                               recv_data.fixed_data.resp_result=DRM_RETURN_INSUFFICIENT_MEMORY;\r
+                               goto ErrorExit;\r
+                       }\r
+                       if (recv_data.fixed_data.data_length[loop] > DRM_MAX_CHUNK_SIZE)\r
+                       {\r
+                               while (bytes_read > 0)\r
+                               {\r
+                                       DRM_CLIENT_LOG("Reading socket sockfd = %d size=%d",sockfd,bytes_read);\r
+                                       if ((retval = read(sockfd,(void*)(recv_data.data_items[loop] + offset),bytes_read)) < 0 || retval < bytes_read)\r
+                                       {\r
+                                               DRM_CLIENT_EXCEPTION("Read error!!, retval = %d, error = %s", retval,strerror(errno));\r
+                                               recv_data.fixed_data.resp_result=DRM_RETURN_COMMUNICATION_ERROR;\r
+                                               goto ErrorExit;\r
+                                       }\r
+                                       DRM_CLIENT_LOG("Read socket sockfd = %d retval=%d",sockfd,retval);\r
+                                       offset += DRM_MAX_CHUNK_SIZE;\r
+                                       bytes_read = (int)(recv_data.fixed_data.data_length[loop] - offset) > (int) DRM_MAX_CHUNK_SIZE ? DRM_MAX_CHUNK_SIZE :(int)(recv_data.fixed_data.data_length[loop] - offset);\r
+                                       DRM_CLIENT_LOG("offset = %d, bytes_read = %d", offset, bytes_read);\r
+                               }\r
+                               bytes_read = DRM_MAX_CHUNK_SIZE;\r
+                       }\r
+                       else\r
+                       {\r
+                               DRM_CLIENT_LOG("Reading socket sockfd = %d size=%d",sockfd,recv_data.fixed_data.data_length[loop]);\r
+                               if ((retval = read(sockfd,recv_data.data_items[loop],recv_data.fixed_data.data_length[loop])) < 0 || retval < recv_data.fixed_data.data_length[loop])\r
+                               {\r
+                                       DRM_CLIENT_EXCEPTION("Read error!!, retval = %d, error = %s",retval, strerror(errno));\r
+                                       recv_data.fixed_data.resp_result=DRM_RETURN_COMMUNICATION_ERROR;\r
+                                       goto ErrorExit;\r
+                               }\r
+                               DRM_CLIENT_LOG("Read socket sockfd = %d retval=%d",sockfd,retval);\r
+                       }\r
+               }\r
+       }\r
+       /* Copy the data from the server back to the client into the output parameter */\r
+       memcpy(server_out, &recv_data, sizeof(drm_response_data_s));\r
+       DRM_CLIENT_LOG("drm_client_comm success!!!, result = %d", result);\r
+       return result;\r
+\r
+       ErrorExit:\r
+       if (sockfd >= 0) {\r
+               close(sockfd);\r
+               sockfd = -1;\r
+       }\r
+       return result;\r
+}\r
diff --git a/test/Makefile b/test/Makefile
new file mode 100755 (executable)
index 0000000..b26948c
--- /dev/null
@@ -0,0 +1,14 @@
+CXX ?= g++\r
+TARGETS =  test_drm_client\r
+PKGS = drm-client\r
+LDFLAGS = `pkg-config --libs $(PKGS)`\r
+CFLAGS = -I. `pkg-config --cflags $(PKGS)`\r
+CFLAGS += -Wall -Wunused-function -Wunreachable-code -ggdb3 -fno-omit-frame-pointer -rdynamic -fno-optimize-sibling-calls -fstack-protector-all\r
+\r
+all: $(TARGETS)\r
+\r
+$(TARGETS): %: %.cpp\r
+       $(CXX) -o $@ $< $(CFLAGS) $(LDFLAGS)\r
+\r
+clean:\r
+       rm -f $(TARGETS)
\ No newline at end of file
diff --git a/test/test_drm_client.cpp b/test/test_drm_client.cpp
new file mode 100755 (executable)
index 0000000..9a39af0
--- /dev/null
@@ -0,0 +1,995 @@
+/*\r
+ * drm-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_client.cpp\r
+ * @brief       Test case implementation specific to DRM 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 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_client.h"\r
+\r
+#define drm_client_tid() (long int)syscall(__NR_gettid)\r
+#define DRM_CLIENT_TEST_FILENAME(X)   (strrchr((char*)(X), '/') ? (char*)(strrchr((char*)(X), '/') + 1) : ((char*)(X)) )\r
+\r
+#define DRM_CLIENT_TEST_LOG(FMT, ARG...)       do{\\r
+       fprintf(stderr,"[PID=%ld]:[TID=%ld]:[%s:%s:%d]:",(long int)getpid(),drm_client_tid(),DRM_CLIENT_TEST_FILENAME(__FILE__),__func__,__LINE__);     \\r
+       fprintf(stderr,FMT,##ARG); \\r
+       fprintf(stderr,"\n"); \\r
+       } while(0);\r
+\r
+#define        DRM_CLIENT_TEST_EXCEPTION(FMT, ARG...)  do{\\r
+       fprintf(stderr,"[PID=%ld]:[TID=%ld]:[%s:%s:%d]:",(long int)getpid(),drm_client_tid(),DRM_CLIENT_TEST_FILENAME(__FILE__),__func__,__LINE__);     \\r
+       fprintf(stderr,"[ERROR]"FMT,##ARG); \\r
+       fprintf(stderr,"\n"); \\r
+       } while(0);\r
+\r
+enum {\r
+       DRM_CLIENT_TEST_NONE,\r
+       DRM_CLIENT_TEST_is_drm_file,\r
+       DRM_CLIENT_TEST_get_file_type,\r
+       DRM_CLIENT_TEST_get_license_status,\r
+       DRM_CLIENT_TEST_get_content_info,\r
+       DRM_CLIENT_TEST_get_file_info,\r
+       DRM_CLIENT_TEST_get_constraint_info,\r
+       DRM_CLIENT_TEST_is_action_allowed,\r
+       DRM_CLIENT_TEST_get_data,\r
+       DRM_CLIENT_TEST_process_request,\r
+       DRM_CLIENT_TEST_print_return_code_values,\r
+       DRM_CLIENT_TEST_MAX\r
+};\r
+\r
+void test_operation_cb(drm_user_operation_info_s *operation_info,\r
+               void *output_data)\r
+{\r
+       DRM_CLIENT_TEST_LOG("Callback HIT");\r
+}\r
+\r
+int test_case(int option)\r
+{\r
+       DRM_CLIENT_TEST_LOG("option=[%d]", option);\r
+\r
+       switch (option) {\r
+       case DRM_CLIENT_TEST_NONE:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_NONE start");\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_NONE completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_is_drm_file:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_is_drm_file start");\r
+\r
+               char file_path[512] = {0,};\r
+               drm_bool_type_e is_drm_file = DRM_UNKNOWN;\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+               DRM_CLIENT_TEST_LOG("file_path = %s",file_path);\r
+\r
+               ret = drm_is_drm_file(file_path,&is_drm_file);\r
+               DRM_CLIENT_TEST_LOG("file_path = %s ret=%d is_drm_file=%d",file_path,ret,is_drm_file);\r
+               if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_drm_file){\r
+                       DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE",file_path);\r
+               }else{\r
+                       DRM_CLIENT_TEST_LOG("file_path = %s NOT a DRM FILE",file_path);\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_is_drm_file completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_file_type:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_file_type start");\r
+               char file_path[512] = {0,};\r
+               drm_file_type_e file_type = DRM_TYPE_UNDEFINED;\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+               DRM_CLIENT_TEST_LOG("file_path = %s",file_path);\r
+\r
+               ret = drm_get_file_type(file_path,&file_type);\r
+               DRM_CLIENT_TEST_LOG("file_path = %s ret=%d file_type=%d",file_path,ret,file_type);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = %d",file_path,file_type);\r
+                       switch(file_type){\r
+                       case DRM_TYPE_OMA_V1:                           /**< OMA DRM v1 file */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = DRM_TYPE_OMA_V1 ",file_path);\r
+                               break;\r
+\r
+                       case DRM_TYPE_OMA_V2:                           /**< OMA DRM v2 file */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = DRM_TYPE_OMA_V2 ",file_path);\r
+                               break;\r
+\r
+                       case DRM_TYPE_PLAYREADY:                                /**< PlayReady file */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = DRM_TYPE_PLAYREADY ",file_path);\r
+                               break;\r
+\r
+                       case DRM_TYPE_PLAYREADY_ENVELOPE:       /**< PlayReady Envelope file */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = DRM_TYPE_PLAYREADY_ENVELOPE ",file_path);\r
+                               break;\r
+\r
+                       case DRM_TYPE_DIVX:                                     /**< DivX file */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM FILE type = DRM_TYPE_DIVX ",file_path);\r
+                               break;\r
+\r
+                       default:\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s Unkown DRM FILE type = %d",file_path,file_type);\r
+                       }\r
+\r
+               }else{\r
+                       DRM_CLIENT_TEST_LOG("file_path = %s Unknown DRM type",file_path);\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_file_type completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_license_status:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_license_status start");\r
+\r
+               char file_path[512] = {0,};\r
+               drm_permission_type_e perm_type;\r
+               drm_license_status_e license_status = DRM_LICENSE_STATUS_UNDEFINED;\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter permission type");\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_NONE",DRM_PERMISSION_TYPE_NONE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_ANY",DRM_PERMISSION_TYPE_ANY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_PLAY",DRM_PERMISSION_TYPE_PLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_COLLABORATIVE_PLAY",DRM_PERMISSION_TYPE_COLLABORATIVE_PLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_DISPLAY",DRM_PERMISSION_TYPE_DISPLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXECUTE",DRM_PERMISSION_TYPE_EXECUTE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_PRINT",DRM_PERMISSION_TYPE_PRINT);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXPORT_COPY",DRM_PERMISSION_TYPE_EXPORT_COPY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXPORT_MOVE",DRM_PERMISSION_TYPE_EXPORT_MOVE);\r
+               scanf("%d", (int*)&perm_type);\r
+               DRM_CLIENT_TEST_LOG("perm_type = %d file_path=%s",perm_type,file_path);\r
+\r
+               ret = drm_get_license_status(file_path,perm_type,&license_status);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       DRM_CLIENT_TEST_LOG("drm_get_license_status success:license_status=%d",license_status);\r
+                       switch(license_status){\r
+                       case DRM_LICENSE_STATUS_VALID:          /**< Valid License */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM_LICENSE_STATUS_VALID",file_path);\r
+                               break;\r
+\r
+                       case DRM_LICENSE_STATUS_FUTURE_USE:     /**< License for future use */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM_LICENSE_STATUS_FUTURE_USE",file_path);\r
+                               break;\r
+                       case DRM_LICENSE_STATUS_EXPIRED:                /**< Expired License */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM_LICENSE_STATUS_EXPIRED",file_path);\r
+                               break;\r
+\r
+                       case DRM_LICENSE_STATUS_NO_LICENSE:     /**< No License */\r
+                               DRM_CLIENT_TEST_LOG("file_path = %s DRM_LICENSE_STATUS_NO_LICENSE",file_path);\r
+                               break;\r
+\r
+                       default:\r
+                               DRM_CLIENT_TEST_EXCEPTION("file_path = %s Unknown License Status=%d",file_path,license_status);\r
+                       }\r
+               }else{\r
+                       DRM_CLIENT_TEST_EXCEPTION("drm_get_license_status failed");\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_license_status completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_content_info:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_content_info start");\r
+               char file_path[512] = {0,};\r
+               drm_content_info_s content_info;\r
+               memset(&content_info,0x0,sizeof(drm_content_info_s));\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+               DRM_CLIENT_TEST_LOG("file_path=%s",file_path);\r
+\r
+               ret = drm_get_content_info(file_path,&content_info);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       DRM_CLIENT_TEST_LOG("drm_get_content_info success");\r
+                       if('\0' != content_info.author[0]) DRM_CLIENT_TEST_LOG("author=%s",content_info.author);\r
+                       if('\0' != content_info.copyright[0]) DRM_CLIENT_TEST_LOG("copyright=%s",content_info.copyright);\r
+                       if('\0' != content_info.description[0]) DRM_CLIENT_TEST_LOG("description=%s",content_info.description);\r
+                       if('\0' != content_info.icon_uri[0]) DRM_CLIENT_TEST_LOG("icon_uri=%s",content_info.icon_uri);\r
+                       if('\0' != content_info.info_url[0]) DRM_CLIENT_TEST_LOG("info_url=%s",content_info.info_url);\r
+                       if('\0' != content_info.content_url[0]) DRM_CLIENT_TEST_LOG("content_url=%s",content_info.content_url);\r
+                       if('\0' != content_info.rights_url[0]) DRM_CLIENT_TEST_LOG("rights_url=%s",content_info.rights_url);\r
+                       if('\0' != content_info.title[0]) DRM_CLIENT_TEST_LOG("title=%s",content_info.title);\r
+                       if('\0' != content_info.mime_type[0]) DRM_CLIENT_TEST_LOG("mime_type=%s",content_info.mime_type);\r
+                       if('\0' != content_info.content_id[0]) DRM_CLIENT_TEST_LOG("content_id=%s",content_info.content_id);\r
+               }else{\r
+                       DRM_CLIENT_TEST_EXCEPTION("drm_get_content_info failed");\r
+               }\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_content_info completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_file_info:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_file_info start");\r
+               char file_path[512] = {0,};\r
+               drm_file_info_s fileInfo;\r
+               memset(&fileInfo,0x0,sizeof(drm_file_info_s));\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+               DRM_CLIENT_TEST_LOG("file_path=%s",file_path);\r
+\r
+               ret = drm_get_file_info(file_path,&fileInfo);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       DRM_CLIENT_TEST_LOG("drm_get_file_info success");\r
+\r
+                       if(DRM_METHOD_TYPE_UNDEFINED != fileInfo.oma_info.method){\r
+                               DRM_CLIENT_TEST_LOG("OMA DRM File");\r
+                               DRM_CLIENT_TEST_LOG("method=%d",fileInfo.oma_info.method);\r
+                               DRM_CLIENT_TEST_LOG("version=%d",fileInfo.oma_info.version);\r
+                       }else if(0 != fileInfo.pr_env_info.org_file_size){\r
+                               DRM_CLIENT_TEST_LOG("PlayReady Envelope File");\r
+                               DRM_CLIENT_TEST_LOG("org_file_name=%s",fileInfo.pr_env_info.org_file_name);\r
+                               DRM_CLIENT_TEST_LOG("org_file_size=%d",fileInfo.pr_env_info.org_file_size);\r
+                       }else{\r
+                               DRM_CLIENT_TEST_LOG("Other DRM File=%s",file_path);\r
+                       }\r
+               }else{\r
+                       DRM_CLIENT_TEST_EXCEPTION("drm_get_file_info failed");\r
+               }\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_file_info completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_constraint_info:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_constraint_info start");\r
+               char file_path[512] = {0,};\r
+               drm_constraint_info_s constraint_info;\r
+               drm_permission_type_e perm_type;\r
+               memset(&constraint_info,0x0,sizeof(drm_constraint_info_s));\r
+               int ret = -1;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", file_path);\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter permission type");\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_NONE",DRM_PERMISSION_TYPE_NONE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_ANY",DRM_PERMISSION_TYPE_ANY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_PLAY",DRM_PERMISSION_TYPE_PLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_COLLABORATIVE_PLAY",DRM_PERMISSION_TYPE_COLLABORATIVE_PLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_DISPLAY",DRM_PERMISSION_TYPE_DISPLAY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXECUTE",DRM_PERMISSION_TYPE_EXECUTE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_PRINT",DRM_PERMISSION_TYPE_PRINT);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXPORT_COPY",DRM_PERMISSION_TYPE_EXPORT_COPY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_PERMISSION_TYPE_EXPORT_MOVE",DRM_PERMISSION_TYPE_EXPORT_MOVE);\r
+               scanf("%d", (int*)&perm_type);\r
+               DRM_CLIENT_TEST_LOG("perm_type = %d file_path=%s",perm_type,file_path);\r
+\r
+               ret = drm_get_constraint_info(file_path,perm_type,&constraint_info);\r
+               if(DRM_RETURN_SUCCESS == ret){\r
+                       DRM_CLIENT_TEST_LOG("drm_get_constraint_info success");\r
+\r
+                       if(constraint_info.const_type.is_unlimited){\r
+                               DRM_CLIENT_TEST_LOG("Unlimited:for permission=%d",perm_type);\r
+                               break;\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_accumulated){\r
+                               DRM_CLIENT_TEST_LOG("Accumulated Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("accumulated_original_seconds=%d",\r
+                                               constraint_info.accumulated_original_seconds);\r
+                               DRM_CLIENT_TEST_LOG("accumulated_remaining_seconds=%d",\r
+                                               constraint_info.accumulated_remaining_seconds);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_count){\r
+                               DRM_CLIENT_TEST_LOG("Count Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("original_count=%d",\r
+                                               constraint_info.original_count);\r
+                               DRM_CLIENT_TEST_LOG("remaining_count=%d",\r
+                                               constraint_info.remaining_count);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_datetime){\r
+                               DRM_CLIENT_TEST_LOG("DATETIME Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("start_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.start_time.tm_year,\r
+                                       constraint_info.start_time.tm_mon,\r
+                                       constraint_info.start_time.tm_mday,\r
+                                       constraint_info.start_time.tm_hour,\r
+                                       constraint_info.start_time.tm_min,\r
+                                       constraint_info.start_time.tm_sec);\r
+\r
+                               DRM_CLIENT_TEST_LOG("end_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.end_time.tm_year,\r
+                                       constraint_info.end_time.tm_mon,\r
+                                       constraint_info.end_time.tm_mday,\r
+                                       constraint_info.end_time.tm_hour,\r
+                                       constraint_info.end_time.tm_min,\r
+                                       constraint_info.end_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_individual){\r
+                               DRM_CLIENT_TEST_LOG("INDIVIDUAL Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("individual_identity_type=%d "\r
+                                               "individual_id=%s",\r
+                                               constraint_info.individual_identity_type,\r
+                                               constraint_info.individual_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_interval){\r
+                               DRM_CLIENT_TEST_LOG("INTERVAL Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("interval_time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                       constraint_info.interval_time.tm_year,\r
+                                       constraint_info.interval_time.tm_mon,\r
+                                       constraint_info.interval_time.tm_mday,\r
+                                       constraint_info.interval_time.tm_hour,\r
+                                       constraint_info.interval_time.tm_min,\r
+                                       constraint_info.interval_time.tm_sec);\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_system){\r
+                               DRM_CLIENT_TEST_LOG("SYSTEM Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("system_identity_type=%d "\r
+                                               "system_id=%s",\r
+                                               constraint_info.system_identity_type,\r
+                                               constraint_info.system_id);\r
+\r
+                       }\r
+\r
+                       if(constraint_info.const_type.is_timedcount){\r
+                               DRM_CLIENT_TEST_LOG("TIMED-COUNT Constraint is present");\r
+                               DRM_CLIENT_TEST_LOG("timed_original_count=%d",\r
+                                               constraint_info.timed_original_count);\r
+\r
+                               DRM_CLIENT_TEST_LOG("timed_remaining_count=%d",\r
+                                               constraint_info.timed_remaining_count);\r
+\r
+                               DRM_CLIENT_TEST_LOG("timed_count_timer=%d",\r
+                                               constraint_info.timed_count_timer);\r
+                       }\r
+               }else{\r
+                       DRM_CLIENT_TEST_EXCEPTION("drm_get_constraint_info failed");\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_constraint_info completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_is_action_allowed:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_is_action_allowed start");\r
+\r
+               drm_bool_type_e is_allowed = DRM_UNKNOWN;\r
+               drm_action_type_e action = DRM_ACTION_UNDEFINED;\r
+               drm_action_allowed_data_s action_data;\r
+               int ret = -1;\r
+               memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+               scanf("%511s", action_data.file_path);\r
+               DRM_CLIENT_TEST_LOG("file_path=%s",action_data.file_path);\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter the action to be performed!");\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_ACTION_UNDEFINED",\r
+                               DRM_ACTION_UNDEFINED);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_IS_FORWARDING_ALLOWED",\r
+                               DRM_IS_FORWARDING_ALLOWED);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_HAS_VALID_SETAS_STATUS",\r
+                               DRM_HAS_VALID_SETAS_STATUS);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_IS_DEVICE_ACTIVATED",\r
+                               DRM_IS_DEVICE_ACTIVATED);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_IS_VALID_SECURE_CLOCK",\r
+                               DRM_IS_VALID_SECURE_CLOCK);\r
+\r
+               scanf("%d", (int*)&action);\r
+\r
+               DRM_CLIENT_TEST_LOG("Action entered = %d", action);\r
+\r
+               ret = drm_is_action_allowed(action,&action_data,&is_allowed);\r
+               if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){\r
+                       DRM_CLIENT_TEST_LOG("Action=%d is allowed",action);\r
+               }else{\r
+                       DRM_CLIENT_TEST_EXCEPTION("drm_is_action_allowed failed");\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_is_action_allowed completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_get_data:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_data start");\r
+               char file_path[512] = {0,};\r
+               int ret = -1;\r
+               drm_data_type_e data_type = DRM_DATA_TYPE_NONE;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter the data type to be received");\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_DATA_TYPE_SECURE_CLOCK",\r
+                               DRM_DATA_TYPE_SECURE_CLOCK);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG",\r
+                               DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_DATA_TYPE_TRANSACTION_TRACKING_ID",\r
+                               DRM_DATA_TYPE_TRANSACTION_TRACKING_ID);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_DATA_TYPE_DIVX_REGISTRATION_CODE",\r
+                               DRM_DATA_TYPE_DIVX_REGISTRATION_CODE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE",\r
+                               DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE);\r
+\r
+               scanf("%d", (int*)&data_type);\r
+               DRM_CLIENT_TEST_LOG("Data type received=%d",data_type);\r
+\r
+               if(DRM_DATA_TYPE_TRANSACTION_TRACKING_ID == data_type){\r
+                       DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+                       scanf("%511s", file_path);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s",file_path);\r
+               }\r
+\r
+               switch(data_type){\r
+               case DRM_DATA_TYPE_SECURE_CLOCK:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Get DRM_DATA_TYPE_SECURE_CLOCK");\r
+                       drm_secure_clock_data_s secure_clock_info={0};\r
+                       ret = drm_get_data(data_type,NULL,(void*)&secure_clock_info);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                       if(DRM_RETURN_SUCCESS == ret\r
+                                       && 1 == secure_clock_info.is_secure_clock_set){\r
+                               DRM_CLIENT_TEST_LOG("Secure Clock is SET:ret=0x%x",ret);\r
+                               DRM_CLIENT_TEST_LOG("Secure Time:"\r
+                                               "Year=%d,Month=%d,Day=%d,Hour=%d, minute=%d, Second=%d",\r
+                                               secure_clock_info.secure_clock.tm_year,\r
+                                               secure_clock_info.secure_clock.tm_mon,\r
+                                               secure_clock_info.secure_clock.tm_mday,\r
+                                               secure_clock_info.secure_clock.tm_hour,\r
+                                               secure_clock_info.secure_clock.tm_min,\r
+                                               secure_clock_info.secure_clock.tm_sec);\r
+                       }else if(DRM_RETURN_SUCCESS == ret\r
+                                       && 0 == secure_clock_info.is_secure_clock_set){\r
+                               DRM_CLIENT_TEST_LOG("Secure Clock is NOT SET:ret=0x%x",ret);\r
+                       }else{\r
+                               DRM_CLIENT_TEST_LOG("Secure Clock Retrieval FAILED:ret=0x%x",ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Get DRM_DATA_TYPE_TRANSACTION_TRACKING_FLAG");\r
+\r
+                       int transtrk_flag = 0;\r
+                       ret = drm_get_data(data_type, NULL, (void*)&transtrk_flag);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("transtrk_flag = %d", transtrk_flag);\r
+                       } else {\r
+                               DRM_CLIENT_TEST_LOG("Get Transaction Tracking Flag failed!!, "\r
+                                               "ret = 0x%x", ret);\r
+                       }\r
+\r
+                       break;\r
+               }\r
+\r
+               case DRM_DATA_TYPE_TRANSACTION_TRACKING_ID:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Get DRM_DATA_TYPE_TRANSACTION_TRACKING_ID");\r
+                       drm_transaction_id_info_s transaction_id_info={"",0};\r
+                       ret = drm_get_data(data_type,(void*)file_path,(void*)&transaction_id_info);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                       if(DRM_RETURN_SUCCESS == ret){\r
+                               DRM_CLIENT_TEST_LOG("Transaction ID Length =%d",\r
+                                               transaction_id_info.tr_id_len);\r
+                               if(0 != transaction_id_info.tr_id_len){\r
+                                       DRM_CLIENT_TEST_LOG("Transaction ID  =%s",\r
+                                                       transaction_id_info.tr_id);\r
+                               }\r
+                       }else{\r
+                               DRM_CLIENT_TEST_EXCEPTION("Transaction ID Retrieval FAILED:ret=0x%x",ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_DATA_TYPE_DIVX_REGISTRATION_CODE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Get DRM_DATA_TYPE_DIVX_REGISTRATION_CODE");\r
+\r
+                       drm_code_info_s reg_code_info = {"",0};\r
+                       ret = drm_get_data(data_type, NULL, (void*) &reg_code_info);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("Code Length = %d", reg_code_info.code_len);\r
+                               if (0 != reg_code_info.code_len) {\r
+                                       DRM_CLIENT_TEST_LOG("Code = %s", reg_code_info.code);\r
+                               }\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("Divx Registration Code failed!!");\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Get DRM_DATA_TYPE_DIVX_DEREGISTRATION_CODE");\r
+\r
+                       drm_code_info_s dereg_code_info = {"",0};\r
+                       ret = drm_get_data(data_type, NULL, (void*) &dereg_code_info);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x", ret);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("Code Length = %d", dereg_code_info.code_len);\r
+                               if (0 != dereg_code_info.code_len) {\r
+                                       DRM_CLIENT_TEST_LOG("Code = %s", dereg_code_info.code);\r
+                               }\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("Divx Registration Code failed!!");\r
+                       }\r
+\r
+                       break;\r
+               }\r
+\r
+               default:\r
+                       DRM_CLIENT_TEST_EXCEPTION("Unsupported data type=%d",data_type);\r
+               }\r
+\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_get_data completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_process_request:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_process_request start");\r
+               char file_path[512] = {0,};\r
+               int ret = DRM_RETURN_SUCCESS;\r
+               drm_request_type_e request_type = DRM_REQUEST_TYPE_NONE;\r
+\r
+               DRM_CLIENT_TEST_LOG("Enter the request type to be processed");\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_REGISTER_FILE",DRM_REQUEST_TYPE_REGISTER_FILE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_UNREGISTER_FILE",DRM_REQUEST_TYPE_UNREGISTER_FILE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES",DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_REGISTER_LICENSE",DRM_REQUEST_TYPE_REGISTER_LICENSE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL",DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE",DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT",DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_HTTP_USER_CANCEL",DRM_REQUEST_TYPE_HTTP_USER_CANCEL);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_REGISTER_COPY_FILE",DRM_REQUEST_TYPE_REGISTER_COPY_FILE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_REGISTER_MOVE_FILE",DRM_REQUEST_TYPE_REGISTER_MOVE_FILE);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_INSERT_EXT_MEMORY",DRM_REQUEST_TYPE_INSERT_EXT_MEMORY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY",DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_REGISTER_SETAS",DRM_REQUEST_TYPE_REGISTER_SETAS);\r
+               DRM_CLIENT_TEST_LOG(" %d ==> DRM_REQUEST_TYPE_UNREGISTER_SETAS",DRM_REQUEST_TYPE_UNREGISTER_SETAS);\r
+\r
+               scanf("%d", (int*)&request_type);\r
+               DRM_CLIENT_TEST_LOG("request_type received=%d",request_type);\r
+\r
+               switch(request_type){\r
+               case DRM_REQUEST_TYPE_REGISTER_FILE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Request for Register file");\r
+                       DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+                       scanf("%511s", file_path);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s",file_path);\r
+\r
+                       ret = drm_process_request(request_type,(void*)file_path,NULL);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                       if(DRM_RETURN_SUCCESS == ret){\r
+                               DRM_CLIENT_TEST_LOG("Register success:file_path=%s",\r
+                                               file_path);\r
+                       }else{\r
+                               DRM_CLIENT_TEST_EXCEPTION("Register FAILED:ret=0x%x file_path=%s",\r
+                                               ret,file_path);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_UNREGISTER_FILE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Request for Un-register file");\r
+                       drm_unregister_info_s unregister_info={"",0};\r
+                       DRM_CLIENT_TEST_LOG("Enter complete file name with path");\r
+                       scanf("%255s", unregister_info.file_path);\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter 1 if you want to remove License also");\r
+                       DRM_CLIENT_TEST_LOG("Enter 0 if you don't want to remove License");\r
+                       scanf("%d", &unregister_info.remove_license);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s remove_license=%d",\r
+                                       unregister_info.file_path,unregister_info.remove_license);\r
+\r
+                       ret = drm_process_request(request_type,(void*)&unregister_info,NULL);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                       if(DRM_RETURN_SUCCESS == ret){\r
+                               DRM_CLIENT_TEST_LOG("Un-register success:file_path=%s",\r
+                                               unregister_info.file_path);\r
+                       }else{\r
+                               DRM_CLIENT_TEST_EXCEPTION("Un-register FAILED:ret=0x%x "\r
+                                               "file_path=%s",ret,unregister_info.file_path);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_UNREGISTER_ALL_FILES:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Request for Un-register all files");\r
+                       ret = drm_process_request(request_type,NULL,NULL);\r
+                       DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                       if(DRM_RETURN_SUCCESS == ret){\r
+                               DRM_CLIENT_TEST_LOG("Un-register All files success");\r
+                       }else{\r
+                               DRM_CLIENT_TEST_EXCEPTION("Un-register All files FAILED:"\r
+                                               "ret=0x%x",ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_LICENSE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Request for Register License");\r
+                       drm_register_lic_info_s lic_req_info={"",0,};\r
+                       drm_register_lic_resp_s lic_resp_info={""};\r
+                       struct stat stat_buf = { 0 };\r
+                       FILE *fp = NULL;\r
+                       unsigned int read_len=0;\r
+                       char *tempPath = NULL;\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter LICENSE file (*.dr/*.drc) with path");\r
+                       scanf("%511s", file_path);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s",file_path);\r
+\r
+                       if (0 == stat(file_path, &stat_buf)) {\r
+                               lic_req_info.lic_data_len = stat_buf.st_size;\r
+                               DRM_CLIENT_TEST_LOG("file_path=%s file_size=%u",file_path,\r
+                                               lic_req_info.lic_data_len);\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("stat failed:error=%s file_path=%s",\r
+                                               strerror(errno),file_path);\r
+                               break;\r
+                       }\r
+\r
+                       fp = fopen(file_path,"r");\r
+                       if(NULL == fp){\r
+                               DRM_CLIENT_TEST_EXCEPTION("fopen failed:error=%s file_path=%s",\r
+                                               strerror(errno),file_path);\r
+                               break;\r
+                       }\r
+\r
+                       memset(lic_req_info.lic_data,0x0,sizeof(lic_req_info.lic_data));\r
+                       read_len = fread(lic_req_info.lic_data,1,lic_req_info.lic_data_len,fp);\r
+                       DRM_CLIENT_TEST_LOG("read_len=%u lic_req_info.lic_data_len=%u",\r
+                                       read_len,lic_req_info.lic_data_len);\r
+\r
+                       fclose(fp);\r
+\r
+                       tempPath = strrchr((char *)file_path, '.');\r
+                       if(strncmp(tempPath, ".dr", 2) == 0\r
+                               || strncmp(tempPath, ".drc", 3) == 0){\r
+                               DRM_CLIENT_TEST_LOG("DRM v1 License file");\r
+\r
+                               lic_req_info.lic_version = DRM_OMA_DRMV1_RIGHTS;\r
+                               lic_req_info.roap_init_src = DRM_ROAP_INIT_FROM_UNKNOWN;\r
+                               lic_req_info.operation_callback.callback = test_operation_cb;\r
+\r
+                               ret = drm_process_request(request_type,(void*)&lic_req_info,\r
+                                               (void*)&lic_resp_info);\r
+                               DRM_CLIENT_TEST_LOG("ret=0x%x",ret);\r
+                               if(DRM_RETURN_SUCCESS == ret){\r
+                                       DRM_CLIENT_TEST_LOG("Register License success");\r
+                                       DRM_CLIENT_TEST_LOG("CID=%s",lic_resp_info.cid);\r
+                               }else{\r
+                                       DRM_CLIENT_TEST_EXCEPTION("Register License FAILED:"\r
+                                                       "ret=0x%x",ret);\r
+                               }\r
+                       }\r
+\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_SUBMIT_INITIATOR_URL:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("Request for Initiator URL processing");\r
+\r
+                       drm_initiator_info_s initiator_info = {"",0,};\r
+                       drm_web_server_resp_data_s ws_resp_data = {"",};\r
+\r
+                       /* Get the input parameters */\r
+                       DRM_CLIENT_TEST_LOG("Enter the initiator URL");\r
+                       scanf("%512s", initiator_info.initiator_url);\r
+                       initiator_info.initiator_url_len = strlen(initiator_info.initiator_url);\r
+                       initiator_info.operation_callback.callback = test_operation_cb;\r
+\r
+                       ret = drm_process_request(request_type, (void*) &initiator_info,\r
+                                       (void*) &ws_resp_data);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("Server Error Code = %d",\r
+                                               ws_resp_data.result_code);\r
+                               DRM_CLIENT_TEST_LOG("Content URL = %s",\r
+                                               ws_resp_data.content_url);\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("Submit Initiator URL Failed!!, ret = 0x%x", ret);\r
+                       }\r
+\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_SUBMIT_ROAP_MESSAGE");\r
+                       drm_submit_roap_message_info_s message_info;\r
+                       memset(&message_info,0x0,sizeof(drm_submit_roap_message_info_s));\r
+                       ret = drm_process_request(request_type,(void *)&message_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("SUBMIT_ROAP_MESSAGE success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("SUBMIT_ROAP_MESSAGE Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_SUBMIT_ROAP_USER_CONSENT");\r
+                       drm_submit_roap_user_consent_info_s user_consent_info;\r
+                       memset(&user_consent_info,0x0,sizeof(drm_submit_roap_user_consent_info_s));\r
+                       ret = drm_process_request(request_type,(void *)&user_consent_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("SUBMIT_ROAP_USER_CONSENT success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("SUBMIT_ROAP_USER_CONSENT Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_HTTP_USER_CANCEL:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_HTTP_USER_CANCEL");\r
+                       drm_http_user_cancel_info_s user_cancel_info;\r
+                       memset(&user_cancel_info,0x0,sizeof(drm_http_user_cancel_info_s));\r
+                       ret = drm_process_request(request_type,(void *)&user_cancel_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("HTTP_USER_CANCEL success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("HTTP_USER_CANCEL Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_COPY_FILE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_REGISTER_COPY_FILE");\r
+                       drm_register_copy_file_info_s copy_file_info;\r
+                       memset(&copy_file_info,0x0,sizeof(drm_register_copy_file_info_s));\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter Source file with path");\r
+                       scanf("%255s", copy_file_info.src_file_path);\r
+                       DRM_CLIENT_TEST_LOG("src_file_path=%s",copy_file_info.src_file_path);\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter Destination file with path");\r
+                       scanf("%255s", copy_file_info.dest_file_path);\r
+                       DRM_CLIENT_TEST_LOG("dest_file_path=%s",copy_file_info.dest_file_path);\r
+\r
+                       ret = drm_process_request(request_type,(void *)&copy_file_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("REGISTER_COPY_FILE success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("REGISTER_COPY_FILE Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_MOVE_FILE:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_REGISTER_MOVE_FILE");\r
+                       drm_register_copy_file_info_s copy_file_info;\r
+                       memset(&copy_file_info,0x0,sizeof(drm_register_copy_file_info_s));\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter Source file with path");\r
+                       scanf("%255s", copy_file_info.src_file_path);\r
+                       DRM_CLIENT_TEST_LOG("src_file_path=%s",copy_file_info.src_file_path);\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter Destination file with path");\r
+                       scanf("%255s", copy_file_info.dest_file_path);\r
+                       DRM_CLIENT_TEST_LOG("dest_file_path=%s",copy_file_info.dest_file_path);\r
+\r
+                       ret = drm_process_request(request_type,(void *)&copy_file_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("REGISTER_MOVE_FILE success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("REGISTER_MOVE_FILE Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_INSERT_EXT_MEMORY:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_INSERT_EXT_MEMORY");\r
+                       ret = drm_process_request(request_type,NULL,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("INSERT_EXT_MEMORY success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("INSERT_EXT_MEMORY Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_EXTRACT_EXT_MEMORY");\r
+                       ret = drm_process_request(request_type,NULL,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("INSERT_EXT_MEMORY success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("INSERT_EXT_MEMORY Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_REGISTER_SETAS:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_REGISTER_SETAS");\r
+                       drm_register_setas_info_s setas_info;\r
+                       memset(&setas_info,0x0,sizeof(drm_register_setas_info_s));\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter file name with path to be set");\r
+                       scanf("%255s", setas_info.file_path);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s",setas_info.file_path);\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter SETAS Category");\r
+                       DRM_CLIENT_TEST_LOG("Enter=%d -> DRM_SETAS_WALLPAPER",DRM_SETAS_WALLPAPER);\r
+                       DRM_CLIENT_TEST_LOG("Enter=%d -> DRM_SETAS_RINGTONE",DRM_SETAS_RINGTONE);\r
+                       scanf("%d", (int*)&setas_info.setas_cat);\r
+                       DRM_CLIENT_TEST_LOG("setas_cat=%d",setas_info.setas_cat);\r
+\r
+                       ret = drm_process_request(request_type,(void *)&setas_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("REGISTER_SETAS success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("REGISTER_SETAS Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               case DRM_REQUEST_TYPE_UNREGISTER_SETAS:\r
+               {\r
+                       DRM_CLIENT_TEST_LOG("DRM_REQUEST_TYPE_UNREGISTER_SETAS");\r
+                       drm_unregister_setas_info_s setas_info;\r
+                       memset(&setas_info,0x0,sizeof(drm_unregister_setas_info_s));\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter file name with path to be set");\r
+                       scanf("%255s", setas_info.file_path);\r
+                       DRM_CLIENT_TEST_LOG("file_path=%s",setas_info.file_path);\r
+\r
+                       DRM_CLIENT_TEST_LOG("Enter SETAS Category");\r
+                       DRM_CLIENT_TEST_LOG("Enter=%d -> DRM_SETAS_WALLPAPER",DRM_SETAS_WALLPAPER);\r
+                       DRM_CLIENT_TEST_LOG("Enter=%d -> DRM_SETAS_RINGTONE",DRM_SETAS_RINGTONE);\r
+                       scanf("%d", (int*)&setas_info.setas_cat);\r
+                       DRM_CLIENT_TEST_LOG("setas_cat=%d",setas_info.setas_cat);\r
+\r
+                       ret = drm_process_request(request_type,(void *)&setas_info,NULL);\r
+                       if (DRM_RETURN_SUCCESS == ret) {\r
+                               DRM_CLIENT_TEST_LOG("UNREGISTER_SETAS success");\r
+                       } else {\r
+                               DRM_CLIENT_TEST_EXCEPTION("UNREGISTER_SETAS Failed!!, ret = 0x%x", ret);\r
+                       }\r
+                       break;\r
+               }\r
+\r
+               default:\r
+                       DRM_CLIENT_TEST_EXCEPTION("Unsupported request_type=%d",request_type);\r
+               }\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_process_request completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_print_return_code_values:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_print_return_code_values Start");\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_SUCCESS=%d=0x%x",DRM_RETURN_SUCCESS,DRM_RETURN_SUCCESS);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_INVALID_ARG=%d=0x%x",DRM_RETURN_INVALID_ARG,DRM_RETURN_INVALID_ARG);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_INSUFFICIENT_MEMORY=%d=0x%x",DRM_RETURN_INSUFFICIENT_MEMORY,DRM_RETURN_INSUFFICIENT_MEMORY);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_PARSING_ERROR=%d=0x%x",DRM_RETURN_PARSING_ERROR,DRM_RETURN_PARSING_ERROR);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_DB_ERROR=%d=0x%x",DRM_RETURN_DB_ERROR,DRM_RETURN_DB_ERROR);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_FILE_ERROR=%d=0x%x",DRM_RETURN_FILE_ERROR,DRM_RETURN_FILE_ERROR);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_COMMUNICATION_ERROR=%d=0x%x",DRM_RETURN_COMMUNICATION_ERROR,DRM_RETURN_COMMUNICATION_ERROR);\r
+               DRM_CLIENT_TEST_LOG("DRM_RETURN_INTERNAL_ERROR=%d=0x%x",DRM_RETURN_INTERNAL_ERROR,DRM_RETURN_INTERNAL_ERROR);\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_print_return_code_values Completed");\r
+               break;\r
+       }\r
+\r
+       case DRM_CLIENT_TEST_MAX:\r
+       {\r
+               DRM_CLIENT_TEST_LOG("DRM_CLIENT_TEST_MAX");\r
+               DRM_CLIENT_TEST_LOG("SUCCESS");\r
+               return 0;\r
+       }\r
+\r
+       default:\r
+               DRM_CLIENT_TEST_EXCEPTION("Wrong choice=%d",option);\r
+               goto ERR;\r
+       }\r
+\r
+       DRM_CLIENT_TEST_LOG("SUCCESS");\r
+       return 1;\r
+\r
+ERR:\r
+       DRM_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_CLIENT_TEST_NONE;\r
+       DRM_CLIENT_TEST_LOG("main:pid=[%d]", pid);\r
+\r
+       do {\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_NONE",DRM_CLIENT_TEST_NONE);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_is_drm_file",DRM_CLIENT_TEST_is_drm_file);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_file_type",DRM_CLIENT_TEST_get_file_type);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_license_status",DRM_CLIENT_TEST_get_license_status);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_content_info",DRM_CLIENT_TEST_get_content_info);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_file_info",DRM_CLIENT_TEST_get_file_info);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_constraint_info",DRM_CLIENT_TEST_get_constraint_info);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_is_action_allowed",DRM_CLIENT_TEST_is_action_allowed);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_get_data",DRM_CLIENT_TEST_get_data);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_process_request",DRM_CLIENT_TEST_process_request);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> DRM_CLIENT_TEST_print_return_code_values",DRM_CLIENT_TEST_print_return_code_values);\r
+               DRM_CLIENT_TEST_LOG("choice=%d -> Exit from TEST Script",DRM_CLIENT_TEST_MAX);\r
+               DRM_CLIENT_TEST_LOG("Enter Your choice:1 to %d:Use choice no-%d to exit the test-program",DRM_CLIENT_TEST_MAX, DRM_CLIENT_TEST_MAX);\r
+               scanf("%3d", &choice);\r
+       } while (1 == test_case(choice));\r
+\r
+       DRM_CLIENT_TEST_LOG("Exiting process=[%d] from main", pid);\r
+       return 0;\r
+}\r