Update plugin to use cas@1.1 hal

Implement sendSessionEvent and onSessionEvent in  ClearKeyCasPlugin and MockCasPlugin
Test: manual
Bug: 122472761

Change-Id: Iceb3e14f35cf3178b70e43b59fd492255ab205bc
gugelfrei
Henry Fang 6 years ago
parent b5a34d6deb
commit a6fc4d3f7a

@ -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;
}

@ -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;
};

@ -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);

@ -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,7 +85,11 @@ public:
virtual status_t sendEvent(
int32_t event, int32_t arg, const CasData &eventData) override;
virtual status_t provision(const String8 &str) 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(
int32_t refreshType, const CasData &refreshData) override;

Loading…
Cancel
Save