summaryrefslogtreecommitdiff
path: root/src/FtpDownloadCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-09 14:44:28 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-05-09 14:44:28 +0000
commitf25436725e2dd2a0d3ddb672415b0991ce4f2ce0 (patch)
tree1327033b5c2d4d99d5cde6114744495c44346517 /src/FtpDownloadCommand.cc
parent0b5e827ead424ff0a5de43bc707b52abb4badfcb (diff)
2008-05-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added the ability to reuse connection in FTP and it is enabled by default. It can be disabled by --ftp-reuse-connection=false option. * src/Command.cc * src/DownloadCommand.cc * src/FtpDownloadCommand.cc * src/FtpDownloadCommand.h * src/FtpFinishDownloadCommand.cc * src/FtpFinishDownloadCommand.h * src/FtpInitiateConnectionCommand.cc * src/FtpNegotiationCommand.cc * src/FtpNegotiationCommand.h * src/HelpItemFactory.cc * src/Makefile.am * src/Makefile.in * src/OptionHandlerFactory.cc * src/option_processing.cc * src/prefs.h * src/usage_text.h
Diffstat (limited to 'src/FtpDownloadCommand.cc')
-rw-r--r--src/FtpDownloadCommand.cc41
1 files changed, 35 insertions, 6 deletions
diff --git a/src/FtpDownloadCommand.cc b/src/FtpDownloadCommand.cc
index 87b78f02..c505e190 100644
--- a/src/FtpDownloadCommand.cc
+++ b/src/FtpDownloadCommand.cc
@@ -35,18 +35,47 @@
#include "FtpDownloadCommand.h"
#include "Request.h"
#include "Socket.h"
+#include "Segment.h"
+#include "DownloadEngine.h"
+#include "RequestGroup.h"
+#include "prefs.h"
+#include "Option.h"
+#include "FtpFinishDownloadCommand.h"
+#include "FtpConnection.h"
+#include "Logger.h"
namespace aria2 {
-FtpDownloadCommand::FtpDownloadCommand(int cuid,
- const RequestHandle& req,
- RequestGroup* requestGroup,
- DownloadEngine* e,
- const SocketHandle& dataSocket,
- const SocketHandle& ctrlSocket)
+FtpDownloadCommand::FtpDownloadCommand
+(int cuid,
+ const RequestHandle& req,
+ RequestGroup* requestGroup,
+ const SharedHandle<FtpConnection>& ftpConnection,
+ DownloadEngine* e,
+ const SocketHandle& dataSocket,
+ const SocketHandle& ctrlSocket)
:DownloadCommand(cuid, req, requestGroup, e, dataSocket),
+ _ftpConnection(ftpConnection),
ctrlSocket(ctrlSocket) {}
FtpDownloadCommand::~FtpDownloadCommand() {}
+
+bool FtpDownloadCommand::prepareForNextSegment()
+{
+ if(e->option->getAsBool(PREF_FTP_REUSE_CONNECTION) &&
+ (uint64_t)_segments.front()->getPositionToWrite() == _requestGroup->getTotalLength()) {
+ Command* command = new FtpFinishDownloadCommand(cuid, req, _requestGroup, _ftpConnection, e, ctrlSocket);
+ e->commands.push_back(command);
+
+ if(_requestGroup->downloadFinished()) {
+ // To run checksum checking, we had to call following function here.
+ DownloadCommand::prepareForNextSegment();
+ }
+ return true;
+ } else {
+ return DownloadCommand::prepareForNextSegment();
+ }
+}
+
} // namespace aria2