mirror of https://github.com/aria2/aria2
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Use BDE instead of Dictionary/List/Data. * src/AnnounceList.cc * src/AnnounceList.h * test/AnnounceListTest.ccpull/1/head
parent
9202fe23c8
commit
9614ee2fef
|
@ -1,3 +1,10 @@
|
||||||
|
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Use BDE instead of Dictionary/List/Data.
|
||||||
|
* src/AnnounceList.cc
|
||||||
|
* src/AnnounceList.h
|
||||||
|
* test/AnnounceListTest.cc
|
||||||
|
|
||||||
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2008-12-14 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Use BDE instead of Dictionary/List/Data.
|
Use BDE instead of Dictionary/List/Data.
|
||||||
|
|
|
@ -36,10 +36,9 @@
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
|
|
||||||
#include "List.h"
|
|
||||||
#include "Data.h"
|
|
||||||
#include "A2STR.h"
|
#include "A2STR.h"
|
||||||
#include "SimpleRandomizer.h"
|
#include "SimpleRandomizer.h"
|
||||||
|
#include "bencode.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -49,9 +48,9 @@ const std::string AnnounceList::STOPPED("stopped");
|
||||||
|
|
||||||
const std::string AnnounceList::COMPLETED("completed");
|
const std::string AnnounceList::COMPLETED("completed");
|
||||||
|
|
||||||
AnnounceList::AnnounceList(const MetaEntry* announceListEntry):
|
AnnounceList::AnnounceList(const bencode::BDE& announceList):
|
||||||
currentTrackerInitialized(false) {
|
currentTrackerInitialized(false) {
|
||||||
reconfigure(announceListEntry);
|
reconfigure(announceList);
|
||||||
}
|
}
|
||||||
|
|
||||||
AnnounceList::AnnounceList(const AnnounceTiers& announceTiers):
|
AnnounceList::AnnounceList(const AnnounceTiers& announceTiers):
|
||||||
|
@ -59,24 +58,24 @@ AnnounceList::AnnounceList(const AnnounceTiers& announceTiers):
|
||||||
resetIterator();
|
resetIterator();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnnounceList::reconfigure(const MetaEntry* announceListEntry) {
|
void AnnounceList::reconfigure(const bencode::BDE& announceList)
|
||||||
const List* l = dynamic_cast<const List*>(announceListEntry);
|
{
|
||||||
if(l) {
|
if(announceList.isList()) {
|
||||||
for(std::deque<MetaEntry*>::const_iterator itr = l->getList().begin();
|
for(bencode::BDE::List::const_iterator itr = announceList.listBegin();
|
||||||
itr != l->getList().end(); itr++) {
|
itr != announceList.listEnd(); ++itr) {
|
||||||
const List* elem = dynamic_cast<const List*>(*itr);
|
const bencode::BDE& elemList = *itr;
|
||||||
if(!elem) {
|
if(!elemList.isList()) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
std::deque<std::string> urls;
|
std::deque<std::string> urls;
|
||||||
for(std::deque<MetaEntry*>::const_iterator elemItr = elem->getList().begin();
|
for(bencode::BDE::List::const_iterator elemItr = elemList.listBegin();
|
||||||
elemItr != elem->getList().end(); elemItr++) {
|
elemItr != elemList.listEnd(); ++elemItr) {
|
||||||
const Data* data = dynamic_cast<const Data*>(*elemItr);
|
const bencode::BDE& data = *elemItr;
|
||||||
if(data) {
|
if(data.isString()) {
|
||||||
urls.push_back(data->toString());
|
urls.push_back(data.s());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(urls.size()) {
|
if(!urls.empty()) {
|
||||||
AnnounceTierHandle tier(new AnnounceTier(urls));
|
AnnounceTierHandle tier(new AnnounceTier(urls));
|
||||||
tiers.push_back(tier);
|
tiers.push_back(tier);
|
||||||
}
|
}
|
||||||
|
|
|
@ -41,7 +41,9 @@
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
class MetaEntry;
|
namespace bencode {
|
||||||
|
class BDE;
|
||||||
|
} // namespace bencode
|
||||||
|
|
||||||
class AnnounceList {
|
class AnnounceList {
|
||||||
public:
|
public:
|
||||||
|
@ -55,10 +57,10 @@ private:
|
||||||
void setCurrentTier(const std::deque<SharedHandle<AnnounceTier> >::iterator& itr);
|
void setCurrentTier(const std::deque<SharedHandle<AnnounceTier> >::iterator& itr);
|
||||||
public:
|
public:
|
||||||
AnnounceList():currentTrackerInitialized(false) {}
|
AnnounceList():currentTrackerInitialized(false) {}
|
||||||
AnnounceList(const MetaEntry* announceListEntry);
|
AnnounceList(const bencode::BDE& announceList);
|
||||||
AnnounceList(const std::deque<SharedHandle<AnnounceTier> >& tiers);
|
AnnounceList(const std::deque<SharedHandle<AnnounceTier> >& tiers);
|
||||||
|
|
||||||
void reconfigure(const MetaEntry* announceListEntry);
|
void reconfigure(const bencode::BDE& announceList);
|
||||||
void reconfigure(const std::string& url);
|
void reconfigure(const std::string& url);
|
||||||
|
|
||||||
size_t countTier() const {
|
size_t countTier() const {
|
||||||
|
|
|
@ -1,9 +1,10 @@
|
||||||
#include "AnnounceList.h"
|
#include "AnnounceList.h"
|
||||||
#include "MetaFileUtil.h"
|
|
||||||
#include "Exception.h"
|
|
||||||
#include "List.h"
|
|
||||||
#include <cppunit/extensions/HelperMacros.h>
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
|
#include "Exception.h"
|
||||||
|
#include "bencode.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
class AnnounceListTest:public CppUnit::TestFixture {
|
class AnnounceListTest:public CppUnit::TestFixture {
|
||||||
|
@ -43,12 +44,11 @@ CPPUNIT_TEST_SUITE_REGISTRATION( AnnounceListTest );
|
||||||
|
|
||||||
void AnnounceListTest::testSingleElementList() {
|
void AnnounceListTest::testSingleElementList() {
|
||||||
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
CPPUNIT_ASSERT(!announceList.allTiersFailed());
|
CPPUNIT_ASSERT(!announceList.allTiersFailed());
|
||||||
std::string url = announceList.getAnnounce();
|
std::string url = announceList.getAnnounce();
|
||||||
|
@ -90,12 +90,11 @@ void AnnounceListTest::testSingleElementList() {
|
||||||
|
|
||||||
void AnnounceListTest::testMultiElementList() {
|
void AnnounceListTest::testMultiElementList() {
|
||||||
std::string peersString = "ll8:tracker18:tracker28:tracker3ee";
|
std::string peersString = "ll8:tracker18:tracker28:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1, tracker2, tracker3 ] ]
|
// [ [ tracker1, tracker2, tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
CPPUNIT_ASSERT(!announceList.allTiersFailed());
|
CPPUNIT_ASSERT(!announceList.allTiersFailed());
|
||||||
std::string url = announceList.getAnnounce();
|
std::string url = announceList.getAnnounce();
|
||||||
|
@ -124,12 +123,11 @@ void AnnounceListTest::testMultiElementList() {
|
||||||
|
|
||||||
void AnnounceListTest::testSingleAndMulti() {
|
void AnnounceListTest::testSingleAndMulti() {
|
||||||
std::string peersString = "ll8:tracker18:tracker2el8:tracker3ee";
|
std::string peersString = "ll8:tracker18:tracker2el8:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1, tracker2 ], [ tracker3 ] ]
|
// [ [ tracker1, tracker2 ], [ tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
std::string url = announceList.getAnnounce();
|
std::string url = announceList.getAnnounce();
|
||||||
CPPUNIT_ASSERT_EQUAL(std::string("tracker1"), url);
|
CPPUNIT_ASSERT_EQUAL(std::string("tracker1"), url);
|
||||||
|
@ -151,22 +149,20 @@ void AnnounceListTest::testSingleAndMulti() {
|
||||||
|
|
||||||
void AnnounceListTest::testNoGroup() {
|
void AnnounceListTest::testNoGroup() {
|
||||||
std::string peersString = "llee";
|
std::string peersString = "llee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
CPPUNIT_ASSERT(announceList.countTier() == 0);
|
CPPUNIT_ASSERT(announceList.countTier() == 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AnnounceListTest::testNextEventIfAfterStarted() {
|
void AnnounceListTest::testNextEventIfAfterStarted() {
|
||||||
std::string peersString = "ll8:tracker1ee";
|
std::string peersString = "ll8:tracker1ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1 ] ]
|
// [ [ tracker1 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
announceList.setEvent(AnnounceTier::STOPPED);
|
announceList.setEvent(AnnounceTier::STOPPED);
|
||||||
announceList.announceFailure();
|
announceList.announceFailure();
|
||||||
announceList.resetTier();
|
announceList.resetTier();
|
||||||
|
@ -182,12 +178,11 @@ void AnnounceListTest::testNextEventIfAfterStarted() {
|
||||||
|
|
||||||
void AnnounceListTest::testEvent() {
|
void AnnounceListTest::testEvent() {
|
||||||
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
announceList.setEvent(AnnounceTier::STOPPED);
|
announceList.setEvent(AnnounceTier::STOPPED);
|
||||||
announceList.announceSuccess();
|
announceList.announceSuccess();
|
||||||
|
@ -207,12 +202,11 @@ void AnnounceListTest::testEvent() {
|
||||||
|
|
||||||
void AnnounceListTest::testCountStoppedAllowedTier() {
|
void AnnounceListTest::testCountStoppedAllowedTier() {
|
||||||
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countStoppedAllowedTier());
|
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countStoppedAllowedTier());
|
||||||
announceList.setEvent(AnnounceTier::STARTED);
|
announceList.setEvent(AnnounceTier::STARTED);
|
||||||
|
@ -235,12 +229,11 @@ void AnnounceListTest::testCountStoppedAllowedTier() {
|
||||||
|
|
||||||
void AnnounceListTest::testCountCompletedAllowedTier() {
|
void AnnounceListTest::testCountCompletedAllowedTier() {
|
||||||
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
std::string peersString = "ll8:tracker1el8:tracker2el8:tracker3ee";
|
||||||
SharedHandle<List> announces
|
const bencode::BDE announcesList = bencode::decode(peersString);
|
||||||
(dynamic_cast<List*>(MetaFileUtil::bdecoding(peersString)));
|
|
||||||
|
|
||||||
// ANNOUNCE_LIST
|
// ANNOUNCE_LIST
|
||||||
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
// [ [ tracker1 ], [ tracker2 ], [ tracker3 ] ]
|
||||||
AnnounceList announceList(announces.get());
|
AnnounceList announceList(announcesList);
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countCompletedAllowedTier());
|
CPPUNIT_ASSERT_EQUAL((size_t)0, announceList.countCompletedAllowedTier());
|
||||||
announceList.setEvent(AnnounceTier::STARTED);
|
announceList.setEvent(AnnounceTier::STARTED);
|
||||||
|
|
Loading…
Reference in New Issue