| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #ifndef NET_QUIC_QUIC_CONFIG_H_ | 5 #ifndef NET_QUIC_QUIC_CONFIG_H_ |
| 6 #define NET_QUIC_QUIC_CONFIG_H_ | 6 #define NET_QUIC_QUIC_CONFIG_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 54 std::string* error_details) = 0; | 54 std::string* error_details) = 0; |
| 55 | 55 |
| 56 protected: | 56 protected: |
| 57 const QuicTag tag_; | 57 const QuicTag tag_; |
| 58 const QuicConfigPresence presence_; | 58 const QuicConfigPresence presence_; |
| 59 }; | 59 }; |
| 60 | 60 |
| 61 class NET_EXPORT_PRIVATE QuicNegotiableValue : public QuicConfigValue { | 61 class NET_EXPORT_PRIVATE QuicNegotiableValue : public QuicConfigValue { |
| 62 public: | 62 public: |
| 63 QuicNegotiableValue(QuicTag tag, QuicConfigPresence presence); | 63 QuicNegotiableValue(QuicTag tag, QuicConfigPresence presence); |
| 64 virtual ~QuicNegotiableValue(); | 64 ~QuicNegotiableValue() override; |
| 65 | 65 |
| 66 bool negotiated() const { | 66 bool negotiated() const { |
| 67 return negotiated_; | 67 return negotiated_; |
| 68 } | 68 } |
| 69 | 69 |
| 70 protected: | 70 protected: |
| 71 bool negotiated_; | 71 bool negotiated_; |
| 72 }; | 72 }; |
| 73 | 73 |
| 74 class NET_EXPORT_PRIVATE QuicNegotiableUint32 : public QuicNegotiableValue { | 74 class NET_EXPORT_PRIVATE QuicNegotiableUint32 : public QuicNegotiableValue { |
| 75 public: | 75 public: |
| 76 // Default and max values default to 0. | 76 // Default and max values default to 0. |
| 77 QuicNegotiableUint32(QuicTag name, QuicConfigPresence presence); | 77 QuicNegotiableUint32(QuicTag name, QuicConfigPresence presence); |
| 78 virtual ~QuicNegotiableUint32(); | 78 ~QuicNegotiableUint32() override; |
| 79 | 79 |
| 80 // Sets the maximum possible value that can be achieved after negotiation and | 80 // Sets the maximum possible value that can be achieved after negotiation and |
| 81 // also the default values to be assumed if PRESENCE_OPTIONAL and the *HLO msg | 81 // also the default values to be assumed if PRESENCE_OPTIONAL and the *HLO msg |
| 82 // doesn't contain a value corresponding to |name_|. |max| is serialised via | 82 // doesn't contain a value corresponding to |name_|. |max| is serialised via |
| 83 // ToHandshakeMessage call if |negotiated_| is false. | 83 // ToHandshakeMessage call if |negotiated_| is false. |
| 84 void set(uint32 max, uint32 default_value); | 84 void set(uint32 max, uint32 default_value); |
| 85 | 85 |
| 86 // Returns the value negotiated if |negotiated_| is true, otherwise returns | 86 // Returns the value negotiated if |negotiated_| is true, otherwise returns |
| 87 // default_value_ (used to set default values before negotiation finishes). | 87 // default_value_ (used to set default values before negotiation finishes). |
| 88 uint32 GetUint32() const; | 88 uint32 GetUint32() const; |
| 89 | 89 |
| 90 // Serialises |name_| and value to |out|. If |negotiated_| is true then | 90 // Serialises |name_| and value to |out|. If |negotiated_| is true then |
| 91 // |negotiated_value_| is serialised, otherwise |max_value_| is serialised. | 91 // |negotiated_value_| is serialised, otherwise |max_value_| is serialised. |
| 92 virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; | 92 void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; |
| 93 | 93 |
| 94 // Sets |negotiated_value_| to the minimum of |max_value_| and the | 94 // Sets |negotiated_value_| to the minimum of |max_value_| and the |
| 95 // corresponding value from |peer_hello|. If the corresponding value is | 95 // corresponding value from |peer_hello|. If the corresponding value is |
| 96 // missing and PRESENCE_OPTIONAL then |negotiated_value_| is set to | 96 // missing and PRESENCE_OPTIONAL then |negotiated_value_| is set to |
| 97 // |default_value_|. | 97 // |default_value_|. |
| 98 virtual QuicErrorCode ProcessPeerHello( | 98 QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello, |
| 99 const CryptoHandshakeMessage& peer_hello, | 99 HelloType hello_type, |
| 100 HelloType hello_type, | 100 std::string* error_details) override; |
| 101 std::string* error_details) override; | |
| 102 | 101 |
| 103 private: | 102 private: |
| 104 uint32 max_value_; | 103 uint32 max_value_; |
| 105 uint32 default_value_; | 104 uint32 default_value_; |
| 106 uint32 negotiated_value_; | 105 uint32 negotiated_value_; |
| 107 }; | 106 }; |
| 108 | 107 |
| 109 class NET_EXPORT_PRIVATE QuicNegotiableTag : public QuicNegotiableValue { | 108 class NET_EXPORT_PRIVATE QuicNegotiableTag : public QuicNegotiableValue { |
| 110 public: | 109 public: |
| 111 QuicNegotiableTag(QuicTag name, QuicConfigPresence presence); | 110 QuicNegotiableTag(QuicTag name, QuicConfigPresence presence); |
| 112 virtual ~QuicNegotiableTag(); | 111 ~QuicNegotiableTag() override; |
| 113 | 112 |
| 114 // Sets the possible values that |negotiated_tag_| can take after negotiation | 113 // Sets the possible values that |negotiated_tag_| can take after negotiation |
| 115 // and the default value that |negotiated_tag_| takes if OPTIONAL and *HLO | 114 // and the default value that |negotiated_tag_| takes if OPTIONAL and *HLO |
| 116 // msg doesn't contain tag |name_|. | 115 // msg doesn't contain tag |name_|. |
| 117 void set(const QuicTagVector& possible_values, QuicTag default_value); | 116 void set(const QuicTagVector& possible_values, QuicTag default_value); |
| 118 | 117 |
| 119 // Returns the negotiated tag if |negotiated_| is true, otherwise returns | 118 // Returns the negotiated tag if |negotiated_| is true, otherwise returns |
| 120 // |default_value_| (used to set default values before negotiation finishes). | 119 // |default_value_| (used to set default values before negotiation finishes). |
| 121 QuicTag GetTag() const; | 120 QuicTag GetTag() const; |
| 122 | 121 |
| 123 // Serialises |name_| and vector (either possible or negotiated) to |out|. If | 122 // Serialises |name_| and vector (either possible or negotiated) to |out|. If |
| 124 // |negotiated_| is true then |negotiated_tag_| is serialised, otherwise | 123 // |negotiated_| is true then |negotiated_tag_| is serialised, otherwise |
| 125 // |possible_values_| is serialised. | 124 // |possible_values_| is serialised. |
| 126 virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; | 125 void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; |
| 127 | 126 |
| 128 // Selects the tag common to both tags in |client_hello| for |name_| and | 127 // Selects the tag common to both tags in |client_hello| for |name_| and |
| 129 // |possible_values_| with preference to tag in |possible_values_|. The | 128 // |possible_values_| with preference to tag in |possible_values_|. The |
| 130 // selected tag is set as |negotiated_tag_|. | 129 // selected tag is set as |negotiated_tag_|. |
| 131 virtual QuicErrorCode ProcessPeerHello( | 130 QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello, |
| 132 const CryptoHandshakeMessage& peer_hello, | 131 HelloType hello_type, |
| 133 HelloType hello_type, | 132 std::string* error_details) override; |
| 134 std::string* error_details) override; | |
| 135 | 133 |
| 136 private: | 134 private: |
| 137 // Reads the vector corresponding to |name_| from |msg| into |out|. If the | 135 // Reads the vector corresponding to |name_| from |msg| into |out|. If the |
| 138 // |name_| is absent in |msg| and |presence_| is set to OPTIONAL |out| is set | 136 // |name_| is absent in |msg| and |presence_| is set to OPTIONAL |out| is set |
| 139 // to |possible_values_|. | 137 // to |possible_values_|. |
| 140 QuicErrorCode ReadVector(const CryptoHandshakeMessage& msg, | 138 QuicErrorCode ReadVector(const CryptoHandshakeMessage& msg, |
| 141 const QuicTag** out, | 139 const QuicTag** out, |
| 142 size_t* out_length, | 140 size_t* out_length, |
| 143 std::string* error_details) const; | 141 std::string* error_details) const; |
| 144 | 142 |
| 145 QuicTag negotiated_tag_; | 143 QuicTag negotiated_tag_; |
| 146 QuicTagVector possible_values_; | 144 QuicTagVector possible_values_; |
| 147 QuicTag default_value_; | 145 QuicTag default_value_; |
| 148 }; | 146 }; |
| 149 | 147 |
| 150 // Stores uint32 from CHLO or SHLO messages that are not negotiated. | 148 // Stores uint32 from CHLO or SHLO messages that are not negotiated. |
| 151 class NET_EXPORT_PRIVATE QuicFixedUint32 : public QuicConfigValue { | 149 class NET_EXPORT_PRIVATE QuicFixedUint32 : public QuicConfigValue { |
| 152 public: | 150 public: |
| 153 QuicFixedUint32(QuicTag name, QuicConfigPresence presence); | 151 QuicFixedUint32(QuicTag name, QuicConfigPresence presence); |
| 154 virtual ~QuicFixedUint32(); | 152 ~QuicFixedUint32() override; |
| 155 | 153 |
| 156 bool HasSendValue() const; | 154 bool HasSendValue() const; |
| 157 | 155 |
| 158 uint32 GetSendValue() const; | 156 uint32 GetSendValue() const; |
| 159 | 157 |
| 160 void SetSendValue(uint32 value); | 158 void SetSendValue(uint32 value); |
| 161 | 159 |
| 162 bool HasReceivedValue() const; | 160 bool HasReceivedValue() const; |
| 163 | 161 |
| 164 uint32 GetReceivedValue() const; | 162 uint32 GetReceivedValue() const; |
| 165 | 163 |
| 166 void SetReceivedValue(uint32 value); | 164 void SetReceivedValue(uint32 value); |
| 167 | 165 |
| 168 // If has_send_value is true, serialises |tag_| and |send_value_| to |out|. | 166 // If has_send_value is true, serialises |tag_| and |send_value_| to |out|. |
| 169 virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; | 167 void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; |
| 170 | 168 |
| 171 // Sets |value_| to the corresponding value from |peer_hello_| if it exists. | 169 // Sets |value_| to the corresponding value from |peer_hello_| if it exists. |
| 172 virtual QuicErrorCode ProcessPeerHello( | 170 QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello, |
| 173 const CryptoHandshakeMessage& peer_hello, | 171 HelloType hello_type, |
| 174 HelloType hello_type, | 172 std::string* error_details) override; |
| 175 std::string* error_details) override; | |
| 176 | 173 |
| 177 private: | 174 private: |
| 178 uint32 send_value_; | 175 uint32 send_value_; |
| 179 bool has_send_value_; | 176 bool has_send_value_; |
| 180 uint32 receive_value_; | 177 uint32 receive_value_; |
| 181 bool has_receive_value_; | 178 bool has_receive_value_; |
| 182 }; | 179 }; |
| 183 | 180 |
| 184 // Stores tag from CHLO or SHLO messages that are not negotiated. | 181 // Stores tag from CHLO or SHLO messages that are not negotiated. |
| 185 class NET_EXPORT_PRIVATE QuicFixedTag : public QuicConfigValue { | 182 class NET_EXPORT_PRIVATE QuicFixedTag : public QuicConfigValue { |
| 186 public: | 183 public: |
| 187 QuicFixedTag(QuicTag name, QuicConfigPresence presence); | 184 QuicFixedTag(QuicTag name, QuicConfigPresence presence); |
| 188 virtual ~QuicFixedTag(); | 185 ~QuicFixedTag() override; |
| 189 | 186 |
| 190 bool HasSendValue() const; | 187 bool HasSendValue() const; |
| 191 | 188 |
| 192 QuicTag GetSendValue() const; | 189 QuicTag GetSendValue() const; |
| 193 | 190 |
| 194 void SetSendValue(QuicTag value); | 191 void SetSendValue(QuicTag value); |
| 195 | 192 |
| 196 bool HasReceivedValue() const; | 193 bool HasReceivedValue() const; |
| 197 | 194 |
| 198 QuicTag GetReceivedValue() const; | 195 QuicTag GetReceivedValue() const; |
| 199 | 196 |
| 200 void SetReceivedValue(QuicTag value); | 197 void SetReceivedValue(QuicTag value); |
| 201 | 198 |
| 202 // If has_send_value is true, serialises |tag_| and |send_value_| to |out|. | 199 // If has_send_value is true, serialises |tag_| and |send_value_| to |out|. |
| 203 virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; | 200 void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; |
| 204 | 201 |
| 205 // Sets |value_| to the corresponding value from |client_hello_| if it exists. | 202 // Sets |value_| to the corresponding value from |client_hello_| if it exists. |
| 206 virtual QuicErrorCode ProcessPeerHello( | 203 QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello, |
| 207 const CryptoHandshakeMessage& peer_hello, | 204 HelloType hello_type, |
| 208 HelloType hello_type, | 205 std::string* error_details) override; |
| 209 std::string* error_details) override; | |
| 210 | 206 |
| 211 private: | 207 private: |
| 212 QuicTag send_value_; | 208 QuicTag send_value_; |
| 213 bool has_send_value_; | 209 bool has_send_value_; |
| 214 QuicTag receive_value_; | 210 QuicTag receive_value_; |
| 215 bool has_receive_value_; | 211 bool has_receive_value_; |
| 216 }; | 212 }; |
| 217 | 213 |
| 218 // Stores tag from CHLO or SHLO messages that are not negotiated. | 214 // Stores tag from CHLO or SHLO messages that are not negotiated. |
| 219 class NET_EXPORT_PRIVATE QuicFixedTagVector : public QuicConfigValue { | 215 class NET_EXPORT_PRIVATE QuicFixedTagVector : public QuicConfigValue { |
| 220 public: | 216 public: |
| 221 QuicFixedTagVector(QuicTag name, QuicConfigPresence presence); | 217 QuicFixedTagVector(QuicTag name, QuicConfigPresence presence); |
| 222 virtual ~QuicFixedTagVector(); | 218 ~QuicFixedTagVector() override; |
| 223 | 219 |
| 224 bool HasSendValues() const; | 220 bool HasSendValues() const; |
| 225 | 221 |
| 226 QuicTagVector GetSendValues() const; | 222 QuicTagVector GetSendValues() const; |
| 227 | 223 |
| 228 void SetSendValues(const QuicTagVector& values); | 224 void SetSendValues(const QuicTagVector& values); |
| 229 | 225 |
| 230 bool HasReceivedValues() const; | 226 bool HasReceivedValues() const; |
| 231 | 227 |
| 232 QuicTagVector GetReceivedValues() const; | 228 QuicTagVector GetReceivedValues() const; |
| 233 | 229 |
| 234 void SetReceivedValues(const QuicTagVector& values); | 230 void SetReceivedValues(const QuicTagVector& values); |
| 235 | 231 |
| 236 // If has_send_value is true, serialises |tag_vector_| and |send_value_| to | 232 // If has_send_value is true, serialises |tag_vector_| and |send_value_| to |
| 237 // |out|. | 233 // |out|. |
| 238 virtual void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; | 234 void ToHandshakeMessage(CryptoHandshakeMessage* out) const override; |
| 239 | 235 |
| 240 // Sets |receive_values_| to the corresponding value from |client_hello_| if | 236 // Sets |receive_values_| to the corresponding value from |client_hello_| if |
| 241 // it exists. | 237 // it exists. |
| 242 virtual QuicErrorCode ProcessPeerHello( | 238 QuicErrorCode ProcessPeerHello(const CryptoHandshakeMessage& peer_hello, |
| 243 const CryptoHandshakeMessage& peer_hello, | 239 HelloType hello_type, |
| 244 HelloType hello_type, | 240 std::string* error_details) override; |
| 245 std::string* error_details) override; | |
| 246 | 241 |
| 247 private: | 242 private: |
| 248 QuicTagVector send_values_; | 243 QuicTagVector send_values_; |
| 249 bool has_send_values_; | 244 bool has_send_values_; |
| 250 QuicTagVector receive_values_; | 245 QuicTagVector receive_values_; |
| 251 bool has_receive_values_; | 246 bool has_receive_values_; |
| 252 }; | 247 }; |
| 253 | 248 |
| 254 // QuicConfig contains non-crypto configuration options that are negotiated in | 249 // QuicConfig contains non-crypto configuration options that are negotiated in |
| 255 // the crypto handshake. | 250 // the crypto handshake. |
| (...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 418 // Initial session flow control receive window in bytes. | 413 // Initial session flow control receive window in bytes. |
| 419 QuicFixedUint32 initial_session_flow_control_window_bytes_; | 414 QuicFixedUint32 initial_session_flow_control_window_bytes_; |
| 420 | 415 |
| 421 // Socket receive buffer in bytes. | 416 // Socket receive buffer in bytes. |
| 422 QuicFixedUint32 socket_receive_buffer_; | 417 QuicFixedUint32 socket_receive_buffer_; |
| 423 }; | 418 }; |
| 424 | 419 |
| 425 } // namespace net | 420 } // namespace net |
| 426 | 421 |
| 427 #endif // NET_QUIC_QUIC_CONFIG_H_ | 422 #endif // NET_QUIC_QUIC_CONFIG_H_ |
| OLD | NEW |