1
#pragma once
2

            
3
#include "envoy/common/optref.h"
4
#include "envoy/config/typed_config.h"
5
#include "envoy/network/transport_socket.h"
6

            
7
#include "quiche/quic/core/crypto/quic_crypto_server_config.h"
8
#include "quiche/quic/core/quic_crypto_server_stream_base.h"
9
#include "quiche/quic/core/quic_session.h"
10
#include "quiche/quic/core/tls_server_handshaker.h"
11

            
12
namespace Envoy {
13
namespace Quic {
14

            
15
class EnvoyQuicCryptoServerStreamFactoryInterface : public Config::TypedFactory {
16
public:
17
1031
  std::string category() const override { return "envoy.quic.server.crypto_stream"; }
18

            
19
  // Return an Envoy specific quic crypto server stream object.
20
  virtual std::unique_ptr<quic::QuicCryptoServerStreamBase> createEnvoyQuicCryptoServerStream(
21
      const quic::QuicCryptoServerConfig* crypto_config,
22
      quic::QuicCompressedCertsCache* compressed_certs_cache, quic::QuicSession* session,
23
      quic::QuicCryptoServerStreamBase::Helper* helper,
24
      OptRef<const Network::DownstreamTransportSocketFactory> transport_socket_factory,
25
      Event::Dispatcher& dispatcher) PURE;
26
};
27

            
28
} // namespace Quic
29
} // namespace Envoy