blob: 1bc36ec8b22c315b3a19e40bc50d19154a3a13fb [file] [log] [blame]
/*
* 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");
}
}
}