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>
This commit is contained in:
Alex Trotsenko 2017-09-30 16:11:20 +03:00
parent 06089a19e5
commit ca49f133f0
2 changed files with 15 additions and 0 deletions

View File

@ -2644,6 +2644,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
*/

View File

@ -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