• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2022-2023 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 "networkshare_service.h"
17 
18 #include "net_event_report.h"
19 #include "net_manager_center.h"
20 #include "net_manager_constants.h"
21 #include "netmanager_base_permission.h"
22 #include "net_datashare_utils_iface.h"
23 #include "netmgr_ext_log_wrapper.h"
24 #include "networkshare_constants.h"
25 #include "system_ability_definition.h"
26 
27 namespace OHOS {
28 namespace NetManagerStandard {
29 const bool REGISTER_LOCAL_RESULT_NETSHARE =
30     SystemAbility::MakeAndRegisterAbility(DelayedSingleton<NetworkShareService>::GetInstance().get());
31 
NetworkShareService()32 NetworkShareService::NetworkShareService() : SystemAbility(COMM_NET_TETHERING_MANAGER_SYS_ABILITY_ID, true) {}
33 
~NetworkShareService()34 NetworkShareService::~NetworkShareService(){};
35 
OnStart()36 void NetworkShareService::OnStart()
37 {
38     if (state_ == STATE_RUNNING) {
39         NETMGR_EXT_LOG_D("OnStart Service state is already running");
40         return;
41     }
42     if (!Init()) {
43         NETMGR_EXT_LOG_E("OnStart init failed");
44         EventInfo eventInfo;
45         eventInfo.operatorType = static_cast<int32_t>(NetworkShareEventOperator::OPERATION_START_SA);
46         eventInfo.errorType = static_cast<int32_t>(NetworkShareEventErrorType::ERROR_START_SA);
47         eventInfo.errorMsg = "Start Network Share Service failed";
48         NetEventReport::SendSetupFaultEvent(eventInfo);
49         return;
50     }
51     state_ = STATE_RUNNING;
52     NETMGR_EXT_LOG_I("OnStart successful");
53 }
54 
OnStop()55 void NetworkShareService::OnStop()
56 {
57     NetworkShareTracker::GetInstance().Uninit();
58     state_ = STATE_STOPPED;
59     registerToService_ = false;
60     NETMGR_EXT_LOG_I("OnStop successful");
61 }
62 
Dump(int32_t fd,const std::vector<std::u16string> & args)63 int32_t NetworkShareService::Dump(int32_t fd, const std::vector<std::u16string> &args)
64 {
65     NETMGR_EXT_LOG_I("Start Dump, fd: %{public}d", fd);
66     std::string result;
67     GetDumpMessage(result);
68     NETMGR_EXT_LOG_I("Dump content: %{public}s", result.c_str());
69     int32_t ret = dprintf(fd, "%s\n", result.c_str());
70     return ret < 0 ? NETWORKSHARE_ERROR_INTERNAL_ERROR : NETMANAGER_EXT_SUCCESS;
71 }
72 
Init()73 bool NetworkShareService::Init()
74 {
75     if (!REGISTER_LOCAL_RESULT_NETSHARE) {
76         NETMGR_EXT_LOG_E("Register to local sa manager failed");
77         return false;
78     }
79     if (!registerToService_) {
80         if (!Publish(DelayedSingleton<NetworkShareService>::GetInstance().get())) {
81             NETMGR_EXT_LOG_E("Register to sa manager failed");
82             return false;
83         }
84         registerToService_ = true;
85     }
86 
87     AddSystemAbilityListener(COMM_NETSYS_NATIVE_SYS_ABILITY_ID);
88 
89     return NetworkShareTracker::GetInstance().Init();
90 }
91 
GetDumpMessage(std::string & message)92 void NetworkShareService::GetDumpMessage(std::string &message)
93 {
94     message.append("Net Sharing Info:\n");
95     int32_t supported = NETWORKSHARE_IS_UNSUPPORTED;
96     NetworkShareTracker::GetInstance().IsNetworkSharingSupported(supported);
97     std::string surpportContent = supported == NETWORKSHARE_IS_SUPPORTED ? "surpported" : "not surpported";
98     message.append("\tIs Sharing Supported: " + surpportContent + "\n");
99     int32_t sharingStatus = NETWORKSHARE_IS_UNSHARING;
100     NetworkShareTracker::GetInstance().IsSharing(sharingStatus);
101     std::string sharingState = sharingStatus ? "is sharing" : "not sharing";
102     message.append("\tSharing State: " + sharingState + "\n");
103     if (sharingStatus) {
104         std::string sharingType;
105         GetSharingType(SharingIfaceType::SHARING_WIFI, "wifi;", sharingType);
106         GetSharingType(SharingIfaceType::SHARING_USB, "usb;", sharingType);
107         GetSharingType(SharingIfaceType::SHARING_BLUETOOTH, "bluetooth;", sharingType);
108         message.append("\tSharing Types: " + sharingType + "\n");
109     }
110 
111     std::string wifiShareRegexs;
112     GetShareRegexsContent(SharingIfaceType::SHARING_WIFI, wifiShareRegexs);
113     message.append("\tUsb Regexs: " + wifiShareRegexs + "\n");
114     std::string usbShareRegexs;
115     GetShareRegexsContent(SharingIfaceType::SHARING_USB, usbShareRegexs);
116     message.append("\tWifi Regexs: " + usbShareRegexs + "\n");
117     std::string btpanShareRegexs;
118     GetShareRegexsContent(SharingIfaceType::SHARING_BLUETOOTH, btpanShareRegexs);
119     message.append("\tBluetooth Regexs: " + btpanShareRegexs + "\n");
120 }
121 
GetSharingType(const SharingIfaceType & type,const std::string & typeContent,std::string & sharingType)122 void NetworkShareService::GetSharingType(const SharingIfaceType &type, const std::string &typeContent,
123                                          std::string &sharingType)
124 {
125     SharingIfaceState state;
126     NetworkShareTracker::GetInstance().GetSharingState(type, state);
127     if (state == SharingIfaceState::SHARING_NIC_SERVING) {
128         sharingType += typeContent;
129     }
130 }
131 
GetShareRegexsContent(const SharingIfaceType & type,std::string & shareRegexsContent)132 void NetworkShareService::GetShareRegexsContent(const SharingIfaceType &type, std::string &shareRegexsContent)
133 {
134     std::vector<std::string> regexs;
135     NetworkShareTracker::GetInstance().GetSharableRegexs(type, regexs);
136     for_each(regexs.begin(), regexs.end(),
137              [&shareRegexsContent](const std::string &regex) { shareRegexsContent += regex + ";"; });
138 }
139 
IsNetworkSharingSupported(int32_t & supported)140 int32_t NetworkShareService::IsNetworkSharingSupported(int32_t &supported)
141 {
142     NETMGR_EXT_LOG_I("NetworkSharing IsNetworkSharingSupported");
143     if (!NetManagerPermission::IsSystemCaller()) {
144         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
145     }
146     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
147         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
148     }
149     return NetworkShareTracker::GetInstance().IsNetworkSharingSupported(supported);
150 }
151 
IsSharing(int32_t & sharingStatus)152 int32_t NetworkShareService::IsSharing(int32_t &sharingStatus)
153 {
154     NETMGR_EXT_LOG_I("NetworkSharing IsSharing");
155     if (!NetManagerPermission::IsSystemCaller()) {
156         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
157     }
158     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
159         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
160     }
161     return NetworkShareTracker::GetInstance().IsSharing(sharingStatus);
162 }
163 
UpdateDataSharingType(const SharingIfaceType & type,bool isOpen)164 int32_t NetworkShareService::UpdateDataSharingType(const SharingIfaceType &type, bool isOpen)
165 {
166     int32_t ret = NETMANAGER_ERROR;
167     switch (type) {
168         case SharingIfaceType::SHARING_WIFI:
169             ret = NetDataShareHelperUtilsIface::Update(SHARING_WIFI_URI, KEY_SHARING_WIFI,
170                                                        std::to_string(isOpen));
171             break;
172         case SharingIfaceType::SHARING_USB:
173             ret = NetDataShareHelperUtilsIface::Update(SHARING_USB_URI, KEY_SHARING_USB,
174                                                        std::to_string(isOpen));
175             break;
176         case SharingIfaceType::SHARING_BLUETOOTH:
177             ret = NetDataShareHelperUtilsIface::Update(SHARING_BLUETOOTH_URI, KEY_SHARING_BLUETOOTH,
178                                                        std::to_string(isOpen));
179             break;
180         default:
181             break;
182     }
183     if (ret != NETMANAGER_EXT_SUCCESS) {
184         NETMGR_EXT_LOG_E("Update sharetype:[%{public}d]to datashare failed", static_cast<int32_t>(type));
185         return NETMANAGER_EXT_ERR_INTERNAL;
186     }
187     return ret;
188 }
189 
StartNetworkSharing(const SharingIfaceType & type)190 int32_t NetworkShareService::StartNetworkSharing(const SharingIfaceType &type)
191 {
192     NETMGR_EXT_LOG_I("NetworkSharing start sharing,type is %{public}d", type);
193     if (!NetManagerPermission::IsSystemCaller()) {
194         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
195     }
196     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
197         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
198     }
199     int32_t ret = NetworkShareTracker::GetInstance().StartNetworkSharing(type);
200     if (ret == NETMANAGER_EXT_SUCCESS) {
201         ret = UpdateDataSharingType(type, true);
202     }
203     return ret;
204 }
205 
StopNetworkSharing(const SharingIfaceType & type)206 int32_t NetworkShareService::StopNetworkSharing(const SharingIfaceType &type)
207 {
208     NETMGR_EXT_LOG_I("NetworkSharing start sharing,type is %{public}d", type);
209     if (!NetManagerPermission::IsSystemCaller()) {
210         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
211     }
212     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
213         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
214     }
215     int32_t ret = NetworkShareTracker::GetInstance().StopNetworkSharing(type);
216     if (ret == NETMANAGER_EXT_SUCCESS) {
217         ret = UpdateDataSharingType(type, false);
218     }
219 
220     return ret;
221 }
222 
RegisterSharingEvent(sptr<ISharingEventCallback> callback)223 int32_t NetworkShareService::RegisterSharingEvent(sptr<ISharingEventCallback> callback)
224 {
225     NETMGR_EXT_LOG_I("NetworkSharing Register Sharing Event.");
226     if (!NetManagerPermission::IsSystemCaller()) {
227         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
228     }
229     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
230         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
231     }
232     return NetworkShareTracker::GetInstance().RegisterSharingEvent(callback);
233 }
234 
UnregisterSharingEvent(sptr<ISharingEventCallback> callback)235 int32_t NetworkShareService::UnregisterSharingEvent(sptr<ISharingEventCallback> callback)
236 {
237     NETMGR_EXT_LOG_I("NetworkSharing UnRegister Sharing Event.");
238     if (!NetManagerPermission::IsSystemCaller()) {
239         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
240     }
241     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
242         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
243     }
244     return NetworkShareTracker::GetInstance().UnregisterSharingEvent(callback);
245 }
246 
GetSharableRegexs(SharingIfaceType type,std::vector<std::string> & ifaceRegexs)247 int32_t NetworkShareService::GetSharableRegexs(SharingIfaceType type, std::vector<std::string> &ifaceRegexs)
248 {
249     if (!NetManagerPermission::IsSystemCaller()) {
250         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
251     }
252     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
253         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
254     }
255     return NetworkShareTracker::GetInstance().GetSharableRegexs(type, ifaceRegexs);
256 }
257 
GetSharingState(SharingIfaceType type,SharingIfaceState & state)258 int32_t NetworkShareService::GetSharingState(SharingIfaceType type, SharingIfaceState &state)
259 {
260     if (!NetManagerPermission::IsSystemCaller()) {
261         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
262     }
263     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
264         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
265     }
266     return NetworkShareTracker::GetInstance().GetSharingState(type, state);
267 }
268 
GetNetSharingIfaces(const SharingIfaceState & state,std::vector<std::string> & ifaces)269 int32_t NetworkShareService::GetNetSharingIfaces(const SharingIfaceState &state, std::vector<std::string> &ifaces)
270 {
271     if (!NetManagerPermission::IsSystemCaller()) {
272         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
273     }
274     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
275         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
276     }
277     return NetworkShareTracker::GetInstance().GetNetSharingIfaces(state, ifaces);
278 }
279 
GetStatsRxBytes(int32_t & bytes)280 int32_t NetworkShareService::GetStatsRxBytes(int32_t &bytes)
281 {
282     if (!NetManagerPermission::IsSystemCaller()) {
283         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
284     }
285     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
286         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
287     }
288     return NetworkShareTracker::GetInstance().GetSharedSubSMTraffic(TrafficType::TRAFFIC_RX, bytes);
289 }
290 
GetStatsTxBytes(int32_t & bytes)291 int32_t NetworkShareService::GetStatsTxBytes(int32_t &bytes)
292 {
293     if (!NetManagerPermission::IsSystemCaller()) {
294         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
295     }
296     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
297         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
298     }
299     return NetworkShareTracker::GetInstance().GetSharedSubSMTraffic(TrafficType::TRAFFIC_TX, bytes);
300 }
301 
GetStatsTotalBytes(int32_t & bytes)302 int32_t NetworkShareService::GetStatsTotalBytes(int32_t &bytes)
303 {
304     if (!NetManagerPermission::IsSystemCaller()) {
305         return NETMANAGER_EXT_ERR_NOT_SYSTEM_CALL;
306     }
307     if (!NetManagerPermission::CheckPermission(Permission::CONNECTIVITY_INTERNAL)) {
308         return NETMANAGER_EXT_ERR_PERMISSION_DENIED;
309     }
310     return NetworkShareTracker::GetInstance().GetSharedSubSMTraffic(TrafficType::TRAFFIC_ALL, bytes);
311 }
312 
OnAddSystemAbility(int32_t systemAbilityId,const std::string & deviceId)313 void NetworkShareService::OnAddSystemAbility(int32_t systemAbilityId, const std::string &deviceId)
314 {
315     NETMGR_EXT_LOG_D("NetworkShareService::OnAddSystemAbility systemAbilityId[%{public}d]", systemAbilityId);
316     if (systemAbilityId == COMM_NETSYS_NATIVE_SYS_ABILITY_ID) {
317         if (hasSARemoved_) {
318             OnNetSysRestart();
319             hasSARemoved_ = false;
320         }
321     }
322 }
323 
OnRemoveSystemAbility(int32_t systemAbilityId,const std::string & deviceId)324 void NetworkShareService::OnRemoveSystemAbility(int32_t systemAbilityId, const std::string &deviceId)
325 {
326     NETMGR_EXT_LOG_D("NetworkShareService::OnRemoveSystemAbility systemAbilityId[%{public}d]", systemAbilityId);
327     if (systemAbilityId == COMM_NETSYS_NATIVE_SYS_ABILITY_ID) {
328         hasSARemoved_ = true;
329     }
330 }
331 
OnNetSysRestart()332 void NetworkShareService::OnNetSysRestart()
333 {
334     NETMGR_EXT_LOG_I("NetworkShareService::OnNetSysRestart");
335     NetworkShareTracker::GetInstance().RestartResume();
336 }
337 } // namespace NetManagerStandard
338 } // namespace OHOS
339