diff --git a/ChangeLog b/ChangeLog index 730bc14e..ab283267 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,12 @@ +2008-05-14 Tatsuhiro Tsujikawa + + Made string literals for torrent file processing static const + std::string. + * src/BtContext.cc + * src/BtContext.h + * src/DefaultBtContext.cc + * src/DefaultBtContext.h + 2008-05-14 Tatsuhiro Tsujikawa Made string literal for tracker response static const std::string diff --git a/src/BtContext.cc b/src/BtContext.cc new file mode 100644 index 00000000..86bd964c --- /dev/null +++ b/src/BtContext.cc @@ -0,0 +1,65 @@ +/* */ +#include "BtContext.h" + +namespace aria2 { + +const std::string BtContext::NAME("name"); + +const std::string BtContext::FILES("files"); + +const std::string BtContext::LENGTH("length"); + +const std::string BtContext::PATH("path"); + +const std::string BtContext::INFO("info"); + +const std::string BtContext::PIECES("pieces"); + +const std::string BtContext::PIECE_LENGTH("piece length"); + +const std::string BtContext::PRIVATE("private"); + +const std::string BtContext::PRIVATE_ON("1"); + +const std::string BtContext::URL_LIST("url-list"); + +const std::string BtContext::ANNOUNCE("announce"); + +const std::string BtContext::ANNOUNCE_LIST("announce-list"); + +const std::string BtContext::NODES("nodes"); + +} // namespace aria2 diff --git a/src/BtContext.h b/src/BtContext.h index 56ad5cea..1c76855f 100644 --- a/src/BtContext.h +++ b/src/BtContext.h @@ -80,6 +80,33 @@ public: virtual std::deque >& getNodes() = 0; + static const std::string NAME; + + static const std::string FILES; + + static const std::string LENGTH; + + static const std::string PATH; + + static const std::string INFO; + + static const std::string PIECES; + + static const std::string PIECE_LENGTH; + + static const std::string PRIVATE; + + // This is just a string "1". Used as a value of "private" flag. + static const std::string PRIVATE_ON; + + static const std::string URL_LIST; + + static const std::string ANNOUNCE; + + static const std::string ANNOUNCE_LIST; + + static const std::string NODES; + }; class BtContext; diff --git a/src/DefaultBtContext.cc b/src/DefaultBtContext.cc index 22e51ed8..a33a5ab5 100644 --- a/src/DefaultBtContext.cc +++ b/src/DefaultBtContext.cc @@ -58,7 +58,9 @@ namespace aria2 { -DefaultBtContext::DefaultBtContext():_peerIdPrefix("-aria2-"), +const std::string DefaultBtContext::DEFAULT_PEER_ID_PREFIX("-aria2-"); + +DefaultBtContext::DefaultBtContext():_peerIdPrefix(DEFAULT_PEER_ID_PREFIX), _randomizer(SimpleRandomizer::getInstance()), _ownerRequestGroup(0), _logger(LogFactory::getInstance()) {} @@ -113,13 +115,13 @@ void DefaultBtContext::extractPieceHash(const unsigned char* hashData, void DefaultBtContext::extractFileEntries(const Dictionary* infoDic, const std::string& defaultName, const std::deque& urlList) { - const Data* nameData = dynamic_cast(infoDic->get("name")); + const Data* nameData = dynamic_cast(infoDic->get(BtContext::NAME)); if(nameData) { name = nameData->toString(); } else { name = File(defaultName).getBasename()+".file"; } - const List* files = dynamic_cast(infoDic->get("files")); + const List* files = dynamic_cast(infoDic->get(BtContext::FILES)); if(files) { uint64_t length = 0; off_t offset = 0; @@ -132,14 +134,16 @@ void DefaultBtContext::extractFileEntries(const Dictionary* infoDic, if(!fileDic) { continue; } - const Data* lengthData = dynamic_cast(fileDic->get("length")); + const Data* lengthData = + dynamic_cast(fileDic->get(BtContext::LENGTH)); if(lengthData) { length += lengthData->toLLInt(); } else { throw DlAbortEx (StringFormat(MSG_SOMETHING_MISSING_IN_TORRENT, "file length").str()); } - const List* pathList = dynamic_cast(fileDic->get("path")); + const List* pathList = + dynamic_cast(fileDic->get(BtContext::PATH)); if(!pathList) { throw DlAbortEx (StringFormat(MSG_SOMETHING_MISSING_IN_TORRENT, "file path list").str()); @@ -177,7 +181,8 @@ void DefaultBtContext::extractFileEntries(const Dictionary* infoDic, } else { // single-file mode; fileMode = BtContext::SINGLE; - const Data* length = dynamic_cast(infoDic->get("length")); + const Data* length = + dynamic_cast(infoDic->get(BtContext::LENGTH)); if(length) { totalLength = length->toLLInt(); } else { @@ -290,7 +295,8 @@ void DefaultBtContext::load(const std::string& torrentFile) { void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const std::string& defaultName) { clear(); - const Dictionary* infoDic = dynamic_cast(rootDic->get("info")); + const Dictionary* infoDic = + dynamic_cast(rootDic->get(BtContext::INFO)); if(!infoDic) { throw DlAbortEx (StringFormat(MSG_SOMETHING_MISSING_IN_TORRENT, "info directory").str()); @@ -303,7 +309,8 @@ void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const st v.getBencodedData().size()); infoHashString = Util::toHex(infoHash, INFO_HASH_LENGTH); // calculate the number of pieces - const Data* pieceHashData = dynamic_cast(infoDic->get("pieces")); + const Data* pieceHashData = + dynamic_cast(infoDic->get(BtContext::PIECES)); if(!pieceHashData) { throw DlAbortEx (StringFormat(MSG_SOMETHING_MISSING_IN_TORRENT, "pieces").str()); @@ -316,7 +323,8 @@ void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const st throw DlAbortEx("The number of pieces is 0."); } // retrieve piece length - const Data* pieceLengthData = dynamic_cast(infoDic->get("piece length")); + const Data* pieceLengthData = + dynamic_cast(infoDic->get(BtContext::PIECE_LENGTH)); if(!pieceLengthData) { throw DlAbortEx (StringFormat(MSG_SOMETHING_MISSING_IN_TORRENT, "piece length").str()); @@ -325,9 +333,10 @@ void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const st // retrieve piece hashes extractPieceHash(pieceHashData->getData(), pieceHashData->getLen(), PIECE_HASH_LENGTH); - const Data* privateFlag = dynamic_cast(infoDic->get("private")); + const Data* privateFlag = + dynamic_cast(infoDic->get(BtContext::PRIVATE)); if(privateFlag) { - if(privateFlag->toString() == "1") { + if(privateFlag->toString() == BtContext::PRIVATE_ON) { _private = true; } } @@ -335,22 +344,25 @@ void DefaultBtContext::processRootDictionary(const Dictionary* rootDic, const st // This implemantation obeys HTTP-Seeding specification: // see http://www.getright.com/seedtorrent.html std::deque urlList; - extractUrlList(urlList, rootDic->get("url-list")); + extractUrlList(urlList, rootDic->get(BtContext::URL_LIST)); // retrieve file entries extractFileEntries(infoDic, defaultName, urlList); if((totalLength+pieceLength-1)/pieceLength != numPieces) { throw DlAbortEx("Too few/many piece hash."); } // retrieve announce - const Data* announceData = dynamic_cast(rootDic->get("announce")); - const List* announceListData = dynamic_cast(rootDic->get("announce-list")); + const Data* announceData = + dynamic_cast(rootDic->get(BtContext::ANNOUNCE)); + const List* announceListData = + dynamic_cast(rootDic->get(BtContext::ANNOUNCE_LIST)); if(announceListData) { extractAnnounceList(announceListData); } else if(announceData) { extractAnnounce(announceData); } // retrieve nodes - const List* nodes = dynamic_cast(rootDic->get("nodes")); + const List* nodes = + dynamic_cast(rootDic->get(BtContext::NODES)); if(nodes) { extractNodes(nodes); } diff --git a/src/DefaultBtContext.h b/src/DefaultBtContext.h index 224fc8b4..4b0f9a28 100644 --- a/src/DefaultBtContext.h +++ b/src/DefaultBtContext.h @@ -177,6 +177,8 @@ private: void setRandomizer(const SharedHandle& randomizer); friend std::ostream& operator<<(std::ostream& o, const DefaultBtContext& ctx); + + static const std::string DEFAULT_PEER_ID_PREFIX; }; typedef SharedHandle DefaultBtContextHandle; diff --git a/src/Makefile.am b/src/Makefile.am index 0a2e4d2a..9e8624d9 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -232,7 +232,7 @@ SRCS += MetaEntry.h\ DelegatingPeerListProcessor.cc DelegatingPeerListProcessor.h\ AnnounceTier.h\ AnnounceList.h AnnounceList.cc\ - BtContext.h\ + BtContext.cc BtContext.h\ DefaultBtContext.cc DefaultBtContext.h\ PeerStorage.h\ DefaultPeerStorage.cc DefaultPeerStorage.h\ diff --git a/src/Makefile.in b/src/Makefile.in index 56f45efb..ae9baf08 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -76,7 +76,7 @@ bin_PROGRAMS = aria2c$(EXEEXT) @ENABLE_BITTORRENT_TRUE@ DelegatingPeerListProcessor.cc DelegatingPeerListProcessor.h\ @ENABLE_BITTORRENT_TRUE@ AnnounceTier.h\ @ENABLE_BITTORRENT_TRUE@ AnnounceList.h AnnounceList.cc\ -@ENABLE_BITTORRENT_TRUE@ BtContext.h\ +@ENABLE_BITTORRENT_TRUE@ BtContext.cc BtContext.h\ @ENABLE_BITTORRENT_TRUE@ DefaultBtContext.cc DefaultBtContext.h\ @ENABLE_BITTORRENT_TRUE@ PeerStorage.h\ @ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.cc DefaultPeerStorage.h\ @@ -433,7 +433,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ DefaultPeerListProcessor.h CompactPeerListProcessor.cc \ CompactPeerListProcessor.h DelegatingPeerListProcessor.cc \ DelegatingPeerListProcessor.h AnnounceTier.h AnnounceList.h \ - AnnounceList.cc BtContext.h DefaultBtContext.cc \ + AnnounceList.cc BtContext.cc BtContext.h DefaultBtContext.cc \ DefaultBtContext.h PeerStorage.h DefaultPeerStorage.cc \ DefaultPeerStorage.h BtAnnounce.cc BtAnnounce.h \ DefaultBtAnnounce.cc DefaultBtAnnounce.h BtRuntime.h \ @@ -590,6 +590,7 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ @ENABLE_BITTORRENT_TRUE@ CompactPeerListProcessor.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DelegatingPeerListProcessor.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ AnnounceList.$(OBJEXT) \ +@ENABLE_BITTORRENT_TRUE@ BtContext.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DefaultBtContext.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DefaultPeerStorage.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ BtAnnounce.$(OBJEXT) \ @@ -1252,6 +1253,7 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCancelMessage.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtCheckIntegrityEntry.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtChokeMessage.Po@am__quote@ +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtContext.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtContextAwareCommand.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtDependency.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/BtExtendedMessage.Po@am__quote@