1 /*
2 * Copyright (c) 2024 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 "get_traffic_stats_by_uid_network_context.h"
17
18 #include "napi_constant.h"
19 #include "napi_utils.h"
20 #include "netmanager_base_log.h"
21
22 namespace OHOS {
23 namespace NetManagerStandard {
24 namespace {
25 constexpr const char *NET_BEAR_TYPE = "type";
26 constexpr const char *START_TIME = "startTime";
27 constexpr const char *END_TIME = "endTime";
28 constexpr const char *SIM_ID = "simId";
29 } // namespace
30
GetTrafficStatsByUidNetworkContext(napi_env env,EventManager * manager)31 GetTrafficStatsByUidNetworkContext::GetTrafficStatsByUidNetworkContext(napi_env env, EventManager *manager)
32 : BaseContext(env, manager) {}
33
ParseParams(napi_value * params,size_t paramsCount)34 void GetTrafficStatsByUidNetworkContext::ParseParams(napi_value *params, size_t paramsCount)
35 {
36 if (!CheckParamsType(params, paramsCount)) {
37 NETMANAGER_BASE_LOGE("checkParamsType false");
38 SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
39 SetNeedThrowException(true);
40 return;
41 }
42 uid_ = NapiUtils::GetUint32FromValue(GetEnv(), params[ARG_INDEX_0]);
43 if (uid_ <= 0) {
44 NETMANAGER_BASE_LOGE("uid invalid");
45 SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
46 SetNeedThrowException(true);
47 return;
48 }
49 if (!CheckNetworkParams(params, paramsCount)) {
50 return;
51 }
52 if (NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_1], NET_BEAR_TYPE) < 0 ||
53 NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_1], START_TIME) < 0 ||
54 NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_1], END_TIME) < 0 ||
55 NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_1], SIM_ID) < 0) {
56 NETMANAGER_BASE_LOGE("checkParamsValue is invalid");
57 SetErrorCode(NETMANAGER_ERR_INVALID_PARAMETER);
58 SetNeedThrowException(true);
59 }
60 netBearType_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_1], NET_BEAR_TYPE);
61 startTime_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_1], START_TIME);
62 endTime_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_1], END_TIME);
63 bool hasSimId = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_1], SIM_ID);
64 if (hasSimId) {
65 simId_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_1], SIM_ID);
66 } else {
67 simId_ = UINT32_MAX;
68 }
69 if (paramsCount == PARAM_DOUBLE_OPTIONS_AND_CALLBACK) {
70 SetParseOK(SetCallback(params[ARG_INDEX_2]) == napi_ok);
71 return;
72 }
73 SetParseOK(true);
74 }
75
CheckNetworkParams(napi_value * params,size_t paramsCount)76 bool GetTrafficStatsByUidNetworkContext::CheckNetworkParams(napi_value *params, size_t paramsCount)
77 {
78 bool hasNetBearType = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_1], NET_BEAR_TYPE);
79 bool hasStartTime = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_1], START_TIME);
80 bool hasEndTime = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_1], END_TIME);
81 bool hasSimId = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_1], SIM_ID);
82 if (!(hasNetBearType && hasStartTime && hasEndTime)) {
83 NETMANAGER_BASE_LOGE("param error hasNetBearType=%{public}d, hasStartTime=%{public}d, hasEndTime=%{public}d",
84 hasNetBearType, hasStartTime, hasEndTime);
85 SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
86 SetNeedThrowException(true);
87 return false;
88 }
89 bool checkNetBearType = NapiUtils::GetValueType(
90 GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_1], NET_BEAR_TYPE)) == napi_number;
91 bool checkStartTime = NapiUtils::GetValueType(
92 GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_1], START_TIME)) == napi_number;
93 bool checkEndTime = NapiUtils::GetValueType(
94 GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_1], END_TIME)) == napi_number;
95 bool checkSimId = true;
96 if (hasSimId) {
97 checkSimId = NapiUtils::GetValueType(
98 GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_1], SIM_ID)) == napi_number;
99 }
100 if (!(checkNetBearType && checkStartTime && checkEndTime && checkSimId)) {
101 NETMANAGER_BASE_LOGE(
102 "param check checkType=%{public}d, checkStartTime=%{public}d, checkEndTime=%{public}d, "
103 "checkSimId=%{public}d",
104 checkNetBearType, checkStartTime, checkEndTime, checkSimId);
105 SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
106 SetNeedThrowException(true);
107 return false;
108 }
109 return true;
110 }
111
CheckParamsType(napi_value * params,size_t paramsCount)112 bool GetTrafficStatsByUidNetworkContext::CheckParamsType(napi_value *params, size_t paramsCount)
113 {
114 if (paramsCount == PARAM_DOUBLE_OPTIONS) {
115 return NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) == napi_number &&
116 NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) == napi_object;
117 }
118 if (paramsCount == PARAM_DOUBLE_OPTIONS_AND_CALLBACK) {
119 return NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) == napi_number &&
120 NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) == napi_object &&
121 NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_2]) == napi_function;
122 }
123 return false;
124 }
125
SetUid(uint32_t uid)126 void GetTrafficStatsByUidNetworkContext::SetUid(uint32_t uid)
127 {
128 uid_ = uid;
129 }
130
SetNetBearType(uint32_t bearerType)131 void GetTrafficStatsByUidNetworkContext::SetNetBearType(uint32_t bearerType)
132 {
133 netBearType_ = bearerType;
134 }
135
SetStartTime(uint32_t startTime)136 void GetTrafficStatsByUidNetworkContext::SetStartTime(uint32_t startTime)
137 {
138 startTime_ = startTime;
139 }
140
SetEndTime(uint32_t endTime)141 void GetTrafficStatsByUidNetworkContext::SetEndTime(uint32_t endTime)
142 {
143 endTime_ = endTime;
144 }
145
SetSimId(uint32_t simId)146 void GetTrafficStatsByUidNetworkContext::SetSimId(uint32_t simId)
147 {
148 simId_ = simId;
149 }
150
GetUid() const151 uint32_t GetTrafficStatsByUidNetworkContext::GetUid() const
152 {
153 return uid_;
154 }
155
GetNetBearType() const156 uint32_t GetTrafficStatsByUidNetworkContext::GetNetBearType() const
157 {
158 return netBearType_;
159 }
160
GetStartTime() const161 uint32_t GetTrafficStatsByUidNetworkContext::GetStartTime() const
162 {
163 return startTime_;
164 }
165
GetEndTime() const166 uint32_t GetTrafficStatsByUidNetworkContext::GetEndTime() const
167 {
168 return endTime_;
169 }
170
GetSimId() const171 uint32_t GetTrafficStatsByUidNetworkContext::GetSimId() const
172 {
173 return simId_;
174 }
175
GetNetStatsInfoSequence()176 std::vector<NetStatsInfoSequence> &GetTrafficStatsByUidNetworkContext::GetNetStatsInfoSequence()
177 {
178 return stats_;
179 }
180
181 } // namespace NetManagerStandard
182 } // namespace OHOS