blob: 7aefb25bf63b784babdecc5926bd3b6b521c7a2e [file] [log] [blame]
wubf975eac2019-08-19 19:41:01 -07001// Copyright (c) 2019 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#ifndef QUICHE_QUIC_QBONE_QBONE_CLIENT_H_
6#define QUICHE_QUIC_QBONE_QBONE_CLIENT_H_
7
vasilvv1436e342020-10-09 12:31:16 -07008#include "absl/strings/string_view.h"
QUICHE team5be974e2020-12-29 18:35:24 -05009#include "quic/qbone/qbone_client_interface.h"
10#include "quic/qbone/qbone_client_session.h"
11#include "quic/qbone/qbone_packet_writer.h"
12#include "quic/tools/quic_client_base.h"
13#include "quic/tools/quic_client_epoll_network_helper.h"
wubf975eac2019-08-19 19:41:01 -070014
15namespace quic {
16// A QboneClient encapsulates connecting to a server via an epoll server
bncc3843272020-02-27 04:58:51 -080017// and setting up a QBONE tunnel. See the QboneTestClient in qbone_client_test
wubf975eac2019-08-19 19:41:01 -070018// for usage.
19class QboneClient : public QuicClientBase, public QboneClientInterface {
20 public:
bncc3843272020-02-27 04:58:51 -080021 // Note that the epoll server, QBONE writer, and handler are owned
wubf975eac2019-08-19 19:41:01 -070022 // by the caller.
23 QboneClient(QuicSocketAddress server_address,
24 const QuicServerId& server_id,
25 const ParsedQuicVersionVector& supported_versions,
26 QuicSession::Visitor* session_owner,
27 const QuicConfig& config,
28 QuicEpollServer* epoll_server,
29 std::unique_ptr<ProofVerifier> proof_verifier,
30 QbonePacketWriter* qbone_writer,
31 QboneClientControlStream::Handler* qbone_handler);
32 ~QboneClient() override;
33 QboneClientSession* qbone_session();
34
35 // From QboneClientInterface. Accepts a given packet from the network and
36 // sends the packet down to the QBONE connection.
vasilvv1436e342020-10-09 12:31:16 -070037 void ProcessPacketFromNetwork(absl::string_view packet) override;
wubf975eac2019-08-19 19:41:01 -070038
nharper4084fc92020-02-10 14:43:35 -080039 bool EarlyDataAccepted() override;
40 bool ReceivedInchoateReject() override;
41
wubf975eac2019-08-19 19:41:01 -070042 protected:
43 int GetNumSentClientHellosFromSession() override;
44 int GetNumReceivedServerConfigUpdatesFromSession() override;
45
46 // This client does not resend saved data. This will be a no-op.
47 void ResendSavedData() override;
48
49 // This client does not resend saved data. This will be a no-op.
50 void ClearDataToResend() override;
51
52 // Takes ownership of |connection|.
53 std::unique_ptr<QuicSession> CreateQuicClientSession(
54 const ParsedQuicVersionVector& supported_versions,
55 QuicConnection* connection) override;
56
57 QbonePacketWriter* qbone_writer() { return qbone_writer_; }
58
59 QboneClientControlStream::Handler* qbone_control_handler() {
60 return qbone_handler_;
61 }
62
63 QuicSession::Visitor* session_owner() {
64 return session_owner_;
65 }
66
67 bool HasActiveRequests() override;
68
69 private:
70 QbonePacketWriter* qbone_writer_;
71 QboneClientControlStream::Handler* qbone_handler_;
72
73 QuicSession::Visitor* session_owner_;
74};
75
76} // namespace quic
77
78#endif // QUICHE_QUIC_QBONE_QBONE_CLIENT_H_