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 3 // found in the LICENSE file. 4 5 #include "quiche/quic/core/quic_crypto_handshaker.h" 6 7 #include "quiche/quic/core/quic_session.h" 8 9 namespace quic { 10 11 #define ENDPOINT \ 12 (session()->perspective() == Perspective::IS_SERVER ? "Server: " : "Client: ") 13 QuicCryptoHandshaker(QuicCryptoStream * stream,QuicSession * session)14QuicCryptoHandshaker::QuicCryptoHandshaker(QuicCryptoStream* stream, 15 QuicSession* session) 16 : stream_(stream), session_(session), last_sent_handshake_message_tag_(0) { 17 crypto_framer_.set_visitor(this); 18 } 19 ~QuicCryptoHandshaker()20QuicCryptoHandshaker::~QuicCryptoHandshaker() {} 21 SendHandshakeMessage(const CryptoHandshakeMessage & message,EncryptionLevel level)22void QuicCryptoHandshaker::SendHandshakeMessage( 23 const CryptoHandshakeMessage& message, EncryptionLevel level) { 24 QUIC_DVLOG(1) << ENDPOINT << "Sending " << message.DebugString(); 25 session()->NeuterUnencryptedData(); 26 session()->OnCryptoHandshakeMessageSent(message); 27 last_sent_handshake_message_tag_ = message.tag(); 28 const QuicData& data = message.GetSerialized(); 29 stream_->WriteCryptoData(level, data.AsStringPiece()); 30 } 31 OnError(CryptoFramer * framer)32void QuicCryptoHandshaker::OnError(CryptoFramer* framer) { 33 QUIC_DLOG(WARNING) << "Error processing crypto data: " 34 << QuicErrorCodeToString(framer->error()); 35 } 36 OnHandshakeMessage(const CryptoHandshakeMessage & message)37void QuicCryptoHandshaker::OnHandshakeMessage( 38 const CryptoHandshakeMessage& message) { 39 QUIC_DVLOG(1) << ENDPOINT << "Received " << message.DebugString(); 40 session()->OnCryptoHandshakeMessageReceived(message); 41 } 42 crypto_message_parser()43CryptoMessageParser* QuicCryptoHandshaker::crypto_message_parser() { 44 return &crypto_framer_; 45 } 46 BufferSizeLimitForLevel(EncryptionLevel) const47size_t QuicCryptoHandshaker::BufferSizeLimitForLevel(EncryptionLevel) const { 48 return GetQuicFlag(quic_max_buffered_crypto_bytes); 49 } 50 51 #undef ENDPOINT // undef for jumbo builds 52 } // namespace quic 53