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 |
| 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 |
| 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 |
| 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 |
| 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 |