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