summaryrefslogtreecommitdiffstats
path: root/src/network/ssl
diff options
context:
space:
mode:
authorMartin Petersson <Martin.Petersson@nokia.com>2012-05-30 17:03:57 +0200
committerQt by Nokia <qt-info@nokia.com>2012-06-26 11:32:04 +0200
commitbf6897edb01c0d46fda5195e36bb529dbbf7e5dc (patch)
treee2f0a207baf8ec6ea0aa7d3374e44c468f9d0651 /src/network/ssl
parent9e66ee2d59d28d61e06e5c57485f1a331b82f269 (diff)
QtNetwork: remove double buffering on sockets
Removes the readBuffer from the QAbstractSocket since data is already buffered in the QIODevice. Change-Id: I4e50b791fd2852455e526fa2c07089d4d3f0b2a4 Reviewed-by: Prasanth Ullattil <prasanth.ullattil@nokia.com> Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/network/ssl')
-rw-r--r--src/network/ssl/qsslsocket.cpp29
-rw-r--r--src/network/ssl/qsslsocket_openssl.cpp5
2 files changed, 14 insertions, 20 deletions
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp
index 2dee60408b..b2547487ba 100644
--- a/src/network/ssl/qsslsocket.cpp
+++ b/src/network/ssl/qsslsocket.cpp
@@ -707,7 +707,7 @@ qint64 QSslSocket::bytesAvailable() const
Q_D(const QSslSocket);
if (d->mode == UnencryptedMode)
return QIODevice::bytesAvailable() + (d->plainSocket ? d->plainSocket->bytesAvailable() : 0);
- return QIODevice::bytesAvailable() + d->readBuffer.size();
+ return QIODevice::bytesAvailable();
}
/*!
@@ -764,7 +764,7 @@ bool QSslSocket::canReadLine() const
Q_D(const QSslSocket);
if (d->mode == UnencryptedMode)
return QIODevice::canReadLine() || (d->plainSocket && d->plainSocket->canReadLine());
- return QIODevice::canReadLine() || (!d->readBuffer.isEmpty() && d->readBuffer.canReadLine());
+ return QIODevice::canReadLine();
}
/*!
@@ -781,12 +781,8 @@ void QSslSocket::close()
QTcpSocket::close();
// must be cleared, reading/writing not possible on closed socket:
- d->readBuffer.clear();
+ d->buffer.clear();
d->writeBuffer.clear();
- // for QTcpSocket this is already done because it uses the readBuffer/writeBuffer
- // if the QIODevice it is based on
- // ### FIXME QSslSocket should probably do similar instead of having
- // its own readBuffer/writeBuffer
}
/*!
@@ -797,7 +793,7 @@ bool QSslSocket::atEnd() const
Q_D(const QSslSocket);
if (d->mode == UnencryptedMode)
return QIODevice::atEnd() && (!d->plainSocket || d->plainSocket->atEnd());
- return QIODevice::atEnd() && d->readBuffer.isEmpty();
+ return QIODevice::atEnd();
}
/*!
@@ -1829,21 +1825,18 @@ qint64 QSslSocket::readData(char *data, qint64 maxlen)
if (d->mode == UnencryptedMode && !d->autoStartHandshake) {
readBytes = d->plainSocket->read(data, maxlen);
} else {
- do {
- const char *readPtr = d->readBuffer.readPointer();
- int bytesToRead = qMin<int>(maxlen - readBytes, d->readBuffer.nextDataBlockSize());
- ::memcpy(data + readBytes, readPtr, bytesToRead);
- readBytes += bytesToRead;
- d->readBuffer.free(bytesToRead);
- } while (!d->readBuffer.isEmpty() && readBytes < maxlen);
+ int bytesToRead = qMin<int>(maxlen, d->buffer.size());
+ readBytes = d->buffer.read(data, bytesToRead);
}
+
#ifdef QSSLSOCKET_DEBUG
qDebug() << "QSslSocket::readData(" << (void *)data << ',' << maxlen << ") ==" << readBytes;
#endif
// possibly trigger another transmit() to decrypt more data from the socket
- if (d->readBuffer.isEmpty() && d->plainSocket->bytesAvailable())
+ if (d->buffer.isEmpty() && d->plainSocket->bytesAvailable()) {
QMetaObject::invokeMethod(this, "_q_flushReadBuffer", Qt::QueuedConnection);
+ }
return readBytes;
}
@@ -1907,7 +1900,7 @@ void QSslSocketPrivate::init()
// that it is possible setting it before connecting
// ignoreErrorsList.clear();
- readBuffer.clear();
+ buffer.clear();
writeBuffer.clear();
configuration.peerCertificate.clear();
configuration.peerCertificateChain.clear();
@@ -2112,7 +2105,7 @@ void QSslSocketPrivate::createPlainSocket(QIODevice::OpenMode openMode)
q, SIGNAL(proxyAuthenticationRequired(QNetworkProxy,QAuthenticator*)));
#endif
- readBuffer.clear();
+ buffer.clear();
writeBuffer.clear();
connectionEncrypted = false;
configuration.peerCertificate.clear();
diff --git a/src/network/ssl/qsslsocket_openssl.cpp b/src/network/ssl/qsslsocket_openssl.cpp
index 38368583ff..83071f2c7a 100644
--- a/src/network/ssl/qsslsocket_openssl.cpp
+++ b/src/network/ssl/qsslsocket_openssl.cpp
@@ -953,12 +953,13 @@ void QSslSocketBackendPrivate::transmit()
}
// Check if we've got any data to be read from the socket.
- if (!connectionEncrypted || !readBufferMaxSize || readBuffer.size() < readBufferMaxSize)
+ if (!connectionEncrypted || !readBufferMaxSize || buffer.size() < readBufferMaxSize)
while ((pendingBytes = plainSocket->bytesAvailable()) > 0) {
// Read encrypted data from the socket into a buffer.
data.resize(pendingBytes);
// just peek() here because q_BIO_write could write less data than expected
int encryptedBytesRead = plainSocket->peek(data.data(), pendingBytes);
+
#ifdef QSSLSOCKET_DEBUG
qDebug() << "QSslSocketBackendPrivate::transmit: read" << encryptedBytesRead << "encrypted bytes from the socket";
#endif
@@ -1025,7 +1026,7 @@ void QSslSocketBackendPrivate::transmit()
#ifdef QSSLSOCKET_DEBUG
qDebug() << "QSslSocketBackendPrivate::transmit: decrypted" << readBytes << "bytes";
#endif
- char *ptr = readBuffer.reserve(readBytes);
+ char *ptr = buffer.reserve(readBytes);
::memcpy(ptr, data.data(), readBytes);
if (readyReadEmittedPointer)