| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 #include "net/quic/quic_crypto_server_stream.h" | 5 #include "net/quic/quic_crypto_server_stream.h" |
| 6 | 6 |
| 7 #include "base/base64.h" | 7 #include "base/base64.h" |
| 8 #include "crypto/secure_hash.h" | 8 #include "crypto/secure_hash.h" |
| 9 #include "net/quic/crypto/cached_network_parameters.h" | 9 #include "net/quic/crypto/cached_network_parameters.h" |
| 10 #include "net/quic/crypto/crypto_protocol.h" | 10 #include "net/quic/crypto/crypto_protocol.h" |
| 11 #include "net/quic/crypto/crypto_utils.h" | 11 #include "net/quic/crypto/crypto_utils.h" |
| 12 #include "net/quic/crypto/quic_crypto_server_config.h" | 12 #include "net/quic/crypto/quic_crypto_server_config.h" |
| 13 #include "net/quic/quic_config.h" | 13 #include "net/quic/quic_config.h" |
| 14 #include "net/quic/quic_protocol.h" | 14 #include "net/quic/quic_protocol.h" |
| 15 #include "net/quic/quic_session.h" | 15 #include "net/quic/quic_session.h" |
| 16 | 16 |
| 17 using std::string; | 17 using std::string; |
| 18 | 18 |
| 19 namespace net { | 19 namespace net { |
| 20 | 20 |
| 21 void ServerHelloNotifier::OnAckNotification( | 21 void ServerHelloNotifier::OnAckNotification( |
| 22 int num_original_packets, | |
| 23 int num_original_bytes, | |
| 24 int num_retransmitted_packets, | 22 int num_retransmitted_packets, |
| 25 int num_retransmitted_bytes, | 23 int num_retransmitted_bytes, |
| 26 QuicTime::Delta delta_largest_observed) { | 24 QuicTime::Delta delta_largest_observed) { |
| 27 server_stream_->OnServerHelloAcked(); | 25 server_stream_->OnServerHelloAcked(); |
| 28 } | 26 } |
| 29 | 27 |
| 30 QuicCryptoServerStream::QuicCryptoServerStream( | 28 QuicCryptoServerStream::QuicCryptoServerStream( |
| 31 const QuicCryptoServerConfig& crypto_config, | 29 const QuicCryptoServerConfig& crypto_config, |
| 32 QuicSession* session) | 30 QuicSession* session) |
| 33 : QuicCryptoStream(session), | 31 : QuicCryptoStream(session), |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 123 crypto_negotiated_params_.initial_crypters.encrypter.release()); | 121 crypto_negotiated_params_.initial_crypters.encrypter.release()); |
| 124 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 122 session()->connection()->SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
| 125 // Set the decrypter immediately so that we no longer accept unencrypted | 123 // Set the decrypter immediately so that we no longer accept unencrypted |
| 126 // packets. | 124 // packets. |
| 127 session()->connection()->SetDecrypter( | 125 session()->connection()->SetDecrypter( |
| 128 crypto_negotiated_params_.initial_crypters.decrypter.release(), | 126 crypto_negotiated_params_.initial_crypters.decrypter.release(), |
| 129 ENCRYPTION_INITIAL); | 127 ENCRYPTION_INITIAL); |
| 130 | 128 |
| 131 // We want to be notified when the SHLO is ACKed so that we can disable | 129 // We want to be notified when the SHLO is ACKed so that we can disable |
| 132 // HANDSHAKE_MODE in the sent packet manager. | 130 // HANDSHAKE_MODE in the sent packet manager. |
| 133 if (session()->connection()->version() <= QUIC_VERSION_21) { | 131 scoped_refptr<ServerHelloNotifier> server_hello_notifier( |
| 134 SendHandshakeMessage(reply); | 132 new ServerHelloNotifier(this)); |
| 135 } else { | 133 SendHandshakeMessage(reply, server_hello_notifier.get()); |
| 136 scoped_refptr<ServerHelloNotifier> server_hello_notifier( | |
| 137 new ServerHelloNotifier(this)); | |
| 138 SendHandshakeMessage(reply, server_hello_notifier.get()); | |
| 139 } | |
| 140 | 134 |
| 141 session()->connection()->SetEncrypter( | 135 session()->connection()->SetEncrypter( |
| 142 ENCRYPTION_FORWARD_SECURE, | 136 ENCRYPTION_FORWARD_SECURE, |
| 143 crypto_negotiated_params_.forward_secure_crypters.encrypter.release()); | 137 crypto_negotiated_params_.forward_secure_crypters.encrypter.release()); |
| 144 session()->connection()->SetAlternativeDecrypter( | 138 session()->connection()->SetAlternativeDecrypter( |
| 145 crypto_negotiated_params_.forward_secure_crypters.decrypter.release(), | 139 crypto_negotiated_params_.forward_secure_crypters.decrypter.release(), |
| 146 ENCRYPTION_FORWARD_SECURE, false /* don't latch */); | 140 ENCRYPTION_FORWARD_SECURE, false /* don't latch */); |
| 147 | 141 |
| 148 encryption_established_ = true; | 142 encryption_established_ = true; |
| 149 handshake_confirmed_ = true; | 143 handshake_confirmed_ = true; |
| 150 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); | 144 session()->OnCryptoHandshakeEvent(QuicSession::HANDSHAKE_CONFIRMED); |
| 151 } | 145 } |
| 152 | 146 |
| 153 void QuicCryptoServerStream::SendServerConfigUpdate( | 147 void QuicCryptoServerStream::SendServerConfigUpdate( |
| 154 const CachedNetworkParameters* cached_network_params) { | 148 const CachedNetworkParameters* cached_network_params) { |
| 155 if (session()->connection()->version() <= QUIC_VERSION_21 || | 149 if (!handshake_confirmed_) { |
| 156 !handshake_confirmed_) { | |
| 157 return; | 150 return; |
| 158 } | 151 } |
| 159 | 152 |
| 160 CryptoHandshakeMessage server_config_update_message; | 153 CryptoHandshakeMessage server_config_update_message; |
| 161 if (!crypto_config_.BuildServerConfigUpdateMessage( | 154 if (!crypto_config_.BuildServerConfigUpdateMessage( |
| 162 previous_source_address_tokens_, | 155 previous_source_address_tokens_, |
| 163 session()->connection()->self_address(), | 156 session()->connection()->self_address(), |
| 164 session()->connection()->peer_address(), | 157 session()->connection()->peer_address(), |
| 165 session()->connection()->clock(), | 158 session()->connection()->clock(), |
| 166 session()->connection()->random_generator(), | 159 session()->connection()->random_generator(), |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 257 | 250 |
| 258 void QuicCryptoServerStream::ValidateCallback::RunImpl( | 251 void QuicCryptoServerStream::ValidateCallback::RunImpl( |
| 259 const CryptoHandshakeMessage& client_hello, | 252 const CryptoHandshakeMessage& client_hello, |
| 260 const Result& result) { | 253 const Result& result) { |
| 261 if (parent_ != nullptr) { | 254 if (parent_ != nullptr) { |
| 262 parent_->FinishProcessingHandshakeMessage(client_hello, result); | 255 parent_->FinishProcessingHandshakeMessage(client_hello, result); |
| 263 } | 256 } |
| 264 } | 257 } |
| 265 | 258 |
| 266 } // namespace net | 259 } // namespace net |
| OLD | NEW |