• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2022 The Chromium Authors
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/quic/set_quic_flag.h"
6 
7 #include "base/strings/string_number_conversions.h"
8 #include "net/third_party/quiche/src/quiche/common/platform/api/quiche_flags.h"
9 #include "net/third_party/quiche/src/quiche/quic/platform/api/quic_flags.h"
10 
11 namespace net {
12 
13 namespace {
14 
SetQuicFlagByName_bool(bool * flag,const std::string & value)15 void SetQuicFlagByName_bool(bool* flag, const std::string& value) {
16   if (value == "true" || value == "True")
17     *flag = true;
18   else if (value == "false" || value == "False")
19     *flag = false;
20 }
21 
SetQuicFlagByName_double(double * flag,const std::string & value)22 void SetQuicFlagByName_double(double* flag, const std::string& value) {
23   double val;
24   if (base::StringToDouble(value, &val))
25     *flag = val;
26 }
27 
SetQuicFlagByName_float(float * flag,const std::string & value)28 void SetQuicFlagByName_float(float* flag, const std::string& value) {
29   double val;
30   if (base::StringToDouble(value, &val)) {
31     *flag = static_cast<float>(val);
32   }
33 }
34 
SetQuicFlagByName_uint32_t(uint32_t * flag,const std::string & value)35 void SetQuicFlagByName_uint32_t(uint32_t* flag, const std::string& value) {
36   uint32_t val;
37   if (base::StringToUint(value, &val)) {
38     *flag = val;
39   }
40 }
41 
SetQuicFlagByName_uint64_t(uint64_t * flag,const std::string & value)42 void SetQuicFlagByName_uint64_t(uint64_t* flag, const std::string& value) {
43   uint64_t val;
44   if (base::StringToUint64(value, &val)) {
45     *flag = val;
46   }
47 }
48 
SetQuicFlagByName_int32_t(int32_t * flag,const std::string & value)49 void SetQuicFlagByName_int32_t(int32_t* flag, const std::string& value) {
50   int val;
51   if (base::StringToInt(value, &val))
52     *flag = val;
53 }
54 
SetQuicFlagByName_int64_t(int64_t * flag,const std::string & value)55 void SetQuicFlagByName_int64_t(int64_t* flag, const std::string& value) {
56   int64_t val;
57   if (base::StringToInt64(value, &val))
58     *flag = val;
59 }
60 
61 }  // namespace
62 
SetQuicFlagByName(const std::string & flag_name,const std::string & value)63 void SetQuicFlagByName(const std::string& flag_name, const std::string& value) {
64 #define QUICHE_FLAG(type, flag, internal_value, external_value, doc) \
65   if (flag_name == "FLAGS_" #flag) {                                 \
66     SetQuicFlagByName_##type(&FLAGS_##flag, value);                  \
67     return;                                                          \
68   }
69 #include "net/third_party/quiche/src/quiche/common/quiche_feature_flags_list.h"
70 #undef QUICHE_FLAG
71 
72 #define QUICHE_PROTOCOL_FLAG(type, flag, ...)       \
73   if (flag_name == "FLAGS_" #flag) {                \
74     SetQuicFlagByName_##type(&FLAGS_##flag, value); \
75     return;                                         \
76   }
77 #include "net/third_party/quiche/src/quiche/common/quiche_protocol_flags_list.h"
78 #undef QUICHE_PROTOCOL_FLAG
79 }
80 
81 }  // namespace net
82