| // Copyright (c) 2019 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_QUIC_TRANSPORT_SIMPLE_SERVER_SESSION_H_ | |
| #define QUICHE_QUIC_TOOLS_QUIC_TRANSPORT_SIMPLE_SERVER_SESSION_H_ | |
| #include <memory> | |
| #include <vector> | |
| #include "url/origin.h" | |
| #include "net/third_party/quiche/src/quic/core/quic_types.h" | |
| #include "net/third_party/quiche/src/quic/core/quic_versions.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_containers.h" | |
| #include "net/third_party/quiche/src/quic/platform/api/quic_flags.h" | |
| #include "net/third_party/quiche/src/quic/quic_transport/quic_transport_server_session.h" | |
| #include "net/third_party/quiche/src/quic/quic_transport/quic_transport_stream.h" | |
| namespace quic { | |
| // QuicTransport simple server is a non-production server that can be used for | |
| // testing QuicTransport. It has two modes that can be changed using the | |
| // command line flags, "echo" and "discard". | |
| class QuicTransportSimpleServerSession | |
| : public QuicTransportServerSession, | |
| QuicTransportServerSession::ServerVisitor { | |
| public: | |
| enum Mode { | |
| // In DISCARD mode, any data on incoming streams is discarded and no | |
| // outgoing streams are initiated. | |
| DISCARD, | |
| // In ECHO mode, any data sent on a bidirectional stream is echoed back. | |
| // Any data sent on a unidirectional stream is buffered, and echoed back on | |
| // a server-initiated unidirectional stream that is sent as soon as a FIN is | |
| // received on the incoming stream. | |
| ECHO, | |
| }; | |
| QuicTransportSimpleServerSession( | |
| QuicConnection* connection, | |
| bool owns_connection, | |
| Visitor* owner, | |
| const QuicConfig& config, | |
| const ParsedQuicVersionVector& supported_versions, | |
| const QuicCryptoServerConfig* crypto_config, | |
| QuicCompressedCertsCache* compressed_certs_cache, | |
| std::vector<url::Origin> accepted_origins); | |
| ~QuicTransportSimpleServerSession(); | |
| void OnIncomingDataStream(QuicTransportStream* stream) override; | |
| void OnCanCreateNewOutgoingStream(bool unidirectional) override; | |
| bool CheckOrigin(url::Origin origin) override; | |
| bool ProcessPath(const GURL& url) override; | |
| void EchoStreamBack(const std::string& data) { | |
| streams_to_echo_back_.push_back(data); | |
| MaybeEchoStreamsBack(); | |
| } | |
| private: | |
| void MaybeEchoStreamsBack(); | |
| const bool owns_connection_; | |
| Mode mode_; | |
| std::vector<url::Origin> accepted_origins_; | |
| QuicDeque<std::string> streams_to_echo_back_; | |
| }; | |
| } // namespace quic | |
| #endif // QUICHE_QUIC_TOOLS_QUIC_TRANSPORT_SIMPLE_SERVER_SESSION_H_ |