/* */ #include "HttpServerResponseCommand.h" #include "SocketCore.h" #include "DownloadEngine.h" #include "HttpServer.h" #include "Logger.h" #include "HttpServerCommand.h" #include "RequestGroupMan.h" #include "RecoverableException.h" #include "FileEntry.h" namespace aria2 { HttpServerResponseCommand::HttpServerResponseCommand (int32_t cuid, const SharedHandle& httpServer, DownloadEngine* e, const SharedHandle& socket): Command(cuid), _e(e), _socket(socket), _httpServer(httpServer) { setStatus(Command::STATUS_ONESHOT_REALTIME); _e->addSocketForWriteCheck(_socket, this); } HttpServerResponseCommand::~HttpServerResponseCommand() { _e->deleteSocketForWriteCheck(_socket, this); } bool HttpServerResponseCommand::execute() { if(_e->_requestGroupMan->downloadFinished() || _e->isHaltRequested()) { return true; } try { _httpServer->sendResponse(); } catch(RecoverableException& e) { logger->info("CUID#%d - Error occurred while transmitting response body.", e, cuid); return true; } if(_httpServer->sendBufferIsEmpty()) { logger->info("CUID#%d - HttpServer: all response transmitted.", cuid); if(_httpServer->supportsPersistentConnection()) { logger->info("CUID#%d - Persist connection.", cuid); _e->commands.push_back (new HttpServerCommand(cuid, _httpServer, _e, _socket)); } return true; } else { if(_timeout.elapsed(10)) { logger->info("CUID#%d - HttpServer: Timeout while trasmitting response.", cuid); return true; } else { _e->commands.push_back(this); return false; } } } } // namespace aria2