| // 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_QBONE_QBONE_CLIENT_H_ | 
 | #define QUICHE_QUIC_QBONE_QBONE_CLIENT_H_ | 
 |  | 
 | #include "net/third_party/quiche/src/quic/qbone/qbone_client_interface.h" | 
 | #include "net/third_party/quiche/src/quic/qbone/qbone_client_session.h" | 
 | #include "net/third_party/quiche/src/quic/qbone/qbone_packet_writer.h" | 
 | #include "net/third_party/quiche/src/quic/tools/quic_client_base.h" | 
 | #include "net/third_party/quiche/src/quic/tools/quic_client_epoll_network_helper.h" | 
 | #include "net/third_party/quiche/src/common/platform/api/quiche_string_piece.h" | 
 |  | 
 | namespace quic { | 
 | // A QboneClient encapsulates connecting to a server via an epoll server | 
 | // and setting up a Qbone tunnel. See the QboneTestClient in qbone_client_test | 
 | // for usage. | 
 | class QboneClient : public QuicClientBase, public QboneClientInterface { | 
 |  public: | 
 |   // Note that the epoll server, qbone writer, and handler are owned | 
 |   // by the caller. | 
 |   QboneClient(QuicSocketAddress server_address, | 
 |               const QuicServerId& server_id, | 
 |               const ParsedQuicVersionVector& supported_versions, | 
 |               QuicSession::Visitor* session_owner, | 
 |               const QuicConfig& config, | 
 |               QuicEpollServer* epoll_server, | 
 |               std::unique_ptr<ProofVerifier> proof_verifier, | 
 |               QbonePacketWriter* qbone_writer, | 
 |               QboneClientControlStream::Handler* qbone_handler); | 
 |   ~QboneClient() override; | 
 |   QboneClientSession* qbone_session(); | 
 |  | 
 |   // From QboneClientInterface. Accepts a given packet from the network and | 
 |   // sends the packet down to the QBONE connection. | 
 |   void ProcessPacketFromNetwork(quiche::QuicheStringPiece packet) override; | 
 |  | 
 |  protected: | 
 |   int GetNumSentClientHellosFromSession() override; | 
 |   int GetNumReceivedServerConfigUpdatesFromSession() override; | 
 |  | 
 |   // This client does not resend saved data. This will be a no-op. | 
 |   void ResendSavedData() override; | 
 |  | 
 |   // This client does not resend saved data. This will be a no-op. | 
 |   void ClearDataToResend() override; | 
 |  | 
 |   // Takes ownership of |connection|. | 
 |   std::unique_ptr<QuicSession> CreateQuicClientSession( | 
 |       const ParsedQuicVersionVector& supported_versions, | 
 |       QuicConnection* connection) override; | 
 |  | 
 |   QbonePacketWriter* qbone_writer() { return qbone_writer_; } | 
 |  | 
 |   QboneClientControlStream::Handler* qbone_control_handler() { | 
 |     return qbone_handler_; | 
 |   } | 
 |  | 
 |   QuicSession::Visitor* session_owner() { | 
 |     return session_owner_; | 
 |   } | 
 |  | 
 |   bool HasActiveRequests() override; | 
 |  | 
 |  private: | 
 |   QbonePacketWriter* qbone_writer_; | 
 |   QboneClientControlStream::Handler* qbone_handler_; | 
 |  | 
 |   QuicSession::Visitor* session_owner_; | 
 | }; | 
 |  | 
 | }  // namespace quic | 
 |  | 
 | #endif  // QUICHE_QUIC_QBONE_QBONE_CLIENT_H_ |