blob: ef1e070deb5f768fde771e4099d3dc6729780355 [file] [log] [blame] [edit]
// 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.
#ifndef QUICHE_QUIC_CORE_FRAMES_QUIC_MESSAGE_FRAME_H_
#define QUICHE_QUIC_CORE_FRAMES_QUIC_MESSAGE_FRAME_H_
#include "quic/core/quic_types.h"
#include "quic/platform/api/quic_containers.h"
#include "quic/platform/api/quic_export.h"
#include "quic/platform/api/quic_mem_slice.h"
#include "quic/platform/api/quic_mem_slice_span.h"
namespace quic {
using QuicMessageData = QuicInlinedVector<QuicMemSlice, 1>;
struct QUIC_EXPORT_PRIVATE QuicMessageFrame {
QuicMessageFrame() = default;
explicit QuicMessageFrame(QuicMessageId message_id);
QuicMessageFrame(QuicMessageId message_id, QuicMemSliceSpan span);
QuicMessageFrame(const char* data, QuicPacketLength length);
QuicMessageFrame(const QuicMessageFrame& other) = delete;
QuicMessageFrame& operator=(const QuicMessageFrame& other) = delete;
QuicMessageFrame(QuicMessageFrame&& other) = default;
QuicMessageFrame& operator=(QuicMessageFrame&& other) = default;
~QuicMessageFrame();
friend QUIC_EXPORT_PRIVATE std::ostream& operator<<(
std::ostream& os,
const QuicMessageFrame& s);
// message_id is only used on the sender side and does not get serialized on
// wire.
QuicMessageId message_id = 0;
// Not owned, only used on read path.
const char* data = nullptr;
// Total length of message_data, must be fit into one packet.
QuicPacketLength message_length = 0;
// The actual message data which is reference counted, used on write path.
QuicMessageData message_data;
};
} // namespace quic
#endif // QUICHE_QUIC_CORE_FRAMES_QUIC_MESSAGE_FRAME_H_