blob: 62b2e44dd7ae2bd6efcee47c0d2fc84aa017cca4 [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)),
21 enable_version_43_(GetQuicReloadableFlag(quic_enable_version_43)),
22 disable_version_39_(GetQuicReloadableFlag(quic_disable_version_39)),
23 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) ||
42 enable_version_47_ != GetQuicReloadableFlag(quic_enable_version_47) ||
43 enable_version_46_ != GetQuicReloadableFlag(quic_enable_version_46) ||
44 enable_version_44_ != GetQuicReloadableFlag(quic_enable_version_44) ||
45 enable_version_43_ != GetQuicReloadableFlag(quic_enable_version_43) ||
46 disable_version_39_ != GetQuicReloadableFlag(quic_disable_version_39)) {
47 enable_version_99_ = GetQuicReloadableFlag(quic_enable_version_99);
48 enable_version_47_ = GetQuicReloadableFlag(quic_enable_version_47);
49 enable_version_46_ = GetQuicReloadableFlag(quic_enable_version_46);
50 enable_version_44_ = GetQuicReloadableFlag(quic_enable_version_44);
51 enable_version_43_ = GetQuicReloadableFlag(quic_enable_version_43);
52 disable_version_39_ = GetQuicReloadableFlag(quic_disable_version_39);
53 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