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 90d55d2e10ad382bd85d372c405a483d0f1024ea..3e46b60c07ead1b86ee8bdc0e75ce32e8912179e 100644 |
--- a/net/quic/crypto/quic_crypto_server_config.h |
+++ b/net/quic/crypto/quic_crypto_server_config.h |
@@ -320,6 +320,17 @@ 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(); |
@@ -329,6 +340,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, |
@@ -343,6 +358,7 @@ 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; |
@@ -361,16 +377,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 QuicCryptoServerConfig::Config* config, |
wtc
2014/04/07 18:38:24
Why isn't this parameter a const reference? I foun
ramant (doing other things)
2014/04/21 22:39:29
Done.
|
+ 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 QuicCryptoServerConfig::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; |
@@ -410,9 +430,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. |