Index: net/quic/crypto/quic_crypto_server_config.h |
diff --git a/net/quic/crypto/quic_crypto_server_config.h b/net/quic/crypto/quic_crypto_server_config.h |
index bce4a3f45eb2f8933dea195c0084a2896aef457e..da8713a42e40af374ae58d4102780a818ebcea3f 100644 |
--- a/net/quic/crypto/quic_crypto_server_config.h |
+++ b/net/quic/crypto/quic_crypto_server_config.h |
@@ -20,6 +20,7 @@ |
#include "net/quic/crypto/crypto_handshake_message.h" |
#include "net/quic/crypto/crypto_protocol.h" |
#include "net/quic/crypto/crypto_secret_boxer.h" |
+#include "net/quic/crypto/source_address_token.h" |
#include "net/quic/quic_time.h" |
namespace net { |
@@ -54,6 +55,7 @@ struct ClientHelloInfo { |
base::StringPiece client_nonce; |
base::StringPiece server_nonce; |
base::StringPiece user_agent_id; |
+ SourceAddressTokens source_address_tokens; |
// Errors from EvaluateClientHello. |
std::vector<uint32> reject_reasons; |
@@ -257,6 +259,7 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// |
// |cached_network_params| is optional, and can be nullptr. |
bool BuildServerConfigUpdateMessage( |
+ const SourceAddressTokens& previous_source_address_tokens, |
const IPEndPoint& server_ip, |
const IPEndPoint& client_ip, |
const QuicClock* clock, |
@@ -442,16 +445,28 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// IP address. |cached_network_params| is optional, and can be nullptr. |
std::string NewSourceAddressToken( |
const Config& config, |
+ const SourceAddressTokens& previous_tokens, |
const IPEndPoint& ip, |
QuicRandom* rand, |
QuicWallTime now, |
const CachedNetworkParameters* cached_network_params) const; |
- // ValidateSourceAddressToken returns HANDSHAKE_OK if the source address token |
- // in |token| is a valid and timely token for the IP address |ip| given that |
- // the current time is |now|. Otherwise it returns the reason for failure. |
- // |cached_network_params| is populated if |token| contains a |
- // CachedNetworkParameters proto. |
+ // ParseSourceAddressToken parses the source address tokens contained in |
+ // the encrypted |token|, and populates |tokens| with the parsed tokens. |
+ // Returns HANDSHAKE_OK if |token| could be parsed, or the reason for the |
+ // failure. |
+ HandshakeFailureReason ParseSourceAddressToken( |
+ const Config& config, |
+ base::StringPiece token, |
+ SourceAddressTokens* tokens) const; |
+ |
+ // ValidateSourceAddressToken returns HANDSHAKE_OK if the source address |
+ // tokens in |tokens| contain a valid and timely token for the IP address |
+ // |ip| given that the current time is |now|. Otherwise it returns the |
+ // reason for failure. |cached_network_params| is populated if the valid |
+ // token contains a CachedNetworkParameters proto. |
+ // TODO(rch): remove this method when we remove: |
+ // FLAGS_quic_use_multiple_address_in_source_tokens. |
HandshakeFailureReason ValidateSourceAddressToken( |
const Config& config, |
base::StringPiece token, |
@@ -459,6 +474,33 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
QuicWallTime now, |
CachedNetworkParameters* cached_network_params) const; |
+ // ValidateSourceAddressTokens returns HANDSHAKE_OK if the source address |
+ // tokens in |tokens| contain a valid and timely token for the IP address |
+ // |ip| given that the current time is |now|. Otherwise it returns the |
+ // reason for failure. |cached_network_params| is populated if the valid |
+ // token contains a CachedNetworkParameters proto. |
+ HandshakeFailureReason ValidateSourceAddressTokens( |
+ const SourceAddressTokens& tokens, |
+ const IPEndPoint& ip, |
+ QuicWallTime now, |
+ CachedNetworkParameters* cached_network_params) const; |
+ |
+ // ValidateSingleSourceAddressToken returns HANDSHAKE_OK if the source |
+ // address token in |token| is a timely token for the IP address |ip| |
+ // given that the current time is |now|. Otherwise it returns the reason |
+ // for failure. |
+ HandshakeFailureReason ValidateSingleSourceAddressToken( |
+ const SourceAddressToken& token, |
+ const IPEndPoint& ip, |
+ QuicWallTime now) const; |
+ |
+ // Returns HANDSHAKE_OK if the source address token in |token| is a timely |
+ // token given that the current time is |now|. Otherwise it returns the |
+ // reason for failure. |
+ HandshakeFailureReason ValidateSourceAddressTokenTimestamp( |
+ const SourceAddressToken& token, |
+ QuicWallTime now) const; |
+ |
// NewServerNonce generates and encrypts a random nonce. |
std::string NewServerNonce(QuicRandom* rand, QuicWallTime now) const; |