blob: 4fedae35baa8b2bf592a7a6ffce49a31f2a90333 [file] [log] [blame]
QUICHE teama6ef0a62019-03-07 20:34:33 -05001// Copyright (c) 2016 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_CORE_QUIC_VERSION_MANAGER_H_
6#define QUICHE_QUIC_CORE_QUIC_VERSION_MANAGER_H_
7
8#include "net/third_party/quiche/src/quic/core/quic_versions.h"
9#include "net/third_party/quiche/src/quic/platform/api/quic_export.h"
10
11namespace quic {
12
13// Used to generate filtered supported versions based on flags.
14class QUIC_EXPORT_PRIVATE QuicVersionManager {
15 public:
16 // |supported_versions| should be sorted in the order of preference (typically
17 // highest supported version to the lowest supported version).
18 explicit QuicVersionManager(ParsedQuicVersionVector supported_versions);
19 virtual ~QuicVersionManager();
20
21 // Returns currently supported QUIC versions.
22 // TODO(nharper): Remove this method once it is unused.
23 const QuicTransportVersionVector& GetSupportedTransportVersions();
24
25 // Returns currently supported QUIC versions. This vector has the same order
26 // as the versions passed to the constructor.
27 const ParsedQuicVersionVector& GetSupportedVersions();
28
29 protected:
30 // Maybe refilter filtered_supported_versions_ based on flags.
31 void MaybeRefilterSupportedVersions();
32
33 // Refilters filtered_supported_versions_.
34 virtual void RefilterSupportedVersions();
35
36 const QuicTransportVersionVector& filtered_supported_versions() const {
37 return filtered_transport_versions_;
38 }
39
40 private:
41 // quic_enable_version_99 flag
42 bool enable_version_99_;
43 // quic_enable_version_47 flag
44 bool enable_version_47_;
45 // quic_enable_version_46 flag
46 bool enable_version_46_;
47 // quic_enable_version_44 flag
48 bool enable_version_44_;
49 // quic_enable_version_43 flag
50 bool enable_version_43_;
51 // quic_disable_version_39 flag
52 bool disable_version_39_;
53 // The list of versions that may be supported.
54 ParsedQuicVersionVector allowed_supported_versions_;
55 // This vector contains QUIC versions which are currently supported based on
56 // flags.
57 ParsedQuicVersionVector filtered_supported_versions_;
58 // This vector contains the transport versions from
59 // |filtered_supported_versions_|. No guarantees are made that the same
60 // transport version isn't repeated.
61 QuicTransportVersionVector filtered_transport_versions_;
62};
63
64} // namespace quic
65
66#endif // QUICHE_QUIC_CORE_QUIC_VERSION_MANAGER_H_