/* */ #ifndef _D_METALINK_PARSER_STATE_MACHINE_H_ #define _D_METALINK_PARSER_STATE_MACHINE_H_ #include "common.h" #include "SharedHandle.h" #include #include namespace aria2 { class MetalinkParserController; class MetalinkParserState; class SkipTagMetalinkParserState; class Metalinker; class MetalinkParserStateMachine { private: SharedHandle _ctrl; MetalinkParserState* _state; static MetalinkParserState* _initialState; static MetalinkParserState* _metalinkState; static MetalinkParserState* _filesState; static MetalinkParserState* _fileState; static MetalinkParserState* _sizeState; static MetalinkParserState* _versionState; static MetalinkParserState* _languageState; static MetalinkParserState* _osState; static MetalinkParserState* _verificationState; static MetalinkParserState* _hashState; static MetalinkParserState* _piecesState; static MetalinkParserState* _pieceHashState; static MetalinkParserState* _resourcesState; static MetalinkParserState* _urlState; static MetalinkParserState* _finState; SkipTagMetalinkParserState* _skipTagState; public: MetalinkParserStateMachine(); ~MetalinkParserStateMachine(); void setMetalinkState(); void setFilesState(); void setFileState(); void setSizeState(); void setVersionState(); void setLanguageState(); void setOSState(); void setVerificationState(); void setHashState(); void setPiecesState(); void setPieceHashState(); void setResourcesState(); void setURLState(); void setFinState(); void setSkipTagState(MetalinkParserState* prevSate); void restoreSavedState(); bool finished() const; bool error() const; void beginElement(const std::string& name, const std::map& attrs); void endElement(const std::string& name, const std::string& characters); void newEntryTransaction(); void setFileNameOfEntry(const std::string& filename); void setFileLengthOfEntry(int64_t length); void setVersionOfEntry(const std::string& version); void setLanguageOfEntry(const std::string& language); void setOSOfEntry(const std::string& os); void setMaxConnectionsOfEntry(int32_t maxConnections); void commitEntryTransaction(); void newResourceTransaction(); void setURLOfResource(const std::string& url); void setTypeOfResource(const std::string& type); void setLocationOfResource(const std::string& location); void setPreferenceOfResource(int32_t preference); void setMaxConnectionsOfResource(int32_t maxConnections); void commitResourceTransaction(); void cancelResourceTransaction(); void newChecksumTransaction(); void setTypeOfChecksum(const std::string& type); void setHashOfChecksum(const std::string& md); void commitChecksumTransaction(); void cancelChecksumTransaction(); void newChunkChecksumTransaction(); void setLengthOfChunkChecksum(int32_t length); void setTypeOfChunkChecksum(const std::string& type); void createNewHashOfChunkChecksum(int32_t order); void setMessageDigestOfChunkChecksum(const std::string& md); void addHashOfChunkChecksum(); void commitChunkChecksumTransaction(); void cancelChunkChecksumTransaction(); SharedHandle getResult() const; }; } // namespace aria2 #endif // _D_METALINK_PARSER_STATE_MACHINE_H_