summaryrefslogtreecommitdiff
path: root/src/AbstractProxyRequestCommand.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-09-13 16:32:47 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-09-13 16:32:47 +0000
commit495f02ebbceaf72c125d809f6ce38004b6dd580a (patch)
treeeb0fb6ddc1121aded8c92a49359c7f231ca0b90e /src/AbstractProxyRequestCommand.cc
parent281319e8cd3ca184dc3868c3d4740c24ab2607a4 (diff)
2008-09-14 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Use non-blocking socket for TCP communication to avoid possible blocking due to buffer full. * src/AbstractProxyRequestCommand.cc * src/FtpConnection.cc * src/FtpConnection.h * src/FtpNegotiationCommand.cc * src/FtpNegotiationCommand.h * src/HttpConnection.cc * src/HttpConnection.h * src/HttpRequestCommand.cc * src/InitiatorMSEHandshakeCommand.cc * src/InitiatorMSEHandshakeCommand.h * src/MSEHandshake.cc * src/MSEHandshake.h * src/Makefile.am * src/PeerConnection.cc * src/PeerConnection.h * src/PeerInteractionCommand.cc * src/PeerListenCommand.cc * src/ReceiverMSEHandshakeCommand.cc * src/ReceiverMSEHandshakeCommand.h * src/SocketBuffer.cc * src/SocketBuffer.h * src/SocketCore.cc * src/SocketCore.h
Diffstat (limited to 'src/AbstractProxyRequestCommand.cc')
-rw-r--r--src/AbstractProxyRequestCommand.cc35
1 files changed, 21 insertions, 14 deletions
diff --git a/src/AbstractProxyRequestCommand.cc b/src/AbstractProxyRequestCommand.cc
index 078a55a5..c9da63be 100644
--- a/src/AbstractProxyRequestCommand.cc
+++ b/src/AbstractProxyRequestCommand.cc
@@ -51,7 +51,8 @@ AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid,
RequestGroup* requestGroup,
DownloadEngine* e,
const SocketHandle& s)
- :AbstractCommand(cuid, req, requestGroup, e, s)
+ :AbstractCommand(cuid, req, requestGroup, e, s),
+ httpConnection(new HttpConnection(cuid, s, e->option))
{
setTimeout(e->option->getAsInt(PREF_CONNECT_TIMEOUT));
disableReadCheckSocket();
@@ -61,19 +62,25 @@ AbstractProxyRequestCommand::AbstractProxyRequestCommand(int cuid,
AbstractProxyRequestCommand::~AbstractProxyRequestCommand() {}
bool AbstractProxyRequestCommand::executeInternal() {
- socket->setBlockingMode();
-
- HttpRequestHandle httpRequest(new HttpRequest());
- httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT));
- httpRequest->setRequest(req);
- httpRequest->configure(e->option);
-
- httpConnection.reset(new HttpConnection(cuid, socket, e->option));
-
- httpConnection->sendProxyRequest(httpRequest);
-
- e->commands.push_back(getNextCommand());
- return true;
+ //socket->setBlockingMode();
+ if(httpConnection->sendBufferIsEmpty()) {
+ HttpRequestHandle httpRequest(new HttpRequest());
+ httpRequest->setUserAgent(e->option->get(PREF_USER_AGENT));
+ httpRequest->setRequest(req);
+ httpRequest->configure(e->option);
+
+ httpConnection->sendProxyRequest(httpRequest);
+ } else {
+ httpConnection->sendPendingData();
+ }
+ if(httpConnection->sendBufferIsEmpty()) {
+ e->commands.push_back(getNextCommand());
+ return true;
+ } else {
+ setWriteCheckSocket(socket);
+ e->commands.push_back(this);
+ return false;
+ }
}
} // namespace aria2