• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 "package_parser.h"
17 #include "wifi_logger.h"
18 
19 namespace OHOS {
20 namespace Wifi {
21 DEFINE_WIFILOG_LABEL("PackageXmlParser");
22 
~PackageXmlParser()23 PackageXmlParser::~PackageXmlParser()
24 {}
25 
ParseInternal(xmlNodePtr node)26 bool PackageXmlParser::ParseInternal(xmlNodePtr node)
27 {
28     if (node == nullptr) {
29         WIFI_LOGE("ParseInternal node null");
30         return false;
31     }
32     if (xmlStrcmp(node->name, BAD_CAST(TAG_HEADER)) != 0) {
33         WIFI_LOGE("node name=%{public}s not equal WifiPackages", node->name);
34         return false;
35     }
36     mScanControlFilterMap.clear();
37     mCandidateFilterList.clear();
38     mCorePackageMap.clear();
39     mAclAuthList.clear();
40     mScanLimitPackage_.clear();
41     mLandscapeSwitchLimitList_.clear();
42     for (xmlNodePtr subNode = node->children; subNode != nullptr; subNode = subNode->next) {
43         std::string tagName = GetNodeValue(subNode);
44         if (tagName == TAG_SCAN_CONTROL) {
45             GetPackageMap(subNode, mScanControlFilterMap);
46         } else if (tagName == TAG_CANDIDATE_FILTER) {
47             GetPackageList(subNode, mCandidateFilterList);
48         } else if (tagName == TAG_CORE_PACKAGEINFO) {
49             GetPackageMap(subNode, mCorePackageMap);
50         } else if (tagName == TAG_ACL_AUTH) {
51             GetPackageList(subNode, mAclAuthList);
52         } else if (tagName == TAG_SCAN_LIMIT) {
53             GetPackageList(subNode, mScanLimitPackage_);
54         } else if (tagName == TAG_LANDSCAPE_SWITCH_LIMIT) {
55             GetPackageList(subNode, mLandscapeSwitchLimitList_);
56         } else {
57             WIFI_LOGI("unknow package tag.");
58         }
59     }
60     return true;
61 }
62 
GetPackageMap(xmlNodePtr & innode,std::map<std::string,std::vector<PackageInfo>> & result)63 void PackageXmlParser::GetPackageMap(xmlNodePtr &innode, std::map<std::string, std::vector<PackageInfo>> &result)
64 {
65     for (xmlNodePtr node = innode->children; node != nullptr; node = node->next) {
66         std::string tagName = GetNodeValue(node);
67         std::vector<PackageInfo> packageNodeList;
68         GetPackageList(node, packageNodeList);
69         result.insert_or_assign(tagName, packageNodeList);
70     }
71     WIFI_LOGI("%{public}s out,result size:%{public}d!", __FUNCTION__, (int)result.size());
72 }
73 
GetPackageList(xmlNodePtr & innode,std::vector<PackageInfo> & packageNodeList)74 void PackageXmlParser::GetPackageList(xmlNodePtr &innode, std::vector<PackageInfo> &packageNodeList)
75 {
76     for (xmlNodePtr node = innode->children; node != nullptr; node = node->next) {
77         PackageInfo info;
78         ParseFinalNode(node, info);
79         if (!info.name.empty()) {
80             packageNodeList.emplace_back(info);
81         }
82     }
83 }
84 
ParseFinalNode(xmlNodePtr & innode,PackageInfo & info)85 void PackageXmlParser::ParseFinalNode(xmlNodePtr &innode, PackageInfo &info)
86 {
87     xmlChar* name = xmlGetProp(innode, BAD_CAST(PARAM_NAME));
88     if (name != nullptr) {
89         info.name = std::string(reinterpret_cast<char *>(name));
90         xmlFree(name);
91     }
92     xmlChar* appid = xmlGetProp(innode, BAD_CAST(PARAM_APPID));
93     if (appid != nullptr) {
94         info.appid = std::string(reinterpret_cast<char *>(appid));
95         xmlFree(appid);
96     }
97 }
98 
GetScanControlPackages(std::map<std::string,std::vector<PackageInfo>> & packageMap)99 void PackageXmlParser::GetScanControlPackages(std::map<std::string, std::vector<PackageInfo>> &packageMap)
100 {
101     packageMap = mScanControlFilterMap;
102 }
103 
GetCandidateFilterPackages(std::vector<PackageInfo> & packageList)104 void PackageXmlParser::GetCandidateFilterPackages(std::vector<PackageInfo> &packageList)
105 {
106     packageList = mCandidateFilterList;
107 }
108 
GetCorePackages(std::map<std::string,std::vector<PackageInfo>> & packageMap)109 void PackageXmlParser::GetCorePackages(std::map<std::string, std::vector<PackageInfo>> &packageMap)
110 {
111     packageMap = mCorePackageMap;
112 }
113 
GetAclAuthPackages(std::vector<PackageInfo> & packageList)114 void PackageXmlParser::GetAclAuthPackages(std::vector<PackageInfo> &packageList)
115 {
116     packageList = mAclAuthList;
117 }
118 
GetScanLimitPackages(std::vector<PackageInfo> & packageList)119 void PackageXmlParser::GetScanLimitPackages(std::vector<PackageInfo> &packageList)
120 {
121     packageList = mScanLimitPackage_;
122 }
123 
GetLandscapeSwitchLimitList(std::vector<PackageInfo> & packageList)124 void PackageXmlParser::GetLandscapeSwitchLimitList(std::vector<PackageInfo> &packageList)
125 {
126     packageList = mLandscapeSwitchLimitList_;
127 }
128 }
129 }