19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/* 29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Copyright (C) 2007 The Android Open Source Project 39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * you may not use this file except in compliance with the License. 69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * You may obtain a copy of the License at 79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * See the License for the specific language governing permissions and 149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * limitations under the License. 159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef __SVC_DRM_NEW_H__ 189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define __SVC_DRM_NEW_H__ 199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus 219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectextern "C" { 229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <drm_common_types.h> 259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Define the mime type of DRM data. 289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define TYPE_DRM_MESSAGE 0x48 /**< The mime type is "application/vnd.oma.drm.message" */ 309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define TYPE_DRM_CONTENT 0x49 /**< The mime type is "application/vnd.oma.drm.content" */ 319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define TYPE_DRM_RIGHTS_XML 0x4a /**< The mime type is "application/vnd.oma.drm.rights+xml" */ 329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define TYPE_DRM_RIGHTS_WBXML 0x4b /**< The mime type is "application/vnd.oma.drm.rights+wbxml" */ 339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define TYPE_DRM_UNKNOWN 0xff /**< The mime type is unknown */ 349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Define the delivery methods. 379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define FORWARD_LOCK 1 /**< Forward_lock */ 399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define COMBINED_DELIVERY 2 /**< Combined delivery */ 409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define SEPARATE_DELIVERY 3 /**< Separate delivery */ 419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define SEPARATE_DELIVERY_FL 4 /**< Separate delivery but DCF is forward-lock */ 429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Define the permissions. 459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_PERMISSION_PLAY 0x01 /**< Play */ 479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_PERMISSION_DISPLAY 0x02 /**< Display */ 489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_PERMISSION_EXECUTE 0x04 /**< Execute */ 499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_PERMISSION_PRINT 0x08 /**< Print */ 509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_PERMISSION_FORWARD 0x10 /**< Forward */ 519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Define the constraints. 549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_NO_CONSTRAINT 0x80 /**< Indicate have no constraint, it can use freely */ 569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_END_TIME_CONSTRAINT 0x08 /**< Indicate have end time constraint */ 579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_INTERVAL_CONSTRAINT 0x04 /**< Indicate have interval constraint */ 589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_COUNT_CONSTRAINT 0x02 /**< Indicate have count constraint */ 599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_START_TIME_CONSTRAINT 0x01 /**< Indicate have start time constraint */ 609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_NO_PERMISSION 0x00 /**< Indicate no rights */ 619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Define the return values for those interface. 649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_SUCCESS 0 669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_FAILURE -1 679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_MEDIA_EOF -2 689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_RIGHTS_DATA_INVALID -3 699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_MEDIA_DATA_INVALID -4 709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_SESSION_NOT_OPENED -5 719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_NO_RIGHTS -6 729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_NOT_SD_METHOD -7 739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_RIGHTS_PENDING -8 749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_RIGHTS_EXPIRED -9 759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define DRM_UNKNOWN_DATA_LEN -10 769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The input DRM data structure, include DM, DCF, DR, DRC. 799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Input_Data { 819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The handle of the input DRM data. 839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t inputHandle; 859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The mime type of the DRM data, if the mime type set to unknown, DRM engine 889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * will try to scan the input data to confirm the mime type, but we must say that 899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * the scan and check of mime type is not strictly precise. 909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t mimeType; 929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The function to get input data length, this function should be implement by out module, 959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and DRM engine will call-back it. 969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param inputHandle The handle of the DRM data. 989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -A positive integer indicate the length of input data. 1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -0, if some error occurred. 1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t (*getInputDataLength)(int32_t inputHandle); 1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The function to read the input data, this function should be implement by out module, 1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and DRM engine will call-back it. 1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param inputHandle The handle of the DRM data. 1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param buf The buffer mallocced by DRM engine to save the data. 1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param bufLen The length of the buffer. 1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -A positive integer indicate the actually length of byte has been read. 1159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -0, if some error occurred. 1169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -(-1), if reach to the end of the data. 1179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t (*readInputData)(int32_t inputHandle, uint8_t* buf, int32_t bufLen); 1199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project /** 1219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The function to seek the current file pointer, this function should be implement by out module, 1229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * and DRM engine will call-back it. 1239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param inputHandle The handle of the DRM data. 1259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param offset The offset from the start position to be seek. 1269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -0, if seek operation success. 1299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -(-1), if seek operation fail. 1309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t (*seekInputData)(int32_t inputHandle, int32_t offset); 1329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Input_Data; 1339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The constraint structure. 1369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Constraint_Info { 1389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t indicator; /**< Whether there is a right */ 1399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t unUsed[3]; 1409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t count; /**< The constraint of count */ 1419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t startDate; /**< The constraint of start date */ 1429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t startTime; /**< The constraint of start time */ 1439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t endDate; /**< The constraint of end date */ 1449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t endTime; /**< The constraint of end time */ 1459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t intervalDate; /**< The constraint of interval date */ 1469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project int32_t intervalTime; /**< The constraint of interval time */ 1479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Constraint_Info; 1489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The rights permission and constraint information structure. 1519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Rights_Info { 1539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project uint8_t roId[256]; /**< The unique id for a specially rights object */ 1549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T_DRM_Constraint_Info playRights; /**< Constraint of play */ 1559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T_DRM_Constraint_Info displayRights; /**< Constraint of display */ 1569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T_DRM_Constraint_Info executeRights; /**< Constraint of execute */ 1579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T_DRM_Constraint_Info printRights; /**< Constraint of print */ 1589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Rights_Info; 1599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * The list node of the Rights information structure. 1629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projecttypedef struct _T_DRM_Rights_Info_Node { 1649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project T_DRM_Rights_Info roInfo; 1659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project struct _T_DRM_Rights_Info_Node *next; 1669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} T_DRM_Rights_Info_Node; 1679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Install a rights object to DRM engine, include the rights in Combined Delivery cases. 1709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Because all the rights object is managed by DRM engine, so every incoming rights object 1719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * must be install to the engine first, or the DRM engine will not recognize it. 1729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param data The rights object data or Combined Delivery case data. 1749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param pRightsInfo The structure to save this rights information. 1759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when install successfully. 1789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_DATA_INVALID, when the input rights data is invalid. 1799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occur. 1809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_installRights(T_DRM_Input_Data data, T_DRM_Rights_Info* pRightsInfo); 1829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Open a session for a special DRM object, it will parse the input DRM data, and then user 1859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * can try to get information for this DRM object, or try to use it if the rights is valid. 1869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param data The DRM object data, DM or DCF. 1889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 1909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -A handle for this opened DRM object session. 1919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_MEDIA_DATA_INVALID, when the input DRM object data is invalid. 1929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occurred. 1939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 1949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_openSession(T_DRM_Input_Data data); 1959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 1969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 1979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the delivery method of the DRM object. 1989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 1999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -The delivery method of this DRM object, include: FORWARD_LOCK, COMBINED_DELIVERY, SEPARATE_DELIVERY, SEPARATE_DELIVERY_FL. 2039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occurred. 2049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getDeliveryMethod(int32_t session); 2069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get DRM object media object content type. 2099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param mediaType The buffer to save the media type string, 64 bytes is enough. 2129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when get the media object content type successfully. 2159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getContentType(int32_t session, uint8_t* mediaType); 2199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check whether a specific DRM object has the specific permission rights or not. 2229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param permission Specify the permission to be checked. 2259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when it has the rights for the permission. 2289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when it has no rights. 2309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending. 2319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_EXPIRED, when the rights has expired. 2329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_checkRights(int32_t session, int32_t permission); 2359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Consume the rights when try to use the DRM object. 2389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param permission Specify the permission to be checked. 2419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when consume rights successfully. 2449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when it has no rights. 2469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending. 2479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_EXPIRED, when the rights has expired. 2489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_consumeRights(int32_t session, int32_t permission); 2519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get DRM media object content data length. 2549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -A positive integer indicate the length of the media object content data. 2599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when the rights object is not existed. 2619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_UNKNOWN_DATA_LEN, when DRM object media data length is unknown in case of DCF has no rights. 2629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getContentLength(int32_t session); 2659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get DRM media object content data. Support get the data piece by piece if the content is too large. 2689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param offset The offset to start to get content. 2719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param mediaBuf The buffer to save media object data. 2729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param mediaBufLen The length of the buffer. 2739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -A positive integer indicate the actually length of the data has been got. 2769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when the rights object is not existed. 2789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_MEDIA_EOF, when reach to the end of the media data. 2799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getContent(int32_t session, int32_t offset, uint8_t* mediaBuf, int32_t mediaBufLen); 2829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get the rights issuer address, this interface is specially for Separate Delivery method. 2859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 2879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param rightsIssuer The buffer to save rights issuer, 256 bytes are enough. 2889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 2899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 2909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when get the rights issuer successfully. 2919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 2929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NOT_SD_METHOD, when it is not a Separate Delivery DRM object. 2939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 2949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 2959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getRightsIssuer(int32_t session, uint8_t* rightsIssuer); 2969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 2979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 2989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Get DRM object constraint informations. 2999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 3019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param rights The structue to save the rights object information. 3029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when get the rights information successfully. 3059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 3069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when this DRM object has not rights. 3079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_getRightsInfo(int32_t session, T_DRM_Rights_Info* rights); 3109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Close the opened session, after closed, the handle become invalid. 3139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param session The handle for this DRM object session. 3159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when close operation success. 3189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SESSION_NOT_OPENED, when the session is not opened or has been closed. 3199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_closeSession(int32_t session); 3229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3249066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Check and update the given rights according the given permission. 3259066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param contentID The unique id of the rights object. 3279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param permission The permission to be updated. 3289066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3299066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when update operation success. 3319066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when it has no rights. 3329066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_PENDING, when it has the rights, but currently it is pending. 3339066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_RIGHTS_EXPIRED, when the rights has expired. 3349066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_updateRights(uint8_t* contentID, int32_t permission); 3379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3399066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Scan all the rights object in current DRM engine, and get all their information. 3409066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3419066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param ppRightsInfo The pointer to the list structure to save rights info. 3429066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3439066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3449066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when get information successfully. 3459066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3469066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3479066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_viewAllRights(T_DRM_Rights_Info_Node **ppRightsInfo); 3489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Free the allocated memory when call "SVC_drm_viewAllRights". 3519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param pRightsHeader The header pointer of the list to be free. 3539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when free operation successfully. 3569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_freeRightsInfoList(T_DRM_Rights_Info_Node *pRightsHeader); 3599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project/** 3619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * Delete a specify rights. 3629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \param roId The unique id of the rights. 3649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * 3659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * \return 3669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_SUCCESS, when free operation successfully. 3679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_NO_RIGHTS, when there is not this rights object. 3689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project * -DRM_FAILURE, when some other error occured. 3699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project */ 3709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectint32_t SVC_drm_deleteRights(uint8_t* roId); 3719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifdef __cplusplus 3739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project} 3749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif 3759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project 3769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif /* __SVC_DRM_NEW_H__ */ 377