// 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 "quiche/quic/core/frames/quic_path_challenge_frame.h"

#include "absl/strings/escaping.h"
#include "quiche/quic/platform/api/quic_bug_tracker.h"

namespace quic {

QuicPathChallengeFrame::QuicPathChallengeFrame()
    : QuicInlinedFrame(PATH_CHALLENGE_FRAME) {}

QuicPathChallengeFrame::QuicPathChallengeFrame(
    QuicControlFrameId control_frame_id, const QuicPathFrameBuffer& data_buff)
    : QuicInlinedFrame(PATH_CHALLENGE_FRAME),
      control_frame_id(control_frame_id) {
  memcpy(data_buffer.data(), data_buff.data(), data_buffer.size());
}

std::ostream& operator<<(std::ostream& os,
                         const QuicPathChallengeFrame& frame) {
  os << "{ control_frame_id: " << frame.control_frame_id << ", data: "
     << absl::BytesToHexString(absl::string_view(
            reinterpret_cast<const char*>(frame.data_buffer.data()),
            frame.data_buffer.size()))
     << " }\n";
  return os;
}

}  // namespace quic
