/*
 *  Copyright (c) 2021 The WebRTC project authors. All Rights Reserved.
 *
 *  Use of this source code is governed by a BSD-style license
 *  that can be found in the LICENSE file in the root of the source
 *  tree. An additional intellectual property rights grant can be found
 *  in the file PATENTS.  All contributing project authors may
 *  be found in the AUTHORS file in the root of the source tree.
 */

#ifndef MODULES_RTP_RTCP_SOURCE_RTP_UTIL_H_
#define MODULES_RTP_RTCP_SOURCE_RTP_UTIL_H_

#include <cstdint>
#include <optional>
#include <span>

namespace webrtc {

bool IsRtcpPacket(std::span<const uint8_t> packet);
bool IsRtpPacket(std::span<const uint8_t> packet);

// Returns base rtp header fields of the rtp packet.
// Behaviour is undefined when `!IsRtpPacket(rtp_packet)`.
int ParseRtpPayloadType(std::span<const uint8_t> rtp_packet);
uint16_t ParseRtpSequenceNumber(std::span<const uint8_t> rtp_packet);
uint32_t ParseRtpSsrc(std::span<const uint8_t> rtp_packet);

// Parses the RTP header extension "defined by profile" field from
// https://datatracker.ietf.org/doc/html/rfc3550#section-5.3.1
// Used to indicate the format of RTP header extension. In WebRTC
// that means RFC 5285, RFC 8285 and RFC 9335.
// Returns std::nullopt if the packet does not have an extension.
std::optional<uint16_t> ParseRtpExtensionProfile(
    std::span<const uint8_t> rtp_packet);

}  // namespace webrtc

#endif  // MODULES_RTP_RTCP_SOURCE_RTP_UTIL_H_
