1 /* 2 * Copyright (c) 2025-2026 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 #ifndef NETWORKSLICEMANAGER_H 17 #define NETWORKSLICEMANAGER_H 18 19 #include <cstdint> 20 #include <string> 21 #include <vector> 22 #include "event_handler.h" 23 #include "nrunsolicitedmsgparser.h" 24 #include "singleton.h" 25 #include "networkslicemsgcenter.h" 26 #include "networkslice_service_base.h" 27 #include "networkslicecommconfig.h" 28 #include "broadcast_proxy.h" 29 namespace OHOS { 30 namespace NetManagerStandard { 31 32 const int32_t INVALID_FOREGROUND_UID = -1; 33 class NetworkSliceManager : public NetworkSliceServiceBase { 34 DECLARE_DELAYED_SINGLETON(NetworkSliceManager); 35 public: 36 std::vector<ForbiddenRouteDescriptor> mNormalForbiddenRules; 37 bool mIsIpParaReportEnable = false; 38 bool mApnStartflag = true; 39 void OnInit() override;; 40 void ProcessEvent(const AppExecFwk::InnerEvent::Pointer &event) override; 41 void ProcessEventEx(const AppExecFwk::InnerEvent::Pointer& event); 42 void InitUePolicy(); 43 void HandleForegroundAppChanged(const std::shared_ptr<AppExecFwk::AppStateData>& msg); 44 void HandleUrspChanged(const std::shared_ptr<std::map<std::string, std::string>>& msg); 45 void HandleSimStateChanged(); 46 void HandleUrspFromUnsolData(const std::shared_ptr<std::vector<uint8_t>>& buffer); 47 void HandleIpRpt(const std::shared_ptr<std::vector<uint8_t>>& msg); 48 void HandleAllowedNssaiFromUnsolData(const std::shared_ptr<std::vector<uint8_t>>& msg); 49 void HandleEhplmnFromUnsolData(const std::shared_ptr<std::vector<uint8_t>>& msg); 50 void SendUrspUpdateMsg(); 51 void GetRouteSelectionDescriptorByAppDescriptor(const std::shared_ptr<GetSlicePara>& getSlicePara); 52 bool isMeetNetworkSliceConditions(); 53 void NotifySlicePara(const std::shared_ptr<GetSlicePara>& getSlicePara); 54 bool GetAppDescriptor(std::map<std::string, std::string>& data, AppDescriptor& appDescriptor); 55 void SetAppId(AppDescriptor& appDescriptor, const std::vector<std::string>& values, const std::string& appId); 56 void FillRouteSelectionDescriptor(std::map<std::string, std::string>& ret, 57 SelectedRouteDescriptor routeRule); 58 bool isSaState(); 59 bool hasAvailableUrspRule(); 60 bool isNrSlicesSupported(); 61 bool isDefaultDataOnMainCard(); 62 bool isWifiConnected(); 63 bool isScreenOn(); 64 bool isAirPlaneModeOn(); 65 bool isInVpnMode(); 66 void SetSaState(bool isSaState); 67 bool isRouteRuleInForbiddenList(const SelectedRouteDescriptor& routeRule); 68 void HandleIpv4Rpt(int& startIndex, const std::vector<uint8_t>& buffer, 69 std::map<std::string, std::string>& bundle, AppDescriptor& appDescriptor); 70 void HandleIpv6Rpt(int& startIndex, const std::vector<uint8_t>& buffer, 71 std::map<std::string, std::string>& bundle, AppDescriptor& appDescriptor); 72 void DumpAppDescriptor(AppDescriptor appDescriptor); 73 void DumpSelectedRouteDescriptor(SelectedRouteDescriptor routeRule); 74 void IpParaReportControl(); 75 void BindProcessToNetworkByFullPara(std::shared_ptr<std::map<std::string, std::string>> msg); 76 bool GetUidRoutePara(AddRoutePara& addRoutePara, std::map<std::string, std::string>& data); 77 bool GetRoutePara(AddRoutePara& addRoutePara, std::map<std::string, std::string>& data); 78 void GetRouteParaEx(AddRoutePara& addRoutePara, std::map<std::string, std::string>& data); 79 bool CalculateParaLen(AddRoutePara& addRoutePara); 80 bool FillRoutePara(std::vector<uint8_t>& buffer, AddRoutePara addRoutePara); 81 void DeleteNetworkBindByFullPara(std::shared_ptr<std::map<std::string, std::string>> msg); 82 void FillDeletePara(short len, int type, std::vector<int> precedenceArray, std::vector<int> uidArrays, 83 std::map<std::string, std::string> data); 84 std::vector<int> GetUidArray(std::string uids); 85 std::vector<int> GetPrecedenceArray(std::string precedences); 86 void CloseTcpSocketsForUid(int uid); 87 void SendIpPara(AppDescriptor appDescriptor, std::map<std::string, std::string> bundle); 88 void onUrspAvailableStateChanged(); 89 int32_t BindUidProcessToNetworkForDns(int netid, int uid); 90 bool isCanRequestNetwork(); 91 void HandleAirModeChanged(int32_t mode); 92 void HandleWifiConnChanged(int32_t state); 93 void HandleVpnModeChanged(bool mode); 94 bool isMobileDataClose(); 95 void HandleScreenOn(); 96 void HandleScreenOff(); 97 int32_t GetForeGroundAppUid(); 98 void GetRouteSelectionDescriptorByDNN(const std::string dnn, std::string& snssai, uint8_t& sscmode); 99 private: 100 int32_t foregroundApp_uid = INVALID_FOREGROUND_UID; 101 bool mIsUrspFirstReported = false; 102 bool airModeOn_ { false }; 103 bool wifiConn_ { false }; 104 bool vpnMode_ { false }; 105 bool screenOn_ { false }; 106 bool isSaState_ { false }; 107 }; 108 109 extern std::shared_ptr<NrUnsolicitedMsgParser> sNrUnsolicitedMsgParser_; 110 extern std::shared_ptr<UrspConfig> sUrspConfig_; 111 112 113 } // namespace NetManagerStandard 114 } // namespace OHOS 115 116 #endif // NETWORKSLICEMANAGER_H 117