mirror of https://github.com/aria2/aria2
2010-05-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
Added totalLength, completedLength, uploadLength, bitfield, downloadSpeed, uploadSpeed, infoHash, numSeeders, pieceLength, numPieces, connections and dir to the response of aria2.tellStopped XML-RPC method. aria2.tellWaiting now always returns numSeeders for BitTorrent download. * src/DownloadResult.h * src/RequestGroup.cc * src/RequestGroup.h * src/XmlRpcMethodImpl.cc * test/XmlRpcMethodTest.ccpull/1/head
parent
92f84f71f5
commit
1a29132b91
13
ChangeLog
13
ChangeLog
|
@ -1,3 +1,16 @@
|
||||||
|
2010-05-22 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
|
Added totalLength, completedLength, uploadLength, bitfield,
|
||||||
|
downloadSpeed, uploadSpeed, infoHash, numSeeders, pieceLength,
|
||||||
|
numPieces, connections and dir to the response of
|
||||||
|
aria2.tellStopped XML-RPC method. aria2.tellWaiting now always
|
||||||
|
returns numSeeders for BitTorrent download.
|
||||||
|
* src/DownloadResult.h
|
||||||
|
* src/RequestGroup.cc
|
||||||
|
* src/RequestGroup.h
|
||||||
|
* src/XmlRpcMethodImpl.cc
|
||||||
|
* test/XmlRpcMethodTest.cc
|
||||||
|
|
||||||
2010-05-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
2010-05-21 Tatsuhiro Tsujikawa <t-tujikawa@users.sourceforge.net>
|
||||||
|
|
||||||
Fixed the bug that connection pooling does not take into account
|
Fixed the bug that connection pooling does not take into account
|
||||||
|
|
|
@ -79,6 +79,22 @@ public:
|
||||||
SharedHandle<Option> option;
|
SharedHandle<Option> option;
|
||||||
|
|
||||||
SharedHandle<MetadataInfo> metadataInfo;
|
SharedHandle<MetadataInfo> metadataInfo;
|
||||||
|
|
||||||
|
uint64_t totalLength;
|
||||||
|
|
||||||
|
uint64_t completedLength;
|
||||||
|
|
||||||
|
uint64_t uploadLength;
|
||||||
|
|
||||||
|
std::string bitfieldStr;
|
||||||
|
|
||||||
|
std::string infoHashStr;
|
||||||
|
|
||||||
|
size_t pieceLength;
|
||||||
|
|
||||||
|
size_t numPieces;
|
||||||
|
|
||||||
|
std::string dir;
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef SharedHandle<DownloadResult> DownloadResultHandle;
|
typedef SharedHandle<DownloadResult> DownloadResultHandle;
|
||||||
|
|
|
@ -101,6 +101,7 @@
|
||||||
# include "DHTEntryPointNameResolveCommand.h"
|
# include "DHTEntryPointNameResolveCommand.h"
|
||||||
# include "LongestSequencePieceSelector.h"
|
# include "LongestSequencePieceSelector.h"
|
||||||
# include "PriorityPieceSelector.h"
|
# include "PriorityPieceSelector.h"
|
||||||
|
# include "bittorrent_helper.h"
|
||||||
#endif // ENABLE_BITTORRENT
|
#endif // ENABLE_BITTORRENT
|
||||||
#ifdef ENABLE_METALINK
|
#ifdef ENABLE_METALINK
|
||||||
# include "MetalinkPostDownloadHandler.h"
|
# include "MetalinkPostDownloadHandler.h"
|
||||||
|
@ -850,7 +851,7 @@ void RequestGroup::decreaseNumCommand()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TransferStat RequestGroup::calculateStat()
|
TransferStat RequestGroup::calculateStat() const
|
||||||
{
|
{
|
||||||
TransferStat stat;
|
TransferStat stat;
|
||||||
#ifdef ENABLE_BITTORRENT
|
#ifdef ENABLE_BITTORRENT
|
||||||
|
@ -859,7 +860,11 @@ TransferStat RequestGroup::calculateStat()
|
||||||
}
|
}
|
||||||
#endif // ENABLE_BITTORRENT
|
#endif // ENABLE_BITTORRENT
|
||||||
if(!_segmentMan.isNull()) {
|
if(!_segmentMan.isNull()) {
|
||||||
stat.setDownloadSpeed(stat.getDownloadSpeed()+_segmentMan->calculateDownloadSpeed());
|
stat.setDownloadSpeed
|
||||||
|
(stat.getDownloadSpeed()+_segmentMan->calculateDownloadSpeed());
|
||||||
|
stat.setSessionDownloadLength
|
||||||
|
(stat.getSessionDownloadLength()+
|
||||||
|
_segmentMan->calculateSessionDownloadLength());
|
||||||
}
|
}
|
||||||
return stat;
|
return stat;
|
||||||
}
|
}
|
||||||
|
@ -1045,29 +1050,35 @@ DownloadResultHandle RequestGroup::createDownloadResult() const
|
||||||
_logger->debug("GID#%s - Creating DownloadResult.",
|
_logger->debug("GID#%s - Creating DownloadResult.",
|
||||||
util::itos(_gid).c_str());
|
util::itos(_gid).c_str());
|
||||||
}
|
}
|
||||||
uint64_t sessionDownloadLength = 0;
|
TransferStat st = calculateStat();
|
||||||
|
|
||||||
#ifdef ENABLE_BITTORRENT
|
|
||||||
if(!_peerStorage.isNull()) {
|
|
||||||
sessionDownloadLength +=
|
|
||||||
_peerStorage->calculateStat().getSessionDownloadLength();
|
|
||||||
}
|
|
||||||
#endif // ENABLE_BITTORRENT
|
|
||||||
if(!_segmentMan.isNull()) {
|
|
||||||
sessionDownloadLength +=
|
|
||||||
_segmentMan->calculateSessionDownloadLength();
|
|
||||||
}
|
|
||||||
SharedHandle<DownloadResult> res(new DownloadResult());
|
SharedHandle<DownloadResult> res(new DownloadResult());
|
||||||
res->gid = _gid;
|
res->gid = _gid;
|
||||||
res->fileEntries = _downloadContext->getFileEntries();
|
res->fileEntries = _downloadContext->getFileEntries();
|
||||||
res->inMemoryDownload = _inMemoryDownload;
|
res->inMemoryDownload = _inMemoryDownload;
|
||||||
res->sessionDownloadLength = sessionDownloadLength;
|
res->sessionDownloadLength = st.getSessionDownloadLength();
|
||||||
res->sessionTime = _downloadContext->calculateSessionTime();
|
res->sessionTime = _downloadContext->calculateSessionTime();
|
||||||
res->result = downloadResult();
|
res->result = downloadResult();
|
||||||
res->followedBy = _followedByGIDs;
|
res->followedBy = _followedByGIDs;
|
||||||
res->belongsTo = _belongsToGID;
|
res->belongsTo = _belongsToGID;
|
||||||
res->option = _option;
|
res->option = _option;
|
||||||
res->metadataInfo = _metadataInfo;
|
res->metadataInfo = _metadataInfo;
|
||||||
|
res->totalLength = getTotalLength();
|
||||||
|
res->completedLength = getCompletedLength();
|
||||||
|
res->uploadLength = st.getAllTimeUploadLength();
|
||||||
|
if(!_pieceStorage.isNull()) {
|
||||||
|
if(_pieceStorage->getBitfieldLength() > 0) {
|
||||||
|
res->bitfieldStr = util::toHex(_pieceStorage->getBitfield(),
|
||||||
|
_pieceStorage->getBitfieldLength());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#ifdef ENABLE_BITTORRENT
|
||||||
|
if(_downloadContext->hasAttribute(bittorrent::BITTORRENT)) {
|
||||||
|
res->infoHashStr = bittorrent::getInfoHashString(_downloadContext);
|
||||||
|
}
|
||||||
|
#endif // ENABLE_BITTORRENT
|
||||||
|
res->pieceLength = _downloadContext->getPieceLength();
|
||||||
|
res->numPieces = _downloadContext->getNumPieces();
|
||||||
|
res->dir = _downloadContext->getDir();
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -258,7 +258,7 @@ public:
|
||||||
return _gid;
|
return _gid;
|
||||||
}
|
}
|
||||||
|
|
||||||
TransferStat calculateStat();
|
TransferStat calculateStat() const;
|
||||||
|
|
||||||
const SharedHandle<DownloadContext>& getDownloadContext() const
|
const SharedHandle<DownloadContext>& getDownloadContext() const
|
||||||
{
|
{
|
||||||
|
|
|
@ -88,6 +88,7 @@ const BDE BDE_REMOVED = BDE("removed");
|
||||||
const BDE BDE_ERROR = BDE("error");
|
const BDE BDE_ERROR = BDE("error");
|
||||||
const BDE BDE_COMPLETE = BDE("complete");
|
const BDE BDE_COMPLETE = BDE("complete");
|
||||||
const BDE BDE_USED = BDE("used");
|
const BDE BDE_USED = BDE("used");
|
||||||
|
const BDE BDE_ZERO = BDE("0");
|
||||||
|
|
||||||
const std::string KEY_GID = "gid";
|
const std::string KEY_GID = "gid";
|
||||||
const std::string KEY_ERROR_CODE = "errorCode";
|
const std::string KEY_ERROR_CODE = "errorCode";
|
||||||
|
@ -551,7 +552,7 @@ void gatherProgressCommon
|
||||||
createFileEntry
|
createFileEntry
|
||||||
(files, dctx->getFileEntries().begin(), dctx->getFileEntries().end());
|
(files, dctx->getFileEntries().begin(), dctx->getFileEntries().end());
|
||||||
entryDict[KEY_FILES] = files;
|
entryDict[KEY_FILES] = files;
|
||||||
entryDict[KEY_DIR] = group->getOption()->get(PREF_DIR);
|
entryDict[KEY_DIR] = dctx->getDir();
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef ENABLE_BITTORRENT
|
#ifdef ENABLE_BITTORRENT
|
||||||
|
@ -596,7 +597,9 @@ static void gatherProgressBitTorrent
|
||||||
BDE btDict = BDE::dict();
|
BDE btDict = BDE::dict();
|
||||||
gatherBitTorrentMetadata(btDict, torrentAttrs);
|
gatherBitTorrentMetadata(btDict, torrentAttrs);
|
||||||
entryDict[KEY_BITTORRENT] = btDict;
|
entryDict[KEY_BITTORRENT] = btDict;
|
||||||
if(!btObject.isNull()) {
|
if(btObject.isNull()) {
|
||||||
|
entryDict[KEY_NUM_SEEDERS] = BDE_ZERO;
|
||||||
|
} else {
|
||||||
SharedHandle<PeerStorage> peerStorage = btObject._peerStorage;
|
SharedHandle<PeerStorage> peerStorage = btObject._peerStorage;
|
||||||
assert(!peerStorage.isNull());
|
assert(!peerStorage.isNull());
|
||||||
|
|
||||||
|
@ -676,6 +679,22 @@ void gatherStoppedDownload
|
||||||
BDE files = BDE::list();
|
BDE files = BDE::list();
|
||||||
createFileEntry(files, ds->fileEntries.begin(), ds->fileEntries.end());
|
createFileEntry(files, ds->fileEntries.begin(), ds->fileEntries.end());
|
||||||
entryDict[KEY_FILES] = files;
|
entryDict[KEY_FILES] = files;
|
||||||
|
entryDict[KEY_TOTAL_LENGTH] = util::uitos(ds->totalLength);
|
||||||
|
entryDict[KEY_COMPLETED_LENGTH] = util::uitos(ds->completedLength);
|
||||||
|
entryDict[KEY_UPLOAD_LENGTH] = util::uitos(ds->uploadLength);
|
||||||
|
if(!ds->bitfieldStr.empty()) {
|
||||||
|
entryDict[KEY_BITFIELD] = ds->bitfieldStr;
|
||||||
|
}
|
||||||
|
entryDict[KEY_DOWNLOAD_SPEED] = BDE_ZERO;
|
||||||
|
entryDict[KEY_UPLOAD_SPEED] = BDE_ZERO;
|
||||||
|
if(!ds->infoHashStr.empty()) {
|
||||||
|
entryDict[KEY_INFO_HASH] = ds->infoHashStr;
|
||||||
|
entryDict[KEY_NUM_SEEDERS] = BDE_ZERO;
|
||||||
|
}
|
||||||
|
entryDict[KEY_PIECE_LENGTH] = util::uitos(ds->pieceLength);
|
||||||
|
entryDict[KEY_NUM_PIECES] = util::uitos(ds->numPieces);
|
||||||
|
entryDict[KEY_CONNECTIONS] = BDE_ZERO;
|
||||||
|
entryDict[KEY_DIR] = ds->dir;
|
||||||
}
|
}
|
||||||
|
|
||||||
BDE GetFilesXmlRpcMethod::process
|
BDE GetFilesXmlRpcMethod::process
|
||||||
|
|
|
@ -696,7 +696,7 @@ void XmlRpcMethodTest::testGatherProgressCommon()
|
||||||
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0,"aria2.tar.bz2"));
|
SharedHandle<DownloadContext> dctx(new DownloadContext(0, 0,"aria2.tar.bz2"));
|
||||||
std::string uris[] = { "http://localhost/aria2.tar.bz2" };
|
std::string uris[] = { "http://localhost/aria2.tar.bz2" };
|
||||||
dctx->getFirstFileEntry()->addUris(vbegin(uris), vend(uris));
|
dctx->getFirstFileEntry()->addUris(vbegin(uris), vend(uris));
|
||||||
|
dctx->setDir(_option->get(PREF_DIR));
|
||||||
SharedHandle<RequestGroup> group(new RequestGroup(_option));
|
SharedHandle<RequestGroup> group(new RequestGroup(_option));
|
||||||
group->setDownloadContext(dctx);
|
group->setDownloadContext(dctx);
|
||||||
std::vector<SharedHandle<RequestGroup> > followedBy;
|
std::vector<SharedHandle<RequestGroup> > followedBy;
|
||||||
|
|
Loading…
Reference in New Issue