xref: /aosp_15_r20/external/cronet/net/third_party/quiche/src/quiche/quic/core/quic_crypto_handshaker.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
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)14 QuicCryptoHandshaker::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()20 QuicCryptoHandshaker::~QuicCryptoHandshaker() {}
21 
SendHandshakeMessage(const CryptoHandshakeMessage & message,EncryptionLevel level)22 void 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)32 void QuicCryptoHandshaker::OnError(CryptoFramer* framer) {
33   QUIC_DLOG(WARNING) << "Error processing crypto data: "
34                      << QuicErrorCodeToString(framer->error());
35 }
36 
OnHandshakeMessage(const CryptoHandshakeMessage & message)37 void QuicCryptoHandshaker::OnHandshakeMessage(
38     const CryptoHandshakeMessage& message) {
39   QUIC_DVLOG(1) << ENDPOINT << "Received " << message.DebugString();
40   session()->OnCryptoHandshakeMessageReceived(message);
41 }
42 
crypto_message_parser()43 CryptoMessageParser* QuicCryptoHandshaker::crypto_message_parser() {
44   return &crypto_framer_;
45 }
46 
BufferSizeLimitForLevel(EncryptionLevel) const47 size_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