Chromium Code Reviews| 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_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ | 5 #ifndef NET_QUIC_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ |
| 6 #define NET_QUIC_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ | 6 #define NET_QUIC_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ |
| 7 | 7 |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
| 11 #include "base/strings/string_piece.h" | 11 #include "base/strings/string_piece.h" |
| 12 | 12 |
| 13 namespace net { | 13 namespace net { |
| 14 | 14 |
| 15 // TODO(rtenneti): sync with server more rationally. | 15 // TODO(rtenneti): sync with server more rationally. |
| 16 // CachedNetworkParameters contains data that can be used to choose appropriate | |
| 17 // connection parameters (initial RTT, initial CWND, etc.) in new connections. | |
| 18 class CachedNetworkParameters { | |
| 19 public: | |
| 20 // Describes the state of the connection during which the supplied network | |
| 21 // parameters were calculated. | |
| 22 enum PreviousConnectionState { | |
| 23 SLOW_START = 0, | |
| 24 CONGESTION_AVOIDANCE = 1, | |
| 25 }; | |
| 26 | |
| 27 CachedNetworkParameters(); | |
| 28 ~CachedNetworkParameters(); | |
| 29 | |
| 30 std::string serving_region() const { | |
| 31 return serving_region_; | |
| 32 } | |
| 33 void set_serving_region(base::StringPiece serving_region) { | |
| 34 serving_region_ = serving_region.as_string(); | |
| 35 } | |
| 36 | |
| 37 int32 bandwidth_estimate_bytes_per_second() const { | |
| 38 return bandwidth_estimate_bytes_per_second_; | |
| 39 } | |
| 40 void set_bandwidth_estimate_bytes_per_second( | |
| 41 int32 bandwidth_estimate_bytes_per_second) { | |
| 42 bandwidth_estimate_bytes_per_second_ = bandwidth_estimate_bytes_per_second; | |
| 43 } | |
| 44 | |
| 45 int32 min_rtt_ms() const { | |
| 46 return min_rtt_ms_; | |
| 47 } | |
| 48 void set_min_rtt_ms(int32 min_rtt_ms) { | |
| 49 min_rtt_ms_ = min_rtt_ms; | |
| 50 } | |
| 51 | |
| 52 int32 previous_connection_state() const { | |
| 53 return previous_connection_state_; | |
| 54 } | |
| 55 void set_previous_connection_state(int32 previous_connection_state) { | |
| 56 previous_connection_state_ = previous_connection_state; | |
| 57 } | |
| 58 | |
| 59 private: | |
| 60 // serving_region is used to decide whether or not the bandwidth estimate and | |
|
wtc
2014/07/23 23:17:14
serving_region => serving_region_
ramant (doing other things)
2014/07/23 23:56:00
Done.
| |
| 61 // min RTT are reasonable and if they should be used. | |
| 62 // For example a group of geographically close servers may share the same | |
| 63 // serving_region string if they are expected to have similar network | |
|
wtc
2014/07/23 23:17:14
serving_region => serving_region_
ramant (doing other things)
2014/07/23 23:56:00
Done.
| |
| 64 // performance. | |
| 65 std::string serving_region_; | |
| 66 // The server can supply a bandwidth estimate (in bytes/s) which it may re-use | |
| 67 // on receipt of a source-address token with this field set. | |
| 68 int32 bandwidth_estimate_bytes_per_second_; | |
| 69 // The min RTT seen on a previous connection can be used by the server to | |
| 70 // inform initial connection parameters for new connections. | |
| 71 int32 min_rtt_ms_; | |
| 72 // Encodes the PreviousConnectionState enum. | |
| 73 int32 previous_connection_state_; | |
| 74 }; | |
| 75 | |
| 76 // TODO(rtenneti): sync with server more rationally. | |
| 77 // A SourceAddressToken is serialised, encrypted and sent to clients so that | |
| 78 // they can prove ownership of an IP address. | |
| 16 class SourceAddressToken { | 79 class SourceAddressToken { |
| 17 public: | 80 public: |
| 18 SourceAddressToken(); | 81 SourceAddressToken(); |
| 19 ~SourceAddressToken(); | 82 ~SourceAddressToken(); |
| 20 | 83 |
| 21 std::string SerializeAsString() const; | 84 std::string SerializeAsString() const; |
| 22 | 85 |
| 23 bool ParseFromArray(const char* plaintext, size_t plaintext_length); | 86 bool ParseFromArray(const char* plaintext, size_t plaintext_length); |
| 24 | 87 |
| 25 std::string ip() const { | 88 std::string ip() const { |
| 26 return ip_; | 89 return ip_; |
| 27 } | 90 } |
| 91 void set_ip(base::StringPiece ip) { | |
| 92 ip_ = ip.as_string(); | |
| 93 } | |
| 28 | 94 |
| 29 int64 timestamp() const { | 95 int64 timestamp() const { |
| 30 return timestamp_; | 96 return timestamp_; |
| 31 } | 97 } |
| 32 | |
| 33 void set_ip(base::StringPiece ip) { | |
| 34 ip_ = ip.as_string(); | |
| 35 } | |
| 36 | |
| 37 void set_timestamp(int64 timestamp) { | 98 void set_timestamp(int64 timestamp) { |
| 38 timestamp_ = timestamp; | 99 timestamp_ = timestamp; |
| 39 } | 100 } |
| 40 | 101 |
| 102 const CachedNetworkParameters& cached_network_parameters() const { | |
| 103 return cached_network_parameters_; | |
| 104 } | |
| 105 void set_cached_network_parameters( | |
| 106 const CachedNetworkParameters& cached_network_parameters) { | |
| 107 cached_network_parameters_ = cached_network_parameters; | |
| 108 } | |
| 109 | |
| 41 private: | 110 private: |
| 111 // ip contains either 4 (IPv4) or 16 (IPv6) bytes of IP address in network | |
|
wtc
2014/07/23 23:17:14
ip => ip_
ramant (doing other things)
2014/07/23 23:56:00
Done.
| |
| 112 // byte order. | |
| 42 std::string ip_; | 113 std::string ip_; |
| 114 // timestamp contains a UNIX timestamp value of the time when the token was | |
|
wtc
2014/07/23 23:17:14
timestamp => timestamp_ (just the first occurrence
ramant (doing other things)
2014/07/23 23:56:00
Done.
| |
| 115 // created. | |
| 43 int64 timestamp_; | 116 int64 timestamp_; |
| 44 | 117 |
| 118 // The server can provide estimated network parameters to be used for | |
| 119 // initial parameter selection in future connections. | |
| 120 CachedNetworkParameters cached_network_parameters_; | |
| 121 | |
| 45 DISALLOW_COPY_AND_ASSIGN(SourceAddressToken); | 122 DISALLOW_COPY_AND_ASSIGN(SourceAddressToken); |
| 46 }; | 123 }; |
| 47 | 124 |
| 48 } // namespace net | 125 } // namespace net |
| 49 | 126 |
| 50 #endif // NET_QUIC_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ | 127 #endif // NET_QUIC_CRYPTO_SOURCE_ADDRESS_TOKEN_H_ |
| OLD | NEW |