• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "drm_error_code.h"
17 #include "drm_error_code_napi.h"
18 #include "common_napi.h"
19 
20 namespace OHOS {
21 namespace DrmStandard {
22 
23 const std::string DRM_NAPI_INVALID_PARAM_INFO = "input parameter value error";
24 const std::string DRM_NAPI_SERVICE_FATAL_ERRO_INFO = "service error";
25 const std::string DRM_NAPI_UNKNOWN_ERROR_INFO = "unknow error";
26 const std::string DRM_NAPI_MAX_SYSTEM_NUM_REACHED_INFO = "mediaKeySystem number limited";
27 const std::string DRM_NAPI_MAX_SESSION_NUM_REACHED_INFO = "mediaKeySession number limited";
28 
29 const std::unordered_map<DrmInnerErrCode, DrmNapiErrCode> INNERCODE_TO_NAPICODE = {
30     {DRM_INNER_ERR_OK,                                                         DRM_NAPI_ERR_OK},
31     {DRM_INNER_ERR_BASE,                                                     DRM_NAPI_ERR_BASE},
32     {DRM_INNER_ERR_UNKNOWN,                                               DRM_NAPI_ERR_UNKNOWN},
33     {DRM_INNER_ERR_MAX_SYSTEM_NUM_REACHED,                 DRM_NAPI_ERR_MAX_SYSTEM_NUM_REACHED},
34     {DRM_INNER_ERR_MAX_SESSION_NUM_REACHED,               DRM_NAPI_ERR_MAX_SESSION_NUM_REACHED},
35     {DRM_INNER_ERR_INVALID_VAL,                                       DRM_NAPI_ERR_INVALID_VAL},
36     {DRM_INNER_ERR_SERVICE_DIED,                                    DRM_NAPI_ERR_SERVICE_FATAL},
37     {DRM_INNER_ERR_INVALID_KEY_SESSION,                               DRM_NAPI_ERR_INVALID_VAL},
38     {DRM_INNER_ERR_INVALID_MEDIA_KEY_SYSTEM,                          DRM_NAPI_ERR_INVALID_VAL},
39     {DRM_INNER_ERR_NOT_PROVISIONED,                               DRM_NAPI_ERR_NOT_PROVISIONED},
40     {DRM_INNER_ERR_DEVICE_TIME_ERROR,                           DRM_NAPI_ERR_DEVICE_TIME_ERROR},
41     {DRM_INNER_ERR_PROVISIONING_NO_DEVICE_CERT,                    DRM_NAPI_ERR_NO_DEVICE_CERT},
42     {DRM_INNER_ERR_KEY_REQUEST_NOT_ALLOWED,                           DRM_NAPI_ERR_INVALID_VAL},
43     {DRM_INNER_ERR_KEY_REQUEST_INVALID_MEDIA_KEY_TYPE,                DRM_NAPI_ERR_INVALID_VAL},
44     {DRM_INNER_ERR_KEY_REQUEST_INVALID_MIMETYPE,                      DRM_NAPI_ERR_INVALID_VAL},
45     {DRM_INNER_ERR_KEY_REQUEST_INVALID_INITDATA,                      DRM_NAPI_ERR_INVALID_VAL},
46     {DRM_INNER_ERR_KEY_REQUEST_INVALID_DRM_CERTIFICATES,              DRM_NAPI_ERR_INVALID_VAL},
47     {DRM_INNER_ERR_KEY_REQUEST_DRM_CERTIFICATES_REVOKED, DRM_NAPI_ERR_DRM_CERTIFICATES_REVOKED},
48     {DRM_INNER_ERR_DECRYPT_NO_LICENSE,                                 DRM_NAPI_ERR_NO_LICENSE},
49     {DRM_INNER_ERR_DECRYPT_NO_KEY,                                         DRM_NAPI_ERR_NO_KEY},
50     {DRM_INNER_ERR_POLICY_CONTENT_PROTECTION_LEVEL_NOT_ALLOWED,       DRM_NAPI_ERR_INVALID_VAL},
51     {DRM_INNER_ERR_SERVICE_FATAL_ERROR,                             DRM_NAPI_ERR_SERVICE_FATAL},
52     {DRM_INNER_ERR_PLUGIN_ERROR,                                          DRM_NAPI_ERR_UNKNOWN},
53 };
54 
55 const std::unordered_map<DrmInnerErrCode, DrmNapiErrCode> INNERCODE_TO_API12_NAPICODE = {
56     {DRM_INNER_ERR_OK,                                                         DRM_NAPI_ERR_OK},
57     {DRM_INNER_ERR_UNKNOWN,                                               DRM_NAPI_ERR_UNKNOWN},
58     {DRM_INNER_ERR_MAX_SYSTEM_NUM_REACHED,                 DRM_NAPI_ERR_MAX_SYSTEM_NUM_REACHED},
59     {DRM_INNER_ERR_MAX_SESSION_NUM_REACHED,               DRM_NAPI_ERR_MAX_SESSION_NUM_REACHED},
60     {DRM_INNER_ERR_INVALID_VAL,                                       DRM_NAPI_ERR_INVALID_VAL},
61     {DRM_INNER_ERR_SERVICE_DIED,                                    DRM_NAPI_ERR_SERVICE_FATAL},
62     {DRM_INNER_ERR_SERVICE_FATAL_ERROR,                             DRM_NAPI_ERR_SERVICE_FATAL},
63 };
64 
DrmInnerErrToNapiErr(DrmInnerErrCode errCode)65 DrmNapiErrCode DrmInnerErrToNapiErr(DrmInnerErrCode errCode)
66 {
67     if (INNERCODE_TO_NAPICODE.find(errCode) != INNERCODE_TO_NAPICODE.end()) {
68         return INNERCODE_TO_NAPICODE.at(errCode);
69     }
70     return DRM_NAPI_ERR_UNKNOWN;
71 }
72 
DrmInnerErrToNapiErrAPI12(DrmInnerErrCode errCode)73 DrmNapiErrCode DrmInnerErrToNapiErrAPI12(DrmInnerErrCode errCode)
74 {
75     if (INNERCODE_TO_API12_NAPICODE.find(errCode) != INNERCODE_TO_API12_NAPICODE.end()) {
76         return INNERCODE_TO_API12_NAPICODE.at(errCode);
77     }
78     return DRM_NAPI_ERR_UNKNOWN;
79 }
80 
ThrowError(napi_env env,const char * napiMessage,int32_t napiCode)81 napi_status NapiDrmError::ThrowError(napi_env env, const char *napiMessage, int32_t napiCode)
82 {
83     napi_value message = nullptr;
84     napi_value code = nullptr;
85     napi_value result = nullptr;
86     napi_create_string_utf8(env, napiMessage, NAPI_AUTO_LENGTH, &message);
87     napi_create_error(env, nullptr, message, &result);
88     napi_create_int32(env, napiCode, &code);
89     napi_set_named_property(env, result, "code", code);
90     napi_throw(env, result);
91     return napi_ok;
92 }
93 
ThrowError(napi_env env,int32_t code)94 void NapiDrmError::ThrowError(napi_env env, int32_t code)
95 {
96     std::string messageValue = GetMessageByCode(code);
97     napi_throw_error(env, (std::to_string(code)).c_str(), messageValue.c_str());
98 }
99 
GetMessageByCode(int32_t & code)100 std::string NapiDrmError::GetMessageByCode(int32_t &code)
101 {
102     std::string errMessage;
103     switch (code) {
104         case DRM_NAPI_ERR_INVALID_VAL:
105             errMessage = DRM_NAPI_INVALID_PARAM_INFO;
106             break;
107         case DRM_NAPI_ERR_SERVICE_FATAL:
108             errMessage = DRM_NAPI_SERVICE_FATAL_ERRO_INFO;
109             break;
110         case DRM_NAPI_ERR_UNKNOWN:
111             errMessage = DRM_NAPI_UNKNOWN_ERROR_INFO;
112             break;
113         case DRM_NAPI_ERR_MAX_SYSTEM_NUM_REACHED:
114             errMessage = DRM_NAPI_MAX_SYSTEM_NUM_REACHED_INFO;
115             break;
116         case DRM_NAPI_ERR_MAX_SESSION_NUM_REACHED:
117             errMessage = DRM_NAPI_MAX_SESSION_NUM_REACHED_INFO;
118             break;
119         default:
120             errMessage = DRM_NAPI_UNKNOWN_ERROR_INFO;
121             code = DRM_NAPI_ERR_UNKNOWN;
122             break;
123     }
124     return errMessage;
125 }
126 } // namespace DrmStandard
127 } // namespace OHOS