diff --git a/clearplay/hdi_service/include/drm/v1_0/clearplay_log.h b/clearplay/hdi_service/include/drm/v1_0/clearplay_log.h new file mode 100644 index 0000000000000000000000000000000000000000..e933dc204b31c94ae71e0348c5d3abebece8bb89 --- /dev/null +++ b/clearplay/hdi_service/include/drm/v1_0/clearplay_log.h @@ -0,0 +1,116 @@ +/* + * Copyright (c) 2022 Huawei Device Co., Ltd. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef CLEARPLAY_LOG_H +#define CLEARPLAY_LOG_H + +#include "hdf_base.h" +#include "hilog/log.h" + +namespace OHOS { +namespace HDI { +namespace ClearPlay { +namespace v1_0 { + +#ifdef CLEARPLAY_HILOGF +#undef CLEARPLAY_HILOGF +#endif + +#ifdef CLEARPLAY_HILOGE +#undef CLEARPLAY_HILOGE +#endif + +#ifdef CLEARPLAY_HILOGW +#undef CLEARPLAY_HILOGW +#endif + +#ifdef CLEARPLAY_HILOGI +#undef CLEARPLAY_HILOGI +#endif + +#ifdef CLEARPLAY_HILOGD +#undef CLEARPLAY_HILOGD +#endif + +namespace { +// ClearPlay reserved domain id range +constexpr unsigned int CLEARPLAY_DOMAIN_ID_START = 0xD002A00; +constexpr unsigned int CLEARPLAY_DOMAIN_ID_END = CLEARPLAY_DOMAIN_ID_START + 32; +constexpr unsigned int TEST_DOMAIN_ID = 0xD000F10; +} // namespace + +enum ClearPlayLogLabel { + COMP_APP = 0, + COMP_FWK = 1, + COMP_SVC = 2, + COMP_HDI = 3, + COMP_DRV = 4, + FEATURE_PLAY, + FEATURE_LICENSE, + LABEL_TEST, + LABEL_END, +}; + +enum ClearPlayLogDomain { + DOMAIN_APP = CLEARPLAY_DOMAIN_ID_START + COMP_APP, + DOMAIN_FRAMEWORK, + DOMAIN_SERVICE, + DOMAIN_HDI, + DOMAIN_DRIVER, + DOMAIN_FEATURE_PLAY, + DOMAIN_FEATURE_LICENSE, + DOMAIN_TEST = TEST_DOMAIN_ID, + DOMAIN_END = CLEARPLAY_DOMAIN_ID_END, +}; + +struct ClearPlayLogLabelDomain { + uint32_t domainId; + const char* tag; +}; + +static const ClearPlayLogLabelDomain CLEARPLAY_LABEL[LABEL_END] = { + {DOMAIN_APP, "ClearPlayApp" }, + {DOMAIN_FRAMEWORK, "ClearPlayFwk" }, + {DOMAIN_SERVICE, "ClearPlaySvc" }, + {DOMAIN_HDI, "ClearPlayHdi" }, + {DOMAIN_DRIVER, "ClearPlayDrv" }, + {DOMAIN_FEATURE_PLAY, "ClearPlayFeature" }, + {DOMAIN_FEATURE_LICENSE, "ClearPlayLicense" }, + {DOMAIN_TEST, "ClearPlayTest" }, +}; + +#define CLEARPLAY_HILOGF(domain, ...) \ + ((void)HILOG_IMPL(LOG_CORE, LOG_FATAL, OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].domainId, \ + OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].tag, ##__VA_ARGS__)) +#define CLEARPLAY_HILOGE(domain, ...) \ + ((void)HILOG_IMPL(LOG_CORE, LOG_ERROR, OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].domainId, \ + OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].tag, ##__VA_ARGS__)) +#define CLEARPLAY_HILOGW(domain, ...) \ + ((void)HILOG_IMPL(LOG_CORE, LOG_WARN, OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].domainId, \ + OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].tag, ##__VA_ARGS__)) +#define CLEARPLAY_HILOGI(domain, ...) \ + ((void)HILOG_IMPL(LOG_CORE, LOG_INFO, OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].domainId, \ + OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].tag, ##__VA_ARGS__)) +#define CLEARPLAY_HILOGD(domain, ...) \ + ((void)HILOG_IMPL(LOG_CORE, LOG_DEBUG, OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].domainId, \ + OHOS::HDI::ClearPlay::v1_0::CLEARPLAY_LABEL[domain].tag, ##__VA_ARGS__)) + + +} // namespace v1_0 +} // namespace ClearPlay +} // namespace HDI +} // namespace OHOS + +#endif // CLEARPLAY_LOG_H diff --git a/clearplay/hdi_service/include/drm/v1_0/media_key_session_service.h b/clearplay/hdi_service/include/drm/v1_0/media_key_session_service.h index 5842458fa675e1d908641f10a76518782b34fe38..f1115b08574f9cf9906c4d73416d6e68f289ac72 100644 --- a/clearplay/hdi_service/include/drm/v1_0/media_key_session_service.h +++ b/clearplay/hdi_service/include/drm/v1_0/media_key_session_service.h @@ -81,7 +81,7 @@ private: sptr sessionCallback_; std::mutex offlineKeyMutex_; std::map offlineKeyIdAndKeyValueBase64_; - const char* offlineKeyFileName = "/data/local/traces/offline_key.txt"; + const char* offlineKeyFileName = "/data/local/tmp/offline_key.txt"; const int keyIdMaxLength = 255; OHOS::sptr vdiCallbackObj; static const int32_t topThree = 3; diff --git a/clearplay/hdi_service/src/media_key_session_service.cpp b/clearplay/hdi_service/src/media_key_session_service.cpp index a81d03cd55ded6bd4e0284f6c07e4fc9de56c730..7a9008e0abe8faad4d0721c6e0e664fb4929e7aa 100644 --- a/clearplay/hdi_service/src/media_key_session_service.cpp +++ b/clearplay/hdi_service/src/media_key_session_service.cpp @@ -16,17 +16,22 @@ #include "v1_0/media_key_session_service.h" #include "v1_0/media_key_system_types.h" #include "v1_0/media_decrypt_module_service.h" +#include "v1_0/clearplay_log.h" #include #include #include #include #include +#include +#include +#include #include "base64_utils.h" #include "data_parser.h" #include "securec.h" -#define HDF_LOG_TAG media_key_session_service +#define HDF_LOG_TAG media_key_session_service +using OHOS::HDI::ClearPlay::v1_0::COMP_SVC; namespace OHOS { namespace HDI { namespace Drm { @@ -373,45 +378,79 @@ int32_t MediaKeySessionService::GetErrorDecryptNumber() int32_t MediaKeySessionService::GetOfflineKeyFromFile() { - HDF_LOGI("%{public}s: start", __func__); - FILE *offlineKeyFile = fopen(offlineKeyFileName, "r+"); - if (offlineKeyFile == NULL) { - HDF_LOGE("%{public}s: open: \"%{public}s\" failed", __func__, offlineKeyFileName); - // file do not exist, is allright + CLEARPLAY_HILOGI(COMP_SVC, "%{public}s: start", __func__); + + FILE *offlineKeyFile = fopen(offlineKeyFileName, "r+"); // 读写方式打开 + if (offlineKeyFile == nullptr) { + int saved = errno; + CLEARPLAY_HILOGE(COMP_SVC, + "%{public}s: fopen \"%s\" failed, errno=%d (%s)", + __func__, offlineKeyFileName, saved, strerror(saved)); + // 如果文件不存在,不算错误,返回成功即可 return HDF_SUCCESS; } + char keyIdBase64Chars[keyIdMaxLength]; char keyValueBase64Chars[keyIdMaxLength]; - while (fscanf_s(offlineKeyFile, "%s %s", keyIdBase64Chars, sizeof(keyIdBase64Chars), keyValueBase64Chars, - sizeof(keyValueBase64Chars)) != EOF) { + while (fscanf(offlineKeyFile, "%s %s", keyIdBase64Chars, keyValueBase64Chars) != EOF) { std::string tempKeyIdBase64 = keyIdBase64Chars; std::string tempKeyValueBase64 = keyValueBase64Chars; - tempKeyIdBase64.erase(std::remove(tempKeyIdBase64.begin(), tempKeyIdBase64.end(), '\0'), tempKeyIdBase64.end()); + tempKeyIdBase64.erase(std::remove(tempKeyIdBase64.begin(), tempKeyIdBase64.end(), '\0'), + tempKeyIdBase64.end()); offlineKeyIdAndKeyValueBase64_[tempKeyIdBase64] = tempKeyValueBase64; } + fclose(offlineKeyFile); - HDF_LOGI("%{public}s: end", __func__); + + CLEARPLAY_HILOGI(COMP_SVC, "%{public}s: end", __func__); return HDF_SUCCESS; } int32_t MediaKeySessionService::SetOfflineKeyToFile() { - HDF_LOGI("%{public}s: start", __func__); - FILE *offlineKeyFile = fopen(offlineKeyFileName, "w+"); - if (offlineKeyFile == NULL) { + CLEARPLAY_HILOGI(COMP_SVC, "%{public}s: start", __func__); + + FILE *offlineKeyFile = fopen(offlineKeyFileName, "w+"); // 创建/覆盖写 + if (offlineKeyFile == nullptr) { + int saved = errno; offlineKeyIdAndKeyValueBase64_.clear(); - HDF_LOGE("%{public}s: create failed, ret: %{public}s", __func__, strerror(errno)); + CLEARPLAY_HILOGE(COMP_SVC, + "%{public}s: fopen \"%s\" failed, errno=%d (%s)", + __func__, offlineKeyFileName, saved, strerror(saved)); return HDF_FAILURE; } + for (auto &keyIdValueBase64Pair : offlineKeyIdAndKeyValueBase64_) { - fprintf(offlineKeyFile, "%s %s\n", keyIdValueBase64Pair.first.c_str(), keyIdValueBase64Pair.second.c_str()); - fflush(offlineKeyFile); + if (fprintf(offlineKeyFile, "%s %s\n", + keyIdValueBase64Pair.first.c_str(), + keyIdValueBase64Pair.second.c_str()) < 0) { + int saved = errno; + fclose(offlineKeyFile); + offlineKeyIdAndKeyValueBase64_.clear(); + CLEARPLAY_HILOGE(COMP_SVC, + "%{public}s: fprintf failed, errno=%d (%s)", + __func__, saved, strerror(saved)); + return HDF_FAILURE; + } } - offlineKeyIdAndKeyValueBase64_.clear(); + + if (fflush(offlineKeyFile) != 0) { + int saved = errno; + fclose(offlineKeyFile); + offlineKeyIdAndKeyValueBase64_.clear(); + CLEARPLAY_HILOGE(COMP_SVC, + "%{public}s: fflush failed, errno=%d (%s)", + __func__, saved, strerror(saved)); + return HDF_FAILURE; + } + fclose(offlineKeyFile); - HDF_LOGI("%{public}s: end", __func__); + offlineKeyIdAndKeyValueBase64_.clear(); + + CLEARPLAY_HILOGI(COMP_SVC, "%{public}s: end", __func__); return HDF_SUCCESS; } + } // V1_0 } // Drm } // HDI