blob: 5874f92abb7c8b5cabba88d05693c205dab96ad0 [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)),
18 enable_version_47_(GetQuicReloadableFlag(quic_enable_version_47)),
19 enable_version_46_(GetQuicReloadableFlag(quic_enable_version_46)),
20 enable_version_44_(GetQuicReloadableFlag(quic_enable_version_44)),
QUICHE teama6ef0a62019-03-07 20:34:33 -050021 disable_version_39_(GetQuicReloadableFlag(quic_disable_version_39)),
22 allowed_supported_versions_(std::move(supported_versions)) {
23 RefilterSupportedVersions();
24}
25
26QuicVersionManager::~QuicVersionManager() {}
27
28const QuicTransportVersionVector&
29QuicVersionManager::GetSupportedTransportVersions() {
30 MaybeRefilterSupportedVersions();
31 return filtered_transport_versions_;
32}
33
34const ParsedQuicVersionVector& QuicVersionManager::GetSupportedVersions() {
35 MaybeRefilterSupportedVersions();
36 return filtered_supported_versions_;
37}
38
39void QuicVersionManager::MaybeRefilterSupportedVersions() {
40 if (enable_version_99_ != GetQuicReloadableFlag(quic_enable_version_99) ||
41 enable_version_47_ != GetQuicReloadableFlag(quic_enable_version_47) ||
42 enable_version_46_ != GetQuicReloadableFlag(quic_enable_version_46) ||
43 enable_version_44_ != GetQuicReloadableFlag(quic_enable_version_44) ||
QUICHE teama6ef0a62019-03-07 20:34:33 -050044 disable_version_39_ != GetQuicReloadableFlag(quic_disable_version_39)) {
45 enable_version_99_ = GetQuicReloadableFlag(quic_enable_version_99);
46 enable_version_47_ = GetQuicReloadableFlag(quic_enable_version_47);
47 enable_version_46_ = GetQuicReloadableFlag(quic_enable_version_46);
48 enable_version_44_ = GetQuicReloadableFlag(quic_enable_version_44);
QUICHE teama6ef0a62019-03-07 20:34:33 -050049 disable_version_39_ = GetQuicReloadableFlag(quic_disable_version_39);
50 RefilterSupportedVersions();
51 }
52}
53
54void QuicVersionManager::RefilterSupportedVersions() {
55 filtered_supported_versions_ =
56 FilterSupportedVersions(allowed_supported_versions_);
57 filtered_transport_versions_.clear();
58 for (ParsedQuicVersion version : filtered_supported_versions_) {
59 auto transport_version = version.transport_version;
60 if (std::find(filtered_transport_versions_.begin(),
61 filtered_transport_versions_.end(),
62 transport_version) == filtered_transport_versions_.end()) {
63 filtered_transport_versions_.push_back(transport_version);
64 }
65 }
66}
67
68} // namespace quic