// // Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine License // Agreement. // //#define LOG_NDEBUG 0 #define LOG_TAG "WVCdm" #include #include #include "WVCryptoFactory.h" #include "HidlTypes.h" #include "WVCDMSingleton.h" #include "WVCryptoPlugin.h" #include "WVUUID.h" namespace wvdrm { namespace hardware { namespace drm { namespace V1_4 { namespace widevine { using wvdrm::hardware::drm::V1_4::widevine::WVCryptoPlugin; Return WVCryptoFactory::isCryptoSchemeSupported( const hidl_array& uuid) { return isWidevineUUID(uuid.data()); } Return WVCryptoFactory::createPlugin( const hidl_array& uuid, const hidl_vec& initData, createPlugin_cb _hidl_cb) { const auto& self = android::hardware::IPCThreadState::self(); const char* sid = self->getCallingSid(); sid = sid ? (strstr(sid, "mediadrmserver") ? sid : "app") : "nullptr"; ALOGI("[%s] calling %s", sid, __PRETTY_FUNCTION__); sp plugin; if (!isCryptoSchemeSupported(uuid.data())) { ALOGE("Widevine Drm HAL: failed to create crypto plugin, " \ "invalid crypto scheme"); _hidl_cb(Status::ERROR_DRM_CANNOT_HANDLE, plugin); return Void(); } plugin = new WVCryptoPlugin(initData.data(), initData.size(), getCDM()); android::hardware::setRequestingSid(plugin, true); _hidl_cb(Status::OK, plugin); return Void(); } } // namespace widevine } // namespace V1_4 } // namespace drm } // namespace hardware } // namespace wvdrm