/* */ #include "VerificationMetalinkParserState.h" #include "MetalinkParserStateMachine.h" #include "DlAbortEx.h" #include "Util.h" void VerificationMetalinkParserState::beginElement(MetalinkParserStateMachine* stm, const string& name, const map& attrs) { if(name == "hash") { stm->setHashState(); map::const_iterator itr = attrs.find("type"); if(itr == attrs.end()) { return; } else { string type = (*itr).second; stm->newChecksumTransaction(); stm->setTypeOfChecksum(type); } } else if(name == "pieces") { stm->setPiecesState(); try { int32_t length; { map::const_iterator itr = attrs.find("length"); if(itr == attrs.end()) { return; } else { length = Util::parseInt((*itr).second); } } string type; { 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 string& name, const string& characters) { stm->setFileState(); }