1 /*
2 * Copyright (c) 2022 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 "is_uid_net_allowed_context.h"
17
18 #include "constant.h"
19 #include "napi_constant.h"
20 #include "napi_utils.h"
21 #include "net_policy_constants.h"
22 #include "netmanager_base_log.h"
23
24 namespace OHOS {
25 namespace NetManagerStandard {
IsUidNetAllowedContext(napi_env env,std::shared_ptr<EventManager> & manager)26 IsUidNetAllowedContext::IsUidNetAllowedContext(napi_env env, std::shared_ptr<EventManager>& manager)
27 : BaseContext(env, manager) {}
28
ParseParams(napi_value * params,size_t paramsCount)29 void IsUidNetAllowedContext::ParseParams(napi_value *params, size_t paramsCount)
30 {
31 if (!CheckParamsType(params, paramsCount)) {
32 NETMANAGER_BASE_LOGE("Check params failed");
33 SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
34 SetNeedThrowException(true);
35 return;
36 }
37
38 uid_ = NapiUtils::GetInt32FromValue(GetEnv(), params[ARG_INDEX_0]);
39 if (uid_ < 0) {
40 NETMANAGER_BASE_LOGE("Check params failed");
41 SetErrorCode(POLICY_ERR_INVALID_UID);
42 SetNeedThrowException(true);
43 return;
44 }
45
46 isBoolean_ = NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) == napi_boolean;
47 if (isBoolean_) {
48 isMetered_ = NapiUtils::GetBooleanValue(GetEnv(), params[ARG_INDEX_1]);
49 } else {
50 iface_ = NapiUtils::GetStringFromValueUtf8(GetEnv(), params[ARG_INDEX_1]);
51 }
52
53 if (paramsCount == PARAM_DOUBLE_OPTIONS_AND_CALLBACK) {
54 SetParseOK(SetCallback(params[ARG_INDEX_2]) == napi_ok);
55 return;
56 }
57 SetParseOK(true);
58 }
59
CheckParamsType(napi_value * params,size_t paramsCount)60 bool IsUidNetAllowedContext::CheckParamsType(napi_value *params, size_t paramsCount)
61 {
62 if (paramsCount == PARAM_DOUBLE_OPTIONS) {
63 if (NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) != napi_number) {
64 NETMANAGER_BASE_LOGE("IsUidNetAllowedContext first param is not number");
65 return false;
66 }
67 if (!(NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) != napi_string ||
68 NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) != napi_boolean)) {
69 NETMANAGER_BASE_LOGE("IsUidNetAllowedContext second param is not string or boolean");
70 return false;
71 }
72 return true;
73 }
74
75 if (paramsCount == PARAM_DOUBLE_OPTIONS_AND_CALLBACK) {
76 if (NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) != napi_number) {
77 NETMANAGER_BASE_LOGE("IsUidNetAllowedContext first param is not number");
78 return false;
79 }
80 if (!(NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) != napi_string ||
81 NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) != napi_boolean)) {
82 NETMANAGER_BASE_LOGE("IsUidNetAllowedContext second param is not string or boolean");
83 return false;
84 }
85 if (NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_2]) != napi_function) {
86 NETMANAGER_BASE_LOGE("IsUidNetAllowedContext third param is not function");
87 return false;
88 }
89 return true;
90 }
91 return false;
92 }
93 } // namespace NetManagerStandard
94 } // namespace OHOS
95