• 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     for (xmlNodePtr subNode = node->children; subNode != nullptr; subNode = subNode->next) {
41         std::string tagName = GetNodeValue(subNode);
42         if (tagName == TAG_SCAN_CONTROL) {
43             GetPackageMap(subNode, mScanControlFilterMap);
44         } else if (tagName == TAG_CANDIDATE_FILTER) {
45             GetPackageList(subNode, mCandidateFilterList);
46         } else if (tagName == TAG_CORE_PACKAGEINFO) {
47             GetPackageMap(subNode, mCorePackageMap);
48         } else if (tagName == TAG_ACL_AUTH) {
49             GetPackageList(subNode, mAclAuthList);
50         } else {
51             WIFI_LOGI("unknow package tag.");
52         }
53     }
54     return true;
55 }
56 
GetPackageMap(xmlNodePtr & innode,std::map<std::string,std::vector<PackageInfo>> & result)57 void PackageXmlParser::GetPackageMap(xmlNodePtr &innode, std::map<std::string, std::vector<PackageInfo>> &result)
58 {
59     for (xmlNodePtr node = innode->children; node != nullptr; node = node->next) {
60         std::string tagName = GetNodeValue(node);
61         std::vector<PackageInfo> packageNodeList;
62         GetPackageList(node, packageNodeList);
63         result.insert_or_assign(tagName, packageNodeList);
64     }
65     WIFI_LOGI("%{public}s out,result size:%{public}d!", __FUNCTION__, (int)result.size());
66 }
67 
GetPackageList(xmlNodePtr & innode,std::vector<PackageInfo> & packageNodeList)68 void PackageXmlParser::GetPackageList(xmlNodePtr &innode, std::vector<PackageInfo> &packageNodeList)
69 {
70     for (xmlNodePtr node = innode->children; node != nullptr; node = node->next) {
71         PackageInfo info;
72         ParseFinalNode(node, info);
73         if (!info.name.empty()) {
74             packageNodeList.emplace_back(info);
75         }
76     }
77 }
78 
ParseFinalNode(xmlNodePtr & innode,PackageInfo & info)79 void PackageXmlParser::ParseFinalNode(xmlNodePtr &innode, PackageInfo &info)
80 {
81     xmlChar* name = xmlGetProp(innode, BAD_CAST(PARAM_NAME));
82     if (name != nullptr) {
83         info.name = std::string(reinterpret_cast<char *>(name));
84         xmlFree(name);
85     }
86     xmlChar* appid = xmlGetProp(innode, BAD_CAST(PARAM_APPID));
87     if (appid != nullptr) {
88         info.appid = std::string(reinterpret_cast<char *>(appid));
89         xmlFree(appid);
90     }
91 }
92 
GetScanControlPackages(std::map<std::string,std::vector<PackageInfo>> & packageMap)93 void PackageXmlParser::GetScanControlPackages(std::map<std::string, std::vector<PackageInfo>> &packageMap)
94 {
95     packageMap = mScanControlFilterMap;
96 }
97 
GetCandidateFilterPackages(std::vector<PackageInfo> & packageList)98 void PackageXmlParser::GetCandidateFilterPackages(std::vector<PackageInfo> &packageList)
99 {
100     packageList = mCandidateFilterList;
101 }
102 
GetCorePackages(std::map<std::string,std::vector<PackageInfo>> & packageMap)103 void PackageXmlParser::GetCorePackages(std::map<std::string, std::vector<PackageInfo>> &packageMap)
104 {
105     packageMap = mCorePackageMap;
106 }
107 
GetAclAuthPackages(std::vector<PackageInfo> & packageList)108 void PackageXmlParser::GetAclAuthPackages(std::vector<PackageInfo> &packageList)
109 {
110     packageList = mAclAuthList;
111 }
112 }
113 }