| 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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
| 6 | 6 |
| 7 #include <map> | 7 #include <map> |
| 8 | 8 |
| 9 #include "base/basictypes.h" | 9 #include "base/basictypes.h" |
| 10 #include "base/logging.h" | 10 #include "base/logging.h" |
| (...skipping 389 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 400 SSLClientSocket::NextProto protocol = g_default_protocol; | 400 SSLClientSocket::NextProto protocol = g_default_protocol; |
| 401 if (is_secure_) { | 401 if (is_secure_) { |
| 402 SSLClientSocket* ssl_socket = GetSSLClientSocket(); | 402 SSLClientSocket* ssl_socket = GetSSLClientSocket(); |
| 403 | 403 |
| 404 SSLClientSocket::NextProto protocol_negotiated = | 404 SSLClientSocket::NextProto protocol_negotiated = |
| 405 ssl_socket->protocol_negotiated(); | 405 ssl_socket->protocol_negotiated(); |
| 406 if (protocol_negotiated != SSLClientSocket::kProtoUnknown) { | 406 if (protocol_negotiated != SSLClientSocket::kProtoUnknown) { |
| 407 protocol = protocol_negotiated; | 407 protocol = protocol_negotiated; |
| 408 } | 408 } |
| 409 | 409 |
| 410 if (ssl_socket->WasOriginBoundCertSent()) { | 410 if (ssl_socket->WasDomainBoundCertSent()) { |
| 411 // According to the SPDY spec, the credential associated with the TLS | 411 // According to the SPDY spec, the credential associated with the TLS |
| 412 // connection is stored in slot[0]. | 412 // connection is stored in slot[0]. |
| 413 credential_state_.SetHasCredential(host_port_pair()); | 413 credential_state_.SetHasCredential(host_port_pair()); |
| 414 } | 414 } |
| 415 } | 415 } |
| 416 | 416 |
| 417 DCHECK(protocol >= SSLClientSocket::kProtoSPDY2); | 417 DCHECK(protocol >= SSLClientSocket::kProtoSPDY2); |
| 418 DCHECK(protocol <= SSLClientSocket::kProtoSPDY3); | 418 DCHECK(protocol <= SSLClientSocket::kProtoSPDY3); |
| 419 int version = (protocol == SSLClientSocket::kProtoSPDY3) ? 3 : 2; | 419 int version = (protocol == SSLClientSocket::kProtoSPDY3) ? 3 : 2; |
| 420 flow_control_ = (protocol >= SSLClientSocket::kProtoSPDY21); | 420 flow_control_ = (protocol >= SSLClientSocket::kProtoSPDY21); |
| (...skipping 171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 592 DCHECK_EQ(active_streams_[stream_id].get(), stream.get()); | 592 DCHECK_EQ(active_streams_[stream_id].get(), stream.get()); |
| 593 return OK; | 593 return OK; |
| 594 } | 594 } |
| 595 | 595 |
| 596 bool SpdySession::NeedsCredentials(const HostPortPair& origin) const { | 596 bool SpdySession::NeedsCredentials(const HostPortPair& origin) const { |
| 597 if (!is_secure_) | 597 if (!is_secure_) |
| 598 return false; | 598 return false; |
| 599 SSLClientSocket* ssl_socket = GetSSLClientSocket(); | 599 SSLClientSocket* ssl_socket = GetSSLClientSocket(); |
| 600 if (ssl_socket->protocol_negotiated() < SSLClientSocket::kProtoSPDY3) | 600 if (ssl_socket->protocol_negotiated() < SSLClientSocket::kProtoSPDY3) |
| 601 return false; | 601 return false; |
| 602 if (!ssl_socket->WasOriginBoundCertSent()) | 602 if (!ssl_socket->WasDomainBoundCertSent()) |
| 603 return false; | 603 return false; |
| 604 return !credential_state_.HasCredential(origin); | 604 return !credential_state_.HasCredential(origin); |
| 605 } | 605 } |
| 606 | 606 |
| 607 void SpdySession::AddPooledAlias(const HostPortProxyPair& alias) { | 607 void SpdySession::AddPooledAlias(const HostPortProxyPair& alias) { |
| 608 pooled_aliases_.insert(alias); | 608 pooled_aliases_.insert(alias); |
| 609 } | 609 } |
| 610 | 610 |
| 611 int SpdySession::GetProtocolVersion() const { | 611 int SpdySession::GetProtocolVersion() const { |
| 612 DCHECK(buffered_spdy_framer_.get()); | 612 DCHECK(buffered_spdy_framer_.get()); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 674 | 674 |
| 675 std::vector<uint8> proof; | 675 std::vector<uint8> proof; |
| 676 switch (type) { | 676 switch (type) { |
| 677 case CLIENT_CERT_ECDSA_SIGN: { | 677 case CLIENT_CERT_ECDSA_SIGN: { |
| 678 base::StringPiece spki_piece; | 678 base::StringPiece spki_piece; |
| 679 asn1::ExtractSPKIFromDERCert(cert, &spki_piece); | 679 asn1::ExtractSPKIFromDERCert(cert, &spki_piece); |
| 680 std::vector<uint8> spki(spki_piece.data(), | 680 std::vector<uint8> spki(spki_piece.data(), |
| 681 spki_piece.data() + spki_piece.size()); | 681 spki_piece.data() + spki_piece.size()); |
| 682 scoped_ptr<crypto::ECPrivateKey> private_key( | 682 scoped_ptr<crypto::ECPrivateKey> private_key( |
| 683 crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( | 683 crypto::ECPrivateKey::CreateFromEncryptedPrivateKeyInfo( |
| 684 OriginBoundCertService::kEPKIPassword, key_data, spki)); | 684 ServerBoundCertService::kEPKIPassword, key_data, spki)); |
| 685 scoped_ptr<crypto::ECSignatureCreator> creator( | 685 scoped_ptr<crypto::ECSignatureCreator> creator( |
| 686 crypto::ECSignatureCreator::Create(private_key.get())); | 686 crypto::ECSignatureCreator::Create(private_key.get())); |
| 687 creator->Sign(secret, arraysize(secret), &proof); | 687 creator->Sign(secret, arraysize(secret), &proof); |
| 688 break; | 688 break; |
| 689 } | 689 } |
| 690 default: | 690 default: |
| 691 NOTREACHED(); | 691 NOTREACHED(); |
| 692 } | 692 } |
| 693 | 693 |
| 694 spdy::SpdyCredential credential; | 694 spdy::SpdyCredential credential; |
| (...skipping 570 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1265 } | 1265 } |
| 1266 | 1266 |
| 1267 bool SpdySession::GetSSLCertRequestInfo( | 1267 bool SpdySession::GetSSLCertRequestInfo( |
| 1268 SSLCertRequestInfo* cert_request_info) { | 1268 SSLCertRequestInfo* cert_request_info) { |
| 1269 if (!is_secure_) | 1269 if (!is_secure_) |
| 1270 return false; | 1270 return false; |
| 1271 GetSSLClientSocket()->GetSSLCertRequestInfo(cert_request_info); | 1271 GetSSLClientSocket()->GetSSLCertRequestInfo(cert_request_info); |
| 1272 return true; | 1272 return true; |
| 1273 } | 1273 } |
| 1274 | 1274 |
| 1275 OriginBoundCertService* SpdySession::GetOriginBoundCertService() const { | 1275 ServerBoundCertService* SpdySession::GetServerBoundCertService() const { |
| 1276 if (!is_secure_) | 1276 if (!is_secure_) |
| 1277 return NULL; | 1277 return NULL; |
| 1278 return GetSSLClientSocket()->GetOriginBoundCertService(); | 1278 return GetSSLClientSocket()->GetServerBoundCertService(); |
| 1279 } | 1279 } |
| 1280 | 1280 |
| 1281 SSLClientCertType SpdySession::GetOriginBoundCertType() const { | 1281 SSLClientCertType SpdySession::GetDomainBoundCertType() const { |
| 1282 if (!is_secure_) | 1282 if (!is_secure_) |
| 1283 return CLIENT_CERT_INVALID_TYPE; | 1283 return CLIENT_CERT_INVALID_TYPE; |
| 1284 return GetSSLClientSocket()->origin_bound_cert_type(); | 1284 return GetSSLClientSocket()->domain_bound_cert_type(); |
| 1285 } | 1285 } |
| 1286 | 1286 |
| 1287 void SpdySession::OnError(int error_code) { | 1287 void SpdySession::OnError(int error_code) { |
| 1288 std::string description = base::StringPrintf( | 1288 std::string description = base::StringPrintf( |
| 1289 "SPDY_ERROR error_code: %d.", error_code); | 1289 "SPDY_ERROR error_code: %d.", error_code); |
| 1290 CloseSessionOnError(net::ERR_SPDY_PROTOCOL_ERROR, true, description); | 1290 CloseSessionOnError(net::ERR_SPDY_PROTOCOL_ERROR, true, description); |
| 1291 } | 1291 } |
| 1292 | 1292 |
| 1293 void SpdySession::OnStreamError(spdy::SpdyStreamId stream_id, | 1293 void SpdySession::OnStreamError(spdy::SpdyStreamId stream_id, |
| 1294 const std::string& description) { | 1294 const std::string& description) { |
| (...skipping 655 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1950 SSLClientSocket* SpdySession::GetSSLClientSocket() const { | 1950 SSLClientSocket* SpdySession::GetSSLClientSocket() const { |
| 1951 if (!is_secure_) | 1951 if (!is_secure_) |
| 1952 return NULL; | 1952 return NULL; |
| 1953 SSLClientSocket* ssl_socket = | 1953 SSLClientSocket* ssl_socket = |
| 1954 reinterpret_cast<SSLClientSocket*>(connection_->socket()); | 1954 reinterpret_cast<SSLClientSocket*>(connection_->socket()); |
| 1955 DCHECK(ssl_socket); | 1955 DCHECK(ssl_socket); |
| 1956 return ssl_socket; | 1956 return ssl_socket; |
| 1957 } | 1957 } |
| 1958 | 1958 |
| 1959 } // namespace net | 1959 } // namespace net |
| OLD | NEW |