From 495f02ebbceaf72c125d809f6ce38004b6dd580a Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Sat, 13 Sep 2008 16:32:47 +0000 Subject: 2008-09-14 Tatsuhiro Tsujikawa 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 --- src/PeerConnection.cc | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) (limited to 'src/PeerConnection.cc') diff --git a/src/PeerConnection.cc b/src/PeerConnection.cc index 69a0e067..817255e7 100644 --- a/src/PeerConnection.cc +++ b/src/PeerConnection.cc @@ -59,17 +59,18 @@ PeerConnection::PeerConnection(int32_t cuid, resbufLength(0), currentPayloadLength(0), lenbufLength(0), + _socketBuffer(socket), _encryptionEnabled(false), _prevPeek(false) {} PeerConnection::~PeerConnection() {} -ssize_t PeerConnection::sendMessage(const unsigned char* data, size_t dataLength) { +ssize_t PeerConnection::sendMessage(const unsigned char* data, + size_t dataLength) +{ if(socket->isWritable(0)) { - // TODO fix this - sendData(data, dataLength, _encryptionEnabled); - return dataLength; + return sendData(data, dataLength, _encryptionEnabled); } else { return 0; } @@ -185,7 +186,8 @@ void PeerConnection::readData(unsigned char* data, size_t& length, bool encrypti } } -void PeerConnection::sendData(const unsigned char* data, size_t length, bool encryption) +ssize_t PeerConnection::sendData(const unsigned char* data, + size_t length, bool encryption) { if(encryption) { unsigned char temp[4096]; @@ -194,13 +196,14 @@ void PeerConnection::sendData(const unsigned char* data, size_t length, bool enc while(r > 0) { size_t s = std::min(r, sizeof(temp)); _encryptor->encrypt(temp, s, dptr, s); - socket->writeData(temp, s); + _socketBuffer.feedSendBuffer(std::string(&temp[0], &temp[s])); dptr += s; r -= s; } } else { - socket->writeData(data, length); + _socketBuffer.feedSendBuffer(std::string(&data[0], &data[length])); } + return _socketBuffer.send(); } void PeerConnection::enableEncryption(const SharedHandle& encryptor, -- cgit