18e745fdaSopenharmony_ci/* 28e745fdaSopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 38e745fdaSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 48e745fdaSopenharmony_ci * you may not use this file except in compliance with the License. 58e745fdaSopenharmony_ci * You may obtain a copy of the License at 68e745fdaSopenharmony_ci * 78e745fdaSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 88e745fdaSopenharmony_ci * 98e745fdaSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 108e745fdaSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 118e745fdaSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 128e745fdaSopenharmony_ci * See the License for the specific language governing permissions and 138e745fdaSopenharmony_ci * limitations under the License. 148e745fdaSopenharmony_ci */ 158e745fdaSopenharmony_ci 168e745fdaSopenharmony_ci#ifndef NET_FIREWALL_POLICY_MANAGER_H 178e745fdaSopenharmony_ci#define NET_FIREWALL_POLICY_MANAGER_H 188e745fdaSopenharmony_ci 198e745fdaSopenharmony_ci#include <string> 208e745fdaSopenharmony_ci#include <shared_mutex> 218e745fdaSopenharmony_ci 228e745fdaSopenharmony_ci#include "netfirewall_common.h" 238e745fdaSopenharmony_ci#include "netfirewall_preference_helper.h" 248e745fdaSopenharmony_ci 258e745fdaSopenharmony_cinamespace OHOS { 268e745fdaSopenharmony_cinamespace NetManagerStandard { 278e745fdaSopenharmony_cinamespace { 288e745fdaSopenharmony_ciconst std::string FIREWALL_PREFERENCE_PATH = "/data/service/el1/public/netmanager/netfirewall_status_"; 298e745fdaSopenharmony_ci} // namespace 308e745fdaSopenharmony_ci 318e745fdaSopenharmony_ciclass NetFirewallPolicyManager { 328e745fdaSopenharmony_cipublic: 338e745fdaSopenharmony_ci static NetFirewallPolicyManager &GetInstance(); 348e745fdaSopenharmony_ci NetFirewallPolicyManager(); 358e745fdaSopenharmony_ci ~NetFirewallPolicyManager(); 368e745fdaSopenharmony_ci 378e745fdaSopenharmony_ci /** 388e745fdaSopenharmony_ci * Set current forground user Id 398e745fdaSopenharmony_ci * 408e745fdaSopenharmony_ci * @param userId User id 418e745fdaSopenharmony_ci */ 428e745fdaSopenharmony_ci void SetCurrentUserId(int32_t userId); 438e745fdaSopenharmony_ci 448e745fdaSopenharmony_ci /** 458e745fdaSopenharmony_ci * Turn on or off the firewall 468e745fdaSopenharmony_ci * 478e745fdaSopenharmony_ci * @param userId User id 488e745fdaSopenharmony_ci * @param policy The firewall policy to be set 498e745fdaSopenharmony_ci * @return Returns 0 success. Otherwise fail 508e745fdaSopenharmony_ci */ 518e745fdaSopenharmony_ci int32_t SetNetFirewallPolicy(const int32_t userId, const sptr<NetFirewallPolicy> &policy); 528e745fdaSopenharmony_ci 538e745fdaSopenharmony_ci /** 548e745fdaSopenharmony_ci * Query firewall policy 558e745fdaSopenharmony_ci * 568e745fdaSopenharmony_ci * @param userId User id 578e745fdaSopenharmony_ci * @param policy Return to firewall policy 588e745fdaSopenharmony_ci * @return Returns 0 success. Otherwise fail 598e745fdaSopenharmony_ci */ 608e745fdaSopenharmony_ci int32_t GetNetFirewallPolicy(const int32_t userId, sptr<NetFirewallPolicy> &policy); 618e745fdaSopenharmony_ci 628e745fdaSopenharmony_ci /** 638e745fdaSopenharmony_ci * Query current user firewall policy 648e745fdaSopenharmony_ci * 658e745fdaSopenharmony_ci * @param userId User id 668e745fdaSopenharmony_ci * @param policy Return to firewall policy 678e745fdaSopenharmony_ci * @return Returns 0 success. Otherwise fail 688e745fdaSopenharmony_ci */ 698e745fdaSopenharmony_ci int32_t GetCurrentNetFirewallPolicy(sptr<NetFirewallPolicy> &policy); 708e745fdaSopenharmony_ci 718e745fdaSopenharmony_ci /** 728e745fdaSopenharmony_ci * Get user firewall open policy 738e745fdaSopenharmony_ci * 748e745fdaSopenharmony_ci * @param userId User id 758e745fdaSopenharmony_ci * @return Returns true is open, Otherwise close 768e745fdaSopenharmony_ci */ 778e745fdaSopenharmony_ci bool IsNetFirewallOpen(const int32_t userId); 788e745fdaSopenharmony_ci 798e745fdaSopenharmony_ci /** 808e745fdaSopenharmony_ci * Get current user firewall open policy 818e745fdaSopenharmony_ci * 828e745fdaSopenharmony_ci * @param userId User id 838e745fdaSopenharmony_ci * @return Returns true is open, Otherwise close 848e745fdaSopenharmony_ci */ 858e745fdaSopenharmony_ci bool IsCurrentFirewallOpen(); 868e745fdaSopenharmony_ci 878e745fdaSopenharmony_ci /** 888e745fdaSopenharmony_ci * Clear user firewall policy 898e745fdaSopenharmony_ci * 908e745fdaSopenharmony_ci * @param userId Input User id 918e745fdaSopenharmony_ci * @return Returns true is open, Otherwise close 928e745fdaSopenharmony_ci */ 938e745fdaSopenharmony_ci int32_t ClearFirewallPolicy(const int32_t userId); 948e745fdaSopenharmony_ci 958e745fdaSopenharmony_ci /** 968e745fdaSopenharmony_ci * Clear current user firewall policy 978e745fdaSopenharmony_ci * 988e745fdaSopenharmony_ci * @return Returns true is open, Otherwise close 998e745fdaSopenharmony_ci */ 1008e745fdaSopenharmony_ci int32_t ClearCurrentFirewallPolicy(); 1018e745fdaSopenharmony_ci 1028e745fdaSopenharmony_ci /** 1038e745fdaSopenharmony_ci * Get firewall policy inAction 1048e745fdaSopenharmony_ci * 1058e745fdaSopenharmony_ci * @return Returns FirewallRuleAction 1068e745fdaSopenharmony_ci */ 1078e745fdaSopenharmony_ci FirewallRuleAction GetFirewallPolicyInAction(); 1088e745fdaSopenharmony_ci 1098e745fdaSopenharmony_ci /** 1108e745fdaSopenharmony_ci * Get firewall policy inAction 1118e745fdaSopenharmony_ci * 1128e745fdaSopenharmony_ci * @return Returns FirewallRuleAction 1138e745fdaSopenharmony_ci */ 1148e745fdaSopenharmony_ci FirewallRuleAction GetFirewallPolicyOutAction(); 1158e745fdaSopenharmony_ci 1168e745fdaSopenharmony_ci /** 1178e745fdaSopenharmony_ci * Is firewall status change 1188e745fdaSopenharmony_ci * 1198e745fdaSopenharmony_ci * @param policy input policy status 1208e745fdaSopenharmony_ci * @return Returns true is change, Otherwise not change 1218e745fdaSopenharmony_ci */ 1228e745fdaSopenharmony_ci bool IsFirewallStatusChange(const sptr<NetFirewallPolicy> &policy); 1238e745fdaSopenharmony_ci 1248e745fdaSopenharmony_ci /** 1258e745fdaSopenharmony_ci * Is firewall default action change 1268e745fdaSopenharmony_ci * 1278e745fdaSopenharmony_ci * @param policy input policy status 1288e745fdaSopenharmony_ci * @return Returns true is change, Otherwise not change 1298e745fdaSopenharmony_ci */ 1308e745fdaSopenharmony_ci bool IsFirewallActionChange(const sptr<NetFirewallPolicy> &policy); 1318e745fdaSopenharmony_ci 1328e745fdaSopenharmony_ci /** 1338e745fdaSopenharmony_ci * Get firewall policy inAction 1348e745fdaSopenharmony_ci * 1358e745fdaSopenharmony_ci * @param policy input to firewall policy 1368e745fdaSopenharmony_ci */ 1378e745fdaSopenharmony_ci void SetCurrentUserFirewallPolicy(const sptr<NetFirewallPolicy> &policy); 1388e745fdaSopenharmony_ci 1398e745fdaSopenharmony_ciprivate: 1408e745fdaSopenharmony_ci void RebuildFirewallPolicyCache(const int32_t userId); 1418e745fdaSopenharmony_ci void EnsureCurrentFirewallPolicyCached(); 1428e745fdaSopenharmony_ci void LoadPolicyFormPreference(const int32_t userId, sptr<NetFirewallPolicy> &policy); 1438e745fdaSopenharmony_ci bool IsPolicyCacheInvalid(); 1448e745fdaSopenharmony_ci bool IsPolicyCacheOpen(); 1458e745fdaSopenharmony_ci FirewallRuleAction GetPolicyCacheInInternal(); 1468e745fdaSopenharmony_ci FirewallRuleAction GetPolicyCacheOutInternal(); 1478e745fdaSopenharmony_ci 1488e745fdaSopenharmony_ciprivate: 1498e745fdaSopenharmony_ci std::shared_mutex setPolicyMutex_; 1508e745fdaSopenharmony_ci std::shared_ptr<NetFirewallPreferenceHelper> preferencesHelper_ = nullptr; 1518e745fdaSopenharmony_ci // Cache the current state 1528e745fdaSopenharmony_ci std::atomic<int32_t> currentUserId_ = 0; 1538e745fdaSopenharmony_ci sptr<NetFirewallPolicy> currentFirewallPolicy_ = nullptr; 1548e745fdaSopenharmony_ci}; 1558e745fdaSopenharmony_ci} // namespace NetManagerStandard 1568e745fdaSopenharmony_ci} // namespace OHOS 1578e745fdaSopenharmony_ci#endif /* NET_FIREWALL_POLICY_MANAGER_H */ 158