diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-02-18 16:32:57 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-02-18 16:32:57 +0000 |
| commit | d027ca8e7c383e9755d6fb997e8a880df99e88b9 (patch) | |
| tree | e989143904f735d51561ddd648f901f6ffadc502 /trunk/src/AbstractCommand.cc | |
| parent | b0628082d0ad183c953193da5c0cd38f5ede282d (diff) | |
| parent | 6d6f25b75c1557f2b92e51fe589aadc48a1fdb68 (diff) | |
Tagging the 0.2.0 release of aria2
Diffstat (limited to 'trunk/src/AbstractCommand.cc')
| -rw-r--r-- | trunk/src/AbstractCommand.cc | 127 |
1 files changed, 0 insertions, 127 deletions
diff --git a/trunk/src/AbstractCommand.cc b/trunk/src/AbstractCommand.cc deleted file mode 100644 index 0a2f78d3..00000000 --- a/trunk/src/AbstractCommand.cc +++ /dev/null @@ -1,127 +0,0 @@ -/* <!-- 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 "AbstractCommand.h" -#include "DlAbortEx.h" -#include "DlRetryEx.h" -#include "InitiateConnectionCommandFactory.h" -#include <sys/time.h> -#include "Util.h" -#include "message.h" -#include "SleepCommand.h" - -#define TIMEOUT_SEC 5 - -AbstractCommand::AbstractCommand(int cuid, Request* req, DownloadEngine* e, Socket* s): - Command(cuid), req(req), e(e), checkSocketIsReadable(false), checkSocketIsWritable(false) { - if(s != NULL) { - socket = new Socket(*s); - e->addSocketForReadCheck(socket); - } else { - socket = NULL; - } - this->checkPoint.tv_sec = 0; - this->checkPoint.tv_usec = 0; -} - -AbstractCommand::~AbstractCommand() { - e->deleteSocketForReadCheck(socket); - e->deleteSocketForWriteCheck(socket); - if(socket != NULL) { - delete(socket); - } -} - -void AbstractCommand::updateCheckPoint() { - gettimeofday(&checkPoint, NULL); -} - -bool AbstractCommand::isTimeoutDetected() { - struct timeval now; - gettimeofday(&now, NULL); - if(checkPoint.tv_sec == 0 && checkPoint.tv_usec == 0) { - return false; - } else { - long long int elapsed = Util::difftv(now, checkPoint); - if(elapsed >= TIMEOUT_SEC*1000000) { - return true; - } else { - return false; - } - } -} - -bool AbstractCommand::execute() { - try { - if(checkSocketIsReadable && !socket->isReadable(0) - || checkSocketIsWritable && !socket->isWritable(0)) { - if(isTimeoutDetected()) { - throw new DlRetryEx(EX_TIME_OUT); - } - updateCheckPoint(); - e->commands.push(this); - return false; - } - updateCheckPoint(); - Segment seg = { 0, 0, 0, false }; - if(e->segmentMan->downloadStarted) { - // get segment information in order to set Range header. - if(!e->segmentMan->getSegment(seg, cuid)) { - // no segment available - e->logger->info(MSG_NO_SEGMENT_AVAILABLE, cuid); - return true; - } - } - return executeInternal(seg); - } catch(DlAbortEx* err) { - e->logger->error(MSG_DOWNLOAD_ABORTED, err, cuid); - onError(err); - delete(err); - req->resetUrl(); - return true; - } catch(DlRetryEx* err) { - e->logger->error(MSG_RESTARTING_DOWNLOAD, err, cuid); - onError(err); - delete(err); - //req->resetUrl(); - req->addRetryCount(); - if(req->noMoreRetry()) { - e->logger->error(MSG_MAX_RETRY, cuid); - return true; - } else { - return prepareForRetry(e->option->getAsInt("retry_wait")); - } - } -} - -bool AbstractCommand::prepareForRetry(int wait) { - Command* command = InitiateConnectionCommandFactory::createInitiateConnectionCommand(cuid, req, e); - if(wait == 0) { - e->commands.push(command); - } else { - SleepCommand* scom = new SleepCommand(cuid, e, command, wait); - e->commands.push(scom); - } - return true; -} - -void AbstractCommand::onError(Exception* e) { -} |
