• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 "network_manager_proxy.h"
17 
18 #include "edm_constants.h"
19 #include "edm_ipc_interface_code.h"
20 #include "edm_log.h"
21 #include "func_code.h"
22 
23 namespace OHOS {
24 namespace EDM {
25 std::shared_ptr<NetworkManagerProxy> NetworkManagerProxy::instance_ = nullptr;
26 std::once_flag NetworkManagerProxy::flag_;
27 const std::u16string DESCRIPTOR = u"ohos.edm.IEnterpriseDeviceMgr";
28 
NetworkManagerProxy()29 NetworkManagerProxy::NetworkManagerProxy() {}
30 
~NetworkManagerProxy()31 NetworkManagerProxy::~NetworkManagerProxy() {}
32 
GetNetworkManagerProxy()33 std::shared_ptr<NetworkManagerProxy> NetworkManagerProxy::GetNetworkManagerProxy()
34 {
35     std::call_once(flag_, []() {
36         if (instance_ == nullptr) {
37             instance_ = std::make_shared<NetworkManagerProxy>();
38         }
39     });
40     return instance_;
41 }
42 
GetAllNetworkInterfaces(const AppExecFwk::ElementName & admin,std::vector<std::string> & networkInterface,bool isSync)43 int32_t NetworkManagerProxy::GetAllNetworkInterfaces(const AppExecFwk::ElementName &admin,
44     std::vector<std::string> &networkInterface, bool isSync)
45 {
46 #ifdef NETMANAGER_BASE_EDM_ENABLE
47     EDMLOGD("NetworkManagerProxy::GetAllNetworkInterfaces");
48     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
49     MessageParcel data;
50     MessageParcel reply;
51     data.WriteInterfaceToken(DESCRIPTOR);
52     data.WriteInt32(WITHOUT_USERID);
53     data.WriteString(isSync ? EdmConstants::PERMISSION_TAG_VERSION_12 : EdmConstants::PERMISSION_TAG_VERSION_11);
54     data.WriteInt32(HAS_ADMIN);
55     data.WriteParcelable(&admin);
56     proxy->GetPolicy(EdmInterfaceCode::GET_NETWORK_INTERFACES, data, reply);
57     int32_t ret = ERR_INVALID_VALUE;
58     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
59     if (!blRes) {
60         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
61         return ret;
62     }
63     reply.ReadStringVector(&networkInterface);
64     return ERR_OK;
65 #else
66     EDMLOGW("NetworkManagerProxy::GetAllNetworkInterfaces Unsupported Capabilities.");
67     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
68 #endif
69 }
70 
GetAllNetworkInterfaces(MessageParcel & data,std::vector<std::string> & networkInterface)71 int32_t NetworkManagerProxy::GetAllNetworkInterfaces(MessageParcel &data,
72     std::vector<std::string> &networkInterface)
73 {
74 #ifdef NETMANAGER_BASE_EDM_ENABLE
75     EDMLOGD("NetworkManagerProxy::GetAllNetworkInterfaces");
76     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
77     MessageParcel reply;
78     proxy->GetPolicy(EdmInterfaceCode::GET_NETWORK_INTERFACES, data, reply);
79     int32_t ret = ERR_INVALID_VALUE;
80     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
81     if (!blRes) {
82         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
83         return ret;
84     }
85     reply.ReadStringVector(&networkInterface);
86     return ERR_OK;
87 #else
88     EDMLOGW("NetworkManagerProxy::GetAllNetworkInterfaces Unsupported Capabilities.");
89     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
90 #endif
91 }
92 
GetIpOrMacAddress(const AppExecFwk::ElementName & admin,const std::string & networkInterface,int policyCode,std::string & info,bool isSync)93 int32_t NetworkManagerProxy::GetIpOrMacAddress(const AppExecFwk::ElementName &admin,
94     const std::string &networkInterface, int policyCode, std::string &info, bool isSync)
95 {
96 #ifdef NETMANAGER_BASE_EDM_ENABLE
97     EDMLOGD("NetworkManagerProxy::GetIpOrMacAddress");
98     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
99     MessageParcel data;
100     MessageParcel reply;
101     data.WriteInterfaceToken(DESCRIPTOR);
102     data.WriteInt32(WITHOUT_USERID);
103     data.WriteString(isSync ? EdmConstants::PERMISSION_TAG_VERSION_12 : EdmConstants::PERMISSION_TAG_VERSION_11);
104     data.WriteInt32(HAS_ADMIN);
105     data.WriteParcelable(&admin);
106     data.WriteString(networkInterface);
107     proxy->GetPolicy(policyCode, data, reply);
108     int32_t ret = ERR_INVALID_VALUE;
109     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
110     if (!blRes) {
111         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
112         return ret;
113     }
114     reply.ReadString(info);
115     return ERR_OK;
116 #else
117     EDMLOGW("NetworkManagerProxy::GetIpOrMacAddress Unsupported Capabilities.");
118     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
119 #endif
120 }
121 
GetIpOrMacAddress(MessageParcel & data,int policyCode,std::string & info)122 int32_t NetworkManagerProxy::GetIpOrMacAddress(MessageParcel &data, int policyCode, std::string &info)
123 {
124 #ifdef NETMANAGER_BASE_EDM_ENABLE
125     EDMLOGD("NetworkManagerProxy::GetIpOrMacAddress");
126     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
127     MessageParcel reply;
128     proxy->GetPolicy(policyCode, data, reply);
129     int32_t ret = ERR_INVALID_VALUE;
130     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
131     if (!blRes) {
132         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
133         return ret;
134     }
135     reply.ReadString(info);
136     return ERR_OK;
137 #else
138     EDMLOGW("NetworkManagerProxy::GetIpOrMacAddress Unsupported Capabilities.");
139     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
140 #endif
141 }
142 
SetNetworkInterfaceDisabled(const AppExecFwk::ElementName & admin,const std::string & networkInterface,bool isDisabled,bool isSync)143 int32_t NetworkManagerProxy::SetNetworkInterfaceDisabled(const AppExecFwk::ElementName &admin,
144     const std::string &networkInterface, bool isDisabled, bool isSync)
145 {
146 #ifdef NETMANAGER_BASE_EDM_ENABLE
147     EDMLOGD("NetworkManagerProxy::SetNetworkInterfaceDisabled");
148     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
149     MessageParcel data;
150     std::uint32_t funcCode =
151         POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::DISABLED_NETWORK_INTERFACE);
152     data.WriteInterfaceToken(DESCRIPTOR);
153     data.WriteInt32(WITHOUT_USERID);
154     data.WriteParcelable(&admin);
155     data.WriteString(isSync ? EdmConstants::PERMISSION_TAG_VERSION_12 : EdmConstants::PERMISSION_TAG_VERSION_11);
156     std::vector<std::string> key{networkInterface};
157     std::vector<std::string> value{isDisabled ? "true" : "false"};
158     data.WriteStringVector(key);
159     data.WriteStringVector(value);
160     return proxy->HandleDevicePolicy(funcCode, data);
161 #else
162     EDMLOGW("NetworkManagerProxy::SetNetworkInterfaceDisabled Unsupported Capabilities.");
163     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
164 #endif
165 }
166 
SetNetworkInterfaceDisabled(MessageParcel & data)167 int32_t NetworkManagerProxy::SetNetworkInterfaceDisabled(MessageParcel &data)
168 {
169 #ifdef NETMANAGER_BASE_EDM_ENABLE
170     EDMLOGD("NetworkManagerProxy::SetNetworkInterfaceDisabled");
171     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
172     std::uint32_t funcCode =
173         POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::DISABLED_NETWORK_INTERFACE);
174     return proxy->HandleDevicePolicy(funcCode, data);
175 #else
176     EDMLOGW("NetworkManagerProxy::SetNetworkInterfaceDisabled Unsupported Capabilities.");
177     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
178 #endif
179 }
180 
IsNetworkInterfaceDisabled(const AppExecFwk::ElementName & admin,const std::string & networkInterface,bool & status,bool isSync)181 int32_t NetworkManagerProxy::IsNetworkInterfaceDisabled(const AppExecFwk::ElementName &admin,
182     const std::string &networkInterface, bool &status, bool isSync)
183 {
184 #ifdef NETMANAGER_BASE_EDM_ENABLE
185     EDMLOGD("NetworkManagerProxy::IsNetworkInterfaceDisabled");
186     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
187     MessageParcel data;
188     MessageParcel reply;
189     data.WriteInterfaceToken(DESCRIPTOR);
190     data.WriteInt32(WITHOUT_USERID);
191     data.WriteString(isSync ? EdmConstants::PERMISSION_TAG_VERSION_12 : EdmConstants::PERMISSION_TAG_VERSION_11);
192     data.WriteInt32(HAS_ADMIN);
193     data.WriteParcelable(&admin);
194     data.WriteString(networkInterface);
195     proxy->GetPolicy(EdmInterfaceCode::DISABLED_NETWORK_INTERFACE, data, reply);
196     int32_t ret = ERR_INVALID_VALUE;
197     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
198     if (!blRes) {
199         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
200         return ret;
201     }
202     reply.ReadBool(status);
203     return ERR_OK;
204 #else
205     EDMLOGW("NetworkManagerProxy::IsNetworkInterfaceDisabled Unsupported Capabilities.");
206     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
207 #endif
208 }
209 
IsNetworkInterfaceDisabled(MessageParcel & data,bool & status)210 int32_t NetworkManagerProxy::IsNetworkInterfaceDisabled(MessageParcel &data, bool &status)
211 {
212 #ifdef NETMANAGER_BASE_EDM_ENABLE
213     EDMLOGD("NetworkManagerProxy::IsNetworkInterfaceDisabled");
214     auto proxy = EnterpriseDeviceMgrProxy::GetInstance();
215     MessageParcel reply;
216     proxy->GetPolicy(EdmInterfaceCode::DISABLED_NETWORK_INTERFACE, data, reply);
217     int32_t ret = ERR_INVALID_VALUE;
218     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
219     if (!blRes) {
220         EDMLOGW("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
221         return ret;
222     }
223     reply.ReadBool(status);
224     return ERR_OK;
225 #else
226     EDMLOGW("NetworkManagerProxy::IsNetworkInterfaceDisabled Unsupported Capabilities.");
227     return EdmReturnErrCode::INTERFACE_UNSUPPORTED;
228 #endif
229 }
230 
AddIptablesFilterRule(MessageParcel & data)231 int32_t NetworkManagerProxy::AddIptablesFilterRule(MessageParcel &data)
232 {
233     EDMLOGD("NetworkManagerProxy::AddIptablesFilterRule");
234     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::SET),
235         EdmInterfaceCode::IPTABLES_RULE);
236     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
237 }
238 
RemoveIptablesFilterRule(MessageParcel & data)239 int32_t NetworkManagerProxy::RemoveIptablesFilterRule(MessageParcel &data)
240 {
241     EDMLOGD("NetworkManagerProxy::RemoveIptablesFilterRule");
242     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::REMOVE),
243         EdmInterfaceCode::IPTABLES_RULE);
244     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
245 }
246 
ListIptablesFilterRules(MessageParcel & data,std::string & result)247 int32_t NetworkManagerProxy::ListIptablesFilterRules(MessageParcel &data, std::string &result)
248 {
249     EDMLOGD("NetworkManagerProxy::ListIptablesFilterRules");
250     MessageParcel reply;
251     EnterpriseDeviceMgrProxy::GetInstance()->GetPolicy(EdmInterfaceCode::IPTABLES_RULE, data, reply);
252     int32_t ret = ERR_INVALID_VALUE;
253     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
254     if (!blRes) {
255         EDMLOGE("EnterpriseDeviceMgrProxy:GetPolicy fail. %{public}d", ret);
256         return ret;
257     }
258     reply.ReadString(result);
259     return ERR_OK;
260 }
261 
AddFirewallRule(MessageParcel & data)262 int32_t NetworkManagerProxy::AddFirewallRule(MessageParcel &data)
263 {
264     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::SET),
265         EdmInterfaceCode::FIREWALL_RULE);
266     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
267 }
268 
RemoveFirewallRule(const AppExecFwk::ElementName & admin,const IPTABLES::FirewallRule & rule)269 int32_t NetworkManagerProxy::RemoveFirewallRule(const AppExecFwk::ElementName &admin,
270     const IPTABLES::FirewallRule &rule)
271 {
272     MessageParcel data;
273     data.WriteInterfaceToken(DESCRIPTOR);
274     data.WriteInt32(WITHOUT_USERID);
275     data.WriteParcelable(&admin);
276     data.WriteString(WITHOUT_PERMISSION_TAG);
277     IPTABLES::FirewallRuleParcel firewallRuleParcel{rule};
278     if (!firewallRuleParcel.Marshalling(data)) {
279         EDMLOGE("NetworkManagerProxy::RemoveFirewallRule Marshalling rule fail.");
280         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
281     }
282     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::REMOVE),
283         EdmInterfaceCode::FIREWALL_RULE);
284     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
285 }
286 
GetFirewallRules(MessageParcel & data,std::vector<IPTABLES::FirewallRule> & result)287 int32_t NetworkManagerProxy::GetFirewallRules(MessageParcel &data,
288     std::vector<IPTABLES::FirewallRule> &result)
289 {
290     MessageParcel reply;
291     EnterpriseDeviceMgrProxy::GetInstance()->GetPolicy(EdmInterfaceCode::FIREWALL_RULE, data, reply);
292     int32_t ret = ERR_INVALID_VALUE;
293     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
294     if (!blRes) {
295         EDMLOGE("EnterpriseDeviceMgrProxy:GetFirewallRules fail. %{public}d", ret);
296         return ret;
297     }
298     int32_t size = reply.ReadInt32();
299     if (size > EdmConstants::DEFAULT_LOOP_MAX_SIZE) {
300         EDMLOGE("EnterpriseDeviceMgrProxy:GetFirewallRules size overlimit. size: %{public}d", size);
301         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
302     }
303     for (int32_t i = 0; i < size; i++) {
304         IPTABLES::FirewallRuleParcel firewallRuleParcel;
305         if (!IPTABLES::FirewallRuleParcel::Unmarshalling(reply, firewallRuleParcel)) {
306             EDMLOGE("NetworkManagerProxy::GetFirewallRules Unmarshalling rule fail.");
307             return EdmReturnErrCode::SYSTEM_ABNORMALLY;
308         }
309         result.push_back(firewallRuleParcel.GetRule());
310     }
311     EDMLOGD("EnterpriseDeviceMgrProxy:GetFirewallRules success. %{public}d", size);
312     return ERR_OK;
313 }
314 
AddDomainFilterRule(MessageParcel & data)315 int32_t NetworkManagerProxy::AddDomainFilterRule(MessageParcel &data)
316 {
317     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::SET),
318         EdmInterfaceCode::DOMAIN_FILTER_RULE);
319     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
320 }
321 
RemoveDomainFilterRule(const AppExecFwk::ElementName & admin,const IPTABLES::DomainFilterRule & rule)322 int32_t NetworkManagerProxy::RemoveDomainFilterRule(const AppExecFwk::ElementName &admin,
323     const IPTABLES::DomainFilterRule &rule)
324 {
325     MessageParcel data;
326     data.WriteInterfaceToken(DESCRIPTOR);
327     data.WriteInt32(WITHOUT_USERID);
328     data.WriteParcelable(&admin);
329     data.WriteString(WITHOUT_PERMISSION_TAG);
330     IPTABLES::DomainFilterRuleParcel domainFilterRuleParcel{rule};
331     if (!domainFilterRuleParcel.Marshalling(data)) {
332         EDMLOGE("NetworkManagerProxy::RemoveDomainFilterRule Marshalling rule fail.");
333         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
334     }
335     std::uint32_t funcCode = POLICY_FUNC_CODE(static_cast<std::uint32_t>(FuncOperateType::REMOVE),
336         EdmInterfaceCode::DOMAIN_FILTER_RULE);
337     return EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
338 }
339 
GetDomainFilterRules(MessageParcel & data,std::vector<IPTABLES::DomainFilterRule> & result)340 int32_t NetworkManagerProxy::GetDomainFilterRules(MessageParcel &data,
341     std::vector<IPTABLES::DomainFilterRule> &result)
342 {
343     MessageParcel reply;
344     EnterpriseDeviceMgrProxy::GetInstance()->GetPolicy(EdmInterfaceCode::DOMAIN_FILTER_RULE, data, reply);
345     int32_t ret = ERR_INVALID_VALUE;
346     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
347     if (!blRes) {
348         EDMLOGE("EnterpriseDeviceMgrProxy:GetDomainFilterRules fail. %{public}d", ret);
349         return ret;
350     }
351     int32_t size = reply.ReadInt32();
352     if (size > EdmConstants::DEFAULT_LOOP_MAX_SIZE) {
353         EDMLOGE("EnterpriseDeviceMgrProxy:GetDomainFilterRules size overlimit. size: %{public}d", size);
354         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
355     }
356     for (int32_t i = 0; i < size; i++) {
357         IPTABLES::DomainFilterRuleParcel domainFilterRuleParcel;
358         if (!IPTABLES::DomainFilterRuleParcel::Unmarshalling(reply, domainFilterRuleParcel)) {
359             EDMLOGE("NetworkManagerProxy::GetDomainFilterRules Unmarshalling rule fail.");
360             return EdmReturnErrCode::SYSTEM_ABNORMALLY;
361         }
362         result.push_back(domainFilterRuleParcel.GetRule());
363     }
364     EDMLOGD("EnterpriseDeviceMgrProxy:GetDomainFilterRules success. %{public}d", size);
365     return ERR_OK;
366 }
367 #ifdef NETMANAGER_BASE_EDM_ENABLE
SetGlobalHttpProxy(MessageParcel & data)368 int32_t NetworkManagerProxy::SetGlobalHttpProxy(MessageParcel &data)
369 {
370     EDMLOGD("NetworkManagerProxy::SetGlobalHttpProxy");
371     std::uint32_t funcCode = POLICY_FUNC_CODE((std::uint32_t)FuncOperateType::SET, EdmInterfaceCode::GLOBAL_PROXY);
372     int32_t ret = EnterpriseDeviceMgrProxy::GetInstance()->HandleDevicePolicy(funcCode, data);
373     EDMLOGI("NetworkManagerProxy::SetGlobalHttpProxy ret = %{public}d", ret);
374     return ret;
375 }
376 
GetGlobalHttpProxy(const AppExecFwk::ElementName * admin,NetManagerStandard::HttpProxy & httpProxy,int32_t accountId)377 int32_t NetworkManagerProxy::GetGlobalHttpProxy(const AppExecFwk::ElementName *admin,
378     NetManagerStandard::HttpProxy &httpProxy, int32_t accountId)
379 {
380     EDMLOGD("NetworkManagerProxy::GetGlobalHttpProxy");
381     MessageParcel data;
382     MessageParcel reply;
383     data.WriteInterfaceToken(DESCRIPTOR);
384     data.WriteInt32(WITHOUT_USERID);
385     data.WriteString(WITHOUT_PERMISSION_TAG);
386     if (admin != nullptr) {
387         data.WriteInt32(HAS_ADMIN);
388         data.WriteParcelable(admin);
389     } else {
390         if (!EnterpriseDeviceMgrProxy::GetInstance()->IsEdmEnabled()) {
391             return ERR_OK;
392         }
393         data.WriteInt32(WITHOUT_ADMIN);
394     }
395     data.WriteInt32(accountId);
396     EnterpriseDeviceMgrProxy::GetInstance()->GetPolicy(EdmInterfaceCode::GLOBAL_PROXY, data, reply);
397     int32_t ret = ERR_INVALID_VALUE;
398     bool blRes = reply.ReadInt32(ret) && (ret == ERR_OK);
399     if (!blRes) {
400         EDMLOGE("GetGlobalHttpProxy:GetPolicy fail. %{public}d", ret);
401         return ret;
402     }
403     if (!NetManagerStandard::HttpProxy::Unmarshalling(reply, httpProxy)) {
404         EDMLOGE("NetworkManagerProxy::GetGlobalHttpProxy Unmarshalling proxy fail.");
405         return EdmReturnErrCode::SYSTEM_ABNORMALLY;
406     }
407     return ERR_OK;
408 }
409 #endif
410 } // namespace EDM
411 } // namespace OHOS
412