mirror of
https://github.com/aria2/aria2.git
synced 2026-04-13 08:18:46 +00:00
To add Time class which represents a specific instant in time and its precision is microseconds. Time checking procedures were rewritten using this object. * src/Time.h: New class. * src/Time.cc: New class. * src/AbstractCommand.h (updateCheckPoint): Removed. (isTimeoutDetected): Removed. (checkPoint): Changed the type to Time. (timeout): New variable. (setTimeout): New function. * src/AbstractCommand.cc (AbstractCommand): Removed the initialization of checkPoint. Added the initialization of timeout. (updateCheckPoint): Removed. (isTimeoutDetected): Removed. (execute): Use checkPoint.reset() and checkPoint.elapsed(). * src/PeerChokeCommand.h (checkPoint): Changed the type to Time. * src/PeerChokeCommand.cc (PeerChokeCommand): Removed the initialization of checkPoint. (execute): Rewritten using Time object. * src/TrackerWatcherCommand.h (checkPoint): Changed the type to Time. * src/TrackerWatcherCommand.cc (TrackerWatcherCommand): Removed the initialization of checkPoint. (execute): Rewritten. * src/ConsoleDownloadEngine.h (cp): Changed the type to Time. (startup): Changed the type to Time. * src/ConsoleDownloadEngine.cc (initStatistics): Use cp.reset(), startup.reset(). (calculateStatistics): Rewritten using Time object. * src/PeerAbstractCommand.h (updateCheckPoint): Removed. (isTimeoutDetected): Removed. (checkPoint): Changed the type to Time. * src/PeerAbstractCommand.cc (PeerAbstractCommand): Removed the initialization of checkPoint. (updateCheckPoint): Removed. (isTimeoutDetected): Removed. (execute): Use checkPoint.reset() and checkPoint.elapsed(). * src/PeerInteractionCommand.cc (PeerInteractionCommand): Removed the initializations of struct timeval variables. * src/PeerInteractionCommand.h (keepAliveCheckPoint): Changed the type to Time. (chokeCheckPoint): Changed the type to Time. (freqCheckPoint): Changed the type to Time. (haveCheckTime): Changed the type to Time. * src/PeerInteractionCommand.cc (executeInternal): Rewritten using Time object. (detectMessageFlooding): Rewritten using Time object. (checkLongTimePeerChoking): Rewritten using Time object. (sendKeepAlive): Rewritten using Time object. (checkHave): Rewritten using Time object. * src/SleepCommand.h (checkPoint): Changed the type to Time. * src/SleepCommand.cc (SleepCommand): Removed the initialization of checkPoint. (execute): Rewritten using Time object. * src/TorrentAutoSaveCommand.h (checkPoint): Changed the type to Time. * src/TorrentAutoSaveCommand.cc (TorrentAutoSaveCommand): Removed the initialization of checkPoint. (execute): Rewritten. * src/DownloadCommand.h (sw): Changed the type to Time. * src/DownloadCommand.cc (DownloadCommand): Removed the initialization of sw. (executeInternal): Rewritten. * src/RequestSlot.h (dispatchedTime): Changed the type to Time. * src/RequestSlot.cc (RequestSlot): Removed the call to setDispatchedTime(). (setDispatchedTime): Rewirtten. (isTimeout): Rewritten. (getLatencyInMillis): Rewritten. * src/TorrentDownloadEngine.h (cp): Changed the type to Time[2]. (startup): Changed the type to Time. * src/TorrentDownloadEngine.cc (initStatistics): Rewritten. (calculateStatistics): Rewritten. * src/DownloadEngine.cc (run): Rewritten. To detect all attempts to connect to the tracker are failed: * src/AbstractCommand.cc (execute): Increment e->segmentMan->errors if a command aborted. * src/SegmentMan.h (errors): New variable. * src/SegmentMan.cc (SegmentMan): Added the initialization of errors. (init): Added the initialization of errors. * src/TrackerWatcherCommand.cc (execute): If e->segmentMan->errors > 0 then assume that the tracker request was failed. To handle snubbed peers: * src/PeerChokeCommand.cc (optUnchokingPeer): Snubbed peers don't get unchoked. (execute): Snubbed peers don't get unchoked. * src/PeerInteraction.h (REQUEST_TIME_OUT): Changed the value from 120 to 60. * src/PeerInteraction.cc (checkRequestSlot): A peer get marked as "snubbed" if it doesn't send back the requested 16k block in 60 seconds. * src/PieceMessage.cc (receivedAction): A peer's snubbed state is cleard if it sends the requested 16k block in 60 seconds. * src/Peer.h (snubbing): New variable. * src/Peer.cc (resetStatus): Added snubbed = false. To fix the bug that causes have message is not sent: * src/PeerInteractionCommand.cc (~PeerInteractionCommand): Removed e->torrentMan->unadvertisePiece(). (FLOODING_CHECK_INTERVAL): New definition(temporal). (detectMessageFlooding): Use FLOODING_CHECK_INTERVAL. * src/TorrentMan.h (HaveEntry): New class. (advertisePiece): Rewritten. (getAdvertisedPieceIndexes): Rewritten. (Haves): Changed the type. (getAdvertisedPieceIndexes): Added an argument. Others: * src/TorrentMan.h (DEFAULT_ANNOUNCE_INTERVAL): Changed the value to 1800. (DEFAULT_ANNOUNCE_MIN_INTERVAL): Changed the value to 1800. * src/TorrentMan.cc (getPeer): Don't check the number of connections here. (setupInternal1): Changed peerId. * src/PeerInteractionCommand.h (KEEP_ALIVE_INTERVAL): New definition. (sendKeepAlive): Use KEEP_ALIVE_INTERVAL. * src/main.cc (main): SA_ONESHOT was replaced with SA_RESETHAND. * src/DownloadEngine.h: Removed unnecessary header includes.
88 lines
2.6 KiB
C++
88 lines
2.6 KiB
C++
/* <!-- 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 "ConsoleDownloadEngine.h"
|
|
#include "Util.h"
|
|
|
|
ConsoleDownloadEngine::ConsoleDownloadEngine() {}
|
|
|
|
ConsoleDownloadEngine::~ConsoleDownloadEngine() {}
|
|
|
|
void ConsoleDownloadEngine::sendStatistics(long long int currentSize, long long int totalSize) {
|
|
printf("\r ");
|
|
printf("\r");
|
|
printf("%s/%s Bytes %d%% %s %.2f KB/s %d connections",
|
|
Util::llitos(currentSize, true).c_str(),
|
|
Util::llitos(totalSize, true).c_str(),
|
|
(totalSize == 0 ? 0 : (int)((currentSize*100)/totalSize)),
|
|
avgSpeed == 0 ? "-" : Util::secfmt(eta).c_str(),
|
|
speed/1024.0,
|
|
commands.size());
|
|
fflush(stdout);
|
|
}
|
|
|
|
void ConsoleDownloadEngine::initStatistics() {
|
|
cp.reset();
|
|
startup.reset();
|
|
speed = 0;
|
|
psize = 0;
|
|
avgSpeed = 0;
|
|
eta = 0;
|
|
startupLength = 0;
|
|
isStartupLengthSet = false;
|
|
}
|
|
|
|
void ConsoleDownloadEngine::calculateStatistics() {
|
|
long long int dlSize = segmentMan->getDownloadedSize();
|
|
if(!isStartupLengthSet && dlSize > 0) {
|
|
startupLength = dlSize;
|
|
isStartupLengthSet = true;
|
|
}
|
|
int elapsed = cp.difference();
|
|
if(elapsed >= 1) {
|
|
int nspeed = (int)((dlSize-psize)/elapsed);
|
|
speed = (nspeed+speed)/2;
|
|
cp.reset();
|
|
psize = dlSize;
|
|
|
|
int elapsedFromStartup = startup.difference();
|
|
if(elapsedFromStartup > 0) {
|
|
avgSpeed = (int)((dlSize-startupLength)/elapsedFromStartup);
|
|
}
|
|
if(avgSpeed < 0) {
|
|
avgSpeed = 0;
|
|
} else if(avgSpeed != 0 && segmentMan->totalSize > 0) {
|
|
eta = (segmentMan->totalSize-dlSize)/avgSpeed;
|
|
}
|
|
|
|
sendStatistics(dlSize, segmentMan->totalSize);
|
|
}
|
|
}
|
|
|
|
void ConsoleDownloadEngine::onEndOfRun() {
|
|
segmentMan->diskWriter->closeFile();
|
|
if(segmentMan->finished()) {
|
|
segmentMan->remove();
|
|
} else {
|
|
segmentMan->save();
|
|
}
|
|
}
|