From 9e9fb885d9b70299d24beabd2b7a574199edace0 Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sun, 20 Jun 2010 12:12:18 +0000 Subject: [PATCH] 2010-06-20 Tatsuhiro Tsujikawa Removed PeerListProcessor. Its functionality is now moved to bittorrent_helper.h * src/DefaultBtAnnounce.cc * src/Makefile.am * src/PeerListProcessor.h: Removed * src/UTPexExtensionMessage.cc * src/bittorrent_helper.cc * src/bittorrent_helper.h * test/BittorrentHelperTest.cc * test/Makefile.am * test/PeerListProcessorTest.cc: Removed --- ChangeLog | 14 ++++ src/DefaultBtAnnounce.cc | 3 +- src/Makefile.am | 1 - src/Makefile.in | 22 +++---- src/PeerListProcessor.h | 118 ---------------------------------- src/UTPexExtensionMessage.cc | 6 +- src/bittorrent_helper.cc | 2 - src/bittorrent_helper.h | 71 +++++++++++++++++++- test/BittorrentHelperTest.cc | 41 ++++++++++++ test/Makefile.am | 1 - test/Makefile.in | 8 +-- test/PeerListProcessorTest.cc | 70 -------------------- 12 files changed, 139 insertions(+), 218 deletions(-) delete mode 100644 src/PeerListProcessor.h delete mode 100644 test/PeerListProcessorTest.cc diff --git a/ChangeLog b/ChangeLog index f76d95a7..006b7e72 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,17 @@ +2010-06-20 Tatsuhiro Tsujikawa + + Removed PeerListProcessor. Its functionality is now moved to + bittorrent_helper.h + * src/DefaultBtAnnounce.cc + * src/Makefile.am + * src/PeerListProcessor.h: Removed + * src/UTPexExtensionMessage.cc + * src/bittorrent_helper.cc + * src/bittorrent_helper.h + * test/BittorrentHelperTest.cc + * test/Makefile.am + * test/PeerListProcessorTest.cc: Removed + 2010-06-20 Tatsuhiro Tsujikawa Included util.h diff --git a/src/DefaultBtAnnounce.cc b/src/DefaultBtAnnounce.cc index 416bb0c7..f9bb0deb 100644 --- a/src/DefaultBtAnnounce.cc +++ b/src/DefaultBtAnnounce.cc @@ -35,7 +35,6 @@ #include "DefaultBtAnnounce.h" #include "LogFactory.h" #include "Logger.h" -#include "PeerListProcessor.h" #include "util.h" #include "prefs.h" #include "DlAbortEx.h" @@ -277,7 +276,7 @@ DefaultBtAnnounce::processAnnounceResponse(const unsigned char* trackerResponse, } else { if(!_btRuntime->isHalt() && _btRuntime->lessThanMinPeers()) { std::vector > peers; - PeerListProcessor().extractPeer(peerData, std::back_inserter(peers)); + bittorrent::extractPeer(peerData, std::back_inserter(peers)); _peerStorage->addPeer(peers); } } diff --git a/src/Makefile.am b/src/Makefile.am index 8b1c475c..2632de62 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -293,7 +293,6 @@ SRCS += PeerAbstractCommand.cc PeerAbstractCommand.h\ ShareRatioSeedCriteria.h\ UnionSeedCriteria.h\ SeedCheckCommand.cc SeedCheckCommand.h\ - PeerListProcessor.h\ AnnounceTier.h\ AnnounceList.h AnnounceList.cc\ PeerStorage.h\ diff --git a/src/Makefile.in b/src/Makefile.in index 2b713a64..a49dd613 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -89,7 +89,6 @@ bin_PROGRAMS = aria2c$(EXEEXT) @ENABLE_BITTORRENT_TRUE@ ShareRatioSeedCriteria.h\ @ENABLE_BITTORRENT_TRUE@ UnionSeedCriteria.h\ @ENABLE_BITTORRENT_TRUE@ SeedCheckCommand.cc SeedCheckCommand.h\ -@ENABLE_BITTORRENT_TRUE@ PeerListProcessor.h\ @ENABLE_BITTORRENT_TRUE@ AnnounceTier.h\ @ENABLE_BITTORRENT_TRUE@ AnnounceList.h AnnounceList.cc\ @ENABLE_BITTORRENT_TRUE@ PeerStorage.h\ @@ -479,17 +478,16 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \ PeerChokeCommand.cc PeerChokeCommand.h SeedCriteria.h \ TimeSeedCriteria.h ShareRatioSeedCriteria.h \ UnionSeedCriteria.h SeedCheckCommand.cc SeedCheckCommand.h \ - PeerListProcessor.h AnnounceTier.h AnnounceList.h \ - AnnounceList.cc PeerStorage.h DefaultPeerStorage.cc \ - DefaultPeerStorage.h BtAnnounce.cc BtAnnounce.h \ - DefaultBtAnnounce.cc DefaultBtAnnounce.h BtRuntime.h \ - BtMessage.h AbstractBtMessage.cc AbstractBtMessage.h \ - SimpleBtMessage.cc SimpleBtMessage.h BtAllowedFastMessage.cc \ - BtAllowedFastMessage.h BtBitfieldMessage.cc \ - BtBitfieldMessage.h BtCancelMessage.cc BtCancelMessage.h \ - BtChokeMessage.cc BtChokeMessage.h BtHaveAllMessage.cc \ - BtHaveAllMessage.h BtHaveMessage.cc BtHaveMessage.h \ - BtHaveNoneMessage.cc BtHaveNoneMessage.h \ + AnnounceTier.h AnnounceList.h AnnounceList.cc PeerStorage.h \ + DefaultPeerStorage.cc DefaultPeerStorage.h BtAnnounce.cc \ + BtAnnounce.h DefaultBtAnnounce.cc DefaultBtAnnounce.h \ + BtRuntime.h BtMessage.h AbstractBtMessage.cc \ + AbstractBtMessage.h SimpleBtMessage.cc SimpleBtMessage.h \ + BtAllowedFastMessage.cc BtAllowedFastMessage.h \ + BtBitfieldMessage.cc BtBitfieldMessage.h BtCancelMessage.cc \ + BtCancelMessage.h BtChokeMessage.cc BtChokeMessage.h \ + BtHaveAllMessage.cc BtHaveAllMessage.h BtHaveMessage.cc \ + BtHaveMessage.h BtHaveNoneMessage.cc BtHaveNoneMessage.h \ BtInterestedMessage.cc BtInterestedMessage.h \ BtKeepAliveMessage.cc BtKeepAliveMessage.h \ BtNotInterestedMessage.cc BtNotInterestedMessage.h \ diff --git a/src/PeerListProcessor.h b/src/PeerListProcessor.h deleted file mode 100644 index 530778af..00000000 --- a/src/PeerListProcessor.h +++ /dev/null @@ -1,118 +0,0 @@ -/* */ -#ifndef _D_PEER_LIST_PROCESSOR_H_ -#define _D_PEER_LIST_PROCESSOR_H_ - -#include "common.h" - -#include - -#include "a2netcompat.h" -#include "Peer.h" -#include "ValueBase.h" - -namespace aria2 { - -class PeerListProcessor { -public: - template - void extractPeer(const ValueBase* peerData, OutputIterator dest) - { - class PeerListValueBaseVisitor:public ValueBaseVisitor { - private: - OutputIterator dest_; - public: - PeerListValueBaseVisitor(OutputIterator dest):dest_(dest) {} - - virtual ~PeerListValueBaseVisitor() {} - - virtual void visit(const String& peerData) - { - size_t length = peerData.s().size(); - if(length%6 == 0) { - const char* base = peerData.s().data(); - for(size_t i = 0; i < length; i += 6) { - struct in_addr in; - memcpy(&in.s_addr, base+i, sizeof(uint32_t)); - std::string ipaddr = inet_ntoa(in); - uint16_t port_nworder; - memcpy(&port_nworder, base+i+4, sizeof(uint16_t)); - uint16_t port = ntohs(port_nworder); - *dest_ = SharedHandle(new Peer(ipaddr, port)); - ++dest_; - } - } - } - - virtual void visit(const Integer& v) {} - - virtual void visit(const List& peerData) - { - for(List::ValueType::const_iterator itr = peerData.begin(), - eoi = peerData.end(); itr != eoi; ++itr) { - const Dict* peerDict = asDict(*itr); - if(!peerDict) { - continue; - } - static const std::string IP = "ip"; - static const std::string PORT = "port"; - const String* ip = asString(peerDict->get(IP)); - const Integer* port = asInteger(peerDict->get(PORT)); - if(!ip || !port || !(0 < port->i() && port->i() < 65536)) { - continue; - } - *dest_ = SharedHandle(new Peer(ip->s(), port->i())); - ++dest_; - } - } - - virtual void visit(const Dict& v) {} - }; - if(peerData) { - PeerListValueBaseVisitor visitor(dest); - peerData->accept(visitor); - } - } - - template - void extractPeer(const SharedHandle& peerData, OutputIterator dest) - { - return extractPeer(peerData.get(), dest); - } -}; - -} // namespace aria2 - -#endif // _D_PEER_LIST_PROCESSOR_H_ diff --git a/src/UTPexExtensionMessage.cc b/src/UTPexExtensionMessage.cc index d31621a9..1975e5f6 100644 --- a/src/UTPexExtensionMessage.cc +++ b/src/UTPexExtensionMessage.cc @@ -37,7 +37,6 @@ #include "util.h" #include "bittorrent_helper.h" #include "PeerStorage.h" -#include "PeerListProcessor.h" #include "DlAbortEx.h" #include "message.h" #include "StringFormat.h" @@ -161,14 +160,13 @@ UTPexExtensionMessage::create(const unsigned char* data, size_t len) SharedHandle decoded = bencode2::decode(data+1, len-1); const Dict* dict = asDict(decoded); if(dict) { - PeerListProcessor proc; const String* added = asString(dict->get("added")); if(added) { - proc.extractPeer(added, std::back_inserter(msg->_freshPeers)); + bittorrent::extractPeer(added, std::back_inserter(msg->_freshPeers)); } const String* dropped = asString(dict->get("dropped")); if(dropped) { - proc.extractPeer(dropped, std::back_inserter(msg->_droppedPeers)); + bittorrent::extractPeer(dropped, std::back_inserter(msg->_droppedPeers)); } } return msg; diff --git a/src/bittorrent_helper.cc b/src/bittorrent_helper.cc index 7a83469c..2754c6c3 100644 --- a/src/bittorrent_helper.cc +++ b/src/bittorrent_helper.cc @@ -47,13 +47,11 @@ #include "BtConstants.h" #include "messageDigest.h" #include "MessageDigestHelper.h" -#include "SimpleRandomizer.h" #include "a2netcompat.h" #include "BtConstants.h" #include "bitfield.h" #include "base32.h" #include "magnet.h" -#include "ValueBase.h" #include "bencode2.h" #include "TorrentAttribute.h" diff --git a/src/bittorrent_helper.h b/src/bittorrent_helper.h index 487b24e3..2ed34c27 100644 --- a/src/bittorrent_helper.h +++ b/src/bittorrent_helper.h @@ -37,14 +37,16 @@ #include "common.h" +#include #include #include #include #include "SharedHandle.h" -#include "AnnounceTier.h" -#include "util.h" #include "TorrentAttribute.h" +#include "a2netcompat.h" +#include "Peer.h" +#include "ValueBase.h" namespace aria2 { @@ -213,6 +215,71 @@ std::string metadata2Torrent // Constructs BitTorrent Magnet URI using attrs. std::string torrent2Magnet(const SharedHandle& attrs); +template +void extractPeer(const ValueBase* peerData, OutputIterator dest) +{ + class PeerListValueBaseVisitor:public ValueBaseVisitor { + private: + OutputIterator dest_; + public: + PeerListValueBaseVisitor(OutputIterator dest):dest_(dest) {} + + virtual ~PeerListValueBaseVisitor() {} + + virtual void visit(const String& peerData) + { + size_t length = peerData.s().size(); + if(length%6 == 0) { + const char* base = peerData.s().data(); + for(size_t i = 0; i < length; i += 6) { + struct in_addr in; + memcpy(&in.s_addr, base+i, sizeof(uint32_t)); + std::string ipaddr = inet_ntoa(in); + uint16_t port_nworder; + memcpy(&port_nworder, base+i+4, sizeof(uint16_t)); + uint16_t port = ntohs(port_nworder); + *dest_ = SharedHandle(new Peer(ipaddr, port)); + ++dest_; + } + } + } + + virtual void visit(const Integer& v) {} + + virtual void visit(const List& peerData) + { + for(List::ValueType::const_iterator itr = peerData.begin(), + eoi = peerData.end(); itr != eoi; ++itr) { + const Dict* peerDict = asDict(*itr); + if(!peerDict) { + continue; + } + static const std::string IP = "ip"; + static const std::string PORT = "port"; + const String* ip = asString(peerDict->get(IP)); + const Integer* port = asInteger(peerDict->get(PORT)); + if(!ip || !port || !(0 < port->i() && port->i() < 65536)) { + continue; + } + *dest_ = SharedHandle(new Peer(ip->s(), port->i())); + ++dest_; + } + } + + virtual void visit(const Dict& v) {} + }; + if(peerData) { + PeerListValueBaseVisitor visitor(dest); + peerData->accept(visitor); + } +} + +template +void extractPeer(const SharedHandle& peerData, OutputIterator dest) +{ + return extractPeer(peerData.get(), dest); +} + } // namespace bittorrent } // namespace aria2 diff --git a/test/BittorrentHelperTest.cc b/test/BittorrentHelperTest.cc index 4ed5430b..b3a60cfb 100644 --- a/test/BittorrentHelperTest.cc +++ b/test/BittorrentHelperTest.cc @@ -63,6 +63,8 @@ class BittorrentHelperTest:public CppUnit::TestFixture { CPPUNIT_TEST(testParseMagnet_base32); CPPUNIT_TEST(testMetadata2Torrent); CPPUNIT_TEST(testTorrent2Magnet); + CPPUNIT_TEST(testExtractPeerFromList); + CPPUNIT_TEST(testExtract2PeersFromList); CPPUNIT_TEST_SUITE_END(); public: void setUp() { @@ -106,6 +108,8 @@ public: void testParseMagnet_base32(); void testMetadata2Torrent(); void testTorrent2Magnet(); + void testExtractPeerFromList(); + void testExtract2PeersFromList(); }; @@ -756,6 +760,43 @@ void BittorrentHelperTest::testTorrent2Magnet() torrent2Magnet(getTorrentAttrs(dctx))); } +void BittorrentHelperTest::testExtractPeerFromList() +{ + std::string peersString = + "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-00000000000000" + "4:porti2006eeee"; + + SharedHandle dict = bencode2::decode(peersString); + + std::deque > peers; + extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); + CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size()); + SharedHandle peer = *peers.begin(); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)2006, peer->getPort()); +} + +void BittorrentHelperTest::testExtract2PeersFromList() +{ + std::string peersString = + "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-00000000000000" + "4:porti65535eed2:ip11:192.168.0.27:peer id20:aria2-00000000000000" + "4:porti2007eeee"; + + SharedHandle dict = bencode2::decode(peersString); + + std::deque > peers; + extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); + CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size()); + SharedHandle peer = *peers.begin(); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)65535, peer->getPort()); + + peer = *(peers.begin()+1); + CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.2"), peer->getIPAddress()); + CPPUNIT_ASSERT_EQUAL((uint16_t)2007, peer->getPort()); +} + } // namespace bittorrent } // namespace aria2 diff --git a/test/Makefile.am b/test/Makefile.am index b916b6a2..9e7d42cb 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -124,7 +124,6 @@ aria2c_SOURCES += BtAllowedFastMessageTest.cc\ MockBtMessage.h\ MockBtMessageDispatcher.h\ MockBtMessageFactory.h\ - PeerListProcessorTest.cc\ AnnounceListTest.cc\ DefaultPeerStorageTest.cc\ MockPeerStorage.h\ diff --git a/test/Makefile.in b/test/Makefile.in index 8eac9720..546e2dde 100644 --- a/test/Makefile.in +++ b/test/Makefile.in @@ -73,7 +73,6 @@ check_PROGRAMS = $(am__EXEEXT_1) @ENABLE_BITTORRENT_TRUE@ MockBtMessage.h\ @ENABLE_BITTORRENT_TRUE@ MockBtMessageDispatcher.h\ @ENABLE_BITTORRENT_TRUE@ MockBtMessageFactory.h\ -@ENABLE_BITTORRENT_TRUE@ PeerListProcessorTest.cc\ @ENABLE_BITTORRENT_TRUE@ AnnounceListTest.cc\ @ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.cc\ @ENABLE_BITTORRENT_TRUE@ MockPeerStorage.h\ @@ -233,9 +232,8 @@ am__aria2c_SOURCES_DIST = AllTest.cc TestUtil.cc TestUtil.h \ DefaultBtMessageDispatcherTest.cc \ DefaultBtRequestFactoryTest.cc MockBtMessage.h \ MockBtMessageDispatcher.h MockBtMessageFactory.h \ - PeerListProcessorTest.cc AnnounceListTest.cc \ - DefaultPeerStorageTest.cc MockPeerStorage.h \ - ByteArrayDiskWriterTest.cc PeerTest.cc \ + AnnounceListTest.cc DefaultPeerStorageTest.cc \ + MockPeerStorage.h ByteArrayDiskWriterTest.cc PeerTest.cc \ PeerSessionResourceTest.cc ShareRatioSeedCriteriaTest.cc \ BtRegistryTest.cc BtDependencyTest.cc \ BtPostDownloadHandlerTest.cc TimeSeedCriteriaTest.cc \ @@ -308,7 +306,6 @@ am__aria2c_SOURCES_DIST = AllTest.cc TestUtil.cc TestUtil.h \ @ENABLE_BITTORRENT_TRUE@ DefaultBtAnnounceTest.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DefaultBtMessageDispatcherTest.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DefaultBtRequestFactoryTest.$(OBJEXT) \ -@ENABLE_BITTORRENT_TRUE@ PeerListProcessorTest.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ AnnounceListTest.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.$(OBJEXT) \ @ENABLE_BITTORRENT_TRUE@ ByteArrayDiskWriterTest.$(OBJEXT) \ @@ -858,7 +855,6 @@ distclean-compile: @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/OptionTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PStringBuildVisitorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ParameterizedStringParserTest.Po@am__quote@ -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerListProcessorTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerSessionResourceTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerTest.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PieceStatManTest.Po@am__quote@ diff --git a/test/PeerListProcessorTest.cc b/test/PeerListProcessorTest.cc deleted file mode 100644 index 616aa9e9..00000000 --- a/test/PeerListProcessorTest.cc +++ /dev/null @@ -1,70 +0,0 @@ -#include "PeerListProcessor.h" - -#include - -#include - -#include "Exception.h" -#include "Peer.h" -#include "TimeA2.h" -#include "bencode2.h" - -namespace aria2 { - -class PeerListProcessorTest:public CppUnit::TestFixture { - - CPPUNIT_TEST_SUITE(PeerListProcessorTest); - CPPUNIT_TEST(testExtractPeerFromList); - CPPUNIT_TEST(testExtract2PeersFromList); - CPPUNIT_TEST_SUITE_END(); -private: - -public: - void setUp() { - } - - void testExtractPeerFromList(); - void testExtract2PeersFromList(); -}; - - -CPPUNIT_TEST_SUITE_REGISTRATION( PeerListProcessorTest ); - -void PeerListProcessorTest::testExtractPeerFromList() { - PeerListProcessor proc; - std::string peersString = - "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-00000000000000" - "4:porti2006eeee"; - - SharedHandle dict = bencode2::decode(peersString); - - std::deque > peers; - proc.extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); - CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size()); - SharedHandle peer = *peers.begin(); - CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); - CPPUNIT_ASSERT_EQUAL((uint16_t)2006, peer->getPort()); -} - -void PeerListProcessorTest::testExtract2PeersFromList() { - PeerListProcessor proc; - std::string peersString = - "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-00000000000000" - "4:porti65535eed2:ip11:192.168.0.27:peer id20:aria2-00000000000000" - "4:porti2007eeee"; - - SharedHandle dict = bencode2::decode(peersString); - - std::deque > peers; - proc.extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers)); - CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size()); - SharedHandle peer = *peers.begin(); - CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.1"), peer->getIPAddress()); - CPPUNIT_ASSERT_EQUAL((uint16_t)65535, peer->getPort()); - - peer = *(peers.begin()+1); - CPPUNIT_ASSERT_EQUAL(std::string("192.168.0.2"), peer->getIPAddress()); - CPPUNIT_ASSERT_EQUAL((uint16_t)2007, peer->getPort()); -} - -} // namespace aria2