Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87201120 authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix AMediaDrm_queryKeyStatus returns key:key instead key:value pair." into oc-mr1-dev

parents 7966b441 815c9259
Loading
Loading
Loading
Loading
+44 −0
Original line number Diff line number Diff line
@@ -25,10 +25,28 @@

#include "Session.h"

namespace {
const android::String8 kStreaming("Streaming");
const android::String8 kOffline("Offline");
const android::String8 kTrue("True");

const android::String8 kQueryKeyLicenseType("LicenseType");
    // Value: "Streaming" or "Offline"
const android::String8 kQueryKeyPlayAllowed("PlayAllowed");
    // Value: "True" or "False"
const android::String8 kQueryKeyRenewAllowed("RenewAllowed");
    // Value: "True" or "False"
};

namespace clearkeydrm {

using android::sp;

DrmPlugin::DrmPlugin(SessionLibrary* sessionLibrary)
        : mSessionLibrary(sessionLibrary) {
    mPlayPolicy.clear();
}

status_t DrmPlugin::openSession(Vector<uint8_t>& sessionId) {
    sp<Session> session = mSessionLibrary->createSession();
    sessionId = session->sessionId();
@@ -60,18 +78,28 @@ status_t DrmPlugin::getKeyRequest(
    if (scope.size() == 0) {
        return android::BAD_VALUE;
    }

    if (keyType != kKeyType_Streaming) {
        return android::ERROR_DRM_CANNOT_HANDLE;
    }

    *keyRequestType = DrmPlugin::kKeyRequestType_Initial;
    defaultUrl.clear();
    sp<Session> session = mSessionLibrary->findSession(scope);
    if (!session.get()) {
        return android::ERROR_DRM_SESSION_NOT_OPENED;
    }

    return session->getKeyRequest(initData, mimeType, &request);
}

void DrmPlugin::setPlayPolicy() {
    mPlayPolicy.clear();
    mPlayPolicy.add(kQueryKeyLicenseType, kStreaming);
    mPlayPolicy.add(kQueryKeyPlayAllowed, kTrue);
    mPlayPolicy.add(kQueryKeyRenewAllowed, kTrue);
}

status_t DrmPlugin::provideKeyResponse(
        const Vector<uint8_t>& scope,
        const Vector<uint8_t>& response,
@@ -83,6 +111,8 @@ status_t DrmPlugin::provideKeyResponse(
    if (!session.get()) {
        return android::ERROR_DRM_SESSION_NOT_OPENED;
    }

    setPlayPolicy();
    status_t res = session->provideKeyResponse(response);
    if (res == android::OK) {
        // This is for testing AMediaDrm_setOnEventListener only.
@@ -111,4 +141,18 @@ status_t DrmPlugin::getPropertyString(
    return android::OK;
}

status_t DrmPlugin::queryKeyStatus(
        const Vector<uint8_t>& sessionId,
        KeyedVector<String8, String8>& infoMap) const {

    if (sessionId.size() == 0) {
        return android::BAD_VALUE;
    }

    infoMap.clear();
    for (size_t i = 0; i < mPlayPolicy.size(); ++i) {
        infoMap.add(mPlayPolicy.keyAt(i), mPlayPolicy.valueAt(i));
    }
    return android::OK;
}
}  // namespace clearkeydrm
+7 −10
Original line number Diff line number Diff line
@@ -39,8 +39,8 @@ using android::Vector;

class DrmPlugin : public android::DrmPlugin {
public:
    explicit DrmPlugin(SessionLibrary* sessionLibrary)
            : mSessionLibrary(sessionLibrary) {}
    explicit DrmPlugin(SessionLibrary* sessionLibrary);

    virtual ~DrmPlugin() {}

    virtual status_t openSession(Vector<uint8_t>& sessionId);
@@ -81,13 +81,7 @@ public:

    virtual status_t queryKeyStatus(
            const Vector<uint8_t>& sessionId,
            KeyedVector<String8, String8>& infoMap) const {
        if (sessionId.size() == 0) {
            return android::BAD_VALUE;
        }
        UNUSED(infoMap);
        return android::ERROR_DRM_CANNOT_HANDLE;
    }
            KeyedVector<String8, String8>& infoMap) const;

    virtual status_t getProvisionRequest(
            const String8& cert_type,
@@ -248,9 +242,12 @@ public:
    }

private:
    DISALLOW_EVIL_CONSTRUCTORS(DrmPlugin);
    void setPlayPolicy();

    android::KeyedVector<android::String8, android::String8> mPlayPolicy;
    SessionLibrary* mSessionLibrary;

    DISALLOW_EVIL_CONSTRUCTORS(DrmPlugin);
};

} // namespace clearkeydrm
+1 −1
Original line number Diff line number Diff line
@@ -421,7 +421,7 @@ media_status_t AMediaDrm_queryKeyStatus(AMediaDrm *mObj, const AMediaDrmSessionI

    for (size_t i = 0; i < mObj->mQueryResults.size(); i++) {
        keyValuePairs[i].mKey = mObj->mQueryResults.keyAt(i).string();
        keyValuePairs[i].mValue = mObj->mQueryResults.keyAt(i).string();
        keyValuePairs[i].mValue = mObj->mQueryResults.valueAt(i).string();
    }
    *numPairs = mObj->mQueryResults.size();
    return AMEDIA_OK;