| // Copyright 2023 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_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_ |
| #define QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_ |
| |
| #include <optional> |
| #include <utility> |
| |
| #include "quiche/common/quiche_callbacks.h" |
| #include "quiche/web_transport/web_transport.h" |
| |
| namespace webtransport { |
| |
| // A visitor that will buffer the entirety of the incoming stream into a string, |
| // and will send a pre-specified string all at once. |
| class QUICHE_EXPORT CompleteBufferVisitor : public StreamVisitor { |
| public: |
| using AllDataReadCallback = quiche::SingleUseCallback<void(std::string)>; |
| |
| CompleteBufferVisitor(webtransport::Stream* stream, std::string outgoing_data) |
| : stream_(stream), |
| outgoing_data_(std::in_place, std::move(outgoing_data)) {} |
| CompleteBufferVisitor(webtransport::Stream* stream, |
| AllDataReadCallback incoming_data_callback) |
| : stream_(stream), |
| incoming_data_callback_(std::in_place, |
| std::move(incoming_data_callback)) {} |
| CompleteBufferVisitor(webtransport::Stream* stream, std::string outgoing_data, |
| AllDataReadCallback incoming_data_callback) |
| : stream_(stream), |
| outgoing_data_(std::in_place, std::move(outgoing_data)), |
| incoming_data_callback_(std::in_place, |
| std::move(incoming_data_callback)) {} |
| |
| void OnCanRead() override; |
| void OnCanWrite() override; |
| |
| void OnResetStreamReceived(StreamErrorCode) override {} |
| void OnStopSendingReceived(StreamErrorCode) override {} |
| void OnWriteSideInDataRecvdState() override {} |
| |
| protected: |
| void SetOutgoingData(std::string data); |
| |
| private: |
| webtransport::Stream* stream_; |
| std::optional<std::string> outgoing_data_; |
| std::optional<AllDataReadCallback> incoming_data_callback_; |
| std::string incoming_data_buffer_; |
| }; |
| |
| } // namespace webtransport |
| |
| #endif // QUICHE_WEB_TRANSPORT_COMPLETE_BUFFER_VISITOR_H_ |