Răsfoiți Sursa

2010-06-20 Tatsuhiro Tsujikawa <[email protected]>

	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
Tatsuhiro Tsujikawa 15 ani în urmă
părinte
comite
9e9fb885d9

+ 14 - 0
ChangeLog

@@ -1,3 +1,17 @@
+2010-06-20  Tatsuhiro Tsujikawa  <[email protected]>
+
+	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  <[email protected]>
 
 	Included util.h

+ 1 - 2
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<SharedHandle<Peer> > peers;
-      PeerListProcessor().extractPeer(peerData, std::back_inserter(peers));
+      bittorrent::extractPeer(peerData, std::back_inserter(peers));
       _peerStorage->addPeer(peers);
     }
   }

+ 0 - 1
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\

+ 10 - 12
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 \

+ 0 - 118
src/PeerListProcessor.h

@@ -1,118 +0,0 @@
-/* <!-- copyright */
-/*
- * aria2 - The high speed download utility
- *
- * Copyright (C) 2006 Tatsuhiro Tsujikawa
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
- *
- * In addition, as a special exception, the copyright holders give
- * permission to link the code of portions of this program with the
- * OpenSSL library under certain conditions as described in each
- * individual source file, and distribute linked combinations
- * including the two.
- * You must obey the GNU General Public License in all respects
- * for all of the code used other than OpenSSL.  If you modify
- * file(s) with this exception, you may extend this exception to your
- * version of the file(s), but you are not obligated to do so.  If you
- * do not wish to do so, delete this exception statement from your
- * version.  If you delete this exception statement from all source
- * files in the program, then also delete it here.
- */
-/* copyright --> */
-#ifndef _D_PEER_LIST_PROCESSOR_H_
-#define _D_PEER_LIST_PROCESSOR_H_
-
-#include "common.h"
-
-#include <cstring>
-
-#include "a2netcompat.h"
-#include "Peer.h"
-#include "ValueBase.h"
-
-namespace aria2 {
-
-class PeerListProcessor {
-public:
-  template<typename OutputIterator>
-  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<Peer>(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<Peer>(new Peer(ip->s(), port->i()));
-          ++dest_;
-        }
-      }
-
-      virtual void visit(const Dict& v) {}
-    };
-    if(peerData) {
-      PeerListValueBaseVisitor visitor(dest);
-      peerData->accept(visitor);
-    }
-  }
-
-  template<typename OutputIterator>
-  void extractPeer(const SharedHandle<ValueBase>& peerData, OutputIterator dest)
-  {
-    return extractPeer(peerData.get(), dest);
-  }
-};
-
-} // namespace aria2
-
-#endif // _D_PEER_LIST_PROCESSOR_H_

+ 2 - 4
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<ValueBase> 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;

+ 0 - 2
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"
 

+ 69 - 2
src/bittorrent_helper.h

@@ -37,14 +37,16 @@
 
 #include "common.h"
 
+#include <cstring>
 #include <string>
 #include <vector>
 #include <utility>
 
 #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<TorrentAttribute>& attrs);
 
+template<typename OutputIterator>
+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<Peer>(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<Peer>(new Peer(ip->s(), port->i()));
+        ++dest_;
+      }
+    }
+
+    virtual void visit(const Dict& v) {}
+  };
+  if(peerData) {
+    PeerListValueBaseVisitor visitor(dest);
+    peerData->accept(visitor);
+  }
+}
+
+template<typename OutputIterator>
+void extractPeer(const SharedHandle<ValueBase>& peerData, OutputIterator dest)
+{
+  return extractPeer(peerData.get(), dest);
+}
+
 } // namespace bittorrent
 
 } // namespace aria2

+ 41 - 0
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<ValueBase> dict = bencode2::decode(peersString);
+  
+  std::deque<SharedHandle<Peer> > peers;
+  extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers));
+  CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size());
+  SharedHandle<Peer> 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<ValueBase> dict = bencode2::decode(peersString);
+
+  std::deque<SharedHandle<Peer> > peers;
+  extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers));
+  CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size());
+  SharedHandle<Peer> 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

+ 0 - 1
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\

+ 2 - 6
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@

+ 0 - 70
test/PeerListProcessorTest.cc

@@ -1,70 +0,0 @@
-#include "PeerListProcessor.h"
-
-#include <cstdlib>
-
-#include <cppunit/extensions/HelperMacros.h>
-
-#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<ValueBase> dict = bencode2::decode(peersString);
-  
-  std::deque<SharedHandle<Peer> > peers;
-  proc.extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers));
-  CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size());
-  SharedHandle<Peer> 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<ValueBase> dict = bencode2::decode(peersString);
-
-  std::deque<SharedHandle<Peer> > peers;
-  proc.extractPeer(asDict(dict)->get("peers"), std::back_inserter(peers));
-  CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size());
-  SharedHandle<Peer> 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