diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-05-17 17:24:03 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2022-06-22 07:51:41 +0000 |
commit | 774f54339e5db91f785733232d3950366db65d07 (patch) | |
tree | 068e1b47bd1af94d77094ed12b604a6b83d9c22a /chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h | |
parent | f7eaed5286974984ba5f9e3189d8f49d03e99f81 (diff) | |
download | qtwebengine-chromium-774f54339e5db91f785733232d3950366db65d07.tar.gz |
BASELINE: Update Chromium to 102.0.5005.57
Change-Id: I885f714bb40ee724c28f94ca6bd8dbdb39915158
Reviewed-by: Allan Sandfeld Jensen <allan.jensen@qt.io>
Diffstat (limited to 'chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h')
-rw-r--r-- | chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h | 263 |
1 files changed, 0 insertions, 263 deletions
diff --git a/chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h b/chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h deleted file mode 100644 index b1f22469e12..00000000000 --- a/chromium/net/third_party/quiche/src/quic/tools/web_transport_test_visitors.h +++ /dev/null @@ -1,263 +0,0 @@ -// Copyright (c) 2021 The Chromium Authors. All rights reserved. -// Use of this source code is governed by a BSD-style license that can be -// found in the LICENSE file. - -#ifndef QUICHE_QUIC_TOOLS_WEB_TRANSPORT_TEST_VISITORS_H_ -#define QUICHE_QUIC_TOOLS_WEB_TRANSPORT_TEST_VISITORS_H_ - -#include <string> - -#include "quic/core/quic_simple_buffer_allocator.h" -#include "quic/core/web_transport_interface.h" -#include "quic/platform/api/quic_logging.h" -#include "common/quiche_circular_deque.h" - -namespace quic { - -// Discards any incoming data. -class WebTransportDiscardVisitor : public WebTransportStreamVisitor { - public: - WebTransportDiscardVisitor(WebTransportStream* stream) : stream_(stream) {} - - void OnCanRead() override { - std::string buffer; - WebTransportStream::ReadResult result = stream_->Read(&buffer); - QUIC_DVLOG(2) << "Read " << result.bytes_read - << " bytes from WebTransport stream " - << stream_->GetStreamId() << ", fin: " << result.fin; - } - - void OnCanWrite() override {} - - void OnResetStreamReceived(WebTransportStreamError /*error*/) override {} - void OnStopSendingReceived(WebTransportStreamError /*error*/) override {} - void OnWriteSideInDataRecvdState() override {} - - private: - WebTransportStream* stream_; -}; - -// Echoes any incoming data back on the same stream. -class WebTransportBidirectionalEchoVisitor : public WebTransportStreamVisitor { - public: - WebTransportBidirectionalEchoVisitor(WebTransportStream* stream) - : stream_(stream) {} - - void OnCanRead() override { - WebTransportStream::ReadResult result = stream_->Read(&buffer_); - QUIC_DVLOG(1) << "Attempted reading on WebTransport bidirectional stream " - << stream_->GetStreamId() - << ", bytes read: " << result.bytes_read; - if (result.fin) { - send_fin_ = true; - } - OnCanWrite(); - } - - void OnCanWrite() override { - if (stop_sending_received_) { - return; - } - - if (!buffer_.empty()) { - bool success = stream_->Write(buffer_); - QUIC_DVLOG(1) << "Attempted writing on WebTransport bidirectional stream " - << stream_->GetStreamId() - << ", success: " << (success ? "yes" : "no"); - if (!success) { - return; - } - - buffer_ = ""; - } - - if (send_fin_) { - bool success = stream_->SendFin(); - QUICHE_DCHECK(success); - } - } - - void OnResetStreamReceived(WebTransportStreamError /*error*/) override { - // Send FIN in response to a stream reset. We want to test that we can - // operate one side of the stream cleanly while the other is reset, thus - // replying with a FIN rather than a RESET_STREAM is more appropriate here. - send_fin_ = true; - OnCanWrite(); - } - void OnStopSendingReceived(WebTransportStreamError /*error*/) override { - stop_sending_received_ = true; - } - void OnWriteSideInDataRecvdState() override {} - - protected: - WebTransportStream* stream() { return stream_; } - - private: - WebTransportStream* stream_; - std::string buffer_; - bool send_fin_ = false; - bool stop_sending_received_ = false; -}; - -// Buffers all of the data and calls |callback| with the entirety of the stream -// data. -class WebTransportUnidirectionalEchoReadVisitor - : public WebTransportStreamVisitor { - public: - using Callback = std::function<void(const std::string&)>; - - WebTransportUnidirectionalEchoReadVisitor(WebTransportStream* stream, - Callback callback) - : stream_(stream), callback_(std::move(callback)) {} - - void OnCanRead() override { - WebTransportStream::ReadResult result = stream_->Read(&buffer_); - QUIC_DVLOG(1) << "Attempted reading on WebTransport unidirectional stream " - << stream_->GetStreamId() - << ", bytes read: " << result.bytes_read; - if (result.fin) { - QUIC_DVLOG(1) << "Finished receiving data on a WebTransport stream " - << stream_->GetStreamId() << ", queueing up the echo"; - callback_(buffer_); - } - } - - void OnCanWrite() override { QUIC_NOTREACHED(); } - - void OnResetStreamReceived(WebTransportStreamError /*error*/) override {} - void OnStopSendingReceived(WebTransportStreamError /*error*/) override {} - void OnWriteSideInDataRecvdState() override {} - - private: - WebTransportStream* stream_; - std::string buffer_; - Callback callback_; -}; - -// Sends supplied data. -class WebTransportUnidirectionalEchoWriteVisitor - : public WebTransportStreamVisitor { - public: - WebTransportUnidirectionalEchoWriteVisitor(WebTransportStream* stream, - const std::string& data) - : stream_(stream), data_(data) {} - - void OnCanRead() override { QUIC_NOTREACHED(); } - void OnCanWrite() override { - if (data_.empty()) { - return; - } - if (!stream_->Write(data_)) { - return; - } - data_ = ""; - bool fin_sent = stream_->SendFin(); - QUICHE_DVLOG(1) - << "WebTransportUnidirectionalEchoWriteVisitor finished sending data."; - QUICHE_DCHECK(fin_sent); - } - - void OnResetStreamReceived(WebTransportStreamError /*error*/) override {} - void OnStopSendingReceived(WebTransportStreamError /*error*/) override {} - void OnWriteSideInDataRecvdState() override {} - - private: - WebTransportStream* stream_; - std::string data_; -}; - -// A session visitor which sets unidirectional or bidirectional stream visitors -// to echo. -class EchoWebTransportSessionVisitor : public WebTransportVisitor { - public: - EchoWebTransportSessionVisitor(WebTransportSession* session) - : session_(session) {} - - void OnSessionReady(const spdy::SpdyHeaderBlock&) override { - if (session_->CanOpenNextOutgoingBidirectionalStream()) { - OnCanCreateNewOutgoingBidirectionalStream(); - } - } - - void OnSessionClosed(WebTransportSessionError /*error_code*/, - const std::string& /*error_message*/) override {} - - void OnIncomingBidirectionalStreamAvailable() override { - while (true) { - WebTransportStream* stream = - session_->AcceptIncomingBidirectionalStream(); - if (stream == nullptr) { - return; - } - QUIC_DVLOG(1) - << "EchoWebTransportSessionVisitor received a bidirectional stream " - << stream->GetStreamId(); - stream->SetVisitor( - std::make_unique<WebTransportBidirectionalEchoVisitor>(stream)); - stream->visitor()->OnCanRead(); - } - } - - void OnIncomingUnidirectionalStreamAvailable() override { - while (true) { - WebTransportStream* stream = - session_->AcceptIncomingUnidirectionalStream(); - if (stream == nullptr) { - return; - } - QUIC_DVLOG(1) - << "EchoWebTransportSessionVisitor received a unidirectional stream"; - stream->SetVisitor( - std::make_unique<WebTransportUnidirectionalEchoReadVisitor>( - stream, [this](const std::string& data) { - streams_to_echo_back_.push_back(data); - TrySendingUnidirectionalStreams(); - })); - stream->visitor()->OnCanRead(); - } - } - - void OnDatagramReceived(absl::string_view datagram) override { - auto buffer = MakeUniqueBuffer(&allocator_, datagram.size()); - memcpy(buffer.get(), datagram.data(), datagram.size()); - QuicMemSlice slice(std::move(buffer), datagram.size()); - session_->SendOrQueueDatagram(std::move(slice)); - } - - void OnCanCreateNewOutgoingBidirectionalStream() override { - if (!echo_stream_opened_) { - WebTransportStream* stream = session_->OpenOutgoingBidirectionalStream(); - stream->SetVisitor( - std::make_unique<WebTransportBidirectionalEchoVisitor>(stream)); - echo_stream_opened_ = true; - } - } - void OnCanCreateNewOutgoingUnidirectionalStream() override { - TrySendingUnidirectionalStreams(); - } - - void TrySendingUnidirectionalStreams() { - while (!streams_to_echo_back_.empty() && - session_->CanOpenNextOutgoingUnidirectionalStream()) { - QUIC_DVLOG(1) - << "EchoWebTransportServer echoed a unidirectional stream back"; - WebTransportStream* stream = session_->OpenOutgoingUnidirectionalStream(); - stream->SetVisitor( - std::make_unique<WebTransportUnidirectionalEchoWriteVisitor>( - stream, streams_to_echo_back_.front())); - streams_to_echo_back_.pop_front(); - stream->visitor()->OnCanWrite(); - } - } - - private: - WebTransportSession* session_; - SimpleBufferAllocator allocator_; - bool echo_stream_opened_ = false; - - quiche::QuicheCircularDeque<std::string> streams_to_echo_back_; -}; - -} // namespace quic - -#endif // QUICHE_QUIC_TOOLS_WEB_TRANSPORT_TEST_VISITORS_H_ |