fix: fix bug of parsing the portal respponse

This commit is contained in:
Kevin Yue 2022-06-01 23:52:12 +08:00
parent e2d28c83b2
commit cc67de3a2b

View File

@ -93,15 +93,17 @@ void PortalConfigResponse::parseGateway(QXmlStreamReader &reader, GPGateway &gat
auto finished = false; auto finished = false;
while (!finished) { while (!finished) {
if (reader.name() == "entry") { if (reader.name() == "entry" && reader.isStartElement()) {
auto address = reader.attributes().value("name").toString(); auto address = reader.attributes().value("name").toString();
gateway.setAddress(address); gateway.setAddress(address);
} else if (reader.name() == "description") { // gateway name } else if (reader.name() == "description" && reader.isStartElement()) { // gateway name
gateway.setName(reader.readElementText()); gateway.setName(reader.readElementText());
} else if (reader.name() == "priority-rule") { // priority rules } else if (reader.name() == "priority-rule" && reader.isStartElement()) { // priority rules
parsePriorityRule(reader, gateway); parsePriorityRule(reader, gateway);
} }
finished = !reader.readNextStartElement();
auto result = reader.readNext();
finished = result == QXmlStreamReader::Invalid || (reader.name() == "entry" && reader.isEndElement());
} }
} }
@ -113,16 +115,19 @@ void PortalConfigResponse::parsePriorityRule(QXmlStreamReader &reader, GPGateway
while (!finished) { while (!finished) {
// Parse the priority-rule -> entry // Parse the priority-rule -> entry
if (reader.name() == "entry") { if (reader.name() == "entry" && reader.isStartElement()) {
auto ruleName = reader.attributes().value("name").toString(); auto ruleName = reader.attributes().value("name").toString();
// move to the priority value // move to the priority value
while (reader.name() != "priority") { while (reader.readNextStartElement()) {
reader.readNextStartElement(); if (reader.name() == "priority") {
auto priority = reader.readElementText().toInt();
priorityRules.insert(ruleName, priority);
break;
}
} }
auto priority = reader.readElementText().toInt();
priorityRules.insert(ruleName, priority);
} }
finished = !reader.readNextStartElement(); auto result = reader.readNext();
finished = result == QXmlStreamReader::Invalid || (reader.name() == "priority-rule" && reader.isEndElement());
} }
gateway.setPriorityRules(priorityRules); gateway.setPriorityRules(priorityRules);