blob: 25bf9dcdf1567dce221590f29f160d040eaf68e9 [file] [log] [blame]
// Copyright (c) 2012 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "quic/core/quic_crypto_handshaker.h"
#include "quic/core/quic_session.h"
namespace quic {
#define ENDPOINT \
(session()->perspective() == Perspective::IS_SERVER ? "Server: " : "Client: ")
QuicCryptoHandshaker::QuicCryptoHandshaker(QuicCryptoStream* stream,
QuicSession* session)
: stream_(stream), session_(session), last_sent_handshake_message_tag_(0) {
crypto_framer_.set_visitor(this);
}
QuicCryptoHandshaker::~QuicCryptoHandshaker() {}
void QuicCryptoHandshaker::SendHandshakeMessage(
const CryptoHandshakeMessage& message,
EncryptionLevel level) {
QUIC_DVLOG(1) << ENDPOINT << "Sending " << message.DebugString();
session()->NeuterUnencryptedData();
session()->OnCryptoHandshakeMessageSent(message);
last_sent_handshake_message_tag_ = message.tag();
const QuicData& data = message.GetSerialized();
stream_->WriteCryptoData(session_->use_write_or_buffer_data_at_level()
? level
: session_->connection()->encryption_level(),
data.AsStringPiece());
}
void QuicCryptoHandshaker::OnError(CryptoFramer* framer) {
QUIC_DLOG(WARNING) << "Error processing crypto data: "
<< QuicErrorCodeToString(framer->error());
}
void QuicCryptoHandshaker::OnHandshakeMessage(
const CryptoHandshakeMessage& message) {
QUIC_DVLOG(1) << ENDPOINT << "Received " << message.DebugString();
session()->OnCryptoHandshakeMessageReceived(message);
}
CryptoMessageParser* QuicCryptoHandshaker::crypto_message_parser() {
return &crypto_framer_;
}
size_t QuicCryptoHandshaker::BufferSizeLimitForLevel(EncryptionLevel) const {
return GetQuicFlag(FLAGS_quic_max_buffered_crypto_bytes);
}
#undef ENDPOINT // undef for jumbo builds
} // namespace quic