diff options
Diffstat (limited to 'src/MetalinkParserStateV4Impl.cc')
| -rw-r--r-- | src/MetalinkParserStateV4Impl.cc | 237 |
1 files changed, 117 insertions, 120 deletions
diff --git a/src/MetalinkParserStateV4Impl.cc b/src/MetalinkParserStateV4Impl.cc index ee9edf88..43fdeec0 100644 --- a/src/MetalinkParserStateV4Impl.cc +++ b/src/MetalinkParserStateV4Impl.cc @@ -53,26 +53,23 @@ bool checkNsUri(const char* nsUri) } } // namespace -void MetalinkMetalinkParserStateV4::beginElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - const std::vector<XmlAttr>& attrs) +void MetalinkMetalinkParserStateV4::beginElement( + MetalinkParserStateMachine* psm, const char* localname, const char* prefix, + const char* nsUri, const std::vector<XmlAttr>& attrs) { - if(checkNsUri(nsUri) && strcmp(localname, "file") != 0) { + if (checkNsUri(nsUri) && strcmp(localname, "file") != 0) { psm->setSkipTagState(); return; } psm->setFileStateV4(); auto itr = findAttr(attrs, "name", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing file@name"); return; } std::string name((*itr).value, (*itr).valueLength); - if(util::detectDirTraversal(name)) { + if (util::detectDirTraversal(name)) { psm->logError("Bad file@name"); return; } @@ -80,31 +77,35 @@ void MetalinkMetalinkParserStateV4::beginElement psm->setFileNameOfEntry(name); } -void FileMetalinkParserStateV4::beginElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - const std::vector<XmlAttr>& attrs) +void FileMetalinkParserStateV4::beginElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + const std::vector<XmlAttr>& attrs) { - if(!checkNsUri(nsUri)) { + if (!checkNsUri(nsUri)) { psm->setSkipTagState(); - } else if(strcmp(localname, "size") == 0) { + } + else if (strcmp(localname, "size") == 0) { psm->setSizeStateV4(); - } else if(strcmp(localname, "version") == 0) { + } + else if (strcmp(localname, "version") == 0) { psm->setVersionStateV4(); - } else if(strcmp(localname, "language") == 0) { + } + else if (strcmp(localname, "language") == 0) { psm->setLanguageStateV4(); - } else if(strcmp(localname, "os") == 0) { + } + else if (strcmp(localname, "os") == 0) { psm->setOSStateV4(); - } else if(strcmp(localname, "metaurl") == 0) { + } + else if (strcmp(localname, "metaurl") == 0) { psm->setMetaurlStateV4(); std::string name; { auto itr = findAttr(attrs, "name", METALINK4_NAMESPACE_URI); - if(itr != attrs.end()) { + if (itr != attrs.end()) { name.assign((*itr).value, (*itr).valueLength); - if(name.empty() || util::detectDirTraversal(name)) { + if (name.empty() || util::detectDirTraversal(name)) { psm->logError("Bad metaurl@name"); return; } @@ -113,14 +114,17 @@ void FileMetalinkParserStateV4::beginElement int priority; { auto itr = findAttr(attrs, "priority", METALINK4_NAMESPACE_URI); - if(itr == attrs.end()) { + if (itr == attrs.end()) { priority = MetalinkResource::getLowestPriority(); - } else if(util::parseIntNoThrow(priority, std::string((*itr).value, (*itr).valueLength))) { - if(priority < 1 || MetalinkResource::getLowestPriority() < priority) { + } + else if (util::parseIntNoThrow( + priority, std::string((*itr).value, (*itr).valueLength))) { + if (priority < 1 || MetalinkResource::getLowestPriority() < priority) { psm->logError("metaurl@priority is out of range"); return; } - } else { + } + else { psm->logError("Bad metaurl@priority"); return; } @@ -128,7 +132,7 @@ void FileMetalinkParserStateV4::beginElement std::string mediatype; { auto itr = findAttr(attrs, "mediatype", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing metaurl@mediatype"); return; } @@ -138,26 +142,30 @@ void FileMetalinkParserStateV4::beginElement psm->setPriorityOfMetaurl(priority); psm->setMediatypeOfMetaurl(mediatype); psm->setNameOfMetaurl(name); - } else if(strcmp(localname, "url") == 0) { + } + else if (strcmp(localname, "url") == 0) { psm->setURLStateV4(); std::string location; { auto itr = findAttr(attrs, "location", METALINK4_NAMESPACE_URI); - if(itr != attrs.end()) { + if (itr != attrs.end()) { location.assign((*itr).value, (*itr).valueLength); } } int priority; { auto itr = findAttr(attrs, "priority", METALINK4_NAMESPACE_URI); - if(itr == attrs.end()) { + if (itr == attrs.end()) { priority = MetalinkResource::getLowestPriority(); - } else if(util::parseIntNoThrow(priority, std::string((*itr).value, (*itr).valueLength))) { - if(priority < 1 || MetalinkResource::getLowestPriority() < priority) { + } + else if (util::parseIntNoThrow( + priority, std::string((*itr).value, (*itr).valueLength))) { + if (priority < 1 || MetalinkResource::getLowestPriority() < priority) { psm->logError("url@priority is out of range"); return; } - } else { + } + else { psm->logError("Bad url@priority"); return; } @@ -166,25 +174,27 @@ void FileMetalinkParserStateV4::beginElement psm->setLocationOfResource(location); psm->setPriorityOfResource(priority); } - else if(strcmp(localname, "hash") == 0) { + else if (strcmp(localname, "hash") == 0) { psm->setHashStateV4(); auto itr = findAttr(attrs, "type", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing hash@type"); return; } psm->newChecksumTransaction(); psm->setTypeOfChecksum(std::string((*itr).value, (*itr).valueLength)); - } else if(strcmp(localname, "pieces") == 0) { + } + else if (strcmp(localname, "pieces") == 0) { psm->setPiecesStateV4(); uint32_t length; { auto itr = findAttr(attrs, "length", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing pieces@length"); return; } - if(!util::parseUIntNoThrow(length, std::string((*itr).value, (*itr).valueLength))) { + if (!util::parseUIntNoThrow( + length, std::string((*itr).value, (*itr).valueLength))) { psm->logError("Bad pieces@length"); return; } @@ -192,7 +202,7 @@ void FileMetalinkParserStateV4::beginElement std::string type; { auto itr = findAttr(attrs, "type", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing pieces@type"); return; } @@ -202,150 +212,137 @@ void FileMetalinkParserStateV4::beginElement psm->setLengthOfChunkChecksumV4(length); psm->setTypeOfChunkChecksumV4(type); } - else if(strcmp(localname, "signature") == 0) { + else if (strcmp(localname, "signature") == 0) { psm->setSignatureStateV4(); auto itr = findAttr(attrs, "mediatype", METALINK4_NAMESPACE_URI); - if(itr == attrs.end() || (*itr).valueLength == 0) { + if (itr == attrs.end() || (*itr).valueLength == 0) { psm->logError("Missing signature@mediatype"); return; } psm->newSignatureTransaction(); psm->setTypeOfSignature(std::string((*itr).value, (*itr).valueLength)); - } else { + } + else { psm->setSkipTagState(); } } -void FileMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void FileMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->commitEntryTransaction(); } -void SizeMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void SizeMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { int64_t size; - if(util::parseLLIntNoThrow(size, characters) && size >= 0 && - size <= std::numeric_limits<a2_off_t>::max()) { + if (util::parseLLIntNoThrow(size, characters) && size >= 0 && + size <= std::numeric_limits<a2_off_t>::max()) { psm->setFileLengthOfEntry(size); - } else { + } + else { psm->cancelEntryTransaction(); psm->logError("Bad size"); } } -void VersionMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void VersionMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->setVersionOfEntry(std::move(characters)); } -void LanguageMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void LanguageMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->setLanguageOfEntry(std::move(characters)); } -void OSMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void OSMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, const char* nsUri, + std::string characters) { psm->setOSOfEntry(std::move(characters)); } -void HashMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void HashMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->setHashOfChecksum(std::move(characters)); psm->commitChecksumTransaction(); } -void PiecesMetalinkParserStateV4::beginElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - const std::vector<XmlAttr>& attrs) +void PiecesMetalinkParserStateV4::beginElement( + MetalinkParserStateMachine* psm, const char* localname, const char* prefix, + const char* nsUri, const std::vector<XmlAttr>& attrs) { - if(checkNsUri(nsUri) && strcmp(localname, "hash") == 0) { + if (checkNsUri(nsUri) && strcmp(localname, "hash") == 0) { psm->setPieceHashStateV4(); - } else { + } + else { psm->setSkipTagState(); } } -void PiecesMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void PiecesMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->commitChunkChecksumTransactionV4(); } -void PieceHashMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void PieceHashMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->addHashOfChunkChecksumV4(std::move(characters)); } -void SignatureMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void SignatureMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->setBodyOfSignature(std::move(characters)); psm->commitSignatureTransaction(); } -void URLMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void URLMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, const char* nsUri, + std::string characters) { psm->setURLOfResource(std::move(characters)); psm->commitResourceTransaction(); } -void MetaurlMetalinkParserStateV4::endElement -(MetalinkParserStateMachine* psm, - const char* localname, - const char* prefix, - const char* nsUri, - std::string characters) +void MetaurlMetalinkParserStateV4::endElement(MetalinkParserStateMachine* psm, + const char* localname, + const char* prefix, + const char* nsUri, + std::string characters) { psm->setURLOfMetaurl(std::move(characters)); psm->commitMetaurlTransaction(); |
