// Copyright (c) 2018 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/frames/quic_crypto_frame.h"

#include "absl/strings/string_view.h"
#include "quic/platform/api/quic_logging.h"

namespace quic {

QuicCryptoFrame::QuicCryptoFrame(EncryptionLevel level,
                                 QuicStreamOffset offset,
                                 QuicPacketLength data_length)
    : QuicCryptoFrame(level, offset, nullptr, data_length) {}

QuicCryptoFrame::QuicCryptoFrame(EncryptionLevel level,
                                 QuicStreamOffset offset,
                                 absl::string_view data)
    : QuicCryptoFrame(level, offset, data.data(), data.length()) {}

QuicCryptoFrame::QuicCryptoFrame(EncryptionLevel level,
                                 QuicStreamOffset offset,
                                 const char* data_buffer,
                                 QuicPacketLength data_length)
    : level(level),
      data_length(data_length),
      data_buffer(data_buffer),
      offset(offset) {}

QuicCryptoFrame::~QuicCryptoFrame() {}

std::ostream& operator<<(std::ostream& os,
                         const QuicCryptoFrame& stream_frame) {
  os << "{ level: " << stream_frame.level << ", offset: " << stream_frame.offset
     << ", length: " << stream_frame.data_length << " }\n";
  return os;
}

}  // namespace quic
