| 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" |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 78 validate_client_hello_cb_); | 78 validate_client_hello_cb_); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( | 81 void QuicCryptoServerStream::FinishProcessingHandshakeMessage( |
| 82 const CryptoHandshakeMessage& message, | 82 const CryptoHandshakeMessage& message, |
| 83 const ValidateClientHelloResultCallback::Result& result) { | 83 const ValidateClientHelloResultCallback::Result& result) { |
| 84 // Clear the callback that got us here. | 84 // Clear the callback that got us here. |
| 85 DCHECK(validate_client_hello_cb_ != nullptr); | 85 DCHECK(validate_client_hello_cb_ != nullptr); |
| 86 validate_client_hello_cb_ = nullptr; | 86 validate_client_hello_cb_ = nullptr; |
| 87 | 87 |
| 88 string error_details; | 88 std::string error_details; |
| 89 CryptoHandshakeMessage reply; | 89 CryptoHandshakeMessage reply; |
| 90 QuicErrorCode error = ProcessClientHello( | 90 QuicErrorCode error = ProcessClientHello( |
| 91 message, result, &reply, &error_details); | 91 message, result, &reply, &error_details); |
| 92 | 92 |
| 93 if (error != QUIC_NO_ERROR) { | 93 if (error != QUIC_NO_ERROR) { |
| 94 CloseConnectionWithDetails(error, error_details); | 94 CloseConnectionWithDetails(error, error_details); |
| 95 return; | 95 return; |
| 96 } | 96 } |
| 97 | 97 |
| 98 if (reply.tag() != kSHLO) { | 98 if (reply.tag() != kSHLO) { |
| (...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 168 crypto_negotiated_params_, | 168 crypto_negotiated_params_, |
| 169 cached_network_params, | 169 cached_network_params, |
| 170 &server_config_update_message)) { | 170 &server_config_update_message)) { |
| 171 DVLOG(1) << "Server: Failed to build server config update (SCUP)!"; | 171 DVLOG(1) << "Server: Failed to build server config update (SCUP)!"; |
| 172 return; | 172 return; |
| 173 } | 173 } |
| 174 | 174 |
| 175 DVLOG(1) << "Server: Sending server config update: " | 175 DVLOG(1) << "Server: Sending server config update: " |
| 176 << server_config_update_message.DebugString(); | 176 << server_config_update_message.DebugString(); |
| 177 const QuicData& data = server_config_update_message.GetSerialized(); | 177 const QuicData& data = server_config_update_message.GetSerialized(); |
| 178 WriteOrBufferData(string(data.data(), data.length()), false, nullptr); | 178 WriteOrBufferData(std::string(data.data(), data.length()), false, nullptr); |
| 179 | 179 |
| 180 ++num_server_config_update_messages_sent_; | 180 ++num_server_config_update_messages_sent_; |
| 181 } | 181 } |
| 182 | 182 |
| 183 void QuicCryptoServerStream::OnServerHelloAcked() { | 183 void QuicCryptoServerStream::OnServerHelloAcked() { |
| 184 session()->connection()->OnHandshakeComplete(); | 184 session()->connection()->OnHandshakeComplete(); |
| 185 } | 185 } |
| 186 | 186 |
| 187 void QuicCryptoServerStream::set_previous_cached_network_params( | 187 void QuicCryptoServerStream::set_previous_cached_network_params( |
| 188 CachedNetworkParameters cached_network_params) { | 188 CachedNetworkParameters cached_network_params) { |
| 189 previous_cached_network_params_.reset( | 189 previous_cached_network_params_.reset( |
| 190 new CachedNetworkParameters(cached_network_params)); | 190 new CachedNetworkParameters(cached_network_params)); |
| 191 } | 191 } |
| 192 | 192 |
| 193 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID( | 193 bool QuicCryptoServerStream::GetBase64SHA256ClientChannelID( |
| 194 string* output) const { | 194 std::string* output) const { |
| 195 if (!encryption_established_ || | 195 if (!encryption_established_ || |
| 196 crypto_negotiated_params_.channel_id.empty()) { | 196 crypto_negotiated_params_.channel_id.empty()) { |
| 197 return false; | 197 return false; |
| 198 } | 198 } |
| 199 | 199 |
| 200 const string& channel_id(crypto_negotiated_params_.channel_id); | 200 const std::string& channel_id(crypto_negotiated_params_.channel_id); |
| 201 scoped_ptr<crypto::SecureHash> hash( | 201 scoped_ptr<crypto::SecureHash> hash( |
| 202 crypto::SecureHash::Create(crypto::SecureHash::SHA256)); | 202 crypto::SecureHash::Create(crypto::SecureHash::SHA256)); |
| 203 hash->Update(channel_id.data(), channel_id.size()); | 203 hash->Update(channel_id.data(), channel_id.size()); |
| 204 uint8 digest[32]; | 204 uint8 digest[32]; |
| 205 hash->Finish(digest, sizeof(digest)); | 205 hash->Finish(digest, sizeof(digest)); |
| 206 | 206 |
| 207 base::Base64Encode(string( | 207 base::Base64Encode(std::string( |
| 208 reinterpret_cast<const char*>(digest), sizeof(digest)), output); | 208 reinterpret_cast<const char*>(digest), sizeof(digest)), output); |
| 209 // Remove padding. | 209 // Remove padding. |
| 210 size_t len = output->size(); | 210 size_t len = output->size(); |
| 211 if (len >= 2) { | 211 if (len >= 2) { |
| 212 if ((*output)[len - 1] == '=') { | 212 if ((*output)[len - 1] == '=') { |
| 213 len--; | 213 len--; |
| 214 if ((*output)[len - 1] == '=') { | 214 if ((*output)[len - 1] == '=') { |
| 215 len--; | 215 len--; |
| 216 } | 216 } |
| 217 output->resize(len); | 217 output->resize(len); |
| 218 } | 218 } |
| 219 } | 219 } |
| 220 return true; | 220 return true; |
| 221 } | 221 } |
| 222 | 222 |
| 223 QuicErrorCode QuicCryptoServerStream::ProcessClientHello( | 223 QuicErrorCode QuicCryptoServerStream::ProcessClientHello( |
| 224 const CryptoHandshakeMessage& message, | 224 const CryptoHandshakeMessage& message, |
| 225 const ValidateClientHelloResultCallback::Result& result, | 225 const ValidateClientHelloResultCallback::Result& result, |
| 226 CryptoHandshakeMessage* reply, | 226 CryptoHandshakeMessage* reply, |
| 227 string* error_details) { | 227 std::string* error_details) { |
| 228 // Store the bandwidth estimate from the client. | 228 // Store the bandwidth estimate from the client. |
| 229 if (result.cached_network_params.bandwidth_estimate_bytes_per_second() > 0) { | 229 if (result.cached_network_params.bandwidth_estimate_bytes_per_second() > 0) { |
| 230 previous_cached_network_params_.reset( | 230 previous_cached_network_params_.reset( |
| 231 new CachedNetworkParameters(result.cached_network_params)); | 231 new CachedNetworkParameters(result.cached_network_params)); |
| 232 } | 232 } |
| 233 | 233 |
| 234 return crypto_config_.ProcessClientHello( | 234 return crypto_config_.ProcessClientHello( |
| 235 result, | 235 result, |
| 236 session()->connection()->connection_id(), | 236 session()->connection()->connection_id(), |
| 237 session()->connection()->peer_address(), | 237 session()->connection()->peer_address(), |
| (...skipping 20 matching lines...) Expand all Loading... |
| 258 | 258 |
| 259 void QuicCryptoServerStream::ValidateCallback::RunImpl( | 259 void QuicCryptoServerStream::ValidateCallback::RunImpl( |
| 260 const CryptoHandshakeMessage& client_hello, | 260 const CryptoHandshakeMessage& client_hello, |
| 261 const Result& result) { | 261 const Result& result) { |
| 262 if (parent_ != nullptr) { | 262 if (parent_ != nullptr) { |
| 263 parent_->FinishProcessingHandshakeMessage(client_hello, result); | 263 parent_->FinishProcessingHandshakeMessage(client_hello, result); |
| 264 } | 264 } |
| 265 } | 265 } |
| 266 | 266 |
| 267 } // namespace net | 267 } // namespace net |
| OLD | NEW |