Пример #1
0
Int32 CDrmRawContent::NativeReadContent(
    /* [in] */ ArrayOf<Byte>* buf,
    /* [in] */ Int32 bufOff,
    /* [in] */ Int32 len,
    /* [in] */ Int32 mediaOff)
{
    DrmData* p;

    if (NULL == buf) {
        return CDrmRawContent::JNI_DRM_FAILURE;
    }

    if (len < 0 || bufOff < 0 || len + bufOff > buf->GetLength()) {
        return CDrmRawContent::JNI_DRM_FAILURE;
    }

    if (mediaOff < 0 || len == 0)
        return CDrmRawContent::JNI_DRM_FAILURE;

    p = GetItem(mId);
    if (NULL == p)
        return CDrmRawContent::JNI_DRM_FAILURE;

    p->pInData = mInData;

    len = SVC_drm_getContent(mId, mediaOff, (uint8_t *)buf->GetPayload() + bufOff, len);

    if (DRM_MEDIA_EOF == len){
       return CDrmRawContent::JNI_DRM_EOF;
    }

    if (len <= 0){
        return CDrmRawContent::JNI_DRM_FAILURE;
    }

    return len;
}
Пример #2
0
/* native interface */
JNIEXPORT jint JNICALL
Java_android_drm_mobile1_DrmRawContent_nativeReadContent
  (JNIEnv * env, jobject rawContent, jbyteArray buf, jint bufOff, jint len, jint mediaOff)
{
    jint id;
    jbyte *nativeBuf;
    jclass cls;
    jmethodID mid;
    DrmData* p;
    jobject inputStream;
    jfieldID field;

    if (NULL == buf) {
        jclass newExcCls = (*env)->FindClass(env, "java/lang/NullPointerException");

        if (newExcCls == NULL)
            /* Unable to find the exception class, give up. */
            return JNI_DRM_FAILURE;

        (*env)->ThrowNew(env, newExcCls, "b is null");
    }

    if (len < 0 || bufOff < 0 || len + bufOff > (*env)->GetArrayLength(env, buf)) {
        jclass newExcCls = (*env)->FindClass(env, "java/lang/IndexOutOfBoundsException");

        if (newExcCls == NULL)
            /* Unable to find the exception class, give up. */
            return JNI_DRM_FAILURE;

        (*env)->ThrowNew(env, newExcCls, NULL);
    }

    if (mediaOff < 0 || len == 0)
        return JNI_DRM_FAILURE;

    if (JNI_DRM_FAILURE == getObjectIntField(env, rawContent, "id", &id))
        return JNI_DRM_FAILURE;

    p = getItem(id);
    if (NULL == p)
        return JNI_DRM_FAILURE;

    cls = (*env)->GetObjectClass(env, rawContent);
    if (NULL == cls)
        return JNI_DRM_FAILURE;

    field = (*env)->GetFieldID(env, cls, "inData", "Ljava/io/BufferedInputStream;");
    (*env)->DeleteLocalRef(env, cls);

    if (NULL == field)
        return JNI_DRM_FAILURE;

    inputStream = (*env)->GetObjectField(env, rawContent, field);

    p->env = env;
    p->pInData = &inputStream;

    nativeBuf = (*env)->GetByteArrayElements(env, buf, NULL);

    len = SVC_drm_getContent(id, mediaOff, (uint8_t *)nativeBuf + bufOff, len);

    (*env)->ReleaseByteArrayElements(env, buf, nativeBuf, 0);

    if (DRM_MEDIA_EOF == len)
        return JNI_DRM_EOF;
    if (len <= 0)
        return JNI_DRM_FAILURE;

    return len;
}