gfe-relnote: Default-initialize QUIC BBRv2 loss event threshold for exiting STARTUP from a flag. Protected by --gfe2_reloadable_flag_quic_default_to_bbr_v2.
PiperOrigin-RevId: 264298542
Change-Id: I304ab19e4820dec51d3f8ef53762a393f6b175fd
diff --git a/quic/qbone/qbone_client.h b/quic/qbone/qbone_client.h
new file mode 100644
index 0000000..a0fe4fc
--- /dev/null
+++ b/quic/qbone/qbone_client.h
@@ -0,0 +1,74 @@
+// 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"
+
+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(QuicStringPiece 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_