net/WebSocketHandler.hpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-)
New commits: commit 4c954973273624f80d92cf6190ea064bac41bdb9 Author: Ashod Nakashian <ashod.nakash...@collabora.co.uk> AuthorDate: Thu Sep 17 07:54:00 2020 -0400 Commit: Andras Timar <andras.ti...@collabora.com> CommitDate: Thu Sep 17 15:37:21 2020 +0200 wsd: allow pings from clients Per the rfc (https://tools.ietf.org/html/rfc6455#section-5.5.2): "An endpoint MAY send a Ping frame any time after the connection is established and before the connection is closed." And "Upon receipt of a Ping frame, an endpoint MUST send a Pong frame in response, unless it already received a Close frame." Here we allow for pings to come from clients and we respond to them by pongs, as required by rfc 6455. Change-Id: I8e285f095526e4b67373ecb3ae1efc9c8717d756 Reviewed-on: https://gerrit.libreoffice.org/c/online/+/102948 Tested-by: Jenkins CollaboraOffice <jenkinscollaboraoff...@gmail.com> Reviewed-by: Andras Timar <andras.ti...@collabora.com> diff --git a/net/WebSocketHandler.hpp b/net/WebSocketHandler.hpp index 7fb38c86d..7a9ec902c 100644 --- a/net/WebSocketHandler.hpp +++ b/net/WebSocketHandler.hpp @@ -287,33 +287,25 @@ public: switch (code) { case WSOpCode::Pong: - if (_isClient) - { - LOG_ERR('#' << socket->getFD() << ": Servers should not send pongs, only clients"); - shutdown(StatusCodes::POLICY_VIOLATION); - return true; - } - else { + if (_isClient) + LOG_WRN('#' << socket->getFD() << ": Servers should not send pongs, only clients"); + _pingTimeUs = std::chrono::duration_cast<std::chrono::microseconds> (std::chrono::steady_clock::now() - _lastPingSentTime).count(); LOG_TRC('#' << socket->getFD() << ": Pong received: " << _pingTimeUs << " microseconds"); } break; case WSOpCode::Ping: - if (_isClient) { - auto now = std::chrono::steady_clock::now(); + if (!_isClient) + LOG_ERR('#' << socket->getFD() << ": Clients should not send pings, only servers"); + + const auto now = std::chrono::steady_clock::now(); _pingTimeUs = std::chrono::duration_cast<std::chrono::microseconds> (now - _lastPingSentTime).count(); sendPong(now, &ctrlPayload[0], payloadLen, socket); } - else - { - LOG_ERR('#' << socket->getFD() << ": Clients should not send pings, only servers"); - shutdown(StatusCodes::POLICY_VIOLATION); - return true; - } break; case WSOpCode::Close: { _______________________________________________ Libreoffice-commits mailing list libreoffice-comm...@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/libreoffice-commits