mirror of https://github.com/aria2/aria2
2010-06-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
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: Removedpull/1/head
parent
ad37c0672c
commit
9e9fb885d9
14
ChangeLog
14
ChangeLog
|
@ -1,3 +1,17 @@
|
||||||
|
2010-06-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
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 <t-tujikawa@users.sourceforge.net>
|
2010-06-20 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Included util.h
|
Included util.h
|
||||||
|
|
|
@ -35,7 +35,6 @@
|
||||||
#include "DefaultBtAnnounce.h"
|
#include "DefaultBtAnnounce.h"
|
||||||
#include "LogFactory.h"
|
#include "LogFactory.h"
|
||||||
#include "Logger.h"
|
#include "Logger.h"
|
||||||
#include "PeerListProcessor.h"
|
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "prefs.h"
|
#include "prefs.h"
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
|
@ -277,7 +276,7 @@ DefaultBtAnnounce::processAnnounceResponse(const unsigned char* trackerResponse,
|
||||||
} else {
|
} else {
|
||||||
if(!_btRuntime->isHalt() && _btRuntime->lessThanMinPeers()) {
|
if(!_btRuntime->isHalt() && _btRuntime->lessThanMinPeers()) {
|
||||||
std::vector<SharedHandle<Peer> > peers;
|
std::vector<SharedHandle<Peer> > peers;
|
||||||
PeerListProcessor().extractPeer(peerData, std::back_inserter(peers));
|
bittorrent::extractPeer(peerData, std::back_inserter(peers));
|
||||||
_peerStorage->addPeer(peers);
|
_peerStorage->addPeer(peers);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -293,7 +293,6 @@ SRCS += PeerAbstractCommand.cc PeerAbstractCommand.h\
|
||||||
ShareRatioSeedCriteria.h\
|
ShareRatioSeedCriteria.h\
|
||||||
UnionSeedCriteria.h\
|
UnionSeedCriteria.h\
|
||||||
SeedCheckCommand.cc SeedCheckCommand.h\
|
SeedCheckCommand.cc SeedCheckCommand.h\
|
||||||
PeerListProcessor.h\
|
|
||||||
AnnounceTier.h\
|
AnnounceTier.h\
|
||||||
AnnounceList.h AnnounceList.cc\
|
AnnounceList.h AnnounceList.cc\
|
||||||
PeerStorage.h\
|
PeerStorage.h\
|
||||||
|
|
|
@ -89,7 +89,6 @@ bin_PROGRAMS = aria2c$(EXEEXT)
|
||||||
@ENABLE_BITTORRENT_TRUE@ ShareRatioSeedCriteria.h\
|
@ENABLE_BITTORRENT_TRUE@ ShareRatioSeedCriteria.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ UnionSeedCriteria.h\
|
@ENABLE_BITTORRENT_TRUE@ UnionSeedCriteria.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ SeedCheckCommand.cc SeedCheckCommand.h\
|
@ENABLE_BITTORRENT_TRUE@ SeedCheckCommand.cc SeedCheckCommand.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerListProcessor.h\
|
|
||||||
@ENABLE_BITTORRENT_TRUE@ AnnounceTier.h\
|
@ENABLE_BITTORRENT_TRUE@ AnnounceTier.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ AnnounceList.h AnnounceList.cc\
|
@ENABLE_BITTORRENT_TRUE@ AnnounceList.h AnnounceList.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerStorage.h\
|
@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 \
|
PeerChokeCommand.cc PeerChokeCommand.h SeedCriteria.h \
|
||||||
TimeSeedCriteria.h ShareRatioSeedCriteria.h \
|
TimeSeedCriteria.h ShareRatioSeedCriteria.h \
|
||||||
UnionSeedCriteria.h SeedCheckCommand.cc SeedCheckCommand.h \
|
UnionSeedCriteria.h SeedCheckCommand.cc SeedCheckCommand.h \
|
||||||
PeerListProcessor.h AnnounceTier.h AnnounceList.h \
|
AnnounceTier.h AnnounceList.h AnnounceList.cc PeerStorage.h \
|
||||||
AnnounceList.cc PeerStorage.h DefaultPeerStorage.cc \
|
DefaultPeerStorage.cc DefaultPeerStorage.h BtAnnounce.cc \
|
||||||
DefaultPeerStorage.h BtAnnounce.cc BtAnnounce.h \
|
BtAnnounce.h DefaultBtAnnounce.cc DefaultBtAnnounce.h \
|
||||||
DefaultBtAnnounce.cc DefaultBtAnnounce.h BtRuntime.h \
|
BtRuntime.h BtMessage.h AbstractBtMessage.cc \
|
||||||
BtMessage.h AbstractBtMessage.cc AbstractBtMessage.h \
|
AbstractBtMessage.h SimpleBtMessage.cc SimpleBtMessage.h \
|
||||||
SimpleBtMessage.cc SimpleBtMessage.h BtAllowedFastMessage.cc \
|
BtAllowedFastMessage.cc BtAllowedFastMessage.h \
|
||||||
BtAllowedFastMessage.h BtBitfieldMessage.cc \
|
BtBitfieldMessage.cc BtBitfieldMessage.h BtCancelMessage.cc \
|
||||||
BtBitfieldMessage.h BtCancelMessage.cc BtCancelMessage.h \
|
BtCancelMessage.h BtChokeMessage.cc BtChokeMessage.h \
|
||||||
BtChokeMessage.cc BtChokeMessage.h BtHaveAllMessage.cc \
|
BtHaveAllMessage.cc BtHaveAllMessage.h BtHaveMessage.cc \
|
||||||
BtHaveAllMessage.h BtHaveMessage.cc BtHaveMessage.h \
|
BtHaveMessage.h BtHaveNoneMessage.cc BtHaveNoneMessage.h \
|
||||||
BtHaveNoneMessage.cc BtHaveNoneMessage.h \
|
|
||||||
BtInterestedMessage.cc BtInterestedMessage.h \
|
BtInterestedMessage.cc BtInterestedMessage.h \
|
||||||
BtKeepAliveMessage.cc BtKeepAliveMessage.h \
|
BtKeepAliveMessage.cc BtKeepAliveMessage.h \
|
||||||
BtNotInterestedMessage.cc BtNotInterestedMessage.h \
|
BtNotInterestedMessage.cc BtNotInterestedMessage.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_
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include "util.h"
|
#include "util.h"
|
||||||
#include "bittorrent_helper.h"
|
#include "bittorrent_helper.h"
|
||||||
#include "PeerStorage.h"
|
#include "PeerStorage.h"
|
||||||
#include "PeerListProcessor.h"
|
|
||||||
#include "DlAbortEx.h"
|
#include "DlAbortEx.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "StringFormat.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);
|
SharedHandle<ValueBase> decoded = bencode2::decode(data+1, len-1);
|
||||||
const Dict* dict = asDict(decoded);
|
const Dict* dict = asDict(decoded);
|
||||||
if(dict) {
|
if(dict) {
|
||||||
PeerListProcessor proc;
|
|
||||||
const String* added = asString(dict->get("added"));
|
const String* added = asString(dict->get("added"));
|
||||||
if(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"));
|
const String* dropped = asString(dict->get("dropped"));
|
||||||
if(dropped) {
|
if(dropped) {
|
||||||
proc.extractPeer(dropped, std::back_inserter(msg->_droppedPeers));
|
bittorrent::extractPeer(dropped, std::back_inserter(msg->_droppedPeers));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return msg;
|
return msg;
|
||||||
|
|
|
@ -47,13 +47,11 @@
|
||||||
#include "BtConstants.h"
|
#include "BtConstants.h"
|
||||||
#include "messageDigest.h"
|
#include "messageDigest.h"
|
||||||
#include "MessageDigestHelper.h"
|
#include "MessageDigestHelper.h"
|
||||||
#include "SimpleRandomizer.h"
|
|
||||||
#include "a2netcompat.h"
|
#include "a2netcompat.h"
|
||||||
#include "BtConstants.h"
|
#include "BtConstants.h"
|
||||||
#include "bitfield.h"
|
#include "bitfield.h"
|
||||||
#include "base32.h"
|
#include "base32.h"
|
||||||
#include "magnet.h"
|
#include "magnet.h"
|
||||||
#include "ValueBase.h"
|
|
||||||
#include "bencode2.h"
|
#include "bencode2.h"
|
||||||
#include "TorrentAttribute.h"
|
#include "TorrentAttribute.h"
|
||||||
|
|
||||||
|
|
|
@ -37,14 +37,16 @@
|
||||||
|
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
|
#include <cstring>
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <vector>
|
#include <vector>
|
||||||
#include <utility>
|
#include <utility>
|
||||||
|
|
||||||
#include "SharedHandle.h"
|
#include "SharedHandle.h"
|
||||||
#include "AnnounceTier.h"
|
|
||||||
#include "util.h"
|
|
||||||
#include "TorrentAttribute.h"
|
#include "TorrentAttribute.h"
|
||||||
|
#include "a2netcompat.h"
|
||||||
|
#include "Peer.h"
|
||||||
|
#include "ValueBase.h"
|
||||||
|
|
||||||
namespace aria2 {
|
namespace aria2 {
|
||||||
|
|
||||||
|
@ -213,6 +215,71 @@ std::string metadata2Torrent
|
||||||
// Constructs BitTorrent Magnet URI using attrs.
|
// Constructs BitTorrent Magnet URI using attrs.
|
||||||
std::string torrent2Magnet(const SharedHandle<TorrentAttribute>& 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 bittorrent
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -63,6 +63,8 @@ class BittorrentHelperTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testParseMagnet_base32);
|
CPPUNIT_TEST(testParseMagnet_base32);
|
||||||
CPPUNIT_TEST(testMetadata2Torrent);
|
CPPUNIT_TEST(testMetadata2Torrent);
|
||||||
CPPUNIT_TEST(testTorrent2Magnet);
|
CPPUNIT_TEST(testTorrent2Magnet);
|
||||||
|
CPPUNIT_TEST(testExtractPeerFromList);
|
||||||
|
CPPUNIT_TEST(testExtract2PeersFromList);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
public:
|
public:
|
||||||
void setUp() {
|
void setUp() {
|
||||||
|
@ -106,6 +108,8 @@ public:
|
||||||
void testParseMagnet_base32();
|
void testParseMagnet_base32();
|
||||||
void testMetadata2Torrent();
|
void testMetadata2Torrent();
|
||||||
void testTorrent2Magnet();
|
void testTorrent2Magnet();
|
||||||
|
void testExtractPeerFromList();
|
||||||
|
void testExtract2PeersFromList();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -756,6 +760,43 @@ void BittorrentHelperTest::testTorrent2Magnet()
|
||||||
torrent2Magnet(getTorrentAttrs(dctx)));
|
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 bittorrent
|
||||||
|
|
||||||
} // namespace aria2
|
} // namespace aria2
|
||||||
|
|
|
@ -124,7 +124,6 @@ aria2c_SOURCES += BtAllowedFastMessageTest.cc\
|
||||||
MockBtMessage.h\
|
MockBtMessage.h\
|
||||||
MockBtMessageDispatcher.h\
|
MockBtMessageDispatcher.h\
|
||||||
MockBtMessageFactory.h\
|
MockBtMessageFactory.h\
|
||||||
PeerListProcessorTest.cc\
|
|
||||||
AnnounceListTest.cc\
|
AnnounceListTest.cc\
|
||||||
DefaultPeerStorageTest.cc\
|
DefaultPeerStorageTest.cc\
|
||||||
MockPeerStorage.h\
|
MockPeerStorage.h\
|
||||||
|
|
|
@ -73,7 +73,6 @@ check_PROGRAMS = $(am__EXEEXT_1)
|
||||||
@ENABLE_BITTORRENT_TRUE@ MockBtMessage.h\
|
@ENABLE_BITTORRENT_TRUE@ MockBtMessage.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ MockBtMessageDispatcher.h\
|
@ENABLE_BITTORRENT_TRUE@ MockBtMessageDispatcher.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ MockBtMessageFactory.h\
|
@ENABLE_BITTORRENT_TRUE@ MockBtMessageFactory.h\
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerListProcessorTest.cc\
|
|
||||||
@ENABLE_BITTORRENT_TRUE@ AnnounceListTest.cc\
|
@ENABLE_BITTORRENT_TRUE@ AnnounceListTest.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.cc\
|
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.cc\
|
||||||
@ENABLE_BITTORRENT_TRUE@ MockPeerStorage.h\
|
@ENABLE_BITTORRENT_TRUE@ MockPeerStorage.h\
|
||||||
|
@ -233,9 +232,8 @@ am__aria2c_SOURCES_DIST = AllTest.cc TestUtil.cc TestUtil.h \
|
||||||
DefaultBtMessageDispatcherTest.cc \
|
DefaultBtMessageDispatcherTest.cc \
|
||||||
DefaultBtRequestFactoryTest.cc MockBtMessage.h \
|
DefaultBtRequestFactoryTest.cc MockBtMessage.h \
|
||||||
MockBtMessageDispatcher.h MockBtMessageFactory.h \
|
MockBtMessageDispatcher.h MockBtMessageFactory.h \
|
||||||
PeerListProcessorTest.cc AnnounceListTest.cc \
|
AnnounceListTest.cc DefaultPeerStorageTest.cc \
|
||||||
DefaultPeerStorageTest.cc MockPeerStorage.h \
|
MockPeerStorage.h ByteArrayDiskWriterTest.cc PeerTest.cc \
|
||||||
ByteArrayDiskWriterTest.cc PeerTest.cc \
|
|
||||||
PeerSessionResourceTest.cc ShareRatioSeedCriteriaTest.cc \
|
PeerSessionResourceTest.cc ShareRatioSeedCriteriaTest.cc \
|
||||||
BtRegistryTest.cc BtDependencyTest.cc \
|
BtRegistryTest.cc BtDependencyTest.cc \
|
||||||
BtPostDownloadHandlerTest.cc TimeSeedCriteriaTest.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@ DefaultBtAnnounceTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtMessageDispatcherTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtMessageDispatcherTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultBtRequestFactoryTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultBtRequestFactoryTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerListProcessorTest.$(OBJEXT) \
|
|
||||||
@ENABLE_BITTORRENT_TRUE@ AnnounceListTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ AnnounceListTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ DefaultPeerStorageTest.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ ByteArrayDiskWriterTest.$(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)/OptionTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PStringBuildVisitorTest.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)/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)/PeerSessionResourceTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PeerTest.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@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/PieceStatManTest.Po@am__quote@
|
||||||
|
|
|
@ -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
|
|
Loading…
Reference in New Issue