/* */ #include "VerificationMetalinkParserState.h" #include "MetalinkParserStateMachine.h" #include "DlAbortEx.h" #include "Util.h" namespace aria2 { const std::string VerificationMetalinkParserState::HASH("hash"); const std::string VerificationMetalinkParserState::TYPE("type"); const std::string VerificationMetalinkParserState::PIECES("pieces"); const std::string VerificationMetalinkParserState::LENGTH("length"); void VerificationMetalinkParserState::beginElement(MetalinkParserStateMachine* stm, const std::string& name, const std::map& attrs) { if(name == VerificationMetalinkParserState::HASH) { stm->setHashState(); std::map::const_iterator itr = attrs.find(VerificationMetalinkParserState::TYPE); if(itr == attrs.end()) { return; } else { std::string type = (*itr).second; stm->newChecksumTransaction(); stm->setTypeOfChecksum(type); } } else if(name == VerificationMetalinkParserState::PIECES) { stm->setPiecesState(); try { size_t length; { std::map::const_iterator itr = attrs.find(VerificationMetalinkParserState::LENGTH); if(itr == attrs.end()) { return; } else { length = Util::parseInt((*itr).second); } } std::string type; { std::map::const_iterator itr = attrs.find(VerificationMetalinkParserState::TYPE); if(itr == attrs.end()) { return; } else { type = (*itr).second; } } stm->newChunkChecksumTransaction(); stm->setLengthOfChunkChecksum(length); stm->setTypeOfChunkChecksum(type); } catch(RecoverableException& e) { stm->cancelChunkChecksumTransaction(); } } else { stm->setSkipTagState(this); } } void VerificationMetalinkParserState::endElement(MetalinkParserStateMachine* stm, const std::string& name, const std::string& characters) { stm->setFileState(); } } // namespace aria2