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

Commit e1c4aaf3 authored by Kyle Zhang's avatar Kyle Zhang Committed by Android (Google) Code Review
Browse files

Merge "Fix several bugs from cts test through aidl clearkey"

parents c545b8bc 96af957b
Loading
Loading
Loading
Loading
+7 −8
Original line number Original line Diff line number Diff line
@@ -41,7 +41,7 @@ using ::aidl::android::hardware::drm::Uuid;
using ::aidl::android::hardware::common::Ashmem;
using ::aidl::android::hardware::common::Ashmem;


using ::android::sp;
using ::android::sp;
using ::android::DrmUtils::toStatusTAidl;
using ::android::DrmUtils::statusAidlToStatusT;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_array;
using ::android::hardware::hidl_handle;
using ::android::hardware::hidl_handle;
using ::android::hardware::hidl_memory;
using ::android::hardware::hidl_memory;
@@ -281,7 +281,7 @@ status_t CryptoHalAidl::setMediaDrmSession(const Vector<uint8_t>& sessionId) {
    }
    }


    auto err = mPlugin->setMediaDrmSession(toStdVec(sessionId));
    auto err = mPlugin->setMediaDrmSession(toStdVec(sessionId));
    return err.isOk() ? toStatusTAidl(err.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(err);
}
}


ssize_t CryptoHalAidl::decrypt(const uint8_t keyId[16], const uint8_t iv[16],
ssize_t CryptoHalAidl::decrypt(const uint8_t keyId[16], const uint8_t iv[16],
@@ -350,13 +350,12 @@ ssize_t CryptoHalAidl::decrypt(const uint8_t keyId[16], const uint8_t iv[16],
    std::vector<uint8_t> keyIdAidl(toStdVec(keyId, 16));
    std::vector<uint8_t> keyIdAidl(toStdVec(keyId, 16));
    std::vector<uint8_t> ivAidl(toStdVec(iv, 16));
    std::vector<uint8_t> ivAidl(toStdVec(iv, 16));
    DecryptResult result;
    DecryptResult result;
    err = mPlugin->decrypt(secure, keyIdAidl, ivAidl, aMode, aPattern, stdSubSamples,
    ::ndk::ScopedAStatus statusAidl = mPlugin->decrypt(secure,
                           keyIdAidl, ivAidl, aMode, aPattern, stdSubSamples,
                           hidlSharedBufferToAidlSharedBuffer(hSource), offset,
                           hidlSharedBufferToAidlSharedBuffer(hSource), offset,
                           hidlDestinationBufferToAidlDestinationBuffer(hDestination), &result)
                           hidlDestinationBufferToAidlDestinationBuffer(hDestination), &result);
                          .isOk()
                  ? OK
                  : DEAD_OBJECT;


    err = statusAidlToStatusT(statusAidl);
    *errorDetailMsg = toString8(result.detailedError);
    *errorDetailMsg = toString8(result.detailedError);
    if (err != OK) {
    if (err != OK) {
        ALOGE("Failed on decrypt, error message:%s, bytes written:%d", result.detailedError.c_str(),
        ALOGE("Failed on decrypt, error message:%s, bytes written:%d", result.detailedError.c_str(),
+40 −41
Original line number Original line Diff line number Diff line
@@ -28,7 +28,7 @@
#include <mediadrm/DrmSessionManager.h>
#include <mediadrm/DrmSessionManager.h>
#include <mediadrm/DrmUtils.h>
#include <mediadrm/DrmUtils.h>


using ::android::DrmUtils::toStatusTAidl;
using ::android::DrmUtils::statusAidlToStatusT;


using ::aidl::android::hardware::drm::DrmMetricNamedValue;
using ::aidl::android::hardware::drm::DrmMetricNamedValue;
using ::aidl::android::hardware::drm::DrmMetricValue;
using ::aidl::android::hardware::drm::DrmMetricValue;
@@ -511,7 +511,7 @@ status_t DrmHalAidl::openSession(DrmPlugin::SecurityLevel level, Vector<uint8_t>


        ::ndk::ScopedAStatus status = mPlugin->openSession(aSecurityLevel, &aSessionId);
        ::ndk::ScopedAStatus status = mPlugin->openSession(aSecurityLevel, &aSessionId);
        if (status.isOk()) sessionId = toVector(aSessionId);
        if (status.isOk()) sessionId = toVector(aSessionId);
        err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
        err = statusAidlToStatusT(status);


        if (err == ERROR_DRM_RESOURCE_BUSY && retry) {
        if (err == ERROR_DRM_RESOURCE_BUSY && retry) {
            mLock.unlock();
            mLock.unlock();
@@ -545,6 +545,7 @@ status_t DrmHalAidl::closeSession(Vector<uint8_t> const& sessionId) {


    std::vector<uint8_t> sessionIdAidl = toStdVec(sessionId);
    std::vector<uint8_t> sessionIdAidl = toStdVec(sessionId);
    ::ndk::ScopedAStatus status = mPlugin->closeSession(sessionIdAidl);
    ::ndk::ScopedAStatus status = mPlugin->closeSession(sessionIdAidl);
    status_t response = statusAidlToStatusT(status);
    if (status.isOk()) {
    if (status.isOk()) {
        DrmSessionManager::Instance()->removeSession(sessionId);
        DrmSessionManager::Instance()->removeSession(sessionId);
        for (auto i = mOpenSessions.begin(); i != mOpenSessions.end(); i++) {
        for (auto i = mOpenSessions.begin(); i != mOpenSessions.end(); i++) {
@@ -554,14 +555,11 @@ status_t DrmHalAidl::closeSession(Vector<uint8_t> const& sessionId) {
            }
            }
        }
        }


        status_t response = toStatusTAidl(status.getServiceSpecificError());
        mMetrics.SetSessionEnd(sessionId);
        mMetrics.SetSessionEnd(sessionId);
        mMetrics.mCloseSessionCounter.Increment(response);
        return response;
    }
    }


    mMetrics.mCloseSessionCounter.Increment(DEAD_OBJECT);
    mMetrics.mCloseSessionCounter.Increment(response);
    return DEAD_OBJECT;
    return response;
}
}


status_t DrmHalAidl::getKeyRequest(Vector<uint8_t> const& sessionId,
status_t DrmHalAidl::getKeyRequest(Vector<uint8_t> const& sessionId,
@@ -603,7 +601,7 @@ status_t DrmHalAidl::getKeyRequest(Vector<uint8_t> const& sessionId,
        *keyRequestType = toKeyRequestType(keyRequest.requestType);
        *keyRequestType = toKeyRequestType(keyRequest.requestType);
    }
    }


    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);
    keyRequestTimer.SetAttribute(err);
    keyRequestTimer.SetAttribute(err);
    return err;
    return err;
}
}
@@ -626,7 +624,7 @@ status_t DrmHalAidl::provideKeyResponse(Vector<uint8_t> const& sessionId,
            mPlugin->provideKeyResponse(sessionIdAidl, responseAidl, &keySetIdsAidl);
            mPlugin->provideKeyResponse(sessionIdAidl, responseAidl, &keySetIdsAidl);


    if (status.isOk()) keySetId = toVector(keySetIdsAidl.keySetId);
    if (status.isOk()) keySetId = toVector(keySetIdsAidl.keySetId);
    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);
    keyResponseTimer.SetAttribute(err);
    keyResponseTimer.SetAttribute(err);
    return err;
    return err;
}
}
@@ -636,7 +634,7 @@ status_t DrmHalAidl::removeKeys(Vector<uint8_t> const& keySetId) {
    INIT_CHECK();
    INIT_CHECK();


    ::ndk::ScopedAStatus status = mPlugin->removeKeys(toStdVec(keySetId));
    ::ndk::ScopedAStatus status = mPlugin->removeKeys(toStdVec(keySetId));
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::restoreKeys(Vector<uint8_t> const& sessionId,
status_t DrmHalAidl::restoreKeys(Vector<uint8_t> const& sessionId,
@@ -649,7 +647,7 @@ status_t DrmHalAidl::restoreKeys(Vector<uint8_t> const& sessionId,
    KeySetId keySetIdsAidl;
    KeySetId keySetIdsAidl;
    keySetIdsAidl.keySetId = toStdVec(keySetId);
    keySetIdsAidl.keySetId = toStdVec(keySetId);
    ::ndk::ScopedAStatus status = mPlugin->restoreKeys(toStdVec(sessionId), keySetIdsAidl);
    ::ndk::ScopedAStatus status = mPlugin->restoreKeys(toStdVec(sessionId), keySetIdsAidl);
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::queryKeyStatus(Vector<uint8_t> const& sessionId,
status_t DrmHalAidl::queryKeyStatus(Vector<uint8_t> const& sessionId,
@@ -664,7 +662,7 @@ status_t DrmHalAidl::queryKeyStatus(Vector<uint8_t> const& sessionId,


    infoMap = toKeyedVector(infoMapAidl);
    infoMap = toKeyedVector(infoMapAidl);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getProvisionRequest(String8 const& certType, String8 const& certAuthority,
status_t DrmHalAidl::getProvisionRequest(String8 const& certType, String8 const& certAuthority,
@@ -681,7 +679,7 @@ status_t DrmHalAidl::getProvisionRequest(String8 const& certType, String8 const&
    request = toVector(requestAidl.request);
    request = toVector(requestAidl.request);
    defaultUrl = toString8(requestAidl.defaultUrl);
    defaultUrl = toString8(requestAidl.defaultUrl);


    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);
    mMetrics.mGetProvisionRequestCounter.Increment(err);
    mMetrics.mGetProvisionRequestCounter.Increment(err);
    return err;
    return err;
}
}
@@ -698,7 +696,7 @@ status_t DrmHalAidl::provideProvisionResponse(Vector<uint8_t> const& response,


    certificate = toVector(result.certificate);
    certificate = toVector(result.certificate);
    wrappedKey = toVector(result.wrappedKey);
    wrappedKey = toVector(result.wrappedKey);
    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);
    mMetrics.mProvideProvisionResponseCounter.Increment(err);
    mMetrics.mProvideProvisionResponseCounter.Increment(err);
    return err;
    return err;
}
}
@@ -712,7 +710,7 @@ status_t DrmHalAidl::getSecureStops(List<Vector<uint8_t>>& secureStops) {


    secureStops = toSecureStops(result);
    secureStops = toSecureStops(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getSecureStopIds(List<Vector<uint8_t>>& secureStopIds) {
status_t DrmHalAidl::getSecureStopIds(List<Vector<uint8_t>>& secureStopIds) {
@@ -724,7 +722,7 @@ status_t DrmHalAidl::getSecureStopIds(List<Vector<uint8_t>>& secureStopIds) {


    secureStopIds = toSecureStopIds(result);
    secureStopIds = toSecureStopIds(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getSecureStop(Vector<uint8_t> const& ssid, Vector<uint8_t>& secureStop) {
status_t DrmHalAidl::getSecureStop(Vector<uint8_t> const& ssid, Vector<uint8_t>& secureStop) {
@@ -739,7 +737,7 @@ status_t DrmHalAidl::getSecureStop(Vector<uint8_t> const& ssid, Vector<uint8_t>&


    secureStop = toVector(result.opaqueData);
    secureStop = toVector(result.opaqueData);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::releaseSecureStops(Vector<uint8_t> const& ssRelease) {
status_t DrmHalAidl::releaseSecureStops(Vector<uint8_t> const& ssRelease) {
@@ -750,7 +748,7 @@ status_t DrmHalAidl::releaseSecureStops(Vector<uint8_t> const& ssRelease) {
    ssId.opaqueData = toStdVec(ssRelease);
    ssId.opaqueData = toStdVec(ssRelease);
    ::ndk::ScopedAStatus status = mPlugin->releaseSecureStops(ssId);
    ::ndk::ScopedAStatus status = mPlugin->releaseSecureStops(ssId);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::removeSecureStop(Vector<uint8_t> const& ssid) {
status_t DrmHalAidl::removeSecureStop(Vector<uint8_t> const& ssid) {
@@ -761,7 +759,7 @@ status_t DrmHalAidl::removeSecureStop(Vector<uint8_t> const& ssid) {
    SecureStopId ssidAidl;
    SecureStopId ssidAidl;
    ssidAidl.secureStopId = toStdVec(ssid);
    ssidAidl.secureStopId = toStdVec(ssid);
    ::ndk::ScopedAStatus status = mPlugin->removeSecureStop(ssidAidl);
    ::ndk::ScopedAStatus status = mPlugin->removeSecureStop(ssidAidl);
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::removeAllSecureStops() {
status_t DrmHalAidl::removeAllSecureStops() {
@@ -769,7 +767,7 @@ status_t DrmHalAidl::removeAllSecureStops() {
    INIT_CHECK();
    INIT_CHECK();


    ::ndk::ScopedAStatus status = mPlugin->releaseAllSecureStops();
    ::ndk::ScopedAStatus status = mPlugin->releaseAllSecureStops();
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getHdcpLevels(DrmPlugin::HdcpLevel* connected,
status_t DrmHalAidl::getHdcpLevels(DrmPlugin::HdcpLevel* connected,
@@ -790,7 +788,7 @@ status_t DrmHalAidl::getHdcpLevels(DrmPlugin::HdcpLevel* connected,
    *connected = toHdcpLevel(lvlsAidl.connectedLevel);
    *connected = toHdcpLevel(lvlsAidl.connectedLevel);
    *max = toHdcpLevel(lvlsAidl.maxLevel);
    *max = toHdcpLevel(lvlsAidl.maxLevel);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getNumberOfSessions(uint32_t* open, uint32_t* max) const {
status_t DrmHalAidl::getNumberOfSessions(uint32_t* open, uint32_t* max) const {
@@ -810,7 +808,7 @@ status_t DrmHalAidl::getNumberOfSessions(uint32_t* open, uint32_t* max) const {
    *open = result.currentSessions;
    *open = result.currentSessions;
    *max = result.maxSessions;
    *max = result.maxSessions;


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getSecurityLevel(Vector<uint8_t> const& sessionId,
status_t DrmHalAidl::getSecurityLevel(Vector<uint8_t> const& sessionId,
@@ -829,7 +827,7 @@ status_t DrmHalAidl::getSecurityLevel(Vector<uint8_t> const& sessionId,


    *level = toSecurityLevel(result);
    *level = toSecurityLevel(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getOfflineLicenseKeySetIds(List<Vector<uint8_t>>& keySetIds) const {
status_t DrmHalAidl::getOfflineLicenseKeySetIds(List<Vector<uint8_t>>& keySetIds) const {
@@ -841,7 +839,7 @@ status_t DrmHalAidl::getOfflineLicenseKeySetIds(List<Vector<uint8_t>>& keySetIds


    keySetIds = toKeySetIds(result);
    keySetIds = toKeySetIds(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::removeOfflineLicense(Vector<uint8_t> const& keySetId) {
status_t DrmHalAidl::removeOfflineLicense(Vector<uint8_t> const& keySetId) {
@@ -851,7 +849,7 @@ status_t DrmHalAidl::removeOfflineLicense(Vector<uint8_t> const& keySetId) {
    KeySetId keySetIdAidl;
    KeySetId keySetIdAidl;
    keySetIdAidl.keySetId = toStdVec(keySetId);
    keySetIdAidl.keySetId = toStdVec(keySetId);
    ::ndk::ScopedAStatus status = mPlugin->removeOfflineLicense(keySetIdAidl);
    ::ndk::ScopedAStatus status = mPlugin->removeOfflineLicense(keySetIdAidl);
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getOfflineLicenseState(Vector<uint8_t> const& keySetId,
status_t DrmHalAidl::getOfflineLicenseState(Vector<uint8_t> const& keySetId,
@@ -869,7 +867,7 @@ status_t DrmHalAidl::getOfflineLicenseState(Vector<uint8_t> const& keySetId,


    *licenseState = toOfflineLicenseState(result);
    *licenseState = toOfflineLicenseState(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getPropertyString(String8 const& name, String8& value) const {
status_t DrmHalAidl::getPropertyString(String8 const& name, String8& value) const {
@@ -887,7 +885,7 @@ status_t DrmHalAidl::getPropertyStringInternal(String8 const& name, String8& val


    value = toString8(result);
    value = toString8(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getPropertyByteArray(String8 const& name, Vector<uint8_t>& value) const {
status_t DrmHalAidl::getPropertyByteArray(String8 const& name, Vector<uint8_t>& value) const {
@@ -907,7 +905,7 @@ status_t DrmHalAidl::getPropertyByteArrayInternal(String8 const& name,
    ::ndk::ScopedAStatus status = mPlugin->getPropertyByteArray(toStdString(name), &result);
    ::ndk::ScopedAStatus status = mPlugin->getPropertyByteArray(toStdString(name), &result);


    value = toVector(result);
    value = toVector(result);
    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);
    if (name == kPropertyDeviceUniqueId) {
    if (name == kPropertyDeviceUniqueId) {
        mMetrics.mGetDeviceUniqueIdCounter.Increment(err);
        mMetrics.mGetDeviceUniqueIdCounter.Increment(err);
    }
    }
@@ -919,7 +917,7 @@ status_t DrmHalAidl::setPropertyString(String8 const& name, String8 const& value
    INIT_CHECK();
    INIT_CHECK();


    ::ndk::ScopedAStatus status = mPlugin->setPropertyString(toStdString(name), toStdString(value));
    ::ndk::ScopedAStatus status = mPlugin->setPropertyString(toStdString(name), toStdString(value));
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::setPropertyByteArray(String8 const& name, Vector<uint8_t> const& value) const {
status_t DrmHalAidl::setPropertyByteArray(String8 const& name, Vector<uint8_t> const& value) const {
@@ -927,7 +925,7 @@ status_t DrmHalAidl::setPropertyByteArray(String8 const& name, Vector<uint8_t> c
    INIT_CHECK();
    INIT_CHECK();


    ::ndk::ScopedAStatus status = mPlugin->setPropertyByteArray(toStdString(name), toStdVec(value));
    ::ndk::ScopedAStatus status = mPlugin->setPropertyByteArray(toStdString(name), toStdVec(value));
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getMetrics(const sp<IDrmMetricsConsumer>& consumer) {
status_t DrmHalAidl::getMetrics(const sp<IDrmMetricsConsumer>& consumer) {
@@ -963,7 +961,7 @@ status_t DrmHalAidl::getMetrics(const sp<IDrmMetricsConsumer>& consumer) {
        consumer->consumeHidlMetrics(vendor, pluginMetrics);
        consumer->consumeHidlMetrics(vendor, pluginMetrics);
    }
    }


    err = status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    err = statusAidlToStatusT(status);


    return err;
    return err;
}
}
@@ -977,7 +975,7 @@ status_t DrmHalAidl::setCipherAlgorithm(Vector<uint8_t> const& sessionId,


    ::ndk::ScopedAStatus status =
    ::ndk::ScopedAStatus status =
            mPlugin->setCipherAlgorithm(toStdVec(sessionId), toStdString(algorithm));
            mPlugin->setCipherAlgorithm(toStdVec(sessionId), toStdString(algorithm));
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::setMacAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
status_t DrmHalAidl::setMacAlgorithm(Vector<uint8_t> const& sessionId, String8 const& algorithm) {
@@ -988,7 +986,7 @@ status_t DrmHalAidl::setMacAlgorithm(Vector<uint8_t> const& sessionId, String8 c


    ::ndk::ScopedAStatus status =
    ::ndk::ScopedAStatus status =
            mPlugin->setMacAlgorithm(toStdVec(sessionId), toStdString(algorithm));
            mPlugin->setMacAlgorithm(toStdVec(sessionId), toStdString(algorithm));
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::encrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
status_t DrmHalAidl::encrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
@@ -1005,7 +1003,7 @@ status_t DrmHalAidl::encrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> c


    output = toVector(result);
    output = toVector(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::decrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
status_t DrmHalAidl::decrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
@@ -1022,7 +1020,7 @@ status_t DrmHalAidl::decrypt(Vector<uint8_t> const& sessionId, Vector<uint8_t> c


    output = toVector(result);
    output = toVector(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::sign(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
status_t DrmHalAidl::sign(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
@@ -1038,7 +1036,7 @@ status_t DrmHalAidl::sign(Vector<uint8_t> const& sessionId, Vector<uint8_t> cons


    signature = toVector(result);
    signature = toVector(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::verify(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
status_t DrmHalAidl::verify(Vector<uint8_t> const& sessionId, Vector<uint8_t> const& keyId,
@@ -1052,7 +1050,7 @@ status_t DrmHalAidl::verify(Vector<uint8_t> const& sessionId, Vector<uint8_t> co
    ::ndk::ScopedAStatus status = mPlugin->verify(toStdVec(sessionId), toStdVec(keyId),
    ::ndk::ScopedAStatus status = mPlugin->verify(toStdVec(sessionId), toStdVec(keyId),
                                                  toStdVec(message), toStdVec(signature), &match);
                                                  toStdVec(message), toStdVec(signature), &match);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::signRSA(Vector<uint8_t> const& sessionId, String8 const& algorithm,
status_t DrmHalAidl::signRSA(Vector<uint8_t> const& sessionId, String8 const& algorithm,
@@ -1070,7 +1068,7 @@ status_t DrmHalAidl::signRSA(Vector<uint8_t> const& sessionId, String8 const& al


    signature = toVector(result);
    signature = toVector(result);


    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::requiresSecureDecoder(const char* mime, bool* required) const {
status_t DrmHalAidl::requiresSecureDecoder(const char* mime, bool* required) const {
@@ -1095,12 +1093,13 @@ status_t DrmHalAidl::requiresSecureDecoder(const char* mime, DrmPlugin::Security
    auto aLevel = toAidlSecurityLevel(securityLevel);
    auto aLevel = toAidlSecurityLevel(securityLevel);
    std::string mimeAidl(mime);
    std::string mimeAidl(mime);
    ::ndk::ScopedAStatus status = mPlugin->requiresSecureDecoder(mimeAidl, aLevel, required);
    ::ndk::ScopedAStatus status = mPlugin->requiresSecureDecoder(mimeAidl, aLevel, required);

    status_t err = statusAidlToStatusT(status);
    if (!status.isOk()) {
    if (!status.isOk()) {
        DrmUtils::LOG2BE("requiresSecureDecoder txn failed: %d", status.getServiceSpecificError());
        DrmUtils::LOG2BE("requiresSecureDecoder txn failed: %d", status.getServiceSpecificError());
        return DEAD_OBJECT;
    }
    }


    return OK;
    return err;
}
}


status_t DrmHalAidl::setPlaybackId(Vector<uint8_t> const& sessionId, const char* playbackId) {
status_t DrmHalAidl::setPlaybackId(Vector<uint8_t> const& sessionId, const char* playbackId) {
@@ -1108,7 +1107,7 @@ status_t DrmHalAidl::setPlaybackId(Vector<uint8_t> const& sessionId, const char*
    INIT_CHECK();
    INIT_CHECK();
    std::string playbackIdAidl(playbackId);
    std::string playbackIdAidl(playbackId);
    ::ndk::ScopedAStatus status = mPlugin->setPlaybackId(toStdVec(sessionId), playbackIdAidl);
    ::ndk::ScopedAStatus status = mPlugin->setPlaybackId(toStdVec(sessionId), playbackIdAidl);
    return status.isOk() ? toStatusTAidl(status.getServiceSpecificError()) : DEAD_OBJECT;
    return statusAidlToStatusT(status);
}
}


status_t DrmHalAidl::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
status_t DrmHalAidl::getLogMessages(Vector<drm::V1_4::LogMessage>& logs) const {
+3 −2
Original line number Original line Diff line number Diff line
@@ -330,13 +330,14 @@ void DrmHalHidl::cleanup() {
std::vector<sp<IDrmFactory>> DrmHalHidl::makeDrmFactories() {
std::vector<sp<IDrmFactory>> DrmHalHidl::makeDrmFactories() {
    static std::vector<sp<IDrmFactory>> factories(DrmUtils::MakeDrmFactories());
    static std::vector<sp<IDrmFactory>> factories(DrmUtils::MakeDrmFactories());
    if (factories.size() == 0) {
    if (factories.size() == 0) {
        // must be in passthrough mode, load the default passthrough service
        DrmUtils::LOG2BI("No hidl drm factories found");
        // could be in passthrough mode, load the default passthrough service
        auto passthrough = IDrmFactory::getService();
        auto passthrough = IDrmFactory::getService();
        if (passthrough != NULL) {
        if (passthrough != NULL) {
            DrmUtils::LOG2BI("makeDrmFactories: using default passthrough drm instance");
            DrmUtils::LOG2BI("makeDrmFactories: using default passthrough drm instance");
            factories.push_back(passthrough);
            factories.push_back(passthrough);
        } else {
        } else {
            DrmUtils::LOG2BE("Failed to find any drm factories");
            DrmUtils::LOG2BE("Failed to find passthrough drm factories");
        }
        }
    }
    }
    return factories;
    return factories;
+4 −2
Original line number Original line Diff line number Diff line
@@ -186,8 +186,10 @@ inline status_t toStatusT(const android::hardware::Return<T> &status) {
    return toStatusT_1_4(err);
    return toStatusT_1_4(err);
}
}


inline status_t toStatusTAidl(int32_t serviceError) {
inline status_t statusAidlToStatusT(::ndk::ScopedAStatus &statusAidl) {
    auto status = static_cast<StatusAidl>(serviceError);
    if (statusAidl.isOk()) return OK;
    if (statusAidl.getExceptionCode() != EX_SERVICE_SPECIFIC) return DEAD_OBJECT;
    auto status = static_cast<StatusAidl>(statusAidl.getServiceSpecificError());
    switch (status) {
    switch (status) {
    case StatusAidl::OK:
    case StatusAidl::OK:
        return OK;
        return OK;
+1 −1
Original line number Original line Diff line number Diff line
@@ -175,7 +175,7 @@ void DrmPlugin::installSecureStop(const std::vector<uint8_t>& sessionId) {
    UNUSED(in_optionalParameters);
    UNUSED(in_optionalParameters);


    KeyRequestType keyRequestType = KeyRequestType::UNKNOWN;
    KeyRequestType keyRequestType = KeyRequestType::UNKNOWN;
    std::string defaultUrl("");
    std::string defaultUrl("https://default.url");


    _aidl_return->request = {};
    _aidl_return->request = {};
    _aidl_return->requestType = keyRequestType;
    _aidl_return->requestType = keyRequestType;