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_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 
GetTrafficStatsByNetworkContext(napi_env env,EventManager * manager)31 GetTrafficStatsByNetworkContext::GetTrafficStatsByNetworkContext(napi_env env, EventManager *manager)
32     : BaseContext(env, manager) {}
33 
ParseParams(napi_value * params,size_t paramsCount)34 void GetTrafficStatsByNetworkContext::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     if (!CheckNetworkParams(params, paramsCount)) {
43         return;
44     }
45     if (NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_0], NET_BEAR_TYPE) < 0 ||
46         NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_0], START_TIME) < 0 ||
47         NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_0], END_TIME) < 0 ||
48         NapiUtils::GetInt32Property(GetEnv(), params[ARG_INDEX_0], SIM_ID) < 0) {
49         NETMANAGER_BASE_LOGE("checkParamsValue is invalid");
50         SetErrorCode(NETMANAGER_ERR_INVALID_PARAMETER);
51         SetNeedThrowException(true);
52     }
53     netBearType_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_0], NET_BEAR_TYPE);
54     startTime_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_0], START_TIME);
55     endTime_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_0], END_TIME);
56     bool hasSimId = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_0], SIM_ID);
57     if (hasSimId) {
58         simId_ = NapiUtils::GetUint32Property(GetEnv(), params[ARG_INDEX_0], SIM_ID);
59     } else {
60         simId_ = UINT32_MAX;
61     }
62     if (paramsCount == PARAM_OPTIONS_AND_CALLBACK) {
63         SetParseOK(SetCallback(params[ARG_INDEX_1]) == napi_ok);
64         return;
65     }
66     SetParseOK(true);
67 }
68 
CheckNetworkParams(napi_value * params,size_t paramsCount)69 bool GetTrafficStatsByNetworkContext::CheckNetworkParams(napi_value *params, size_t paramsCount)
70 {
71     bool hasNetBearType = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_0], NET_BEAR_TYPE);
72     bool hasStartTime = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_0], START_TIME);
73     bool hasEndTime = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_0], END_TIME);
74     bool hasSimId = NapiUtils::HasNamedProperty(GetEnv(), params[ARG_INDEX_0], SIM_ID);
75     if (!(hasNetBearType && hasStartTime && hasEndTime)) {
76         NETMANAGER_BASE_LOGE("param error hasNetBearType=%{public}d, hasStartTime=%{public}d, hasEndTime=%{public}d",
77                              hasNetBearType, hasStartTime, hasEndTime);
78         SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
79         SetNeedThrowException(true);
80         return false;
81     }
82     bool checkNetBearType = NapiUtils::GetValueType(
83         GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_0], NET_BEAR_TYPE)) == napi_number;
84     bool checkStartTime = NapiUtils::GetValueType(
85         GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_0], START_TIME)) == napi_number;
86     bool checkEndTime = NapiUtils::GetValueType(
87         GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_0], END_TIME)) == napi_number;
88     bool checkSimId = true;
89     if (hasSimId) {
90         checkSimId = NapiUtils::GetValueType(
91             GetEnv(), NapiUtils::GetNamedProperty(GetEnv(), params[ARG_INDEX_0], SIM_ID)) == napi_number;
92     }
93     if (!(checkNetBearType && checkStartTime && checkEndTime && checkSimId)) {
94         NETMANAGER_BASE_LOGE(
95             "param check checkType=%{public}d, checkStartTime=%{public}d, checkEndTime=%{public}d, "
96             "checkSimId=%{public}d",
97             checkNetBearType, checkStartTime, checkEndTime, checkSimId);
98         SetErrorCode(NETMANAGER_ERR_PARAMETER_ERROR);
99         SetNeedThrowException(true);
100         return false;
101     }
102     return true;
103 }
104 
CheckParamsType(napi_value * params,size_t paramsCount)105 bool GetTrafficStatsByNetworkContext::CheckParamsType(napi_value *params, size_t paramsCount)
106 {
107     if (paramsCount == PARAM_JUST_OPTIONS) {
108         return NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) == napi_object;
109     }
110 
111     if (paramsCount == PARAM_OPTIONS_AND_CALLBACK) {
112         return NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_0]) == napi_object &&
113                NapiUtils::GetValueType(GetEnv(), params[ARG_INDEX_1]) == napi_function;
114     }
115     return false;
116 }
117 
SetNetBearType(uint32_t bearerType)118 void GetTrafficStatsByNetworkContext::SetNetBearType(uint32_t bearerType)
119 {
120     netBearType_ = bearerType;
121 }
122 
SetStartTime(uint32_t startTime)123 void GetTrafficStatsByNetworkContext::SetStartTime(uint32_t startTime)
124 {
125     startTime_ = startTime;
126 }
127 
SetEndTime(uint32_t endTime)128 void GetTrafficStatsByNetworkContext::SetEndTime(uint32_t endTime)
129 {
130     endTime_ = endTime;
131 }
132 
SetSimId(uint32_t simId)133 void GetTrafficStatsByNetworkContext::SetSimId(uint32_t simId)
134 {
135     simId_ = simId;
136 }
137 
GetNetBearType() const138 uint32_t GetTrafficStatsByNetworkContext::GetNetBearType() const
139 {
140     return netBearType_;
141 }
142 
GetStartTime() const143 uint32_t GetTrafficStatsByNetworkContext::GetStartTime() const
144 {
145     return startTime_;
146 }
147 
GetEndTime() const148 uint32_t GetTrafficStatsByNetworkContext::GetEndTime() const
149 {
150     return endTime_;
151 }
152 
GetSimId() const153 uint32_t GetTrafficStatsByNetworkContext::GetSimId() const
154 {
155     return simId_;
156 }
157 
GetNetStatsInfo()158 std::unordered_map<uint32_t, NetStatsInfo> &GetTrafficStatsByNetworkContext::GetNetStatsInfo()
159 {
160     return stats_;
161 }
162 
163 } // namespace NetManagerStandard
164 } // namespace OHOS