summaryrefslogtreecommitdiff
path: root/src/HttpRequestCommand.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/HttpRequestCommand.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/HttpRequestCommand.cc')
-rw-r--r--src/HttpRequestCommand.cc59
1 files changed, 35 insertions, 24 deletions
diff --git a/src/HttpRequestCommand.cc b/src/HttpRequestCommand.cc
index d2ff2bf9..94ecb499 100644
--- a/src/HttpRequestCommand.cc
+++ b/src/HttpRequestCommand.cc
@@ -98,34 +98,45 @@ createHttpRequest(const SharedHandle<Request>& req,
}
bool HttpRequestCommand::executeInternal() {
- socket->setBlockingMode();
- if(req->getProtocol() == Request::PROTO_HTTPS) {
- socket->initiateSecureConnection();
- }
+ //socket->setBlockingMode();
+ if(_httpConnection->sendBufferIsEmpty()) {
+ if(req->getProtocol() == Request::PROTO_HTTPS) {
+ socket->initiateSecureConnection();
+ }
- if(_segments.empty()) {
- HttpRequestHandle httpRequest
- (createHttpRequest(req, SharedHandle<Segment>(),
- _requestGroup->getTotalLength(), e->option,
- _requestGroup,
- e->getCookieStorage()));
- _httpConnection->sendRequest(httpRequest);
- } else {
- for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) {
- const SegmentHandle& segment = *itr;
- if(!_httpConnection->isIssued(segment)) {
- HttpRequestHandle httpRequest
- (createHttpRequest(req, segment,
- _requestGroup->getTotalLength(), e->option,
- _requestGroup,
- e->getCookieStorage()));
- _httpConnection->sendRequest(httpRequest);
+ if(_segments.empty()) {
+ HttpRequestHandle httpRequest
+ (createHttpRequest(req, SharedHandle<Segment>(),
+ _requestGroup->getTotalLength(), e->option,
+ _requestGroup,
+ e->getCookieStorage()));
+ _httpConnection->sendRequest(httpRequest);
+ } else {
+ for(Segments::iterator itr = _segments.begin(); itr != _segments.end(); ++itr) {
+ const SegmentHandle& segment = *itr;
+ if(!_httpConnection->isIssued(segment)) {
+ HttpRequestHandle httpRequest
+ (createHttpRequest(req, segment,
+ _requestGroup->getTotalLength(), e->option,
+ _requestGroup,
+ e->getCookieStorage()));
+ _httpConnection->sendRequest(httpRequest);
+ }
}
}
+ } else {
+ _httpConnection->sendPendingData();
+ }
+ if(_httpConnection->sendBufferIsEmpty()) {
+ Command* command = new HttpResponseCommand(cuid, req, _requestGroup,
+ _httpConnection, e, socket);
+ e->commands.push_back(command);
+ return true;
+ } else {
+ setWriteCheckSocket(socket);
+ e->commands.push_back(this);
+ return false;
}
- Command* command = new HttpResponseCommand(cuid, req, _requestGroup, _httpConnection, e, socket);
- e->commands.push_back(command);
- return true;
}
} // namespace aria2