From 9e349814f636c0439319e6be92c0ef699d72e164 Mon Sep 17 00:00:00 2001 From: Kurt Pattyn Date: Sat, 31 Aug 2013 20:57:26 +0200 Subject: [PATCH] Added payload to ping() method and pong() signal --- src/qwebsocket.cpp | 15 +++++++++++---- src/qwebsocket.h | 4 ++-- src/qwebsocket_p.cpp | 9 +++++---- src/qwebsocket_p.h | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/qwebsocket.cpp b/src/qwebsocket.cpp index 2f71a4b..b92b061 100644 --- a/src/qwebsocket.cpp +++ b/src/qwebsocket.cpp @@ -157,10 +157,10 @@ not been filled in with new information when the signal returns. \sa error(), errorString() */ /*! - \fn void QWebSocket::pong(quint64 elapsedTime) + \fn void QWebSocket::pong(quint64 elapsedTime, QByteArray payload) Emitted when a pong message is received in reply to a previous ping. - \a elapsedTime contains the roundtrip time in milliseconds + \a elapsedTime contains the roundtrip time in milliseconds and \a payload contains an optional payload that was sent with the ping. \sa ping() */ @@ -316,13 +316,20 @@ void QWebSocket::open(const QUrl &url, bool mask) /*! \brief Pings the server to indicate that the connection is still alive. + Additional \a payload can be sent along the ping message. + + The size of the \a payload cannot be bigger than 125. If it is larger, the \a payload is clipped to 125 bytes. \sa pong() */ -void QWebSocket::ping() +void QWebSocket::ping(const QByteArray &payload) { Q_D(QWebSocket); - d->ping(); + if (payload.length() > 125) + { + payload.left(125); + } + d->ping(payload); } /*! diff --git a/src/qwebsocket.h b/src/qwebsocket.h index e1791af..cffc87d 100644 --- a/src/qwebsocket.h +++ b/src/qwebsocket.h @@ -86,7 +86,7 @@ public: public Q_SLOTS: void close(QWebSocketProtocol::CloseCode closeCode = QWebSocketProtocol::CC_NORMAL, const QString &reason = QString()); void open(const QUrl &url, bool mask = true); - void ping(); + void ping(const QByteArray &payload = QByteArray()); Q_SIGNALS: void aboutToClose(); @@ -102,7 +102,7 @@ Q_SIGNALS: void textMessageReceived(QString message); void binaryMessageReceived(QByteArray message); void error(QAbstractSocket::SocketError error); - void pong(quint64 elapsedTime); + void pong(quint64 elapsedTime, QByteArray payload); private: Q_DISABLE_COPY(QWebSocket) diff --git a/src/qwebsocket_p.cpp b/src/qwebsocket_p.cpp index be3a918..c06471e 100644 --- a/src/qwebsocket_p.cpp +++ b/src/qwebsocket_p.cpp @@ -261,10 +261,12 @@ void QWebSocketPrivate::open(const QUrl &url, bool mask) /*! \internal */ -void QWebSocketPrivate::ping() +void QWebSocketPrivate::ping(const QByteArray &payload) { + Q_ASSERT(payload.length() < 126); m_pingTimer.restart(); - QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OC_PING, 0, 0, true); + QByteArray pingFrame = getFrameHeader(QWebSocketProtocol::OC_PING, payload.size(), 0 /*do not mask*/, true); + pingFrame.append(payload); writeFrame(pingFrame); } @@ -886,9 +888,8 @@ void QWebSocketPrivate::processPing(QByteArray data) */ void QWebSocketPrivate::processPong(QByteArray data) { - Q_UNUSED(data); Q_Q(QWebSocket); - Q_EMIT q->pong(static_cast(m_pingTimer.elapsed())); + Q_EMIT q->pong(static_cast(m_pingTimer.elapsed()), data); } /*! diff --git a/src/qwebsocket_p.h b/src/qwebsocket_p.h index 5a1ffec..e4cd657 100644 --- a/src/qwebsocket_p.h +++ b/src/qwebsocket_p.h @@ -100,7 +100,7 @@ public: public Q_SLOTS: void close(QWebSocketProtocol::CloseCode closeCode, QString reason); void open(const QUrl &url, bool mask); - void ping(); + void ping(const QByteArray &payload); private Q_SLOTS: void processData(); -- 2.7.4