/* */ #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"); const std::string VerificationMetalinkParserState::SIGNATURE("signature"); const std::string VerificationMetalinkParserState::FILE("file"); void VerificationMetalinkParserState::beginElement (MetalinkParserStateMachine* stm, const std::string& name, const std::map& attrs) { #ifdef ENABLE_MESSAGE_DIGEST 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 #endif // ENABLE_MESSAGE_DIGEST if(name == VerificationMetalinkParserState::SIGNATURE) { stm->setSignatureState(); std::map::const_iterator itr = attrs.find(VerificationMetalinkParserState::TYPE); if(itr == attrs.end()) { return; } else { stm->newSignatureTransaction(); stm->setTypeOfSignature((*itr).second); std::map::const_iterator itr = attrs.find(VerificationMetalinkParserState::FILE); if(itr != attrs.end()) { stm->setFileOfSignature((*itr).second); } } } else { stm->setSkipTagState(this); } } void VerificationMetalinkParserState::endElement (MetalinkParserStateMachine* stm, const std::string& name, const std::string& characters) { stm->setFileState(); } } // namespace aria2