blob: 49aee67764b0b73ff4417038f319fff1a62a946e [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#include "net/third_party/quiche/src/quic/core/quic_version_manager.h"
6
7#include "net/third_party/quiche/src/quic/core/quic_versions.h"
8#include "net/third_party/quiche/src/quic/platform/api/quic_flag_utils.h"
9#include "net/third_party/quiche/src/quic/platform/api/quic_flags.h"
10
11#include <algorithm>
12
13namespace quic {
14
15QuicVersionManager::QuicVersionManager(
16 ParsedQuicVersionVector supported_versions)
17 : enable_version_99_(GetQuicReloadableFlag(quic_enable_version_99)),
nharper107ba5f2019-07-02 21:33:39 -070018 enable_version_48_(GetQuicReloadableFlag(quic_enable_version_48)),
QUICHE teama6ef0a62019-03-07 20:34:33 -050019 enable_version_47_(GetQuicReloadableFlag(quic_enable_version_47)),
fayangb880b4c2019-06-14 12:26:35 -070020 disable_version_44_(GetQuicReloadableFlag(quic_disable_version_44)),
QUICHE teama6ef0a62019-03-07 20:34:33 -050021 disable_version_39_(GetQuicReloadableFlag(quic_disable_version_39)),
nharperf5e68452019-05-29 17:24:18 -070022 enable_tls_(GetQuicFlag(FLAGS_quic_supports_tls_handshake)),
QUICHE teama6ef0a62019-03-07 20:34:33 -050023 allowed_supported_versions_(std::move(supported_versions)) {
24 RefilterSupportedVersions();
25}
26
27QuicVersionManager::~QuicVersionManager() {}
28
29const QuicTransportVersionVector&
30QuicVersionManager::GetSupportedTransportVersions() {
31 MaybeRefilterSupportedVersions();
32 return filtered_transport_versions_;
33}
34
35const ParsedQuicVersionVector& QuicVersionManager::GetSupportedVersions() {
36 MaybeRefilterSupportedVersions();
37 return filtered_supported_versions_;
38}
39
40void QuicVersionManager::MaybeRefilterSupportedVersions() {
41 if (enable_version_99_ != GetQuicReloadableFlag(quic_enable_version_99) ||
nharper107ba5f2019-07-02 21:33:39 -070042 enable_version_48_ != GetQuicReloadableFlag(quic_enable_version_48) ||
QUICHE teama6ef0a62019-03-07 20:34:33 -050043 enable_version_47_ != GetQuicReloadableFlag(quic_enable_version_47) ||
fayangb880b4c2019-06-14 12:26:35 -070044 disable_version_44_ != GetQuicReloadableFlag(quic_disable_version_44) ||
nharperf5e68452019-05-29 17:24:18 -070045 disable_version_39_ != GetQuicReloadableFlag(quic_disable_version_39) ||
46 enable_tls_ != GetQuicFlag(FLAGS_quic_supports_tls_handshake)) {
QUICHE teama6ef0a62019-03-07 20:34:33 -050047 enable_version_99_ = GetQuicReloadableFlag(quic_enable_version_99);
nharper107ba5f2019-07-02 21:33:39 -070048 enable_version_48_ = GetQuicReloadableFlag(quic_enable_version_48);
QUICHE teama6ef0a62019-03-07 20:34:33 -050049 enable_version_47_ = GetQuicReloadableFlag(quic_enable_version_47);
fayangb880b4c2019-06-14 12:26:35 -070050 disable_version_44_ = GetQuicReloadableFlag(quic_disable_version_44);
QUICHE teama6ef0a62019-03-07 20:34:33 -050051 disable_version_39_ = GetQuicReloadableFlag(quic_disable_version_39);
nharperf5e68452019-05-29 17:24:18 -070052 enable_tls_ = GetQuicFlag(FLAGS_quic_supports_tls_handshake);
QUICHE teama6ef0a62019-03-07 20:34:33 -050053 RefilterSupportedVersions();
54 }
55}
56
57void QuicVersionManager::RefilterSupportedVersions() {
58 filtered_supported_versions_ =
59 FilterSupportedVersions(allowed_supported_versions_);
60 filtered_transport_versions_.clear();
61 for (ParsedQuicVersion version : filtered_supported_versions_) {
62 auto transport_version = version.transport_version;
63 if (std::find(filtered_transport_versions_.begin(),
64 filtered_transport_versions_.end(),
65 transport_version) == filtered_transport_versions_.end()) {
66 filtered_transport_versions_.push_back(transport_version);
67 }
68 }
69}
70
71} // namespace quic