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