| /* |
| * Copyright (C) 2007 The Android Open Source Project |
| * |
| * 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. |
| */ |
| |
| package android.drm.mobile1; |
| |
| import java.io.*; |
| import java.util.*; |
| |
| /** |
| * This class provides interfaces to access the DRM right manager. |
| */ |
| public class DrmRightsManager { |
| /** |
| * The "application/vnd.oma.drm.rights+xml" mime type. |
| */ |
| public static final String DRM_MIMETYPE_RIGHTS_XML_STRING = "application/vnd.oma.drm.rights+xml"; |
| |
| /** |
| * The "application/vnd.oma.drm.rights+wbxml" mime type. |
| */ |
| public static final String DRM_MIMETYPE_RIGHTS_WBXML_STRING = "application/vnd.oma.drm.rights+wbxml"; |
| |
| /** |
| * The id of "application/vnd.oma.drm.rights+xml" mime type. |
| */ |
| private static final int DRM_MIMETYPE_RIGHTS_XML = 3; |
| |
| /** |
| * The id of "application/vnd.oma.drm.rights+wbxml" mime type. |
| */ |
| private static final int DRM_MIMETYPE_RIGHTS_WBXML = 4; |
| |
| /** |
| * The id of "application/vnd.oma.drm.message" mime type. |
| */ |
| private static final int DRM_MIMETYPE_MESSAGE = 1; |
| |
| /** |
| * Successful operation. |
| */ |
| private static final int JNI_DRM_SUCCESS = 0; |
| |
| /** |
| * General failure. |
| */ |
| private static final int JNI_DRM_FAILURE = -1; |
| |
| /** |
| * The instance of the rights manager. |
| */ |
| private static DrmRightsManager singleton = null; |
| |
| |
| /** |
| * Construct a DrmRightsManager |
| */ |
| protected DrmRightsManager() { |
| } |
| |
| /** |
| * Get the DrmRightsManager instance. |
| * |
| * @return the instance of DrmRightsManager. |
| */ |
| public static synchronized DrmRightsManager getInstance() { |
| if (singleton == null) { |
| singleton = new DrmRightsManager(); |
| } |
| |
| return singleton; |
| } |
| |
| /** |
| * Install one DRM rights and return one instance of DrmRights. |
| * |
| * @param rightsData raw rights data. |
| * @param mimeTypeStr the mime type of the rights object. |
| * |
| * @return the instance of the installed DrmRights. |
| */ |
| public synchronized DrmRights installRights(InputStream rightsData, int len, String mimeTypeStr) throws DrmException, IOException { |
| int mimeType = 0; |
| |
| if (DRM_MIMETYPE_RIGHTS_XML_STRING.equals(mimeTypeStr)) |
| mimeType = DRM_MIMETYPE_RIGHTS_XML; |
| else if (DRM_MIMETYPE_RIGHTS_WBXML_STRING.equals(mimeTypeStr)) |
| mimeType = DRM_MIMETYPE_RIGHTS_WBXML; |
| else if (DrmRawContent.DRM_MIMETYPE_MESSAGE_STRING.equals(mimeTypeStr)) |
| mimeType = DRM_MIMETYPE_MESSAGE; |
| else |
| throw new IllegalArgumentException("mimeType must be DRM_MIMETYPE_RIGHTS_XML or DRM_MIMETYPE_RIGHTS_WBXML or DRM_MIMETYPE_MESSAGE"); |
| |
| if (len <= 0) |
| return null; |
| |
| DrmRights rights = new DrmRights(); |
| |
| /* call native method to install this rights object. */ |
| int res = nativeInstallDrmRights(rightsData, len, mimeType, rights); |
| |
| if (JNI_DRM_FAILURE == res) |
| throw new DrmException("nativeInstallDrmRights() returned JNI_DRM_FAILURE"); |
| |
| return rights; |
| } |
| |
| /** |
| * Query DRM rights of specified DRM raw content. |
| * |
| * @param content raw content object. |
| * |
| * @return the instance of DrmRights, or null if there is no rights. |
| */ |
| public synchronized DrmRights queryRights(DrmRawContent content) { |
| DrmRights rights = new DrmRights(); |
| |
| /* call native method to query the rights */ |
| int res = nativeQueryRights(content, rights); |
| |
| if (JNI_DRM_FAILURE == res) |
| return null; |
| |
| return rights; |
| } |
| |
| /** |
| * Get the list of all DRM rights saved in local client. |
| * |
| * @return the list of all the rights object. |
| */ |
| public synchronized List getRightsList() { |
| List rightsList = new ArrayList(); |
| |
| /* call native method to get how many rights object in current agent */ |
| int num = nativeGetNumOfRights(); |
| |
| if (JNI_DRM_FAILURE == num) |
| return null; |
| |
| if (num > 0) { |
| DrmRights[] rightsArray = new DrmRights[num]; |
| int i; |
| |
| for (i = 0; i < num; i++) |
| rightsArray[i] = new DrmRights(); |
| |
| /* call native method to get all the rights information */ |
| num = nativeGetRightsList(rightsArray, num); |
| |
| if (JNI_DRM_FAILURE == num) |
| return null; |
| |
| /* add all rights informations to ArrayList */ |
| for (i = 0; i < num; i++) |
| rightsList.add(rightsArray[i]); |
| } |
| |
| return rightsList; |
| } |
| |
| /** |
| * Delete the specified DRM rights object. |
| * |
| * @param rights the specified rights object to be deleted. |
| */ |
| public synchronized void deleteRights(DrmRights rights) { |
| /* call native method to delete the specified rights object */ |
| int res = nativeDeleteRights(rights); |
| |
| if (JNI_DRM_FAILURE == res) |
| return; |
| } |
| |
| |
| /** |
| * native method: install rights object to local client. |
| * |
| * @param data input DRM rights object data to be installed. |
| * @param len the length of the data. |
| * @param mimeType the mime type of this DRM rights object. the value of this field includes: |
| * #DRM_MIMETYPE_RIGHTS_XML |
| * #DRM_MIMETYPE_RIGHTS_WBXML |
| * @parma rights the instance of DRMRights to be filled. |
| * |
| * @return #JNI_DRM_SUCCESS if succeed. |
| * #JNI_DRM_FAILURE if fail. |
| */ |
| private native int nativeInstallDrmRights(InputStream data, int len, int mimeType, DrmRights rights); |
| |
| /** |
| * native method: query the given DRM content's rights object. |
| * |
| * @param content the given DRM content. |
| * @param rights the instance of rights to set if have. |
| * |
| * @return #JNI_DRM_SUCCESS if succeed. |
| * #JNI_DRM_FAILURE if fail. |
| */ |
| private native int nativeQueryRights(DrmRawContent content, DrmRights rights); |
| |
| /** |
| * native method: get how many rights object in current DRM agent. |
| * |
| * @return the number of the rights object. |
| * #JNI_DRM_FAILURE if fail. |
| */ |
| private native int nativeGetNumOfRights(); |
| |
| /** |
| * native method: get all the rights object in current local agent. |
| * |
| * @param rights the array instance of rights object. |
| * @param numRights how many rights can be saved. |
| * |
| * @return the number of the rights object has been gotten. |
| * #JNI_DRM_FAILURE if fail. |
| */ |
| private native int nativeGetRightsList(DrmRights[] rights, int numRights); |
| |
| /** |
| * native method: delete a specified rights object. |
| * |
| * @param rights the specified rights object to be deleted. |
| * |
| * @return #JNI_DRM_SUCCESS if succeed. |
| * #JNI_DRM_FAILURE if fail. |
| */ |
| private native int nativeDeleteRights(DrmRights rights); |
| |
| |
| /** |
| * Load the shared library to link the native methods. |
| */ |
| static { |
| try { |
| System.loadLibrary("drm1_jni"); |
| } |
| catch (UnsatisfiedLinkError ule) { |
| System.err.println("WARNING: Could not load libdrm1_jni.so"); |
| } |
| } |
| } |