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

Commit 0a6f2965 authored by Henry Fang's avatar Henry Fang Committed by Android (Google) Code Review
Browse files

Merge "Revert "Revert "Update plugin to use cas@1.1 hal"""

parents 5e7b457d f6fff6b6
Loading
Loading
Loading
Loading
+40 −2
Original line number Diff line number Diff line
@@ -65,7 +65,20 @@ status_t ClearKeyCasFactory::createPlugin(
    *plugin = new ClearKeyCasPlugin(appData, callback);
    return OK;
}
///////////////////////////////////////////////////////////////////////////////

status_t ClearKeyCasFactory::createPlugin(
        int32_t CA_system_id,
        void *appData,
        CasPluginCallbackExt callback,
        CasPlugin **plugin) {
    if (!isSystemIdSupported(CA_system_id)) {
        return BAD_VALUE;
    }

    *plugin = new ClearKeyCasPlugin(appData, callback);
    return OK;
}
////////////////////////////////////////////////////////////////////////////////
bool ClearKeyDescramblerFactory::isSystemIdSupported(
        int32_t CA_system_id) const {
    return CA_system_id == sClearKeySystemId;
@@ -88,6 +101,12 @@ ClearKeyCasPlugin::ClearKeyCasPlugin(
    ALOGV("CTOR");
}

ClearKeyCasPlugin::ClearKeyCasPlugin(
        void *appData, CasPluginCallbackExt callback)
    : mCallbackExt(callback), mAppData(appData) {
    ALOGV("CTOR");
}

ClearKeyCasPlugin::~ClearKeyCasPlugin() {
    ALOGV("DTOR");
    ClearKeySessionLibrary::get()->destroyPlugin(this);
@@ -167,8 +186,27 @@ status_t ClearKeyCasPlugin::sendEvent(
    // Echo the received event to the callback.
    // Clear key plugin doesn't use any event, echo'ing for testing only.
    if (mCallback != NULL) {
        mCallback((void*)mAppData, event, arg, (uint8_t*)eventData.data(), eventData.size());
        mCallback((void*)mAppData, event, arg, (uint8_t*)eventData.data(),
                    eventData.size());
    } else if (mCallbackExt != NULL) {
        mCallbackExt((void*)mAppData, event, arg, (uint8_t*)eventData.data(),
                    eventData.size(), NULL);
    }
    return OK;
}

status_t ClearKeyCasPlugin::sendSessionEvent(
        const CasSessionId &sessionId, int32_t event,
        int arg, const CasData &eventData) {
    ALOGV("sendSessionEvent: sessionId=%s, event=%d, arg=%d",
          sessionIdToString(sessionId).string(), event, arg);
    // Echo the received event to the callback.
    // Clear key plugin doesn't use any event, echo'ing for testing only.
    if (mCallbackExt != NULL) {
        mCallbackExt((void*)mAppData, event, arg, (uint8_t*)eventData.data(),
                    eventData.size(), &sessionId);
    }

    return OK;
}

+11 −0
Original line number Diff line number Diff line
@@ -47,6 +47,11 @@ public:
            void *appData,
            CasPluginCallback callback,
            CasPlugin **plugin) override;
    virtual status_t createPlugin(
            int32_t CA_system_id,
            void *appData,
            CasPluginCallbackExt callback,
            CasPlugin **plugin) override;
};

class ClearKeyDescramblerFactory : public DescramblerFactory {
@@ -63,6 +68,7 @@ public:
class ClearKeyCasPlugin : public CasPlugin {
public:
    ClearKeyCasPlugin(void *appData, CasPluginCallback callback);
    ClearKeyCasPlugin(void *appData, CasPluginCallbackExt callback);
    virtual ~ClearKeyCasPlugin();

    virtual status_t setPrivateData(
@@ -85,6 +91,10 @@ public:
    virtual status_t sendEvent(
            int32_t event, int32_t arg, const CasData &eventData) override;

    virtual status_t sendSessionEvent(
            const CasSessionId &sessionId,
            int32_t event, int32_t arg, const CasData &eventData) override;

    virtual status_t provision(const String8 &str) override;

    virtual status_t refreshEntitlements(
@@ -94,6 +104,7 @@ private:
    Mutex mKeyFetcherLock;
    std::unique_ptr<KeyFetcher> mKeyFetcher;
    CasPluginCallback mCallback;
    CasPluginCallbackExt mCallbackExt;
    void* mAppData;
};

+23 −0
Original line number Diff line number Diff line
@@ -60,6 +60,19 @@ status_t MockCasFactory::createPlugin(
    return OK;
}

status_t MockCasFactory::createPlugin(
        int32_t CA_system_id,
        void* /*appData*/,
        CasPluginCallbackExt /*callback*/,
        CasPlugin **plugin) {
    if (!isSystemIdSupported(CA_system_id)) {
        return BAD_VALUE;
    }

    *plugin = new MockCasPlugin();
    return OK;
}

///////////////////////////////////////////////////////////////////////////////

bool MockDescramblerFactory::isSystemIdSupported(int32_t CA_system_id) const {
@@ -170,6 +183,16 @@ status_t MockCasPlugin::sendEvent(
    return OK;
}

status_t MockCasPlugin::sendSessionEvent(
        const CasSessionId &sessionId, int32_t event,
        int /*arg*/, const CasData& /*eventData*/) {
    ALOGV("sendSessionEvent: sessionId=%s, event=%d",
          arrayToString(sessionId).string(), event);
    Mutex::Autolock lock(mLock);

    return OK;
}

status_t MockCasPlugin::provision(const String8 &str) {
    ALOGV("provision: provisionString=%s", str.string());
    Mutex::Autolock lock(mLock);
+10 −1
Original line number Diff line number Diff line
@@ -42,6 +42,11 @@ public:
            void *appData,
            CasPluginCallback callback,
            CasPlugin **plugin) override;
    virtual status_t createPlugin(
            int32_t CA_system_id,
            void *appData,
            CasPluginCallbackExt callback,
            CasPlugin **plugin) override;
};

class MockDescramblerFactory : public DescramblerFactory {
@@ -80,6 +85,10 @@ public:
    virtual status_t sendEvent(
            int32_t event, int32_t arg, const CasData &eventData) override;

    virtual status_t sendSessionEvent(
            const CasSessionId &sessionId,
            int32_t event, int32_t arg, const CasData &eventData) override;

     virtual status_t provision(const String8 &str) override;

    virtual status_t refreshEntitlements(