summaryrefslogtreecommitdiff
path: root/src/PeerConnection.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/PeerConnection.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/PeerConnection.cc')
-rw-r--r--src/PeerConnection.cc17
1 files changed, 10 insertions, 7 deletions
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<ARC4Encryptor>& encryptor,