| // Copyright (c) 2012 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_TOY_SERVER_H_ | 
 | #define QUICHE_QUIC_TOOLS_QUIC_TOY_SERVER_H_ | 
 |  | 
 | #include "quic/core/crypto/proof_source.h" | 
 | #include "quic/tools/quic_simple_server_backend.h" | 
 | #include "quic/tools/quic_spdy_server_base.h" | 
 |  | 
 | namespace quic { | 
 |  | 
 | // A binary wrapper for QuicServer.  It listens forever on --port | 
 | // (default 6121) until it's killed or ctrl-cd to death. | 
 | class QuicToyServer { | 
 |  public: | 
 |   // A factory for creating QuicSpdyServerBase instances. | 
 |   class ServerFactory { | 
 |    public: | 
 |     virtual ~ServerFactory() = default; | 
 |  | 
 |     // Creates a QuicSpdyServerBase instance using |backend| for generating | 
 |     // responses, and |proof_source| for certificates. | 
 |     virtual std::unique_ptr<QuicSpdyServerBase> CreateServer( | 
 |         QuicSimpleServerBackend* backend, | 
 |         std::unique_ptr<ProofSource> proof_source, | 
 |         const ParsedQuicVersionVector& supported_versions) = 0; | 
 |   }; | 
 |  | 
 |   // A facotry for creating QuicSimpleServerBackend instances. | 
 |   class BackendFactory { | 
 |    public: | 
 |     virtual ~BackendFactory() = default; | 
 |  | 
 |     // Creates a new backend. | 
 |     virtual std::unique_ptr<QuicSimpleServerBackend> CreateBackend() = 0; | 
 |   }; | 
 |  | 
 |   // A factory for creating QuicMemoryCacheBackend instances, configured | 
 |   // to load files from disk, if necessary. | 
 |   class MemoryCacheBackendFactory : public BackendFactory { | 
 |    public: | 
 |     std::unique_ptr<quic::QuicSimpleServerBackend> CreateBackend() override; | 
 |   }; | 
 |  | 
 |   // Constructs a new toy server that will use |server_factory| to create the | 
 |   // actual QuicSpdyServerBase instance. | 
 |   QuicToyServer(BackendFactory* backend_factory, ServerFactory* server_factory); | 
 |  | 
 |   // Connects to the QUIC server based on the various flags defined in the | 
 |   // .cc file, listends for requests and sends the responses. Returns 1 on | 
 |   // failure and does not return otherwise. | 
 |   int Start(); | 
 |  | 
 |  private: | 
 |   BackendFactory* backend_factory_;  // Unowned. | 
 |   ServerFactory* server_factory_;    // Unowned. | 
 | }; | 
 |  | 
 | }  // namespace quic | 
 |  | 
 | #endif  // QUICHE_QUIC_TOOLS_QUIC_TOY_SERVER_H_ |