From 5b8d5c7493259544f853eb2732cca2829c0f67ca Mon Sep 17 00:00:00 2001 From: Timur Pocheptsov Date: Mon, 6 Aug 2018 12:05:26 +0200 Subject: Document DTLS examples MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Task-number: QTBUG-68070 Change-Id: I2b08322049005b02f1ed680bee21992ade16813a Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Paul Wicking Reviewed-by: Edward Welbourne --- examples/network/secureudpclient/addressdialog.h | 2 -- examples/network/secureudpclient/association.cpp | 35 +++++++++++++++++++++--- examples/network/secureudpclient/association.h | 6 ++-- examples/network/secureudpclient/mainwindow.cpp | 4 +++ examples/network/secureudpclient/mainwindow.h | 2 -- 5 files changed, 37 insertions(+), 12 deletions(-) (limited to 'examples/network/secureudpclient') diff --git a/examples/network/secureudpclient/addressdialog.h b/examples/network/secureudpclient/addressdialog.h index 7c5e2e03e8..43792faa4b 100644 --- a/examples/network/secureudpclient/addressdialog.h +++ b/examples/network/secureudpclient/addressdialog.h @@ -69,7 +69,6 @@ class AddressDialog : public QDialog Q_OBJECT public: - explicit AddressDialog(QWidget *parent = nullptr); ~AddressDialog(); @@ -77,7 +76,6 @@ public: quint16 remotePort() const; private: - void setupHostSelector(); void setupPortSelector(); diff --git a/examples/network/secureudpclient/association.cpp b/examples/network/secureudpclient/association.cpp index 6b510909f1..c950260078 100644 --- a/examples/network/secureudpclient/association.cpp +++ b/examples/network/secureudpclient/association.cpp @@ -57,27 +57,38 @@ DtlsAssociation::DtlsAssociation(const QHostAddress &address, quint16 port, : name(connectionName), crypto(QSslSocket::SslClientMode) { + //! [1] auto configuration = QSslConfiguration::defaultDtlsConfiguration(); configuration.setPeerVerifyMode(QSslSocket::VerifyNone); crypto.setPeer(address, port); crypto.setDtlsConfiguration(configuration); + //! [1] + //! [2] connect(&crypto, &QDtls::handshakeTimeout, this, &DtlsAssociation::handshakeTimeout); + //! [2] connect(&crypto, &QDtls::pskRequired, this, &DtlsAssociation::pskRequired); - + //! [3] socket.connectToHost(address.toString(), port); + //! [3] + //! [13] connect(&socket, &QUdpSocket::readyRead, this, &DtlsAssociation::readyRead); - + //! [13] + //! [4] pingTimer.setInterval(5000); connect(&pingTimer, &QTimer::timeout, this, &DtlsAssociation::pingTimeout); + //! [4] } +//! [12] DtlsAssociation::~DtlsAssociation() { if (crypto.isConnectionEncrypted()) crypto.shutdown(&socket); } +//! [12] +//! [5] void DtlsAssociation::startHandshake() { if (socket.state() != QAbstractSocket::ConnectedState) { @@ -86,11 +97,12 @@ void DtlsAssociation::startHandshake() return; } - if (!crypto.doHandshake(&socket, {})) + if (!crypto.doHandshake(&socket)) emit errorMessage(tr("%1: failed to start a handshake - %2").arg(name, crypto.dtlsErrorString())); else emit infoMessage(tr("%1: starting a handshake").arg(name)); } +//! [5] void DtlsAssociation::udpSocketConnected() { @@ -100,7 +112,8 @@ void DtlsAssociation::udpSocketConnected() void DtlsAssociation::readyRead() { - QByteArray dgram(socket.pendingDatagramSize(), '\0'); + //! [6] + QByteArray dgram(socket.pendingDatagramSize(), Qt::Uninitialized); const qint64 bytesRead = socket.readDatagram(dgram.data(), dgram.size()); if (bytesRead <= 0) { emit warningMessage(tr("%1: spurious read notification?").arg(name)); @@ -108,6 +121,8 @@ void DtlsAssociation::readyRead() } dgram.resize(bytesRead); + //! [6] + //! [7] if (crypto.isConnectionEncrypted()) { const QByteArray plainText = crypto.decryptDatagram(&socket, dgram); if (plainText.size()) { @@ -124,27 +139,36 @@ void DtlsAssociation::readyRead() emit warningMessage(tr("%1: zero-length datagram received?").arg(name)); } else { + //! [7] + //! [8] if (!crypto.doHandshake(&socket, dgram)) { emit errorMessage(tr("%1: handshake error - %2").arg(name, crypto.dtlsErrorString())); return; } + //! [8] + + //! [9] if (crypto.isConnectionEncrypted()) { emit infoMessage(tr("%1: encrypted connection established!").arg(name)); pingTimer.start(); pingTimeout(); } else { + //! [9] emit infoMessage(tr("%1: continuing with handshake ...").arg(name)); } } } +//! [11] void DtlsAssociation::handshakeTimeout() { emit warningMessage(tr("%1: handshake timeout, trying to re-transmit").arg(name)); if (!crypto.handleTimeout(&socket)) emit errorMessage(tr("%1: failed to re-transmit - %2").arg(name, crypto.dtlsErrorString())); } +//! [11] +//! [14] void DtlsAssociation::pskRequired(QSslPreSharedKeyAuthenticator *auth) { Q_ASSERT(auth); @@ -153,7 +177,9 @@ void DtlsAssociation::pskRequired(QSslPreSharedKeyAuthenticator *auth) auth->setIdentity(name.toLatin1()); auth->setPreSharedKey(QByteArrayLiteral("\x1a\x2b\x3c\x4d\x5e\x6f")); } +//! [14] +//! [10] void DtlsAssociation::pingTimeout() { static const QString message = QStringLiteral("I am %1, please, accept our ping %2"); @@ -166,5 +192,6 @@ void DtlsAssociation::pingTimeout() ++ping; } +//! [10] QT_END_NAMESPACE diff --git a/examples/network/secureudpclient/association.h b/examples/network/secureudpclient/association.h index 157882f23d..be89ce695e 100644 --- a/examples/network/secureudpclient/association.h +++ b/examples/network/secureudpclient/association.h @@ -55,19 +55,18 @@ QT_BEGIN_NAMESPACE +//! [0] class DtlsAssociation : public QObject { Q_OBJECT public: - DtlsAssociation(const QHostAddress &address, quint16 port, const QString &connectionName); ~DtlsAssociation(); void startHandshake(); signals: - void errorMessage(const QString &message); void warningMessage(const QString &message); void infoMessage(const QString &message); @@ -75,7 +74,6 @@ signals: const QByteArray &plainText); private slots: - void udpSocketConnected(); void readyRead(); void handshakeTimeout(); @@ -83,7 +81,6 @@ private slots: void pingTimeout(); private: - QString name; QUdpSocket socket; QDtls crypto; @@ -93,6 +90,7 @@ private: Q_DISABLE_COPY(DtlsAssociation) }; +//! [0] QT_END_NAMESPACE diff --git a/examples/network/secureudpclient/mainwindow.cpp b/examples/network/secureudpclient/mainwindow.cpp index 07c614cf3a..2fbf757c81 100644 --- a/examples/network/secureudpclient/mainwindow.cpp +++ b/examples/network/secureudpclient/mainwindow.cpp @@ -72,6 +72,8 @@ MainWindow::~MainWindow() delete ui; } +//! [0] + const QString colorizer(QStringLiteral("%2
")); void MainWindow::addErrorMessage(const QString &message) @@ -102,6 +104,8 @@ void MainWindow::addServerResponse(const QString &clientInfo, const QByteArray & ui->serverMessages->insertHtml(colorizer.arg(messageColor, html)); } +//! [0] + void MainWindow::on_connectButton_clicked() { if (lookupId != -1) { diff --git a/examples/network/secureudpclient/mainwindow.h b/examples/network/secureudpclient/mainwindow.h index b231b44627..0d443fd376 100644 --- a/examples/network/secureudpclient/mainwindow.h +++ b/examples/network/secureudpclient/mainwindow.h @@ -76,7 +76,6 @@ class MainWindow : public QMainWindow Q_OBJECT public: - explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); @@ -94,7 +93,6 @@ private slots: void lookupFinished(const QHostInfo &hostInfo); private: - void updateUi(); void startNewConnection(const QHostAddress &address); -- cgit v1.2.3