diff --git a/ChangeLog b/ChangeLog index c4aa732a..a945dc52 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,15 @@ +2010-07-17 Tatsuhiro Tsujikawa + + Count the number of command used in HTTP(S)/FTP and the number of + connections in HTTP(S)/FTP independently. The former is used to + determin whether additional command is needed. The latter is used + to report user to how many connections are used in a download. + * src/AbstractCommand.cc + * src/AbstractCommand.h + * src/CreateRequestCommand.cc + * src/RequestGroup.cc + * src/RequestGroup.h + 2010-07-17 Tatsuhiro Tsujikawa Check status values: 200 and 206. diff --git a/src/AbstractCommand.cc b/src/AbstractCommand.cc index fde9c7e5..29e9beb5 100644 --- a/src/AbstractCommand.cc +++ b/src/AbstractCommand.cc @@ -79,18 +79,23 @@ AbstractCommand::AbstractCommand(cuid_t cuid, const SharedHandle& fileEntry, RequestGroup* requestGroup, DownloadEngine* e, - const SocketHandle& s): + const SocketHandle& s, + bool incNumConnection): Command(cuid), checkPoint_(global::wallclock), timeout_(requestGroup->getTimeout()), requestGroup_(requestGroup), req_(req), fileEntry_(fileEntry), e_(e), socket_(s), checkSocketIsReadable_(false), checkSocketIsWritable_(false), - nameResolverCheck_(false) + nameResolverCheck_(false), + incNumConnection_(incNumConnection) { if(!socket_.isNull() && socket_->isOpen()) { setReadCheckSocket(socket_); } - requestGroup_->increaseStreamConnection(); + if(incNumConnection_) { + requestGroup->increaseStreamConnection(); + } + requestGroup_->increaseStreamCommand(); requestGroup_->increaseNumCommand(); } @@ -101,7 +106,10 @@ AbstractCommand::~AbstractCommand() { disableNameResolverCheck(asyncNameResolver_); #endif // ENABLE_ASYNC_DNS requestGroup_->decreaseNumCommand(); - requestGroup_->decreaseStreamConnection(); + requestGroup_->decreaseStreamCommand(); + if(incNumConnection_) { + requestGroup_->decreaseStreamConnection(); + } } bool AbstractCommand::execute() { diff --git a/src/AbstractCommand.h b/src/AbstractCommand.h index 619e6af7..8dd5a15b 100644 --- a/src/AbstractCommand.h +++ b/src/AbstractCommand.h @@ -75,6 +75,8 @@ private: SharedHandle writeCheckTarget_; bool nameResolverCheck_; + bool incNumConnection_; + #ifdef ENABLE_ASYNC_DNS void setNameResolverCheck(const SharedHandle& resolver); @@ -218,10 +220,12 @@ protected: return requestGroup_->getPieceStorage(); } public: - AbstractCommand(cuid_t cuid, const SharedHandle& req, - const SharedHandle& fileEntry, - RequestGroup* requestGroup, DownloadEngine* e, - const SharedHandle& s = SharedHandle()); + AbstractCommand + (cuid_t cuid, const SharedHandle& req, + const SharedHandle& fileEntry, + RequestGroup* requestGroup, DownloadEngine* e, + const SharedHandle& s = SharedHandle(), + bool incNumConnection = true); virtual ~AbstractCommand(); bool execute(); diff --git a/src/CreateRequestCommand.cc b/src/CreateRequestCommand.cc index cc62fef4..62783d9b 100644 --- a/src/CreateRequestCommand.cc +++ b/src/CreateRequestCommand.cc @@ -57,7 +57,8 @@ CreateRequestCommand::CreateRequestCommand(cuid_t cuid, RequestGroup* requestGroup, DownloadEngine* e): AbstractCommand - (cuid, SharedHandle(), SharedHandle(), requestGroup, e) + (cuid, SharedHandle(), SharedHandle(), requestGroup, e, + SharedHandle(), false) { setStatus(Command::STATUS_ONESHOT_REALTIME); disableReadCheckSocket(); diff --git a/src/RequestGroup.cc b/src/RequestGroup.cc index 148b2e12..da3e677c 100644 --- a/src/RequestGroup.cc +++ b/src/RequestGroup.cc @@ -119,6 +119,7 @@ RequestGroup::RequestGroup(const SharedHandle