mirror of https://github.com/aria2/aria2
2006-07-30 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
* src/TorrentMan.h: (advertisePiece): Updated doc. (getAdvertisedPieceIndexes): Updated doc. (removeAdvertisedPiece); New function. * src/TorrentMan.cc (FindElapsedHave): New function object. (removeAdvertisedPiece): New function. * src/HaveEraseCommand.h: New class. * src/HaveEraseCommand.cc: New class. * src/FeatureConfig.h: New class. * src/FeatureConfig.cc: New class. * src/Request.h (defaultPorts): Removed. * src/Request.cc (FeatureConfig.h): Included. (Request): Removed the statements related to defaultPorts. (parseUrl): Removed metalinkEnabled. Use FeatureConfig instead. A default port number is now retrieved from FeatureConfig. * src/main.cc (HaveEraseCommand.h): Included. (showVersion): Added the output of feature list. (main): Added HaveEraseCommand to command queue in BitTorrent downloading. * src/PeerInteractionCommand.h (chokeCheckPoint): Commented out. (periodicExecPoint): New variable. * src/PeerInteractionCommand.cc (executeInternal): Following methods are now called in at least every 0.5 seconds to reduce CPU usage: detectMessageFlooding(), peerInteraction->checkRequestSlot(), checkHave(), sendKeepAlive(). (checkLongTimePeerChoking): Commented out. * src/BitfieldMan.h (getNthBitIndex): Changed the method signature. (getMissingIndexRandomly): Changed the method signature. * src/BitfieldMan.cc (getNthBitIndex): Rewritten (getMissingIndexRandomly): Rewritten. (hasMissingPiece): Rewritten. (getMissingIndex): Refactored. (getMissingUnusedIndex); Refactored. (getMissingIndex): Refactored.pull/1/head
parent
ba4e5b776b
commit
928465b7bc
52
ChangeLog
52
ChangeLog
|
@ -1,3 +1,55 @@
|
|||
2006-07-30 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
* src/TorrentMan.h:
|
||||
(advertisePiece): Updated doc.
|
||||
(getAdvertisedPieceIndexes): Updated doc.
|
||||
(removeAdvertisedPiece); New function.
|
||||
|
||||
* src/TorrentMan.cc
|
||||
(FindElapsedHave): New function object.
|
||||
(removeAdvertisedPiece): New function.
|
||||
|
||||
* src/HaveEraseCommand.h: New class.
|
||||
* src/HaveEraseCommand.cc: New class.
|
||||
|
||||
* src/FeatureConfig.h: New class.
|
||||
* src/FeatureConfig.cc: New class.
|
||||
|
||||
* src/Request.h
|
||||
(defaultPorts): Removed.
|
||||
* src/Request.cc
|
||||
(FeatureConfig.h): Included.
|
||||
(Request): Removed the statements related to defaultPorts.
|
||||
(parseUrl): Removed metalinkEnabled. Use FeatureConfig instead.
|
||||
A default port number is now retrieved from FeatureConfig.
|
||||
|
||||
* src/main.cc
|
||||
(HaveEraseCommand.h): Included.
|
||||
(showVersion): Added the output of feature list.
|
||||
(main): Added HaveEraseCommand to command queue in BitTorrent
|
||||
downloading.
|
||||
|
||||
* src/PeerInteractionCommand.h
|
||||
(chokeCheckPoint): Commented out.
|
||||
(periodicExecPoint): New variable.
|
||||
* src/PeerInteractionCommand.cc
|
||||
(executeInternal): Following methods are now called in at least every
|
||||
0.5 seconds to reduce CPU usage:
|
||||
detectMessageFlooding(), peerInteraction->checkRequestSlot(),
|
||||
checkHave(), sendKeepAlive().
|
||||
(checkLongTimePeerChoking): Commented out.
|
||||
|
||||
* src/BitfieldMan.h
|
||||
(getNthBitIndex): Changed the method signature.
|
||||
(getMissingIndexRandomly): Changed the method signature.
|
||||
* src/BitfieldMan.cc
|
||||
(getNthBitIndex): Rewritten
|
||||
(getMissingIndexRandomly): Rewritten.
|
||||
(hasMissingPiece): Rewritten.
|
||||
(getMissingIndex): Refactored.
|
||||
(getMissingUnusedIndex); Refactored.
|
||||
(getMissingIndex): Refactored.
|
||||
|
||||
2006-07-27 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
|
||||
|
||||
* src/PeerMessage.h
|
||||
|
|
|
@ -74,45 +74,36 @@ int BitfieldMan::countSetBit(const unsigned char* bitfield, int len) const {
|
|||
return count;
|
||||
}
|
||||
|
||||
int BitfieldMan::getNthBitIndex(const unsigned char* bitfield, int len, int nth) const {
|
||||
int BitfieldMan::getNthBitIndex(const unsigned char bitfield, int nth) const {
|
||||
int index = -1;
|
||||
for(int i = 0; i < len && index == -1; i++) {
|
||||
unsigned char bit = bitfield[i];
|
||||
for(int bs = 7; bs >= 0; bs--) {
|
||||
unsigned char mask = 1 << bs;
|
||||
if(bit & mask) {
|
||||
nth--;
|
||||
if(nth == 0) {
|
||||
index = i*8+7-bs;
|
||||
break;
|
||||
}
|
||||
for(int bs = 7; bs >= 0; bs--) {
|
||||
unsigned char mask = 1 << bs;
|
||||
if(bitfield & mask) {
|
||||
nth--;
|
||||
if(nth == 0) {
|
||||
index = 7-bs;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return index;
|
||||
}
|
||||
|
||||
int BitfieldMan::getMissingIndexRandomly(const unsigned char* bitfield, int len, int randMax) const {
|
||||
int nth = 1+(int)(((double)randMax)*random()/(RAND_MAX+1.0));
|
||||
int
|
||||
BitfieldMan::getMissingIndexRandomly(const unsigned char* bitfield,
|
||||
int bitfieldLength) const
|
||||
{
|
||||
int byte = (int)(((double)bitfieldLength)*random()/(RAND_MAX+1.0));
|
||||
|
||||
int count = 0;
|
||||
int size = sizeof(unsigned int);
|
||||
for(int i = 0; i < len/size; i++) {
|
||||
int temp = Util::countBit(*(unsigned int*)&bitfield[i*size]);
|
||||
if(nth <= count+temp) {
|
||||
int t = i*size*8+getNthBitIndex(&bitfield[i*size], size, nth-count);
|
||||
return t;
|
||||
} else {
|
||||
count += temp;
|
||||
for(int i = 0; i < bitfieldLength; i++) {
|
||||
unsigned char mask = 0xff;
|
||||
if(bitfield[byte]&mask) {
|
||||
int index = byte*8+getNthBitIndex(bitfield[byte], 1);
|
||||
return index;
|
||||
}
|
||||
}
|
||||
for(int i = len-len%size; i < len; i++) {
|
||||
int temp = Util::countBit((unsigned int)bitfield[i]);
|
||||
if(nth <= count+temp) {
|
||||
int t = i*8+getNthBitIndex(&bitfield[i], 1, nth-count);
|
||||
return t;
|
||||
} else {
|
||||
count += temp;
|
||||
byte++;
|
||||
if(byte == bitfieldLength) {
|
||||
byte = 0;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
|
@ -122,28 +113,17 @@ bool BitfieldMan::hasMissingPiece(const unsigned char* peerBitfield, int length)
|
|||
if(bitfieldLength != length) {
|
||||
return false;
|
||||
}
|
||||
unsigned char* tempBitfield = new unsigned char[bitfieldLength];
|
||||
for(int i = 0; i < bitfieldLength; i++) {
|
||||
tempBitfield[i] = peerBitfield[i] & ~bitfield[i];
|
||||
if(filterEnabled) {
|
||||
tempBitfield[i] &= filterBitfield[i];
|
||||
}
|
||||
}
|
||||
bool retval = false;
|
||||
int size = sizeof(unsigned int);
|
||||
for(int i = 0; i < length/size; i++) {
|
||||
if(Util::countBit(*(unsigned int*)&tempBitfield[i*size]) > 0) {
|
||||
for(int i = 0; i < bitfieldLength; i++) {
|
||||
unsigned char temp = peerBitfield[i] & ~bitfield[i];
|
||||
if(filterEnabled) {
|
||||
temp &= filterBitfield[i];
|
||||
}
|
||||
if(temp&0xff) {
|
||||
retval = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
for(int i = length-length%size; i < length && retval == false; i++) {
|
||||
if(Util::countBit((unsigned int)tempBitfield[i]) > 0) {
|
||||
retval = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
delete [] tempBitfield;
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
@ -158,11 +138,7 @@ int BitfieldMan::getMissingIndex(const unsigned char* peerBitfield, int length)
|
|||
tempBitfield[i] &= filterBitfield[i];
|
||||
}
|
||||
}
|
||||
int max = countSetBit(tempBitfield, bitfieldLength);
|
||||
int index = -1;
|
||||
if(max > 0) {
|
||||
index = getMissingIndexRandomly(tempBitfield, bitfieldLength, max);
|
||||
}
|
||||
int index = getMissingIndexRandomly(tempBitfield, bitfieldLength);
|
||||
delete [] tempBitfield;
|
||||
return index;
|
||||
}
|
||||
|
@ -178,11 +154,7 @@ int BitfieldMan::getMissingUnusedIndex(const unsigned char* peerBitfield, int le
|
|||
tempBitfield[i] &= filterBitfield[i];
|
||||
}
|
||||
}
|
||||
int max = countSetBit(tempBitfield, bitfieldLength);
|
||||
int index = -1;
|
||||
if(max > 0) {
|
||||
index = getMissingIndexRandomly(tempBitfield, bitfieldLength, max);
|
||||
}
|
||||
int index = getMissingIndexRandomly(tempBitfield, bitfieldLength);
|
||||
delete [] tempBitfield;
|
||||
return index;
|
||||
}
|
||||
|
@ -230,11 +202,7 @@ int BitfieldMan::getMissingIndex() const {
|
|||
tempBitfield[i] &= filterBitfield[i];
|
||||
}
|
||||
}
|
||||
int max = countSetBit(tempBitfield, bitfieldLength);
|
||||
int index = -1;
|
||||
if(max > 0) {
|
||||
index = getMissingIndexRandomly(tempBitfield, bitfieldLength, max);
|
||||
}
|
||||
int index = getMissingIndexRandomly(tempBitfield, bitfieldLength);
|
||||
delete [] tempBitfield;
|
||||
return index;
|
||||
}
|
||||
|
|
|
@ -38,8 +38,8 @@ private:
|
|||
int blocks;
|
||||
bool filterEnabled;
|
||||
int countSetBit(const unsigned char* bitfield, int len) const;
|
||||
int getNthBitIndex(const unsigned char* bitfield, int len, int nth) const;
|
||||
int getMissingIndexRandomly(const unsigned char* bitfield, int len, int randMax) const;
|
||||
int getNthBitIndex(const unsigned char bit, int nth) const;
|
||||
int getMissingIndexRandomly(const unsigned char* bitfield, int len) const;
|
||||
bool isBitSetInternal(const unsigned char* bitfield, int index) const;
|
||||
bool setBitInternal(unsigned char* bitfield, int index, bool on);
|
||||
bool setFilterBit(int index);
|
||||
|
|
|
@ -0,0 +1,56 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - a simple utility for downloading files faster
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/* copyright --> */
|
||||
#include "FeatureConfig.h"
|
||||
|
||||
string FeatureConfig::FEATURE_HTTP = "http";
|
||||
string FeatureConfig::FEATURE_HTTPS = "https";
|
||||
string FeatureConfig::FEATURE_FTP = "ftp";
|
||||
string FeatureConfig::FEATURE_BITTORRENT = "bittorrent";
|
||||
string FeatureConfig::FEATURE_METALINK = "metalink";
|
||||
|
||||
static ProtocolPortMap::value_type defaultPortsArray[] = {
|
||||
ProtocolPortMap::value_type(FeatureConfig::FEATURE_HTTP, 80),
|
||||
ProtocolPortMap::value_type(FeatureConfig::FEATURE_HTTPS, 443),
|
||||
ProtocolPortMap::value_type(FeatureConfig::FEATURE_FTP, 21),
|
||||
};
|
||||
|
||||
ProtocolPortMap FeatureConfig::defaultPorts(&defaultPortsArray[0],
|
||||
&defaultPortsArray[3]);
|
||||
|
||||
static SupportedFeatureMap::value_type supportedFeaturesArray[] = {
|
||||
SupportedFeatureMap::value_type(FeatureConfig::FEATURE_HTTP, true),
|
||||
#ifdef ENABLE_SSL
|
||||
SupportedFeatureMap::value_type(FeatureConfig::FEATURE_HTTPS, true),
|
||||
#endif // ENABLE_SSL
|
||||
SupportedFeatureMap::value_type(FeatureConfig::FEATURE_FTP, true),
|
||||
#ifdef ENABLE_BITTORRENT
|
||||
SupportedFeatureMap::value_type(FeatureConfig::FEATURE_BITTORRENT, true),
|
||||
#endif // ENABLE_BITTORRENT
|
||||
#ifdef ENABLE_METALINK
|
||||
SupportedFeatureMap::value_type(FeatureConfig::FEATURE_METALINK, true),
|
||||
#endif // ENABLE_METALINK
|
||||
};
|
||||
|
||||
SupportedFeatureMap
|
||||
FeatureConfig::supportedFeatures(&supportedFeaturesArray[0],
|
||||
&supportedFeaturesArray[sizeof(supportedFeaturesArray)/sizeof(SupportedFeatureMap::value_type)]);
|
||||
|
|
@ -0,0 +1,80 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - a simple utility for downloading files faster
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/* copyright --> */
|
||||
#ifndef _D_FEATURE_CONFIG_H_
|
||||
#define _D_FEATURE_CONFIG_H_
|
||||
|
||||
#include "common.h"
|
||||
#include <map>
|
||||
|
||||
typedef map<string, int> ProtocolPortMap;
|
||||
typedef map<string, bool> SupportedFeatureMap;
|
||||
|
||||
class FeatureConfig {
|
||||
private:
|
||||
static ProtocolPortMap defaultPorts;
|
||||
static SupportedFeatureMap supportedFeatures;
|
||||
public:
|
||||
static string FEATURE_HTTP;
|
||||
static string FEATURE_HTTPS;
|
||||
static string FEATURE_FTP;
|
||||
static string FEATURE_BITTORRENT;
|
||||
static string FEATURE_METALINK;
|
||||
|
||||
static int getDefaultPort(const string& protocol) {
|
||||
if(defaultPorts.count(protocol)) {
|
||||
return defaultPorts[protocol];
|
||||
} else {
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static bool isSupported(const string& protocol) {
|
||||
if(supportedFeatures.count(protocol)) {
|
||||
return supportedFeatures[protocol];
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
static string getConfigurationSummary() {
|
||||
string protos[] = {
|
||||
FEATURE_HTTP,
|
||||
FEATURE_HTTPS,
|
||||
FEATURE_FTP,
|
||||
FEATURE_BITTORRENT,
|
||||
FEATURE_METALINK
|
||||
};
|
||||
string summary;
|
||||
for(int i = 0; i < (int)(sizeof(protos)/sizeof(string)); i++) {
|
||||
summary += protos[i];
|
||||
if(isSupported(protos[i])) {
|
||||
summary += ": yes";
|
||||
} else {
|
||||
summary += ": no";
|
||||
}
|
||||
summary += "\n";
|
||||
}
|
||||
return summary;
|
||||
}
|
||||
};
|
||||
|
||||
#endif // _D_FEATURE_CONFIG_H_
|
|
@ -0,0 +1,34 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - a simple utility for downloading files faster
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/* copyright --> */
|
||||
#include "HaveEraseCommand.h"
|
||||
|
||||
bool HaveEraseCommand::execute() {
|
||||
if(e->torrentMan->isHalt()) {
|
||||
return true;
|
||||
}
|
||||
if(cp.elapsed(interval)) {
|
||||
cp.reset();
|
||||
e->torrentMan->removeAdvertisedPiece(5);
|
||||
}
|
||||
e->commands.push_back(this);
|
||||
return false;
|
||||
}
|
|
@ -0,0 +1,44 @@
|
|||
/* <!-- copyright */
|
||||
/*
|
||||
* aria2 - a simple utility for downloading files faster
|
||||
*
|
||||
* 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
/* copyright --> */
|
||||
#ifndef _D_HAVE_ERASE_COMMAND_H_
|
||||
#define _D_HAVE_ERASE_COMMAND_H_
|
||||
|
||||
#include "Command.h"
|
||||
#include "TorrentDownloadEngine.h"
|
||||
|
||||
class HaveEraseCommand : public Command {
|
||||
private:
|
||||
TorrentDownloadEngine* e;
|
||||
Time cp;
|
||||
int interval;
|
||||
public:
|
||||
HaveEraseCommand(int cuid, TorrentDownloadEngine* e, int interval)
|
||||
:Command(cuid),
|
||||
e(e),
|
||||
interval(interval) {}
|
||||
|
||||
virtual ~HaveEraseCommand() {}
|
||||
|
||||
virtual bool execute();
|
||||
};
|
||||
|
||||
#endif // _D_HAVE_ERASE_COMMAND_H_
|
|
@ -51,7 +51,8 @@ SRCS = Socket.h\
|
|||
LogFactory.cc LogFactory.h\
|
||||
NullLogger.h\
|
||||
Time.cc Time.h\
|
||||
SharedHandle.h
|
||||
SharedHandle.h\
|
||||
FeatureConfig.cc FeatureConfig.h
|
||||
|
||||
if ENABLE_BITTORRENT
|
||||
SRCS += MetaEntry.h\
|
||||
|
@ -106,7 +107,8 @@ SRCS += MetaEntry.h\
|
|||
AllowedFastMessage.cc AllowedFastMessage.h\
|
||||
SuggestPieceMessage.cc SuggestPieceMessage.h\
|
||||
SimplePeerMessage.cc SimplePeerMessage.h\
|
||||
PeerMessageFactory.cc PeerMessageFactory.h
|
||||
PeerMessageFactory.cc PeerMessageFactory.h\
|
||||
HaveEraseCommand.cc HaveEraseCommand.h
|
||||
endif # ENABLE_BITTORRENT
|
||||
|
||||
if ENABLE_METALINK
|
||||
|
@ -121,8 +123,8 @@ noinst_LIBRARIES = libaria2c.a
|
|||
libaria2c_a_SOURCES = $(SRCS)
|
||||
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
|
||||
@LIBGCRYPT_LIBS@ @OPENSSL_LIBS@ @XML_LIBS@
|
||||
#aria2c_LDFLAGS = -pg
|
||||
aria2c_LDFLAGS = -pg
|
||||
AM_CPPFLAGS = -Wall\
|
||||
-I../lib -I../intl -I$(top_srcdir)/intl\
|
||||
@LIBGNUTLS_CFLAGS@ @LIBGCRYPT_CFLAGS@ @OPENSSL_CFLAGS@ @XML_CPPFLAGS@\
|
||||
-D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@# -pg
|
||||
-D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@ -pg
|
|
@ -90,7 +90,8 @@ bin_PROGRAMS = aria2c$(EXEEXT)
|
|||
@ENABLE_BITTORRENT_TRUE@ AllowedFastMessage.cc AllowedFastMessage.h\
|
||||
@ENABLE_BITTORRENT_TRUE@ SuggestPieceMessage.cc SuggestPieceMessage.h\
|
||||
@ENABLE_BITTORRENT_TRUE@ SimplePeerMessage.cc SimplePeerMessage.h\
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.cc PeerMessageFactory.h
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.cc PeerMessageFactory.h\
|
||||
@ENABLE_BITTORRENT_TRUE@ HaveEraseCommand.cc HaveEraseCommand.h
|
||||
|
||||
@ENABLE_METALINK_TRUE@am__append_2 = Metalinker.cc Metalinker.h\
|
||||
@ENABLE_METALINK_TRUE@ MetalinkEntry.cc MetalinkEntry.h\
|
||||
|
@ -154,12 +155,13 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
|||
AbstractDiskWriter.h File.cc File.h Option.cc Option.h \
|
||||
Base64.cc Base64.h CookieBox.cc CookieBox.h messageDigest.h \
|
||||
LogFactory.cc LogFactory.h NullLogger.h Time.cc Time.h \
|
||||
SharedHandle.h MetaEntry.h Data.cc Data.h Dictionary.cc \
|
||||
Dictionary.h List.cc List.h MetaFileUtil.cc MetaFileUtil.h \
|
||||
MetaEntryVisitor.h ShaVisitor.cc ShaVisitor.h TorrentMan.cc \
|
||||
TorrentMan.h PeerConnection.cc PeerConnection.h \
|
||||
PeerMessageUtil.cc PeerMessageUtil.h PeerAbstractCommand.cc \
|
||||
PeerAbstractCommand.h PeerInitiateConnectionCommand.cc \
|
||||
SharedHandle.h FeatureConfig.cc FeatureConfig.h MetaEntry.h \
|
||||
Data.cc Data.h Dictionary.cc Dictionary.h List.cc List.h \
|
||||
MetaFileUtil.cc MetaFileUtil.h MetaEntryVisitor.h \
|
||||
ShaVisitor.cc ShaVisitor.h TorrentMan.cc TorrentMan.h \
|
||||
PeerConnection.cc PeerConnection.h PeerMessageUtil.cc \
|
||||
PeerMessageUtil.h PeerAbstractCommand.cc PeerAbstractCommand.h \
|
||||
PeerInitiateConnectionCommand.cc \
|
||||
PeerInitiateConnectionCommand.h PeerInteractionCommand.cc \
|
||||
PeerInteractionCommand.h Peer.cc Peer.h BitfieldMan.cc \
|
||||
BitfieldMan.h TorrentDownloadEngine.cc TorrentDownloadEngine.h \
|
||||
|
@ -188,9 +190,9 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
|||
RejectMessage.h AllowedFastMessage.cc AllowedFastMessage.h \
|
||||
SuggestPieceMessage.cc SuggestPieceMessage.h \
|
||||
SimplePeerMessage.cc SimplePeerMessage.h PeerMessageFactory.cc \
|
||||
PeerMessageFactory.h Metalinker.cc Metalinker.h \
|
||||
MetalinkEntry.cc MetalinkEntry.h MetalinkResource.cc \
|
||||
MetalinkResource.h MetalinkProcessor.h \
|
||||
PeerMessageFactory.h HaveEraseCommand.cc HaveEraseCommand.h \
|
||||
Metalinker.cc Metalinker.h MetalinkEntry.cc MetalinkEntry.h \
|
||||
MetalinkResource.cc MetalinkResource.h MetalinkProcessor.h \
|
||||
Xml2MetalinkProcessor.cc Xml2MetalinkProcessor.h
|
||||
@ENABLE_BITTORRENT_TRUE@am__objects_1 = Data.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ Dictionary.$(OBJEXT) List.$(OBJEXT) \
|
||||
|
@ -238,7 +240,8 @@ am__libaria2c_a_SOURCES_DIST = Socket.h SocketCore.cc SocketCore.h \
|
|||
@ENABLE_BITTORRENT_TRUE@ AllowedFastMessage.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ SuggestPieceMessage.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ SimplePeerMessage.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.$(OBJEXT)
|
||||
@ENABLE_BITTORRENT_TRUE@ PeerMessageFactory.$(OBJEXT) \
|
||||
@ENABLE_BITTORRENT_TRUE@ HaveEraseCommand.$(OBJEXT)
|
||||
@ENABLE_METALINK_TRUE@am__objects_2 = Metalinker.$(OBJEXT) \
|
||||
@ENABLE_METALINK_TRUE@ MetalinkEntry.$(OBJEXT) \
|
||||
@ENABLE_METALINK_TRUE@ MetalinkResource.$(OBJEXT) \
|
||||
|
@ -266,7 +269,7 @@ am__objects_3 = SocketCore.$(OBJEXT) Command.$(OBJEXT) \
|
|||
PreAllocationDiskWriter.$(OBJEXT) AbstractDiskWriter.$(OBJEXT) \
|
||||
File.$(OBJEXT) Option.$(OBJEXT) Base64.$(OBJEXT) \
|
||||
CookieBox.$(OBJEXT) LogFactory.$(OBJEXT) Time.$(OBJEXT) \
|
||||
$(am__objects_1) $(am__objects_2)
|
||||
FeatureConfig.$(OBJEXT) $(am__objects_1) $(am__objects_2)
|
||||
am_libaria2c_a_OBJECTS = $(am__objects_3)
|
||||
libaria2c_a_OBJECTS = $(am_libaria2c_a_OBJECTS)
|
||||
am__installdirs = "$(DESTDIR)$(bindir)"
|
||||
|
@ -455,17 +458,18 @@ SRCS = Socket.h SocketCore.cc SocketCore.h Command.cc Command.h \
|
|||
AbstractDiskWriter.h File.cc File.h Option.cc Option.h \
|
||||
Base64.cc Base64.h CookieBox.cc CookieBox.h messageDigest.h \
|
||||
LogFactory.cc LogFactory.h NullLogger.h Time.cc Time.h \
|
||||
SharedHandle.h $(am__append_1) $(am__append_2)
|
||||
SharedHandle.h FeatureConfig.cc FeatureConfig.h \
|
||||
$(am__append_1) $(am__append_2)
|
||||
noinst_LIBRARIES = libaria2c.a
|
||||
libaria2c_a_SOURCES = $(SRCS)
|
||||
aria2c_LDADD = libaria2c.a @LIBINTL@ @ALLOCA@ @LIBGNUTLS_LIBS@\
|
||||
@LIBGCRYPT_LIBS@ @OPENSSL_LIBS@ @XML_LIBS@
|
||||
|
||||
#aria2c_LDFLAGS = -pg
|
||||
aria2c_LDFLAGS = -pg
|
||||
AM_CPPFLAGS = -Wall\
|
||||
-I../lib -I../intl -I$(top_srcdir)/intl\
|
||||
@LIBGNUTLS_CFLAGS@ @LIBGCRYPT_CFLAGS@ @OPENSSL_CFLAGS@ @XML_CPPFLAGS@\
|
||||
-D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@# -pg
|
||||
-D_FILE_OFFSET_BITS=64 -DLOCALEDIR=\"$(localedir)\" @DEFS@ -pg
|
||||
|
||||
all: all-am
|
||||
|
||||
|
@ -563,6 +567,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DiskAdaptor.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DownloadCommand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/DownloadEngine.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FeatureConfig.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/File.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FtpConnection.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FtpDownloadCommand.Po@am__quote@
|
||||
|
@ -572,6 +577,7 @@ distclean-compile:
|
|||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/FtpTunnelResponseCommand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HandshakeMessage.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HaveAllMessage.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HaveEraseCommand.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HaveMessage.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HaveNoneMessage.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HttpConnection.Po@am__quote@
|
||||
|
|
|
@ -115,14 +115,18 @@ bool PeerInteractionCommand::executeInternal() {
|
|||
case WIRED:
|
||||
peerInteraction->syncPiece();
|
||||
decideChoking();
|
||||
receiveMessages();
|
||||
detectMessageFlooding();
|
||||
|
||||
peerInteraction->checkRequestSlot();
|
||||
if(periodicExecPoint.elapsedInMillis(500)) {
|
||||
periodicExecPoint.reset();
|
||||
detectMessageFlooding();
|
||||
peerInteraction->checkRequestSlot();
|
||||
checkHave();
|
||||
sendKeepAlive();
|
||||
}
|
||||
receiveMessages();
|
||||
|
||||
peerInteraction->addRequests();
|
||||
checkHave();
|
||||
peerInteraction->sendMessages(e->getUploadSpeed());
|
||||
sendKeepAlive();
|
||||
break;
|
||||
}
|
||||
if(peerInteraction->countMessageInQueue() > 0) {
|
||||
|
@ -152,6 +156,7 @@ void PeerInteractionCommand::detectMessageFlooding() {
|
|||
}
|
||||
}
|
||||
|
||||
/*
|
||||
void PeerInteractionCommand::checkLongTimePeerChoking() {
|
||||
if(e->torrentMan->downloadComplete()) {
|
||||
return;
|
||||
|
@ -165,6 +170,7 @@ void PeerInteractionCommand::checkLongTimePeerChoking() {
|
|||
chokeCheckPoint.reset();
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
void PeerInteractionCommand::decideChoking() {
|
||||
if(peer->shouldBeChoking()) {
|
||||
|
|
|
@ -38,9 +38,10 @@ private:
|
|||
PeerInteraction* peerInteraction;
|
||||
|
||||
Time keepAliveCheckPoint;
|
||||
Time chokeCheckPoint;
|
||||
//Time chokeCheckPoint;
|
||||
Time freqCheckPoint;
|
||||
Time haveCheckTime;
|
||||
Time periodicExecPoint;
|
||||
int chokeUnchokeCount;
|
||||
int haveCount;
|
||||
int keepAliveCount;
|
||||
|
|
|
@ -21,14 +21,9 @@
|
|||
/* copyright --> */
|
||||
#include "Request.h"
|
||||
#include "Util.h"
|
||||
#include "FeatureConfig.h"
|
||||
|
||||
Request::Request():port(0), tryCount(0), isTorrent(false) {
|
||||
defaultPorts["http"] = 80;
|
||||
#ifdef ENABLE_SSL
|
||||
// for SSL
|
||||
defaultPorts["https"] = 443;
|
||||
#endif // ENABLE_SSL
|
||||
defaultPorts["ftp"] = 21;
|
||||
seg.sp = 0;
|
||||
seg.ep = 0;
|
||||
seg.ds = 0;
|
||||
|
@ -56,16 +51,11 @@ bool Request::redirectUrl(const string& url) {
|
|||
}
|
||||
|
||||
bool Request::parseUrl(const string& url) {
|
||||
#ifdef ENABLE_METALINK
|
||||
bool metalinkEnabled = true;
|
||||
#else
|
||||
bool metalinkEnabled = false;
|
||||
#endif
|
||||
|
||||
string tempUrl;
|
||||
string::size_type sharpIndex = url.find("#");
|
||||
if(sharpIndex != string::npos) {
|
||||
if(metalinkEnabled && url.find(METALINK_MARK) == sharpIndex) {
|
||||
if(FeatureConfig::isSupported(FeatureConfig::FEATURE_METALINK) &&
|
||||
url.find(METALINK_MARK) == sharpIndex) {
|
||||
tempUrl = url.substr(sharpIndex+strlen(METALINK_MARK));
|
||||
} else {
|
||||
tempUrl = url.substr(0, sharpIndex);
|
||||
|
@ -92,7 +82,7 @@ bool Request::parseUrl(const string& url) {
|
|||
if(hp == string::npos) return false;
|
||||
protocol = tempUrl.substr(0, hp);
|
||||
int defPort;
|
||||
if((defPort = defaultPorts[protocol]) == 0) {
|
||||
if((defPort = FeatureConfig::getDefaultPort(protocol)) == 0) {
|
||||
return false;
|
||||
}
|
||||
hp += 3;
|
||||
|
|
|
@ -57,7 +57,6 @@ private:
|
|||
int port;
|
||||
string dir;
|
||||
string file;
|
||||
map<string, int> defaultPorts;
|
||||
int tryCount;
|
||||
int trackerEvent;
|
||||
bool parseUrl(const string& url);
|
||||
|
|
|
@ -660,7 +660,9 @@ void TorrentMan::advertisePiece(int cuid, int index) {
|
|||
|
||||
PieceIndexes
|
||||
TorrentMan::getAdvertisedPieceIndexes(int myCuid,
|
||||
const Time& lastCheckTime) const {
|
||||
const Time& lastCheckTime
|
||||
) const
|
||||
{
|
||||
PieceIndexes indexes;
|
||||
for(Haves::const_iterator itr = haves.begin(); itr != haves.end(); itr++) {
|
||||
const Haves::value_type& have = *itr;
|
||||
|
@ -674,3 +676,30 @@ TorrentMan::getAdvertisedPieceIndexes(int myCuid,
|
|||
}
|
||||
return indexes;
|
||||
}
|
||||
|
||||
class FindElapsedHave
|
||||
{
|
||||
private:
|
||||
int elapsed;
|
||||
public:
|
||||
FindElapsedHave(int elapsed):elapsed(elapsed) {}
|
||||
|
||||
bool operator()(const HaveEntry& have) {
|
||||
if(have.registeredTime.elapsed(elapsed)) {
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
void
|
||||
TorrentMan::removeAdvertisedPiece(int elapsed)
|
||||
{
|
||||
Haves::iterator itr = find_if(haves.begin(), haves.end(), FindElapsedHave(elapsed));
|
||||
if(itr != haves.end()) {
|
||||
logger->debug("Removed %d have entries.", haves.end()-itr);
|
||||
haves.erase(itr, haves.end());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -176,9 +176,15 @@ public:
|
|||
|
||||
string getPieceHash(int index) const;
|
||||
|
||||
// Addes piece index to advertise to other commands. They send have message
|
||||
// based on this information.
|
||||
void advertisePiece(int cuid, int index);
|
||||
|
||||
// Returns piece index which is not advertised by the caller command and
|
||||
// newer than lastCheckTime.
|
||||
PieceIndexes getAdvertisedPieceIndexes(int myCuid, const Time& lastCheckTime) const;
|
||||
// Removes have entry if specified seconds have elapsed since its registration.
|
||||
void removeAdvertisedPiece(int elapsed);
|
||||
|
||||
long long int getTotalLength() const { return totalLength; }
|
||||
void setTotalLength(long long int length) { totalLength = length; }
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
#include "Util.h"
|
||||
#include "InitiateConnectionCommandFactory.h"
|
||||
#include "prefs.h"
|
||||
#include "FeatureConfig.h"
|
||||
|
||||
#ifdef ENABLE_BITTORRENT
|
||||
# include "TorrentConsoleDownloadEngine.h"
|
||||
|
@ -37,6 +38,7 @@
|
|||
# include "TorrentAutoSaveCommand.h"
|
||||
# include "TrackerWatcherCommand.h"
|
||||
# include "TrackerUpdateCommand.h"
|
||||
# include "HaveEraseCommand.h"
|
||||
# include "ByteArrayDiskWriter.h"
|
||||
# include "PeerChokeCommand.h"
|
||||
#endif // ENABLE_BITTORRENT
|
||||
|
@ -129,6 +131,9 @@ void showVersion() {
|
|||
cout << PACKAGE << _(" version ") << PACKAGE_VERSION << endl;
|
||||
cout << "Copyright (C) 2006 Tatsuhiro Tsujikawa" << endl;
|
||||
cout << endl;
|
||||
cout << "**Configuration**" << endl;
|
||||
cout << FeatureConfig::getConfigurationSummary();
|
||||
cout << endl;
|
||||
cout <<
|
||||
_("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"
|
||||
|
@ -881,6 +886,8 @@ int main(int argc, char* argv[]) {
|
|||
op->getAsInt(PREF_AUTO_SAVE_INTERVAL)));
|
||||
te->commands.push_back(new PeerChokeCommand(te->torrentMan->getNewCuid(),
|
||||
10, te));
|
||||
te->commands.push_back(new HaveEraseCommand(te->torrentMan->getNewCuid(),
|
||||
te, 10));
|
||||
te->run();
|
||||
|
||||
if(te->torrentMan->downloadComplete()) {
|
||||
|
|
|
@ -11,6 +11,7 @@ class BitfieldManTest:public CppUnit::TestFixture {
|
|||
CPPUNIT_TEST(testGetFirstMissingUnusedIndex);
|
||||
CPPUNIT_TEST(testIsAllBitSet);
|
||||
CPPUNIT_TEST(testFilter);
|
||||
CPPUNIT_TEST(testGetMissingIndex);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
private:
|
||||
|
||||
|
@ -22,6 +23,7 @@ public:
|
|||
void testGetFirstMissingUnusedIndex();
|
||||
void testIsAllBitSet();
|
||||
void testFilter();
|
||||
void testGetMissingIndex();
|
||||
};
|
||||
|
||||
|
||||
|
@ -136,3 +138,74 @@ void BitfieldManTest::testFilter() {
|
|||
btman2.enableFilter();
|
||||
CPPUNIT_ASSERT_EQUAL((long long int)31, btman2.getFilteredTotalLength());
|
||||
}
|
||||
|
||||
void BitfieldManTest::testGetMissingIndex() {
|
||||
srandom(100);
|
||||
|
||||
BitfieldMan bt1(1024, 1024*256);
|
||||
|
||||
unsigned char bitArray[] = {
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
};
|
||||
CPPUNIT_ASSERT_EQUAL(80, bt1.getMissingIndex(bitArray, 32));
|
||||
|
||||
unsigned char bitArray2[] = {
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0x00, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
};
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(80, bt1.getMissingIndex(bitArray2, 32));
|
||||
|
||||
unsigned char bitArray3[] = {
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x0f,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
};
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(60, bt1.getMissingIndex(bitArray3, 32));
|
||||
|
||||
unsigned char bitArray4[] = {
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(0, bt1.getMissingIndex(bitArray4, 32));
|
||||
|
||||
unsigned char bitArray5[] = {
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
0x00, 0x00, 0x00, 0x00,
|
||||
};
|
||||
|
||||
CPPUNIT_ASSERT_EQUAL(-1, bt1.getMissingIndex(bitArray5, 32));
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
#include "FeatureConfig.h"
|
||||
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
|
||||
class FeatureConfigTest:public CppUnit::TestFixture {
|
||||
|
||||
CPPUNIT_TEST_SUITE(FeatureConfigTest);
|
||||
CPPUNIT_TEST(testGetDefaultPort);
|
||||
CPPUNIT_TEST(testIsSupported);
|
||||
CPPUNIT_TEST(testGetConfigurationSummary);
|
||||
CPPUNIT_TEST_SUITE_END();
|
||||
|
||||
public:
|
||||
void testGetDefaultPort();
|
||||
void testIsSupported();
|
||||
void testGetConfigurationSummary();
|
||||
};
|
||||
|
||||
|
||||
CPPUNIT_TEST_SUITE_REGISTRATION(FeatureConfigTest);
|
||||
|
||||
void FeatureConfigTest::testGetDefaultPort() {
|
||||
CPPUNIT_ASSERT_EQUAL(80, FeatureConfig::getDefaultPort("http"));
|
||||
CPPUNIT_ASSERT_EQUAL(443, FeatureConfig::getDefaultPort("https"));
|
||||
CPPUNIT_ASSERT_EQUAL(21, FeatureConfig::getDefaultPort("ftp"));
|
||||
}
|
||||
|
||||
void FeatureConfigTest::testIsSupported() {
|
||||
CPPUNIT_ASSERT_EQUAL(true, FeatureConfig::isSupported("http"));
|
||||
CPPUNIT_ASSERT_EQUAL(true, FeatureConfig::isSupported("https"));
|
||||
CPPUNIT_ASSERT_EQUAL(true, FeatureConfig::isSupported("ftp"));
|
||||
CPPUNIT_ASSERT_EQUAL(false, FeatureConfig::isSupported("ftps"));
|
||||
}
|
||||
|
||||
void FeatureConfigTest::testGetConfigurationSummary() {
|
||||
CPPUNIT_ASSERT_EQUAL(string("http: yes\n")
|
||||
+"https: yes\n"
|
||||
+"ftp: yes\n"
|
||||
+"bittorrent: yes\n"
|
||||
+"metalink: yes\n",
|
||||
FeatureConfig::getConfigurationSummary());
|
||||
}
|
|
@ -34,7 +34,8 @@ aria2c_SOURCES = AllTest.cc\
|
|||
SuggestPieceMessageTest.cc\
|
||||
Xml2MetalinkProcessorTest.cc\
|
||||
MetalinkerTest.cc\
|
||||
MetalinkEntryTest.cc
|
||||
MetalinkEntryTest.cc\
|
||||
FeatureConfigTest.cc
|
||||
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
||||
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
||||
|
||||
|
|
|
@ -73,7 +73,7 @@ am_aria2c_OBJECTS = AllTest.$(OBJEXT) RequestTest.$(OBJEXT) \
|
|||
RejectMessageTest.$(OBJEXT) AllowedFastMessageTest.$(OBJEXT) \
|
||||
SuggestPieceMessageTest.$(OBJEXT) \
|
||||
Xml2MetalinkProcessorTest.$(OBJEXT) MetalinkerTest.$(OBJEXT) \
|
||||
MetalinkEntryTest.$(OBJEXT)
|
||||
MetalinkEntryTest.$(OBJEXT) FeatureConfigTest.$(OBJEXT)
|
||||
aria2c_OBJECTS = $(am_aria2c_OBJECTS)
|
||||
am__DEPENDENCIES_1 =
|
||||
aria2c_DEPENDENCIES = ../src/libaria2c.a $(am__DEPENDENCIES_1)
|
||||
|
@ -255,7 +255,8 @@ aria2c_SOURCES = AllTest.cc\
|
|||
SuggestPieceMessageTest.cc\
|
||||
Xml2MetalinkProcessorTest.cc\
|
||||
MetalinkerTest.cc\
|
||||
MetalinkEntryTest.cc
|
||||
MetalinkEntryTest.cc\
|
||||
FeatureConfigTest.cc
|
||||
|
||||
#aria2c_CXXFLAGS = ${CPPUNIT_CFLAGS} -I../src -I../lib -Wall -D_FILE_OFFSET_BITS=64
|
||||
#aria2c_LDFLAGS = ${CPPUNIT_LIBS}
|
||||
|
@ -328,6 +329,7 @@ distclean-compile:
|
|||
@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)/DictionaryTest.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)/HaveAllMessageTest.Po@am__quote@
|
||||
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/HaveMessageTest.Po@am__quote@
|
||||
|
|
|
@ -1,4 +1,12 @@
|
|||
#include "PeerMessageUtil.h"
|
||||
#include "UnchokeMessage.h"
|
||||
#include "InterestedMessage.h"
|
||||
#include "NotInterestedMessage.h"
|
||||
#include "HaveMessage.h"
|
||||
#include "BitfieldMessage.h"
|
||||
#include "RequestMessage.h"
|
||||
#include "PieceMessage.h"
|
||||
#include "CancelMessage.h"
|
||||
#include <netinet/in.h>
|
||||
#include <string>
|
||||
#include <cppunit/extensions/HelperMacros.h>
|
||||
|
|
Loading…
Reference in New Issue