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 5ece45d5ed71753abfa8fa918a95adeecf858c0d..feac8528f59a78607d1444eabd57158dc8c4f5cb 100644 |
--- a/net/quic/crypto/quic_crypto_server_config.h |
+++ b/net/quic/crypto/quic_crypto_server_config.h |
@@ -323,8 +323,20 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// Smaller numbers mean higher priority. |
uint64 priority; |
+ // source_address_token_boxer_ is used to protect the |
+ // source-address tokens that are given to clients. |
+ // Points to either source_address_token_boxer_storage or the |
+ // default boxer provided by QuicCryptoServerConfig. |
+ const CryptoSecretBoxer* source_address_token_boxer; |
+ |
+ // Holds the override source_address_token_boxer instance if the |
+ // Config is not using the default source address token boxer |
+ // instance provided by QuicCryptoServerConfig. |
+ scoped_ptr<CryptoSecretBoxer> source_address_token_boxer_storage; |
+ |
private: |
friend class base::RefCounted<Config>; |
+ |
virtual ~Config(); |
DISALLOW_COPY_AND_ASSIGN(Config); |
@@ -332,6 +344,10 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
typedef std::map<ServerConfigID, scoped_refptr<Config> > ConfigMap; |
+ // Get a ref to the config with a given server config id. |
+ scoped_refptr<Config> GetConfigWithScid( |
+ base::StringPiece requested_scid) const; |
+ |
// ConfigPrimaryTimeLessThan returns true if a->primary_time < |
// b->primary_time. |
static bool ConfigPrimaryTimeLessThan(const scoped_refptr<Config>& a, |
@@ -346,12 +362,13 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// written to |info|. |
void EvaluateClientHello( |
const uint8* primary_orbit, |
+ scoped_refptr<Config> requested_config, |
ValidateClientHelloResultCallback::Result* client_hello_state, |
ValidateClientHelloResultCallback* done_cb) const; |
// BuildRejection sets |out| to be a REJ message in reply to |client_hello|. |
void BuildRejection( |
- const scoped_refptr<Config>& config, |
+ const Config& config, |
const CryptoHandshakeMessage& client_hello, |
const ClientHelloInfo& info, |
QuicRandom* rand, |
@@ -364,16 +381,20 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// NewSourceAddressToken returns a fresh source address token for the given |
// IP address. |
- std::string NewSourceAddressToken(const IPEndPoint& ip, |
- QuicRandom* rand, |
- QuicWallTime now) const; |
+ std::string NewSourceAddressToken( |
+ const Config& config, |
+ const IPEndPoint& ip, |
+ QuicRandom* rand, |
+ QuicWallTime now) const; |
// ValidateSourceAddressToken returns true 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|. |
- bool ValidateSourceAddressToken(base::StringPiece token, |
- const IPEndPoint& ip, |
- QuicWallTime now) const; |
+ bool ValidateSourceAddressToken( |
+ const Config& config, |
+ base::StringPiece token, |
+ const IPEndPoint& ip, |
+ QuicWallTime now) const; |
// NewServerNonce generates and encrypts a random nonce. |
std::string NewServerNonce(QuicRandom* rand, QuicWallTime now) const; |
@@ -413,9 +434,10 @@ class NET_EXPORT_PRIVATE QuicCryptoServerConfig { |
// observed client nonces in order to prevent replay attacks. |
mutable scoped_ptr<StrikeRegisterClient> strike_register_client_; |
- // source_address_token_boxer_ is used to protect the source-address tokens |
- // that are given to clients. |
- CryptoSecretBoxer source_address_token_boxer_; |
+ // Default source_address_token_boxer_ used to protect the |
+ // source-address tokens that are given to clients. Individual |
+ // configs may use boxers with alternate secrets. |
+ CryptoSecretBoxer default_source_address_token_boxer_; |
// server_nonce_boxer_ is used to encrypt and validate suggested server |
// nonces. |