mirror of https://github.com/aria2/aria2
2006-10-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
To add timeout to async name resolution: * src/AbstractCommand.h (nameResolveFinished): New function. This is not elegant way. It needs to be more refined. (nameResolverCheck): New variable. * src/AbstractCommand.cc (AbstractCommand): Added nameResolverCheck. (execute): Added the check whether the name resolution has finished. (setNameResolverCheck): Set nameResolverCheck to true. (disableNameResolverCheck): Set nameResolverCheck to false. (nameResolverFinished): New function. * src/FtpInitiateConnectionCommand.h (nameResolverFinished): New function. * src/HttpInitiateConnectionCommand.h (nameResolverFinished): New function. To add the support for a non-compact response from a tracker: * src/PeerListProcessor.h: New class. * src/DefaultPeerListProcessor.h: New class. * src/DefaultPeerListProcessor.cc: New class. * src/CompactPeerListProcessor.h: New class. * src/CompactPeerListProcessor.cc: New class. * src/DelegatingPeerListProcessor.h: New class. * src/DelegatingPeerListProcessor.cc: New class. * src/TorrentMan.cc (addPeer): New function(overload). (addPeer): Delete unused peers only when new peer is added. * src/TorrentMan.h (PeerListProcessor.h): Included. (Peers): Removed. (addPeer): New function(overload). * src/TrackerUpdateCommand.cc (netinet/in.h): Removed. (DelegatingPeerListProcessor.h): Included. (execute): Updated to use DelegatingPeerListProcessor. To fix the memory leak in TorrentMan::peers: * src/PeerAbstractCommand.cc (onAbort): Added peer->resetStatus(). * src/Peer.h (resetStatus): Made public. To improve the precision of the speed calculation: * src/SpeedCalc.h (nextInterval): New variable. * src/SpeedCalc.cc (reset): Added nextInterval. (isIntervalOver): Use nextInterval instead of CHANGE_INTERVAL_SEC. (changeSw): Set nextInterval to 15 seconds relative to the current instant time. * src/main.cc (showVersion): Updated.pull/1/head
parent
f7f1770633
commit
07e91896e1
60
ChangeLog
60
ChangeLog
|
@ -1,3 +1,63 @@
|
||||||
|
2006-10-01 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
|
To add timeout to async name resolution:
|
||||||
|
|
||||||
|
* src/AbstractCommand.h
|
||||||
|
(nameResolveFinished): New function. This is not elegant way. It needs
|
||||||
|
to be more refined.
|
||||||
|
(nameResolverCheck): New variable.
|
||||||
|
* src/AbstractCommand.cc
|
||||||
|
(AbstractCommand): Added nameResolverCheck.
|
||||||
|
(execute): Added the check whether the name resolution has finished.
|
||||||
|
(setNameResolverCheck): Set nameResolverCheck to true.
|
||||||
|
(disableNameResolverCheck): Set nameResolverCheck to false.
|
||||||
|
(nameResolverFinished): New function.
|
||||||
|
* src/FtpInitiateConnectionCommand.h
|
||||||
|
(nameResolverFinished): New function.
|
||||||
|
* src/HttpInitiateConnectionCommand.h
|
||||||
|
(nameResolverFinished): New function.
|
||||||
|
|
||||||
|
To add the support for a non-compact response from a tracker:
|
||||||
|
|
||||||
|
* src/PeerListProcessor.h: New class.
|
||||||
|
* src/DefaultPeerListProcessor.h: New class.
|
||||||
|
* src/DefaultPeerListProcessor.cc: New class.
|
||||||
|
* src/CompactPeerListProcessor.h: New class.
|
||||||
|
* src/CompactPeerListProcessor.cc: New class.
|
||||||
|
* src/DelegatingPeerListProcessor.h: New class.
|
||||||
|
* src/DelegatingPeerListProcessor.cc: New class.
|
||||||
|
* src/TorrentMan.cc
|
||||||
|
(addPeer): New function(overload).
|
||||||
|
(addPeer): Delete unused peers only when new peer is added.
|
||||||
|
* src/TorrentMan.h
|
||||||
|
(PeerListProcessor.h): Included.
|
||||||
|
(Peers): Removed.
|
||||||
|
(addPeer): New function(overload).
|
||||||
|
* src/TrackerUpdateCommand.cc
|
||||||
|
(netinet/in.h): Removed.
|
||||||
|
(DelegatingPeerListProcessor.h): Included.
|
||||||
|
(execute): Updated to use DelegatingPeerListProcessor.
|
||||||
|
|
||||||
|
To fix the memory leak in TorrentMan::peers:
|
||||||
|
|
||||||
|
* src/PeerAbstractCommand.cc
|
||||||
|
(onAbort): Added peer->resetStatus().
|
||||||
|
* src/Peer.h
|
||||||
|
(resetStatus): Made public.
|
||||||
|
|
||||||
|
To improve the precision of the speed calculation:
|
||||||
|
|
||||||
|
* src/SpeedCalc.h
|
||||||
|
(nextInterval): New variable.
|
||||||
|
* src/SpeedCalc.cc
|
||||||
|
(reset): Added nextInterval.
|
||||||
|
(isIntervalOver): Use nextInterval instead of CHANGE_INTERVAL_SEC.
|
||||||
|
(changeSw): Set nextInterval to 15 seconds relative to the current
|
||||||
|
instant time.
|
||||||
|
|
||||||
|
* src/main.cc
|
||||||
|
(showVersion): Updated.
|
||||||
|
|
||||||
2006-09-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
2006-09-23 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||||
|
|
||||||
* src/main.cc
|
* src/main.cc
|
||||||
|
|
|
@ -44,7 +44,8 @@
|
||||||
AbstractCommand::AbstractCommand(int cuid, Request* req, DownloadEngine* e,
|
AbstractCommand::AbstractCommand(int cuid, Request* req, DownloadEngine* e,
|
||||||
const SocketHandle& s):
|
const SocketHandle& s):
|
||||||
Command(cuid), req(req), e(e), socket(s),
|
Command(cuid), req(req), e(e), socket(s),
|
||||||
checkSocketIsReadable(false), checkSocketIsWritable(false) {
|
checkSocketIsReadable(false), checkSocketIsWritable(false),
|
||||||
|
nameResolverCheck(false) {
|
||||||
|
|
||||||
setReadCheckSocket(socket);
|
setReadCheckSocket(socket);
|
||||||
timeout = this->e->option->getAsInt(PREF_TIMEOUT);
|
timeout = this->e->option->getAsInt(PREF_TIMEOUT);
|
||||||
|
@ -73,7 +74,10 @@ bool AbstractCommand::execute() {
|
||||||
}
|
}
|
||||||
if(checkSocketIsReadable && readCheckTarget->isReadable(0) ||
|
if(checkSocketIsReadable && readCheckTarget->isReadable(0) ||
|
||||||
checkSocketIsWritable && writeCheckTarget->isWritable(0) ||
|
checkSocketIsWritable && writeCheckTarget->isWritable(0) ||
|
||||||
!checkSocketIsReadable && !checkSocketIsWritable) {
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
|
nameResolverCheck && nameResolveFinished() ||
|
||||||
|
#endif // ENABLE_ASYNC_DNS
|
||||||
|
!checkSocketIsReadable && !checkSocketIsWritable && !nameResolverCheck) {
|
||||||
checkPoint.reset();
|
checkPoint.reset();
|
||||||
Segment segment;
|
Segment segment;
|
||||||
if(e->segmentMan->downloadStarted) {
|
if(e->segmentMan->downloadStarted) {
|
||||||
|
@ -200,10 +204,12 @@ void AbstractCommand::setWriteCheckSocket(const SocketHandle& socket) {
|
||||||
|
|
||||||
#ifdef ENABLE_ASYNC_DNS
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
void AbstractCommand::setNameResolverCheck(const NameResolverHandle& resolver) {
|
void AbstractCommand::setNameResolverCheck(const NameResolverHandle& resolver) {
|
||||||
|
nameResolverCheck = true;
|
||||||
e->addNameResolverCheck(resolver, this);
|
e->addNameResolverCheck(resolver, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AbstractCommand::disableNameResolverCheck(const NameResolverHandle& resolver) {
|
void AbstractCommand::disableNameResolverCheck(const NameResolverHandle& resolver) {
|
||||||
|
nameResolverCheck = false;
|
||||||
e->deleteNameResolverCheck(resolver, this);
|
e->deleteNameResolverCheck(resolver, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -228,4 +234,8 @@ bool AbstractCommand::resolveHostname(const string& hostname,
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool AbstractCommand::nameResolveFinished() const {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
#endif // ENABLE_ASYNC_DNS
|
#endif // ENABLE_ASYNC_DNS
|
||||||
|
|
|
@ -63,6 +63,7 @@ protected:
|
||||||
void setNameResolverCheck(const NameResolverHandle& resolver);
|
void setNameResolverCheck(const NameResolverHandle& resolver);
|
||||||
void disableNameResolverCheck(const NameResolverHandle& resolver);
|
void disableNameResolverCheck(const NameResolverHandle& resolver);
|
||||||
bool resolveHostname(const string& hostname, const NameResolverHandle& nameResolver);
|
bool resolveHostname(const string& hostname, const NameResolverHandle& nameResolver);
|
||||||
|
virtual bool nameResolveFinished() const;
|
||||||
#endif // ENABLE_ASYNC_DNS
|
#endif // ENABLE_ASYNC_DNS
|
||||||
void setTimeout(int timeout) { this->timeout = timeout; }
|
void setTimeout(int timeout) { this->timeout = timeout; }
|
||||||
private:
|
private:
|
||||||
|
@ -70,6 +71,7 @@ private:
|
||||||
bool checkSocketIsWritable;
|
bool checkSocketIsWritable;
|
||||||
SocketHandle readCheckTarget;
|
SocketHandle readCheckTarget;
|
||||||
SocketHandle writeCheckTarget;
|
SocketHandle writeCheckTarget;
|
||||||
|
bool nameResolverCheck;
|
||||||
public:
|
public:
|
||||||
AbstractCommand(int cuid, Request* req, DownloadEngine* e, const SocketHandle& s = SocketHandle());
|
AbstractCommand(int cuid, Request* req, DownloadEngine* e, const SocketHandle& s = SocketHandle());
|
||||||
virtual ~AbstractCommand();
|
virtual ~AbstractCommand();
|
||||||
|
|
|
@ -0,0 +1,64 @@
|
||||||
|
/*
|
||||||
|
* 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 --> */
|
||||||
|
#include "CompactPeerListProcessor.h"
|
||||||
|
#include "Data.h"
|
||||||
|
#include <netinet/in.h>
|
||||||
|
|
||||||
|
bool CompactPeerListProcessor::canHandle(const MetaEntry* peersEntry) const {
|
||||||
|
return dynamic_cast<const Data*>(peersEntry) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Peers CompactPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
|
||||||
|
Peers peers;
|
||||||
|
|
||||||
|
const Data* peersData = (const Data*)peersEntry;
|
||||||
|
if(peersData->getLen() > 0) {
|
||||||
|
for(int i = 0; i < peersData->getLen(); i += 6) {
|
||||||
|
unsigned int ipaddr1 = (unsigned char)*(peersData->getData()+i);
|
||||||
|
unsigned int ipaddr2 = (unsigned char)*(peersData->getData()+i+1);
|
||||||
|
unsigned int ipaddr3 = (unsigned char)*(peersData->getData()+i+2);
|
||||||
|
unsigned int ipaddr4 = (unsigned char)*(peersData->getData()+i+3);
|
||||||
|
unsigned int port = ntohs(*(unsigned short int*)(peersData->getData()+i+4));
|
||||||
|
char ipaddr[16];
|
||||||
|
|
||||||
|
snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d",
|
||||||
|
ipaddr1, ipaddr2, ipaddr3, ipaddr4);
|
||||||
|
PeerHandle peer =
|
||||||
|
PeerHandle(new Peer(ipaddr, port, pieceLength, totalLength));
|
||||||
|
|
||||||
|
peers.push_back(peer);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return peers;
|
||||||
|
}
|
|
@ -0,0 +1,55 @@
|
||||||
|
/*
|
||||||
|
* 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_COMPACT_PEER_LIST_PROCESSOR_H_
|
||||||
|
#define _D_COMPACT_PEER_LIST_PROCESSOR_H_
|
||||||
|
|
||||||
|
#include "PeerListProcessor.h"
|
||||||
|
|
||||||
|
class CompactPeerListProcessor : public PeerListProcessor {
|
||||||
|
private:
|
||||||
|
int pieceLength;
|
||||||
|
long long int totalLength;
|
||||||
|
public:
|
||||||
|
CompactPeerListProcessor(int pieceLength, long long int totalLength)
|
||||||
|
:pieceLength(pieceLength),
|
||||||
|
totalLength(totalLength) {}
|
||||||
|
|
||||||
|
virtual ~CompactPeerListProcessor() {}
|
||||||
|
|
||||||
|
virtual Peers extractPeer(const MetaEntry* peersEntry);
|
||||||
|
|
||||||
|
virtual bool canHandle(const MetaEntry* peersEntry) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _D_COMPACT_PEER_LIST_PROCESSOR_H_
|
|
@ -0,0 +1,70 @@
|
||||||
|
/* <!-- 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 --> */
|
||||||
|
#include "DefaultPeerListProcessor.h"
|
||||||
|
#include "List.h"
|
||||||
|
#include "Dictionary.h"
|
||||||
|
#include "Data.h"
|
||||||
|
|
||||||
|
bool DefaultPeerListProcessor::canHandle(const MetaEntry* peersEntry) const {
|
||||||
|
const List* peersList = dynamic_cast<const List*>(peersEntry);
|
||||||
|
return peersList != 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
Peers DefaultPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
|
||||||
|
Peers peers;
|
||||||
|
const List* peersList = dynamic_cast<const List*>(peersEntry);
|
||||||
|
if(!peersList) {
|
||||||
|
return peers;
|
||||||
|
}
|
||||||
|
const MetaList& metaList = peersList->getList();
|
||||||
|
for(MetaList::const_iterator itr = metaList.begin();
|
||||||
|
itr != metaList.end(); itr++) {
|
||||||
|
const Dictionary* peerDic = dynamic_cast<const Dictionary*>(*itr);
|
||||||
|
if(!peerDic) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
const Data* ip = dynamic_cast<const Data*>(peerDic->get("ip"));
|
||||||
|
const Data* port = dynamic_cast<const Data*>(peerDic->get("port"));
|
||||||
|
if(!ip || !port || !port->isNumber()) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
PeerHandle peer = PeerHandle(new Peer(ip->toString(),
|
||||||
|
port->toInt(),
|
||||||
|
pieceLength,
|
||||||
|
totalLength));
|
||||||
|
peers.push_back(peer);
|
||||||
|
}
|
||||||
|
return peers;
|
||||||
|
}
|
|
@ -0,0 +1,56 @@
|
||||||
|
/* <!-- 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_DEFAULT_PEER_LIST_PROCESSOR_H_
|
||||||
|
#define _D_DEFAULT_PEER_LIST_PROCESSOR_H_
|
||||||
|
|
||||||
|
#include "PeerListProcessor.h"
|
||||||
|
|
||||||
|
class DefaultPeerListProcessor : public PeerListProcessor {
|
||||||
|
private:
|
||||||
|
int pieceLength;
|
||||||
|
long long int totalLength;
|
||||||
|
public:
|
||||||
|
DefaultPeerListProcessor(int pieceLength, long long int totalLength)
|
||||||
|
:pieceLength(pieceLength),
|
||||||
|
totalLength(totalLength) {}
|
||||||
|
|
||||||
|
virtual ~DefaultPeerListProcessor() {}
|
||||||
|
|
||||||
|
virtual Peers extractPeer(const MetaEntry* peersEntry);
|
||||||
|
|
||||||
|
virtual bool canHandle(const MetaEntry* peersEntry) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _D_DEFAULT_PEER_LIST_PROCESSOR_H_
|
|
@ -0,0 +1,57 @@
|
||||||
|
/*
|
||||||
|
* 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 --> */
|
||||||
|
#include "DelegatingPeerListProcessor.h"
|
||||||
|
|
||||||
|
Peers DelegatingPeerListProcessor::extractPeer(const MetaEntry* peersEntry) {
|
||||||
|
Peers peers;
|
||||||
|
for(PeerListProcessors::iterator itr = processors.begin();
|
||||||
|
itr != processors.end(); itr++) {
|
||||||
|
PeerListProcessorHandle processor = *itr;
|
||||||
|
if(processor->canHandle(peersEntry)) {
|
||||||
|
Peers tempPeers = processor->extractPeer(peersEntry);
|
||||||
|
copy(tempPeers.begin(), tempPeers.end(), back_inserter(peers));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return peers;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool DelegatingPeerListProcessor::canHandle(const MetaEntry* peersEntry) const {
|
||||||
|
for(PeerListProcessors::const_iterator itr = processors.begin();
|
||||||
|
itr != processors.end(); itr++) {
|
||||||
|
if((*itr)->canHandle(peersEntry)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,63 @@
|
||||||
|
/*
|
||||||
|
* 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_DELEGATING_PEER_LIST_PROCESSOR_H_
|
||||||
|
#define _D_DELEGATING_PEER_LIST_PROCESSOR_H_
|
||||||
|
|
||||||
|
#include "PeerListProcessor.h"
|
||||||
|
#include "DefaultPeerListProcessor.h"
|
||||||
|
#include "CompactPeerListProcessor.h"
|
||||||
|
|
||||||
|
typedef deque<PeerListProcessorHandle> PeerListProcessors;
|
||||||
|
|
||||||
|
class DelegatingPeerListProcessor : public PeerListProcessor {
|
||||||
|
private:
|
||||||
|
int pieceLength;
|
||||||
|
long long int totalLength;
|
||||||
|
PeerListProcessors processors;
|
||||||
|
public:
|
||||||
|
DelegatingPeerListProcessor(int pieceLength, long long int totalLength)
|
||||||
|
:pieceLength(pieceLength),
|
||||||
|
totalLength(totalLength) {
|
||||||
|
processors.push_back(new DefaultPeerListProcessor(pieceLength, totalLength));
|
||||||
|
processors.push_back(new CompactPeerListProcessor(pieceLength, totalLength));
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual ~DelegatingPeerListProcessor() {}
|
||||||
|
|
||||||
|
virtual Peers extractPeer(const MetaEntry* peersEntry);
|
||||||
|
|
||||||
|
virtual bool canHandle(const MetaEntry* peersEntry) const;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // _D_DELEGATING_PEER_LIST_PROCESSOR_H_
|
|
@ -45,6 +45,12 @@ private:
|
||||||
bool useHttpProxy() const;
|
bool useHttpProxy() const;
|
||||||
bool useHttpProxyGet() const;
|
bool useHttpProxyGet() const;
|
||||||
bool useHttpProxyConnect() const;
|
bool useHttpProxyConnect() const;
|
||||||
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
|
virtual bool nameResolveFinished() const {
|
||||||
|
return nameResolver->getStatus() == NameResolver::STATUS_SUCCESS ||
|
||||||
|
nameResolver->getStatus() == NameResolver::STATUS_ERROR;
|
||||||
|
}
|
||||||
|
#endif // ENABLE_ASYNC_DNS
|
||||||
protected:
|
protected:
|
||||||
bool executeInternal(Segment& segment);
|
bool executeInternal(Segment& segment);
|
||||||
public:
|
public:
|
||||||
|
|
|
@ -55,6 +55,12 @@ protected:
|
||||||
* evaluated by RequestCommand.
|
* evaluated by RequestCommand.
|
||||||
*/
|
*/
|
||||||
bool executeInternal(Segment& segment);
|
bool executeInternal(Segment& segment);
|
||||||
|
#ifdef ENABLE_ASYNC_DNS
|
||||||
|
virtual bool nameResolveFinished() const {
|
||||||
|
return nameResolver->getStatus() == NameResolver::STATUS_SUCCESS ||
|
||||||
|
nameResolver->getStatus() == NameResolver::STATUS_ERROR;
|
||||||
|
}
|
||||||
|
#endif // ENABLE_ASYNC_DNS
|
||||||
public:
|
public:
|
||||||
HttpInitiateConnectionCommand(int cuid, Request* req, DownloadEngine* e);
|
HttpInitiateConnectionCommand(int cuid, Request* req, DownloadEngine* e);
|
||||||
~HttpInitiateConnectionCommand();
|
~HttpInitiateConnectionCommand();
|
||||||
|
|
|
@ -120,7 +120,11 @@ SRCS += MetaEntry.h\
|
||||||
TimeSeedCriteria.h\
|
TimeSeedCriteria.h\
|
||||||
ShareRatioSeedCriteria.h\
|
ShareRatioSeedCriteria.h\
|
||||||
UnionSeedCriteria.h\
|
UnionSeedCriteria.h\
|
||||||
SeedCheckCommand.cc SeedCheckCommand.h
|
SeedCheckCommand.cc SeedCheckCommand.h\
|
||||||
|
PeerListProcessor.h\
|
||||||
|
DefaultPeerListProcessor.cc DefaultPeerListProcessor.h\
|
||||||
|
CompactPeerListProcessor.cc CompactPeerListProcessor.h\
|
||||||
|
DelegatingPeerListProcessor.cc DelegatingPeerListProcessor.h
|
||||||
endif # ENABLE_BITTORRENT
|
endif # ENABLE_BITTORRENT
|
||||||
|
|
||||||
if ENABLE_METALINK
|
if ENABLE_METALINK
|
||||||
|
|
|
@ -97,7 +97,11 @@ bin_PROGRAMS = aria2c$(EXEEXT)
|
||||||
@ENABLE_BITTORRENT_TRUE@ TimeSeedCriteria.h\
|
@ENABLE_BITTORRENT_TRUE@ TimeSeedCriteria.h\
|
||||||
@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@ DefaultPeerListProcessor.cc DefaultPeerListProcessor.h\
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ CompactPeerListProcessor.cc CompactPeerListProcessor.h\
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ DelegatingPeerListProcessor.cc DelegatingPeerListProcessor.h
|
||||||
|
|
||||||
@ENABLE_METALINK_TRUE@am__append_3 = Metalinker.cc Metalinker.h\
|
@ENABLE_METALINK_TRUE@am__append_3 = Metalinker.cc Metalinker.h\
|
||||||
@ENABLE_METALINK_TRUE@ MetalinkEntry.cc MetalinkEntry.h\
|
@ENABLE_METALINK_TRUE@ MetalinkEntry.cc MetalinkEntry.h\
|
||||||
|
@ -203,8 +207,12 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
||||||
TorrentRequestInfo.cc TorrentRequestInfo.h SeedCriteria.h \
|
TorrentRequestInfo.cc TorrentRequestInfo.h SeedCriteria.h \
|
||||||
TimeSeedCriteria.h ShareRatioSeedCriteria.h \
|
TimeSeedCriteria.h ShareRatioSeedCriteria.h \
|
||||||
UnionSeedCriteria.h SeedCheckCommand.cc SeedCheckCommand.h \
|
UnionSeedCriteria.h SeedCheckCommand.cc SeedCheckCommand.h \
|
||||||
Metalinker.cc Metalinker.h MetalinkEntry.cc MetalinkEntry.h \
|
PeerListProcessor.h DefaultPeerListProcessor.cc \
|
||||||
MetalinkResource.cc MetalinkResource.h MetalinkProcessor.h \
|
DefaultPeerListProcessor.h CompactPeerListProcessor.cc \
|
||||||
|
CompactPeerListProcessor.h DelegatingPeerListProcessor.cc \
|
||||||
|
DelegatingPeerListProcessor.h Metalinker.cc Metalinker.h \
|
||||||
|
MetalinkEntry.cc MetalinkEntry.h MetalinkResource.cc \
|
||||||
|
MetalinkResource.h MetalinkProcessor.h \
|
||||||
Xml2MetalinkProcessor.cc Xml2MetalinkProcessor.h \
|
Xml2MetalinkProcessor.cc Xml2MetalinkProcessor.h \
|
||||||
MetalinkRequestInfo.cc MetalinkRequestInfo.h
|
MetalinkRequestInfo.cc MetalinkRequestInfo.h
|
||||||
@ENABLE_ASYNC_DNS_TRUE@am__objects_1 = NameResolver.$(OBJEXT)
|
@ENABLE_ASYNC_DNS_TRUE@am__objects_1 = NameResolver.$(OBJEXT)
|
||||||
|
@ -257,7 +265,10 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
||||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ HaveEraseCommand.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ HaveEraseCommand.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ TorrentRequestInfo.$(OBJEXT) \
|
@ENABLE_BITTORRENT_TRUE@ TorrentRequestInfo.$(OBJEXT) \
|
||||||
@ENABLE_BITTORRENT_TRUE@ SeedCheckCommand.$(OBJEXT)
|
@ENABLE_BITTORRENT_TRUE@ SeedCheckCommand.$(OBJEXT) \
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ DefaultPeerListProcessor.$(OBJEXT) \
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ CompactPeerListProcessor.$(OBJEXT) \
|
||||||
|
@ENABLE_BITTORRENT_TRUE@ DelegatingPeerListProcessor.$(OBJEXT)
|
||||||
@ENABLE_METALINK_TRUE@am__objects_3 = Metalinker.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@am__objects_3 = Metalinker.$(OBJEXT) \
|
||||||
@ENABLE_METALINK_TRUE@ MetalinkEntry.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@ MetalinkEntry.$(OBJEXT) \
|
||||||
@ENABLE_METALINK_TRUE@ MetalinkResource.$(OBJEXT) \
|
@ENABLE_METALINK_TRUE@ MetalinkResource.$(OBJEXT) \
|
||||||
|
@ -583,11 +594,14 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChokeMessage.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChokeMessage.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedEncoding.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ChunkedEncoding.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Command.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Command.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CompactPeerListProcessor.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConsoleDownloadEngine.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ConsoleDownloadEngine.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBox.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBox.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyDiskAdaptor.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CopyDiskAdaptor.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Data.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Data.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultDiskWriter.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultDiskWriter.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultPeerListProcessor.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DelegatingPeerListProcessor.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dictionary.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Dictionary.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectDiskAdaptor.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DirectDiskAdaptor.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Directory.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/Directory.Po@am__quote@
|
||||||
|
|
|
@ -75,8 +75,6 @@ private:
|
||||||
long long int sessionDownloadLength;
|
long long int sessionDownloadLength;
|
||||||
int pieceLength;
|
int pieceLength;
|
||||||
int latency;
|
int latency;
|
||||||
|
|
||||||
void resetStatus();
|
|
||||||
public:
|
public:
|
||||||
Peer(string ipaddr, int port, int pieceLength, long long int totalLength)
|
Peer(string ipaddr, int port, int pieceLength, long long int totalLength)
|
||||||
:entryId(0), ipaddr(ipaddr), port(port), error(0),
|
:entryId(0), ipaddr(ipaddr), port(port), error(0),
|
||||||
|
@ -108,6 +106,8 @@ public:
|
||||||
return !(*this == p);
|
return !(*this == p);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void resetStatus();
|
||||||
|
|
||||||
void updateUploadLength(int bytes) {
|
void updateUploadLength(int bytes) {
|
||||||
peerStat.updateUploadLength(bytes);
|
peerStat.updateUploadLength(bytes);
|
||||||
sessionUploadLength += bytes;
|
sessionUploadLength += bytes;
|
||||||
|
|
|
@ -99,6 +99,7 @@ void PeerAbstractCommand::onAbort(Exception* ex) {
|
||||||
} else {
|
} else {
|
||||||
peer->error += MAX_PEER_ERROR;
|
peer->error += MAX_PEER_ERROR;
|
||||||
}
|
}
|
||||||
|
peer->resetStatus();
|
||||||
}
|
}
|
||||||
|
|
||||||
void PeerAbstractCommand::disableReadCheckSocket() {
|
void PeerAbstractCommand::disableReadCheckSocket() {
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
/* <!-- 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 "MetaEntry.h"
|
||||||
|
#include "Peer.h"
|
||||||
|
#include "SharedHandle.h"
|
||||||
|
|
||||||
|
typedef deque<PeerHandle> Peers;
|
||||||
|
|
||||||
|
class PeerListProcessor {
|
||||||
|
public:
|
||||||
|
virtual ~PeerListProcessor() {}
|
||||||
|
|
||||||
|
virtual Peers extractPeer(const MetaEntry* peersEntry) = 0;
|
||||||
|
|
||||||
|
virtual bool canHandle(const MetaEntry* peersEntry) const = 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef SharedHandle<PeerListProcessor> PeerListProcessorHandle;
|
||||||
|
|
||||||
|
#endif // _D_PEER_LIST_PROCESSOR_H_
|
|
@ -54,6 +54,7 @@ void SpeedCalc::reset() {
|
||||||
prevSpeed = 0;
|
prevSpeed = 0;
|
||||||
start.reset();
|
start.reset();
|
||||||
accumulatedLength = 0;
|
accumulatedLength = 0;
|
||||||
|
nextInterval = CHANGE_INTERVAL_SEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SpeedCalc::calculateSpeed() {
|
int SpeedCalc::calculateSpeed() {
|
||||||
|
@ -88,13 +89,14 @@ void SpeedCalc::update(int bytes) {
|
||||||
}
|
}
|
||||||
|
|
||||||
bool SpeedCalc::isIntervalOver() const {
|
bool SpeedCalc::isIntervalOver() const {
|
||||||
return CHANGE_INTERVAL_SEC <= cpArray[sw].difference();
|
return nextInterval <= cpArray[sw].difference();
|
||||||
}
|
}
|
||||||
|
|
||||||
void SpeedCalc::changeSw() {
|
void SpeedCalc::changeSw() {
|
||||||
lengthArray[sw] = 0;
|
lengthArray[sw] = 0;
|
||||||
cpArray[sw].reset();
|
cpArray[sw].reset();
|
||||||
sw ^= 0x01;
|
sw ^= 0x01;
|
||||||
|
nextInterval = cpArray[sw].difference()+CHANGE_INTERVAL_SEC;
|
||||||
}
|
}
|
||||||
|
|
||||||
int SpeedCalc::getAvgSpeed() const {
|
int SpeedCalc::getAvgSpeed() const {
|
||||||
|
|
|
@ -47,6 +47,7 @@ private:
|
||||||
int prevSpeed;
|
int prevSpeed;
|
||||||
Time start;
|
Time start;
|
||||||
long long int accumulatedLength;
|
long long int accumulatedLength;
|
||||||
|
int nextInterval;
|
||||||
|
|
||||||
bool isIntervalOver() const;
|
bool isIntervalOver() const;
|
||||||
void changeSw();
|
void changeSw();
|
||||||
|
|
|
@ -89,12 +89,23 @@ void TorrentMan::updatePeers(const Peers& peers) {
|
||||||
this->peers = peers;
|
this->peers = peers;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TorrentMan::addPeer(const PeerHandle& peer) {
|
void TorrentMan::addPeer(const Peers& peers) {
|
||||||
if(peers.size() >= MAX_PEER_LIST_SIZE) {
|
for(Peers::const_iterator itr = peers.begin();
|
||||||
deleteUnusedPeer(peers.size()-MAX_PEER_LIST_SIZE+15);
|
itr != peers.end(); itr++) {
|
||||||
|
const PeerHandle& peer = *itr;
|
||||||
|
if(addPeer(peer)) {
|
||||||
|
logger->debug("Adding peer %s:%d",
|
||||||
|
peer->ipaddr.c_str(), peer->port);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool TorrentMan::addPeer(const PeerHandle& peer) {
|
||||||
Peers::iterator itr = find(peers.begin(), peers.end(), peer);
|
Peers::iterator itr = find(peers.begin(), peers.end(), peer);
|
||||||
if(itr == peers.end()) {
|
if(itr == peers.end()) {
|
||||||
|
if(peers.size() > MAX_PEER_LIST_SIZE) {
|
||||||
|
deleteUnusedPeer(peers.size()-MAX_PEER_LIST_SIZE+1);
|
||||||
|
}
|
||||||
++peerEntryIdCounter;
|
++peerEntryIdCounter;
|
||||||
peer->entryId = peerEntryIdCounter;
|
peer->entryId = peerEntryIdCounter;
|
||||||
peers.push_back(peer);
|
peers.push_back(peer);
|
||||||
|
|
|
@ -47,6 +47,7 @@
|
||||||
#include "DiskAdaptor.h"
|
#include "DiskAdaptor.h"
|
||||||
#include "Request.h"
|
#include "Request.h"
|
||||||
#include "TimeA2.h"
|
#include "TimeA2.h"
|
||||||
|
#include "PeerListProcessor.h"
|
||||||
#include <deque>
|
#include <deque>
|
||||||
#include <map>
|
#include <map>
|
||||||
#include <string>
|
#include <string>
|
||||||
|
@ -85,7 +86,6 @@ public:
|
||||||
index(index) {}
|
index(index) {}
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef deque<PeerHandle> Peers;
|
|
||||||
typedef deque<HaveEntry> Haves;
|
typedef deque<HaveEntry> Haves;
|
||||||
typedef deque<int> PieceIndexes;
|
typedef deque<int> PieceIndexes;
|
||||||
typedef deque<Piece> Pieces;
|
typedef deque<Piece> Pieces;
|
||||||
|
@ -156,6 +156,7 @@ public:
|
||||||
// TODO do not use this method
|
// TODO do not use this method
|
||||||
void updatePeers(const Peers& peers);
|
void updatePeers(const Peers& peers);
|
||||||
bool addPeer(const PeerHandle& peer);
|
bool addPeer(const PeerHandle& peer);
|
||||||
|
void addPeer(const Peers& peers);
|
||||||
//void updatePeer(const Peer* peer);
|
//void updatePeer(const Peer* peer);
|
||||||
const Peers& getPeers() const { return peers; }
|
const Peers& getPeers() const { return peers; }
|
||||||
PeerHandle getPeer() const;
|
PeerHandle getPeer() const;
|
||||||
|
|
|
@ -40,7 +40,7 @@
|
||||||
#include "PeerInitiateConnectionCommand.h"
|
#include "PeerInitiateConnectionCommand.h"
|
||||||
#include "SleepCommand.h"
|
#include "SleepCommand.h"
|
||||||
#include "Util.h"
|
#include "Util.h"
|
||||||
#include <netinet/in.h>
|
#include "DelegatingPeerListProcessor.h"
|
||||||
|
|
||||||
TrackerUpdateCommand::TrackerUpdateCommand(int cuid, TorrentDownloadEngine*e):Command(cuid), e(e) {
|
TrackerUpdateCommand::TrackerUpdateCommand(int cuid, TorrentDownloadEngine*e):Command(cuid), e(e) {
|
||||||
logger = LogFactory::getInstance();
|
logger = LogFactory::getInstance();
|
||||||
|
@ -132,32 +132,15 @@ bool TrackerUpdateCommand::execute() {
|
||||||
logger->debug("CUID#%d - Incomplete:%d",
|
logger->debug("CUID#%d - Incomplete:%d",
|
||||||
cuid, e->torrentMan->incomplete);
|
cuid, e->torrentMan->incomplete);
|
||||||
}
|
}
|
||||||
|
const MetaEntry* peersEntry = response->get("peers");
|
||||||
if(!e->torrentMan->isHalt() &&
|
if(!e->torrentMan->isHalt() &&
|
||||||
e->torrentMan->connections < MIN_PEERS &&
|
e->torrentMan->connections < MIN_PEERS &&
|
||||||
dynamic_cast<const Data*>(response->get("peers"))) {
|
peersEntry) {
|
||||||
Data* peers = (Data*)response->get("peers");
|
DelegatingPeerListProcessor proc(e->torrentMan->pieceLength,
|
||||||
if(peers != NULL && peers->getLen() > 0) {
|
e->torrentMan->getTotalLength());
|
||||||
for(int i = 0; i < peers->getLen(); i += 6) {
|
Peers peers = proc.extractPeer(peersEntry);
|
||||||
unsigned int ipaddr1 = (unsigned char)*(peers->getData()+i);
|
e->torrentMan->addPeer(peers);
|
||||||
unsigned int ipaddr2 = (unsigned char)*(peers->getData()+i+1);
|
|
||||||
unsigned int ipaddr3 = (unsigned char)*(peers->getData()+i+2);
|
|
||||||
unsigned int ipaddr4 = (unsigned char)*(peers->getData()+i+3);
|
|
||||||
unsigned int port = ntohs(*(unsigned short int*)(peers->getData()+i+4));
|
|
||||||
char ipaddr[16];
|
|
||||||
|
|
||||||
snprintf(ipaddr, sizeof(ipaddr), "%d.%d.%d.%d",
|
|
||||||
ipaddr1, ipaddr2, ipaddr3, ipaddr4);
|
|
||||||
PeerHandle peer =
|
|
||||||
PeerHandle(new Peer(ipaddr, port, e->torrentMan->pieceLength,
|
|
||||||
e->torrentMan->getTotalLength()));
|
|
||||||
if(e->torrentMan->addPeer(peer)) {
|
|
||||||
logger->debug("CUID#%d - Adding peer %s:%d",
|
|
||||||
cuid, peer->ipaddr.c_str(), peer->port);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
logger->info("CUID#%d - No peer list received.", cuid);
|
|
||||||
}
|
|
||||||
while(e->torrentMan->isPeerAvailable() &&
|
while(e->torrentMan->isPeerAvailable() &&
|
||||||
e->torrentMan->connections < MIN_PEERS) {
|
e->torrentMan->connections < MIN_PEERS) {
|
||||||
PeerHandle peer = e->torrentMan->getPeer();
|
PeerHandle peer = e->torrentMan->getPeer();
|
||||||
|
@ -169,6 +152,10 @@ bool TrackerUpdateCommand::execute() {
|
||||||
logger->debug("CUID#%d - Adding new command CUID#%d", cuid, newCuid);
|
logger->debug("CUID#%d - Adding new command CUID#%d", cuid, newCuid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if(!peersEntry) {
|
||||||
|
logger->info("CUID#%d - No peer list received.", cuid);
|
||||||
|
}
|
||||||
|
|
||||||
if(e->torrentMan->req->getTrackerEvent() == Request::STARTED) {
|
if(e->torrentMan->req->getTrackerEvent() == Request::STARTED) {
|
||||||
e->torrentMan->req->setTrackerEvent(Request::AUTO);
|
e->torrentMan->req->setTrackerEvent(Request::AUTO);
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,11 +85,11 @@ void setSignalHander(int signal, void (*handler)(int), int flags) {
|
||||||
|
|
||||||
void showVersion() {
|
void showVersion() {
|
||||||
cout << PACKAGE << _(" version ") << PACKAGE_VERSION << endl;
|
cout << PACKAGE << _(" version ") << PACKAGE_VERSION << endl;
|
||||||
cout << "Copyright (C) 2006 Tatsuhiro Tsujikawa" << endl;
|
|
||||||
cout << endl;
|
|
||||||
cout << "**Configuration**" << endl;
|
cout << "**Configuration**" << endl;
|
||||||
cout << FeatureConfig::getInstance()->getConfigurationSummary();
|
cout << FeatureConfig::getInstance()->getConfigurationSummary();
|
||||||
cout << endl;
|
cout << endl;
|
||||||
|
cout << "Copyright (C) 2006 Tatsuhiro Tsujikawa" << endl;
|
||||||
|
cout << endl;
|
||||||
cout <<
|
cout <<
|
||||||
_("This program is free software; you can redistribute it and/or modify\n"
|
_("This program is free software; you can redistribute it and/or modify\n"
|
||||||
"it under the terms of the GNU General Public License as published by\n"
|
"it under the terms of the GNU General Public License as published by\n"
|
||||||
|
|
|
@ -0,0 +1,57 @@
|
||||||
|
#include "DefaultPeerListProcessor.h"
|
||||||
|
#include "MetaFileUtil.h"
|
||||||
|
#include "Exception.h"
|
||||||
|
#include <cppunit/extensions/HelperMacros.h>
|
||||||
|
|
||||||
|
using namespace std;
|
||||||
|
|
||||||
|
class DefaultPeerListProcessorTest:public CppUnit::TestFixture {
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE(DefaultPeerListProcessorTest);
|
||||||
|
CPPUNIT_TEST(testExtractPeer);
|
||||||
|
CPPUNIT_TEST(testExtract2Peers);
|
||||||
|
CPPUNIT_TEST_SUITE_END();
|
||||||
|
private:
|
||||||
|
|
||||||
|
public:
|
||||||
|
void setUp() {
|
||||||
|
}
|
||||||
|
|
||||||
|
void testExtractPeer();
|
||||||
|
void testExtract2Peers();
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
CPPUNIT_TEST_SUITE_REGISTRATION( DefaultPeerListProcessorTest );
|
||||||
|
|
||||||
|
void DefaultPeerListProcessorTest::testExtractPeer() {
|
||||||
|
DefaultPeerListProcessor proc(1024*1024, 10*1024*1024);
|
||||||
|
string peersString = "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-000000000000004:porti2006eeee";
|
||||||
|
|
||||||
|
Dictionary* dic = (Dictionary*)MetaFileUtil::bdecoding(peersString.c_str(), peersString.size());
|
||||||
|
|
||||||
|
CPPUNIT_ASSERT(proc.canHandle(dic->get("peers"));
|
||||||
|
|
||||||
|
Peers peers = proc.extractPeer(dic->get("peers"));
|
||||||
|
CPPUNIT_ASSERT_EQUAL((size_t)1, peers.size());
|
||||||
|
PeerHandle peer = *peers.begin();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), peer->ipaddr);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(2006, peer->port);
|
||||||
|
}
|
||||||
|
|
||||||
|
void DefaultPeerListProcessorTest::testExtract2Peers() {
|
||||||
|
DefaultPeerListProcessor proc(1024*1024, 10*1024*1024);
|
||||||
|
string peersString = "d5:peersld2:ip11:192.168.0.17:peer id20:aria2-000000000000004:porti2006eed2:ip11:192.168.0.27:peer id20:aria2-000000000000004:porti2007eeee";
|
||||||
|
|
||||||
|
Dictionary* dic = (Dictionary*)MetaFileUtil::bdecoding(peersString.c_str(), peersString.size());
|
||||||
|
|
||||||
|
Peers peers = proc.extractPeer(dic->get("peers"));
|
||||||
|
CPPUNIT_ASSERT_EQUAL((size_t)2, peers.size());
|
||||||
|
PeerHandle peer = *peers.begin();
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("192.168.0.1"), peer->ipaddr);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(2006, peer->port);
|
||||||
|
|
||||||
|
peer = *(peers.begin()+1);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(string("192.168.0.2"), peer->ipaddr);
|
||||||
|
CPPUNIT_ASSERT_EQUAL(2007, peer->port);
|
||||||
|
}
|
|
@ -39,7 +39,8 @@ aria2c_SOURCES = AllTest.cc\
|
||||||
ShareRatioSeedCriteriaTest.cc\
|
ShareRatioSeedCriteriaTest.cc\
|
||||||
TimeSeedCriteriaTest.cc\
|
TimeSeedCriteriaTest.cc\
|
||||||
SegmentManTest.cc\
|
SegmentManTest.cc\
|
||||||
SpeedCalcTest.cc
|
SpeedCalcTest.cc\
|
||||||
|
DefaultPeerListProcessorTest.cc
|
||||||
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
||||||
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
||||||
|
|
||||||
|
|
|
@ -77,7 +77,7 @@ am_aria2c_OBJECTS = AllTest.$(OBJEXT) RequestTest.$(OBJEXT) \
|
||||||
MetalinkEntryTest.$(OBJEXT) FeatureConfigTest.$(OBJEXT) \
|
MetalinkEntryTest.$(OBJEXT) FeatureConfigTest.$(OBJEXT) \
|
||||||
ShareRatioSeedCriteriaTest.$(OBJEXT) \
|
ShareRatioSeedCriteriaTest.$(OBJEXT) \
|
||||||
TimeSeedCriteriaTest.$(OBJEXT) SegmentManTest.$(OBJEXT) \
|
TimeSeedCriteriaTest.$(OBJEXT) SegmentManTest.$(OBJEXT) \
|
||||||
SpeedCalcTest.$(OBJEXT)
|
SpeedCalcTest.$(OBJEXT) DefaultPeerListProcessorTest.$(OBJEXT)
|
||||||
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
|
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
|
||||||
am__DEPENDENCIES_1 =
|
am__DEPENDENCIES_1 =
|
||||||
aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1)
|
aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1)
|
||||||
|
@ -270,7 +270,8 @@ aria2c_SOURCES = AllTest.cc\
|
||||||
ShareRatioSeedCriteriaTest.cc\
|
ShareRatioSeedCriteriaTest.cc\
|
||||||
TimeSeedCriteriaTest.cc\
|
TimeSeedCriteriaTest.cc\
|
||||||
SegmentManTest.cc\
|
SegmentManTest.cc\
|
||||||
SpeedCalcTest.cc
|
SpeedCalcTest.cc\
|
||||||
|
DefaultPeerListProcessorTest.cc
|
||||||
|
|
||||||
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
||||||
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
||||||
|
@ -342,6 +343,7 @@ distclean-compile:
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/CookieBoxTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DataTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultDiskWriterTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultDiskWriterTest.Po@am__quote@
|
||||||
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DefaultPeerListProcessorTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DictionaryTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DictionaryTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FeatureConfigTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FeatureConfigTest.Po@am__quote@
|
||||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileTest.Po@am__quote@
|
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FileTest.Po@am__quote@
|
||||||
|
|
|
@ -12,6 +12,7 @@ class SegmentManTest:public CppUnit::TestFixture {
|
||||||
CPPUNIT_TEST(testSaveAndLoad);
|
CPPUNIT_TEST(testSaveAndLoad);
|
||||||
CPPUNIT_TEST(testNullBitfield);
|
CPPUNIT_TEST(testNullBitfield);
|
||||||
CPPUNIT_TEST(testCancelSegmentOnNullBitfield);
|
CPPUNIT_TEST(testCancelSegmentOnNullBitfield);
|
||||||
|
CPPUNIT_TEST(testBug);
|
||||||
CPPUNIT_TEST_SUITE_END();
|
CPPUNIT_TEST_SUITE_END();
|
||||||
private:
|
private:
|
||||||
|
|
||||||
|
@ -22,6 +23,7 @@ public:
|
||||||
void testSaveAndLoad();
|
void testSaveAndLoad();
|
||||||
void testNullBitfield();
|
void testNullBitfield();
|
||||||
void testCancelSegmentOnNullBitfield();
|
void testCancelSegmentOnNullBitfield();
|
||||||
|
void testBug();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -41,20 +43,20 @@ void SegmentManTest::testSaveAndLoad() {
|
||||||
segmentMan.ufilename = filename;
|
segmentMan.ufilename = filename;
|
||||||
segmentMan.initBitfield(1024*1024, segmentMan.totalSize);
|
segmentMan.initBitfield(1024*1024, segmentMan.totalSize);
|
||||||
|
|
||||||
Segment2 seg1;
|
Segment seg1;
|
||||||
segmentMan.getSegment2(seg1, 1);
|
segmentMan.getSegment(seg1, 1);
|
||||||
seg1.writtenLength = seg1.length;
|
seg1.writtenLength = seg1.length;
|
||||||
segmentMan.completeSegment2(1, seg1);
|
segmentMan.completeSegment(1, seg1);
|
||||||
|
|
||||||
Segment2 seg2;
|
Segment seg2;
|
||||||
segmentMan.getSegment2(seg2, 2);
|
segmentMan.getSegment(seg2, 2);
|
||||||
seg2.writtenLength = 512*1024;
|
seg2.writtenLength = 512*1024;
|
||||||
segmentMan.updateSegment2(2, seg2);
|
segmentMan.updateSegment(2, seg2);
|
||||||
|
|
||||||
Segment2 seg3;
|
Segment seg3;
|
||||||
segmentMan.getSegment2(seg3, 3);
|
segmentMan.getSegment(seg3, 3);
|
||||||
seg2.writtenLength = 512*1024;
|
seg2.writtenLength = 512*1024;
|
||||||
segmentMan.updateSegment2(2, seg2);
|
segmentMan.updateSegment(2, seg2);
|
||||||
|
|
||||||
segmentMan.save();
|
segmentMan.save();
|
||||||
|
|
||||||
|
@ -66,12 +68,12 @@ void SegmentManTest::testSaveAndLoad() {
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(segmentMan.totalSize, segmentManLoad.totalSize);
|
CPPUNIT_ASSERT_EQUAL(segmentMan.totalSize, segmentManLoad.totalSize);
|
||||||
|
|
||||||
Segment2 seg2Load;
|
Segment seg2Load;
|
||||||
segmentManLoad.getSegment2(seg2Load, 2, seg2.index);
|
segmentManLoad.getSegment(seg2Load, 2, seg2.index);
|
||||||
CPPUNIT_ASSERT_EQUAL(seg2, seg2Load);
|
CPPUNIT_ASSERT_EQUAL(seg2, seg2Load);
|
||||||
|
|
||||||
Segment2 seg3Load;
|
Segment seg3Load;
|
||||||
segmentManLoad.getSegment2(seg3Load, 3, seg3.index);
|
segmentManLoad.getSegment(seg3Load, 3, seg3.index);
|
||||||
CPPUNIT_ASSERT_EQUAL(seg3, seg3Load);
|
CPPUNIT_ASSERT_EQUAL(seg3, seg3Load);
|
||||||
|
|
||||||
CPPUNIT_ASSERT_EQUAL(segmentMan.getDownloadLength(), segmentManLoad.getDownloadLength());
|
CPPUNIT_ASSERT_EQUAL(segmentMan.getDownloadLength(), segmentManLoad.getDownloadLength());
|
||||||
|
@ -88,26 +90,36 @@ void SegmentManTest::testNullBitfield() {
|
||||||
op.put(PREF_SEGMENT_SIZE, Util::itos(1024*1024));
|
op.put(PREF_SEGMENT_SIZE, Util::itos(1024*1024));
|
||||||
segmentMan.option = &op;
|
segmentMan.option = &op;
|
||||||
|
|
||||||
Segment2 segment;
|
Segment segment;
|
||||||
CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
|
CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
|
||||||
CPPUNIT_ASSERT_EQUAL(Segment2(0, 0, 0), segment);
|
CPPUNIT_ASSERT_EQUAL(Segment(0, 0, 0), segment);
|
||||||
|
|
||||||
Segment2 segment2;
|
Segment segment2;
|
||||||
CPPUNIT_ASSERT(!segmentMan.getSegment2(segment2, 2));
|
CPPUNIT_ASSERT(!segmentMan.getSegment(segment2, 2));
|
||||||
|
|
||||||
long long int totalLength = 1024*1024;
|
long long int totalLength = 1024*1024;
|
||||||
segment.writtenLength = totalLength;
|
segment.writtenLength = totalLength;
|
||||||
CPPUNIT_ASSERT(segmentMan.updateSegment2(1, segment));
|
CPPUNIT_ASSERT(segmentMan.updateSegment(1, segment));
|
||||||
CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
|
CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
|
||||||
CPPUNIT_ASSERT(segmentMan.completeSegment2(1, segment));
|
CPPUNIT_ASSERT(segmentMan.completeSegment(1, segment));
|
||||||
CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
|
CPPUNIT_ASSERT_EQUAL(totalLength, segmentMan.getDownloadLength());
|
||||||
}
|
}
|
||||||
|
|
||||||
void SegmentManTest::testCancelSegmentOnNullBitfield() {
|
void SegmentManTest::testCancelSegmentOnNullBitfield() {
|
||||||
SegmentMan segmentMan;
|
SegmentMan segmentMan;
|
||||||
|
|
||||||
Segment2 segment;
|
Segment segment;
|
||||||
CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
|
CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
|
||||||
CPPUNIT_ASSERT(segmentMan.cancelSegment2(1, segment));
|
segmentMan.cancelSegment(1);
|
||||||
CPPUNIT_ASSERT(segmentMan.getSegment2(segment, 1));
|
CPPUNIT_ASSERT(segmentMan.getSegment(segment, 1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void SegmentManTest::testBug() {
|
||||||
|
SegmentMan segmentMan;
|
||||||
|
|
||||||
|
segmentMan.ufilename = "bug";
|
||||||
|
|
||||||
|
cerr << "########################################" << endl;
|
||||||
|
segmentMan.load();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue