| Index: net/quic/crypto/quic_crypto_server_config.cc
|
| diff --git a/net/quic/crypto/quic_crypto_server_config.cc b/net/quic/crypto/quic_crypto_server_config.cc
|
| index bfd3ed34982a946a174c0c2bf07ad4452119faf6..d805fab5d9d8a151ee99e512ae27e43442a16d03 100644
|
| --- a/net/quic/crypto/quic_crypto_server_config.cc
|
| +++ b/net/quic/crypto/quic_crypto_server_config.cc
|
| @@ -775,8 +775,10 @@ QuicErrorCode QuicCryptoServerConfig::ProcessClientHello(
|
| out->SetStringPiece(kSourceAddressTokenTag,
|
| NewSourceAddressToken(
|
| *requested_config,
|
| - client_address, rand,
|
| - info.now));
|
| + client_address,
|
| + rand,
|
| + info.now,
|
| + NULL));
|
| QuicSocketAddressCoder address_coder(client_address);
|
| out->SetStringPiece(kCADR, address_coder.Encode());
|
| out->SetStringPiece(kPUBS, forward_secure_public_value);
|
| @@ -1044,6 +1046,7 @@ bool QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
|
| const QuicClock* clock,
|
| QuicRandom* rand,
|
| const QuicCryptoNegotiatedParameters& params,
|
| + const CachedNetworkParameters* cached_network_params,
|
| CryptoHandshakeMessage* out) const {
|
| base::AutoLock locked(configs_lock_);
|
| out->set_tag(kSCUP);
|
| @@ -1052,7 +1055,8 @@ bool QuicCryptoServerConfig::BuildServerConfigUpdateMessage(
|
| NewSourceAddressToken(*primary_config_,
|
| client_ip,
|
| rand,
|
| - clock->WallNow()));
|
| + clock->WallNow(),
|
| + cached_network_params));
|
|
|
| if (proof_source_ == NULL) {
|
| // Insecure QUIC, can send SCFG without proof.
|
| @@ -1091,7 +1095,8 @@ void QuicCryptoServerConfig::BuildRejection(
|
| config,
|
| info.client_ip,
|
| rand,
|
| - info.now));
|
| + info.now,
|
| + NULL));
|
| if (replay_protection_) {
|
| out->SetStringPiece(kServerNonceTag, NewServerNonce(rand, info.now));
|
| }
|
| @@ -1409,17 +1414,22 @@ void QuicCryptoServerConfig::AcquirePrimaryConfigChangedCb(
|
| primary_config_changed_cb_.reset(cb);
|
| }
|
|
|
| -string QuicCryptoServerConfig::NewSourceAddressToken(const Config& config,
|
| - const IPEndPoint& ip,
|
| - QuicRandom* rand,
|
| - QuicWallTime now) const {
|
| - SourceAddressToken source_address_token;
|
| +string QuicCryptoServerConfig::NewSourceAddressToken(
|
| + const Config& config,
|
| + const IPEndPoint& ip,
|
| + QuicRandom* rand,
|
| + QuicWallTime now,
|
| + const CachedNetworkParameters* cached_network_params) const {
|
| IPAddressNumber ip_address = ip.address();
|
| if (ip.GetSockAddrFamily() == AF_INET) {
|
| ip_address = ConvertIPv4NumberToIPv6Number(ip_address);
|
| }
|
| + SourceAddressToken source_address_token;
|
| source_address_token.set_ip(IPAddressToPackedString(ip_address));
|
| source_address_token.set_timestamp(now.ToUNIXSeconds());
|
| + if (cached_network_params != NULL) {
|
| + source_address_token.set_cached_network_parameters(*cached_network_params);
|
| + }
|
|
|
| return config.source_address_token_boxer->Box(
|
| rand, source_address_token.SerializeAsString());
|
|
|