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