chromium/third_party/openscreen/src/cast/streaming/impl/packet_util.h

// Copyright 2019 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#ifndef CAST_STREAMING_IMPL_PACKET_UTIL_H_
#define CAST_STREAMING_IMPL_PACKET_UTIL_H_

#include <utility>

#include "cast/streaming/ssrc.h"
#include "platform/base/span.h"
#include "util/big_endian.h"

namespace openscreen::cast {

// Reads a field from the start of the given span and advances the span to point
// just after the field.
template <typename Integer>
inline Integer ConsumeField(ByteView& in) {}

// Writes a field at the start of the given span and advances the span to point
// just after the field.
template <typename Integer>
inline void AppendField(Integer value, ByteBuffer& out) {}

// Returns a bitmask for a field having the given number of bits. For example,
// FieldBitmask<uint8_t>(5) returns 0b00011111.
template <typename Integer>
constexpr Integer FieldBitmask(unsigned field_size_in_bits) {}

// Reserves |num_bytes| from the beginning of the given span, returning the
// reserved space.
inline ByteBuffer ReserveSpace(int num_bytes, ByteBuffer& out) {}

// Performs a quick-scan of the packet data for the purposes of routing it to an
// appropriate parser. Identifies whether the packet is a RTP packet, RTCP
// packet, or unknown; and provides the originator's SSRC. This only performs a
// very quick scan of the packet data, and does not guarantee that a full parse
// will later succeed.
enum class ApparentPacketType {};
std::pair<ApparentPacketType, Ssrc> InspectPacketForRouting(ByteView packet);

}  // namespace openscreen::cast

#endif  // CAST_STREAMING_IMPL_PACKET_UTIL_H_