diff options
author | Alex Trotsenko <alex1973tr@gmail.com> | 2017-09-30 16:11:20 +0300 |
---|---|---|
committer | Alex Trotsenko <alex1973tr@gmail.com> | 2017-10-07 17:22:24 +0000 |
commit | ca49f133f0a0bcf62caf858a81325b0a9bf668c6 (patch) | |
tree | 39c70ea19f0818d6654440cd5749571ac7ab59e0 /src/network/ssl | |
parent | 06089a19e52126bb83016d6a360aaf32c53bed49 (diff) |
QSslSocket: implement skip() overload
As QAbstractSocket does not handle most cases for this socket type, we
should override skip() in QSslSocketPrivate implementation.
In unencrypted mode, QSslSocket should forward skipping to the plain
socket. If a connection is secure, we just need to check the connection
state.
Change-Id: I56602c6427b8617e8a9f453809a30fb2914ad798
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'src/network/ssl')
-rw-r--r-- | src/network/ssl/qsslsocket.cpp | 14 | ||||
-rw-r--r-- | src/network/ssl/qsslsocket_p.h | 1 |
2 files changed, 15 insertions, 0 deletions
diff --git a/src/network/ssl/qsslsocket.cpp b/src/network/ssl/qsslsocket.cpp index 5c9ebac283..84c814cca4 100644 --- a/src/network/ssl/qsslsocket.cpp +++ b/src/network/ssl/qsslsocket.cpp @@ -2647,6 +2647,20 @@ QByteArray QSslSocketPrivate::peek(qint64 maxSize) /*! \internal */ +qint64 QSslSocketPrivate::skip(qint64 maxSize) +{ + if (mode == QSslSocket::UnencryptedMode && !autoStartHandshake) + return plainSocket->skip(maxSize); + + // In encrypted mode, the SSL backend writes decrypted data directly into the + // QIODevice's read buffer. As this buffer is always emptied by the caller, + // we need to wait for more incoming data. + return (state == QAbstractSocket::ConnectedState) ? Q_INT64_C(0) : Q_INT64_C(-1); +} + +/*! + \internal +*/ bool QSslSocketPrivate::flush() { #ifdef QSSLSOCKET_DEBUG diff --git a/src/network/ssl/qsslsocket_p.h b/src/network/ssl/qsslsocket_p.h index 9d45d01695..ced861805b 100644 --- a/src/network/ssl/qsslsocket_p.h +++ b/src/network/ssl/qsslsocket_p.h @@ -192,6 +192,7 @@ public: virtual qint64 peek(char *data, qint64 maxSize) override; virtual QByteArray peek(qint64 maxSize) override; + qint64 skip(qint64 maxSize) override; bool flush() override; // Platform specific functions |