Chromium Code Reviews| 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_stream.h" | 5 #include "net/quic/quic_crypto_stream.h" |
| 6 | 6 |
| 7 #include <string> | 7 #include <string> |
| 8 | 8 |
| 9 #include "base/strings/string_piece.h" | 9 #include "base/strings/string_piece.h" |
| 10 #include "net/quic/crypto/crypto_handshake.h" | 10 #include "net/quic/crypto/crypto_handshake.h" |
| 11 #include "net/quic/crypto/crypto_utils.h" | 11 #include "net/quic/crypto/crypto_utils.h" |
| 12 #include "net/quic/quic_connection.h" | 12 #include "net/quic/quic_connection.h" |
| 13 #include "net/quic/quic_session.h" | 13 #include "net/quic/quic_session.h" |
| 14 #include "net/quic/quic_utils.h" | 14 #include "net/quic/quic_utils.h" |
| 15 | 15 |
| 16 using std::string; | 16 using std::string; |
| 17 using base::StringPiece; | 17 using base::StringPiece; |
| 18 | 18 |
| 19 namespace net { | 19 namespace net { |
| 20 | 20 |
| 21 #define ENDPOINT (is_server_ ? "Server: " : " Client: ") | |
|
wtc
2014/08/04 23:28:13
Nit: It seems that we can just call session()->is_
ramant (doing other things)
2014/08/09 02:53:19
Done.
| |
| 22 | |
| 21 QuicCryptoStream::QuicCryptoStream(QuicSession* session) | 23 QuicCryptoStream::QuicCryptoStream(QuicSession* session) |
| 22 : ReliableQuicStream(kCryptoStreamId, session), | 24 : ReliableQuicStream(kCryptoStreamId, session), |
| 23 encryption_established_(false), | 25 encryption_established_(false), |
| 24 handshake_confirmed_(false) { | 26 handshake_confirmed_(false), |
| 27 is_server_(session->is_server()) { | |
| 25 crypto_framer_.set_visitor(this); | 28 crypto_framer_.set_visitor(this); |
| 26 if (version() <= QUIC_VERSION_20) { | 29 if (version() <= QUIC_VERSION_20) { |
| 27 // Prior to QUIC_VERSION_21 the crypto stream is not subject to any flow | 30 // Prior to QUIC_VERSION_21 the crypto stream is not subject to any flow |
| 28 // control. | 31 // control. |
| 29 DisableFlowControl(); | 32 DisableFlowControl(); |
| 30 } | 33 } |
| 31 // The crypto stream is exempt from connection level flow control. | 34 // The crypto stream is exempt from connection level flow control. |
| 32 DisableConnectionFlowControlForThisStream(); | 35 DisableConnectionFlowControlForThisStream(); |
| 33 } | 36 } |
| 34 | 37 |
| 35 void QuicCryptoStream::OnError(CryptoFramer* framer) { | 38 void QuicCryptoStream::OnError(CryptoFramer* framer) { |
| 36 DLOG(WARNING) << "Error processing crypto data: " | 39 DLOG(WARNING) << "Error processing crypto data: " |
| 37 << QuicUtils::ErrorToString(framer->error()); | 40 << QuicUtils::ErrorToString(framer->error()); |
| 38 } | 41 } |
| 39 | 42 |
| 40 void QuicCryptoStream::OnHandshakeMessage( | 43 void QuicCryptoStream::OnHandshakeMessage( |
| 41 const CryptoHandshakeMessage& message) { | 44 const CryptoHandshakeMessage& message) { |
| 45 DVLOG(1) << ENDPOINT << "Received " << message.DebugString(); | |
| 42 session()->OnCryptoHandshakeMessageReceived(message); | 46 session()->OnCryptoHandshakeMessageReceived(message); |
| 43 } | 47 } |
| 44 | 48 |
| 45 uint32 QuicCryptoStream::ProcessRawData(const char* data, | 49 uint32 QuicCryptoStream::ProcessRawData(const char* data, |
| 46 uint32 data_len) { | 50 uint32 data_len) { |
| 47 if (!crypto_framer_.ProcessInput(StringPiece(data, data_len))) { | 51 if (!crypto_framer_.ProcessInput(StringPiece(data, data_len))) { |
| 48 CloseConnection(crypto_framer_.error()); | 52 CloseConnection(crypto_framer_.error()); |
| 49 return 0; | 53 return 0; |
| 50 } | 54 } |
| 51 return data_len; | 55 return data_len; |
| 52 } | 56 } |
| 53 | 57 |
| 54 QuicPriority QuicCryptoStream::EffectivePriority() const { | 58 QuicPriority QuicCryptoStream::EffectivePriority() const { |
| 55 return QuicUtils::HighestPriority(); | 59 return QuicUtils::HighestPriority(); |
| 56 } | 60 } |
| 57 | 61 |
| 58 void QuicCryptoStream::SendHandshakeMessage( | 62 void QuicCryptoStream::SendHandshakeMessage( |
| 59 const CryptoHandshakeMessage& message) { | 63 const CryptoHandshakeMessage& message) { |
| 64 DVLOG(1) << ENDPOINT << "Sending " << message.DebugString(); | |
| 60 session()->OnCryptoHandshakeMessageSent(message); | 65 session()->OnCryptoHandshakeMessageSent(message); |
| 61 const QuicData& data = message.GetSerialized(); | 66 const QuicData& data = message.GetSerialized(); |
| 62 // TODO(wtc): check the return value. | 67 // TODO(wtc): check the return value. |
| 63 WriteOrBufferData(string(data.data(), data.length()), false, NULL); | 68 WriteOrBufferData(string(data.data(), data.length()), false, NULL); |
| 64 } | 69 } |
| 65 | 70 |
| 66 bool QuicCryptoStream::ExportKeyingMaterial( | 71 bool QuicCryptoStream::ExportKeyingMaterial( |
| 67 StringPiece label, | 72 StringPiece label, |
| 68 StringPiece context, | 73 StringPiece context, |
| 69 size_t result_len, | 74 size_t result_len, |
| (...skipping 10 matching lines...) Expand all Loading... | |
| 80 result_len, | 85 result_len, |
| 81 result); | 86 result); |
| 82 } | 87 } |
| 83 | 88 |
| 84 const QuicCryptoNegotiatedParameters& | 89 const QuicCryptoNegotiatedParameters& |
| 85 QuicCryptoStream::crypto_negotiated_params() const { | 90 QuicCryptoStream::crypto_negotiated_params() const { |
| 86 return crypto_negotiated_params_; | 91 return crypto_negotiated_params_; |
| 87 } | 92 } |
| 88 | 93 |
| 89 } // namespace net | 94 } // namespace net |
| OLD | NEW |