From 3880a5f71b1ffde3779b3cad3519e150341bfda7 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Thu, 25 Feb 2010 14:40:18 +0000 Subject: 2010-02-25 Tatsuhiro Tsujikawa Added Metalink4 support. Currently, name attribute of metalink::metaurl is ignored and multi-file torrent cannot be used with Metalink4. * doc/aria2c.1.txt * src/DownloadHandlerConstants.cc * src/ExpatMetalinkProcessor.cc * src/Makefile.am * src/Metalink2RequestGroup.cc * src/MetalinkEntry.cc * src/MetalinkEntry.h * src/MetalinkParserController.cc * src/MetalinkParserController.h * src/MetalinkParserState.h * src/MetalinkParserStateImpl.cc * src/MetalinkParserStateImpl.h * src/MetalinkParserStateMachine.cc * src/MetalinkParserStateMachine.h * src/MetalinkParserStateV3Impl.cc * src/MetalinkParserStateV3Impl.h * src/MetalinkParserStateV4Impl.cc * src/MetalinkParserStateV4Impl.h * src/MetalinkResource.cc * src/MetalinkResource.h * src/Metalinker.cc * src/RequestGroup.cc * src/RequestGroup.h * src/XML2SAXMetalinkProcessor.cc * src/messageDigest.cc * src/util.cc * src/util.h * test/Makefile.am * test/MetalinkEntryTest.cc * test/MetalinkParserControllerTest.cc * test/MetalinkProcessorTest.cc * test/MetalinkerTest.cc * test/UtilTest.cc * test/metalink4-attrs.xml * test/metalink4-dirtraversal.xml * test/metalink4.xml --- src/MetalinkParserStateMachine.cc | 135 +++++++++++++++++++++++++++++++++++--- 1 file changed, 126 insertions(+), 9 deletions(-) (limited to 'src/MetalinkParserStateMachine.cc') diff --git a/src/MetalinkParserStateMachine.cc b/src/MetalinkParserStateMachine.cc index 18f5adad..ef67237a 100644 --- a/src/MetalinkParserStateMachine.cc +++ b/src/MetalinkParserStateMachine.cc @@ -34,6 +34,8 @@ /* copyright --> */ #include "MetalinkParserStateMachine.h" #include "MetalinkParserStateImpl.h" +#include "MetalinkParserStateV3Impl.h" +#include "MetalinkParserStateV4Impl.h" #include "Metalinker.h" #include "MetalinkEntry.h" @@ -41,6 +43,9 @@ namespace aria2 { MetalinkParserState* MetalinkParserStateMachine::_initialState = new InitialMetalinkParserState(); +MetalinkParserState* MetalinkParserStateMachine::_skipTagState = + new SkipTagMetalinkParserState(); + MetalinkParserState* MetalinkParserStateMachine::_metalinkState = new MetalinkMetalinkParserState(); MetalinkParserState* MetalinkParserStateMachine::_filesState = @@ -69,8 +74,29 @@ MetalinkParserState* MetalinkParserStateMachine::_resourcesState = new ResourcesMetalinkParserState(); MetalinkParserState* MetalinkParserStateMachine::_urlState = new URLMetalinkParserState(); -MetalinkParserState* MetalinkParserStateMachine::_skipTagState = - new SkipTagMetalinkParserState(); + +MetalinkParserState* MetalinkParserStateMachine::_metalinkStateV4 = + new MetalinkMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_fileStateV4 = + new FileMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_sizeStateV4 = + new SizeMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_versionStateV4 = + new VersionMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_languageStateV4 = + new LanguageMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_osStateV4 = + new OSMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_hashStateV4 = + new HashMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_piecesStateV4 = + new PiecesMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_pieceHashStateV4 = + new PieceHashMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_signatureStateV4 = + new SignatureMetalinkParserStateV4(); +MetalinkParserState* MetalinkParserStateMachine::_urlStateV4 = + new URLMetalinkParserStateV4(); MetalinkParserStateMachine::MetalinkParserStateMachine(): _ctrl(new MetalinkParserController()) @@ -148,6 +174,61 @@ void MetalinkParserStateMachine::setURLState() _stateStack.push(_urlState); } +void MetalinkParserStateMachine::setMetalinkStateV4() +{ + _stateStack.push(_metalinkStateV4); +} + +void MetalinkParserStateMachine::setFileStateV4() +{ + _stateStack.push(_fileStateV4); +} + +void MetalinkParserStateMachine::setSizeStateV4() +{ + _stateStack.push(_sizeStateV4); +} + +void MetalinkParserStateMachine::setVersionStateV4() +{ + _stateStack.push(_versionStateV4); +} + +void MetalinkParserStateMachine::setLanguageStateV4() +{ + _stateStack.push(_languageStateV4); +} + +void MetalinkParserStateMachine::setOSStateV4() +{ + _stateStack.push(_osStateV4); +} + +void MetalinkParserStateMachine::setHashStateV4() +{ + _stateStack.push(_hashStateV4); +} + +void MetalinkParserStateMachine::setPiecesStateV4() +{ + _stateStack.push(_piecesStateV4); +} + +void MetalinkParserStateMachine::setPieceHashStateV4() +{ + _stateStack.push(_pieceHashStateV4); +} + +void MetalinkParserStateMachine::setSignatureStateV4() +{ + _stateStack.push(_signatureStateV4); +} + +void MetalinkParserStateMachine::setURLStateV4() +{ + _stateStack.push(_urlStateV4); +} + void MetalinkParserStateMachine::setSkipTagState() { _stateStack.push(_skipTagState); @@ -219,9 +300,9 @@ void MetalinkParserStateMachine::setLocationOfResource _ctrl->setLocationOfResource(location); } -void MetalinkParserStateMachine::setPreferenceOfResource(int preference) +void MetalinkParserStateMachine::setPriorityOfResource(int priority) { - _ctrl->setPreferenceOfResource(preference); + _ctrl->setPriorityOfResource(priority); } void MetalinkParserStateMachine::setMaxConnectionsOfResource(int maxConnections) @@ -264,6 +345,37 @@ void MetalinkParserStateMachine::cancelChecksumTransaction() _ctrl->cancelChecksumTransaction(); } +void MetalinkParserStateMachine::newChunkChecksumTransactionV4() +{ + _ctrl->newChunkChecksumTransactionV4(); +} + +void MetalinkParserStateMachine::setLengthOfChunkChecksumV4(size_t length) +{ + _ctrl->setLengthOfChunkChecksumV4(length); +} + +void MetalinkParserStateMachine::setTypeOfChunkChecksumV4 +(const std::string& type) +{ + _ctrl->setTypeOfChunkChecksumV4(type); +} + +void MetalinkParserStateMachine::addHashOfChunkChecksumV4(const std::string& md) +{ + _ctrl->addHashOfChunkChecksumV4(md); +} + +void MetalinkParserStateMachine::commitChunkChecksumTransactionV4() +{ + _ctrl->commitChunkChecksumTransactionV4(); +} + +void MetalinkParserStateMachine::cancelChunkChecksumTransactionV4() +{ + _ctrl->cancelChunkChecksumTransactionV4(); +} + void MetalinkParserStateMachine::newChunkChecksumTransaction() { _ctrl->newChunkChecksumTransaction(); @@ -336,16 +448,21 @@ void MetalinkParserStateMachine::cancelSignatureTransaction() } void MetalinkParserStateMachine::beginElement -(const std::string& name, - const std::map& attrs) +(const std::string& localname, + const std::string& prefix, + const std::string& nsUri, + const std::vector& attrs) { - _stateStack.top()->beginElement(this, name, attrs); + _stateStack.top()->beginElement(this, localname, prefix, nsUri, attrs); } void MetalinkParserStateMachine::endElement -(const std::string& name, const std::string& characters) +(const std::string& localname, + const std::string& prefix, + const std::string& nsUri, + const std::string& characters) { - _stateStack.top()->endElement(this, name, characters); + _stateStack.top()->endElement(this, localname, prefix, nsUri, characters); _stateStack.pop(); } -- cgit